ace-swarm 1.1.4 → 2.0.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/README.md +28 -0
- package/assets/instructions/ACE.instructions.md +10 -0
- package/assets/tasks/README.md +3 -0
- package/assets/tasks/role_tasks.md +2 -0
- package/dist/agent-runtime/role-adapters.d.ts +26 -0
- package/dist/agent-runtime/role-adapters.d.ts.map +1 -0
- package/dist/agent-runtime/role-adapters.js +450 -0
- package/dist/agent-runtime/role-adapters.js.map +1 -0
- package/dist/cli.js +19 -10
- package/dist/cli.js.map +1 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +21 -0
- package/dist/helpers.js.map +1 -1
- package/dist/job-scheduler.d.ts +184 -0
- package/dist/job-scheduler.d.ts.map +1 -0
- package/dist/job-scheduler.js +1271 -0
- package/dist/job-scheduler.js.map +1 -0
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +37 -0
- package/dist/resources.js.map +1 -1
- package/dist/tools-framework.d.ts.map +1 -1
- package/dist/tools-framework.js +40 -0
- package/dist/tools-framework.js.map +1 -1
- package/dist/tools-handoff.d.ts +13 -0
- package/dist/tools-handoff.d.ts.map +1 -1
- package/dist/tools-handoff.js +113 -2
- package/dist/tools-handoff.js.map +1 -1
- package/dist/tools-scheduler.d.ts +6 -0
- package/dist/tools-scheduler.d.ts.map +1 -0
- package/dist/tools-scheduler.js +232 -0
- package/dist/tools-scheduler.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +2 -0
- package/dist/tools.js.map +1 -1
- package/dist/tui/agent-runner.d.ts +18 -1
- package/dist/tui/agent-runner.d.ts.map +1 -1
- package/dist/tui/agent-runner.js +267 -45
- package/dist/tui/agent-runner.js.map +1 -1
- package/dist/tui/agent-worker.d.ts +8 -0
- package/dist/tui/agent-worker.d.ts.map +1 -0
- package/dist/tui/agent-worker.js +197 -0
- package/dist/tui/agent-worker.js.map +1 -0
- package/dist/tui/commands.d.ts +5 -1
- package/dist/tui/commands.d.ts.map +1 -1
- package/dist/tui/commands.js +52 -15
- package/dist/tui/commands.js.map +1 -1
- package/dist/tui/dashboard.d.ts +1 -1
- package/dist/tui/dashboard.d.ts.map +1 -1
- package/dist/tui/dashboard.js +2 -1
- package/dist/tui/dashboard.js.map +1 -1
- package/dist/tui/index.d.ts +29 -0
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +344 -40
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/input.d.ts +2 -0
- package/dist/tui/input.d.ts.map +1 -1
- package/dist/tui/input.js +22 -5
- package/dist/tui/input.js.map +1 -1
- package/dist/tui/layout.d.ts +15 -1
- package/dist/tui/layout.d.ts.map +1 -1
- package/dist/tui/layout.js +85 -23
- package/dist/tui/layout.js.map +1 -1
- package/dist/tui/provider-discovery.d.ts +29 -0
- package/dist/tui/provider-discovery.d.ts.map +1 -0
- package/dist/tui/provider-discovery.js +343 -0
- package/dist/tui/provider-discovery.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@ ACE Swarm packages the ACE framework (agents, skills, schemas, prompts, tasks, h
|
|
|
4
4
|
|
|
5
5
|
Swarm agents (`orchestrator`, `vos`, `ui`, `coders`) and composable agents (`skeptic`, `ops`, `research`, `spec`, `builder`, `qa`, `docs`) are treated as one unified agent system, with composable agents available as subagents for every swarm workflow.
|
|
6
6
|
|
|
7
|
+
Suggestions and collaborations: `voybio.fundr@gmail.com`.
|
|
8
|
+
|
|
7
9
|
## Install
|
|
8
10
|
|
|
9
11
|
```bash
|
|
@@ -206,6 +208,25 @@ Resources:
|
|
|
206
208
|
- `ace://kanban` (JSON)
|
|
207
209
|
- `ace://kanban/html` (HTML)
|
|
208
210
|
|
|
211
|
+
## Scheduler Queue (Runtime)
|
|
212
|
+
|
|
213
|
+
ACE Swarm now supports a lease-owned, rolling-horizon scheduler for handoff/job execution:
|
|
214
|
+
|
|
215
|
+
- `agent-state/job-queue.json`
|
|
216
|
+
- `agent-state/job-reservations.json`
|
|
217
|
+
- `agent-state/scheduler-lease.json`
|
|
218
|
+
|
|
219
|
+
Priority and planning model:
|
|
220
|
+
|
|
221
|
+
- Priority-aware (`P0 > P1 > P2 > P3`) with FIFO ordering inside each band.
|
|
222
|
+
- Collision-free reservations over shared resources/time slices.
|
|
223
|
+
- Rolling-horizon replanning on each scheduler tick.
|
|
224
|
+
|
|
225
|
+
Handoff integration:
|
|
226
|
+
|
|
227
|
+
- `create_handoff` and `ack_handoff` automatically sync lifecycle updates into scheduler jobs.
|
|
228
|
+
- Scheduler replanning is triggered automatically during these handoff transitions.
|
|
229
|
+
|
|
209
230
|
## New Runtime State Stores
|
|
210
231
|
|
|
211
232
|
ACE Swarm now persists additional orchestration stores:
|
|
@@ -214,6 +235,9 @@ ACE Swarm now persists additional orchestration stores:
|
|
|
214
235
|
- `agent-state/todo-state.json` (explicit TODO statuses, dependencies, transition gates)
|
|
215
236
|
- `agent-state/index.json` (workspace delta scan index)
|
|
216
237
|
- `agent-state/handoff-registry.json` (handoff lifecycle: `open|accepted|blocked|completed`)
|
|
238
|
+
- `agent-state/job-queue.json` (scheduler jobs with dependency/priority metadata)
|
|
239
|
+
- `agent-state/job-reservations.json` (resource/time reservation table)
|
|
240
|
+
- `agent-state/scheduler-lease.json` (active scheduler owner/heartbeat)
|
|
217
241
|
|
|
218
242
|
New/extended tools:
|
|
219
243
|
|
|
@@ -221,12 +245,16 @@ New/extended tools:
|
|
|
221
245
|
- `scan_workspace_delta` writes indexed changed/unchanged/deleted diffs
|
|
222
246
|
- `ack_handoff` updates handoff lifecycle status
|
|
223
247
|
- `get_run_ledger`, `get_todo_state`, `get_handoff_status` expose persisted store state
|
|
248
|
+
- Scheduler: `enqueue_job`, `list_jobs`, `ack_job`, `run_scheduler_tick`, `start_reserved_job`, `complete_job`, `get_reservation_table`, `get_scheduler_lease`
|
|
224
249
|
|
|
225
250
|
New resources:
|
|
226
251
|
|
|
227
252
|
- `ace://run-ledger`
|
|
228
253
|
- `ace://index`
|
|
229
254
|
- `ace://handoffs/status`
|
|
255
|
+
- `ace://scheduler/queue`
|
|
256
|
+
- `ace://scheduler/reservations`
|
|
257
|
+
- `ace://scheduler/lease`
|
|
230
258
|
- `ace://kernel/directive_kernel`
|
|
231
259
|
- `ace://kernel/agent_registry`
|
|
232
260
|
|
|
@@ -37,6 +37,16 @@ applyTo: 'ACE_Orchestrator'
|
|
|
37
37
|
|
|
38
38
|
**SYNCHRONIZE:** Update `MASTER_PLAN.md` with the new reality.
|
|
39
39
|
|
|
40
|
+
### 0.5 Directive: SCHEDULER-AWARE ORCHESTRATION
|
|
41
|
+
|
|
42
|
+
**COMMAND:** Treat handoffs as schedulable jobs, not only static payloads.
|
|
43
|
+
|
|
44
|
+
**SCHEDULE:** When work is deferred, gated, or waiting on release windows, rely on ACE scheduler state (`job-queue`, `job-reservations`, `scheduler-lease`) to track dispatch readiness.
|
|
45
|
+
|
|
46
|
+
**VERIFY:** After `create_handoff` and `ack_handoff`, verify scheduler sync (`list_jobs`, `get_scheduler_lease`) and ensure rolling-horizon replanning is active.
|
|
47
|
+
|
|
48
|
+
**ESCALATE:** If scheduler lease ownership blocks dispatch, record the blocker and reroute through ACE-Ops instead of bypassing scheduler contracts.
|
|
49
|
+
|
|
40
50
|
### 0.4 Directive: THE CLARITY PROTOCOL (The Manager's Mind)
|
|
41
51
|
|
|
42
52
|
**COMMAND:** You must think before you route. Execute this Socratic loop for every request.
|
package/assets/tasks/README.md
CHANGED
|
@@ -10,6 +10,9 @@ This directory contains shared execution artifacts consumed by ACE prompts, tool
|
|
|
10
10
|
- `cli_work_split.md`: Codex CLI vs Gemini CLI routing contract.
|
|
11
11
|
- `SWARM_HANDOFF.template.json`: canonical inter-agent handoff schema.
|
|
12
12
|
- `SWARM_HANDOFF.example*.json`: concrete routing examples.
|
|
13
|
+
- `agent-state/job-queue.json`: scheduler job queue for deferred/gated dispatch.
|
|
14
|
+
- `agent-state/job-reservations.json`: collision-free scheduler reservations.
|
|
15
|
+
- `agent-state/scheduler-lease.json`: active scheduler lease ownership.
|
|
13
16
|
|
|
14
17
|
## Operating Rules
|
|
15
18
|
|
|
@@ -64,12 +64,14 @@
|
|
|
64
64
|
- Maintain dependency order and blocker/circuit-breaker state.
|
|
65
65
|
- Publish truthful `STATUS.md` and schema-valid handoffs.
|
|
66
66
|
- Route work to the next role with bounded scope.
|
|
67
|
+
- Keep scheduler flow healthy for deferred/gated work (`enqueue_job`, `run_scheduler_tick`, lease ownership checks).
|
|
67
68
|
|
|
68
69
|
**Required evidence**
|
|
69
70
|
|
|
70
71
|
- Updated `STATUS.md` with active phase, blockers, and next action.
|
|
71
72
|
- Updated `HANDOFF.json` (or SWARM handoff payload) with evidence anchors.
|
|
72
73
|
- Blocker transitions captured in `EVIDENCE_LOG.md`.
|
|
74
|
+
- Scheduler evidence when applicable (`agent-state/job-queue.json`, `agent-state/job-reservations.json`, `agent-state/scheduler-lease.json`).
|
|
73
75
|
|
|
74
76
|
## ACE-Research Task Pack
|
|
75
77
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared role adapter engine for worker implementations.
|
|
3
|
+
*
|
|
4
|
+
* This module is transport-agnostic so both TUI and non-TUI workers can reuse
|
|
5
|
+
* the same role-intent planning behavior.
|
|
6
|
+
*/
|
|
7
|
+
export type AdapterDomain = "venture" | "ux" | "engineering" | "mixed" | "research";
|
|
8
|
+
export interface ToolIntent {
|
|
9
|
+
tool: string;
|
|
10
|
+
args: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export interface HandoffIntent {
|
|
13
|
+
from: string;
|
|
14
|
+
to: string;
|
|
15
|
+
payload: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface AdapterDecision {
|
|
18
|
+
toolCalls: ToolIntent[];
|
|
19
|
+
handoffs: HandoffIntent[];
|
|
20
|
+
notes: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare function inferDomain(input: string): AdapterDomain;
|
|
23
|
+
export declare function parseManualHandoffCommand(input: string): HandoffIntent | undefined;
|
|
24
|
+
export declare function parseManualToolCommand(input: string): ToolIntent | undefined;
|
|
25
|
+
export declare function planRoleExecution(roleValue: string, input: string): AdapterDecision;
|
|
26
|
+
//# sourceMappingURL=role-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-adapters.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/role-adapters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;AAIpF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAuCD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAgDxD;AA8BD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAclF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAiB5E;AA2DD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAsQnF"}
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared role adapter engine for worker implementations.
|
|
3
|
+
*
|
|
4
|
+
* This module is transport-agnostic so both TUI and non-TUI workers can reuse
|
|
5
|
+
* the same role-intent planning behavior.
|
|
6
|
+
*/
|
|
7
|
+
const KNOWN_ROLES = [
|
|
8
|
+
"orchestrator",
|
|
9
|
+
"vos",
|
|
10
|
+
"ui",
|
|
11
|
+
"coders",
|
|
12
|
+
"astgrep",
|
|
13
|
+
"skeptic",
|
|
14
|
+
"ops",
|
|
15
|
+
"research",
|
|
16
|
+
"spec",
|
|
17
|
+
"builder",
|
|
18
|
+
"qa",
|
|
19
|
+
"docs",
|
|
20
|
+
"memory",
|
|
21
|
+
"security",
|
|
22
|
+
"observability",
|
|
23
|
+
"eval",
|
|
24
|
+
"release",
|
|
25
|
+
];
|
|
26
|
+
const KNOWN_ROLE_SET = new Set(KNOWN_ROLES);
|
|
27
|
+
const ROLE_PATTERN = new RegExp(`\\b(?:agent[-\\s]?)?(${KNOWN_ROLES.join("|")})\\b`, "i");
|
|
28
|
+
function canonicalizeRole(input) {
|
|
29
|
+
const value = input.trim().toLowerCase().replace(/^agent-/, "");
|
|
30
|
+
return value || "unknown";
|
|
31
|
+
}
|
|
32
|
+
function includeAny(text, needles) {
|
|
33
|
+
return needles.some((needle) => text.includes(needle));
|
|
34
|
+
}
|
|
35
|
+
function truncate(input, max) {
|
|
36
|
+
if (input.length <= max)
|
|
37
|
+
return input;
|
|
38
|
+
const clipped = input.slice(0, Math.max(0, max - 3)).trimEnd();
|
|
39
|
+
return `${clipped}...`;
|
|
40
|
+
}
|
|
41
|
+
export function inferDomain(input) {
|
|
42
|
+
const text = input.toLowerCase();
|
|
43
|
+
if (includeAny(text, ["ux", "ui", "design", "layout", "visual", "tui"])) {
|
|
44
|
+
return "ux";
|
|
45
|
+
}
|
|
46
|
+
if (includeAny(text, [
|
|
47
|
+
"build",
|
|
48
|
+
"code",
|
|
49
|
+
"test",
|
|
50
|
+
"debug",
|
|
51
|
+
"fix",
|
|
52
|
+
"bug",
|
|
53
|
+
"compile",
|
|
54
|
+
"deploy",
|
|
55
|
+
"engineer",
|
|
56
|
+
])) {
|
|
57
|
+
return "engineering";
|
|
58
|
+
}
|
|
59
|
+
if (includeAny(text, [
|
|
60
|
+
"market",
|
|
61
|
+
"pricing",
|
|
62
|
+
"thesis",
|
|
63
|
+
"growth",
|
|
64
|
+
"revenue",
|
|
65
|
+
"venture",
|
|
66
|
+
"business",
|
|
67
|
+
"fund",
|
|
68
|
+
])) {
|
|
69
|
+
return "venture";
|
|
70
|
+
}
|
|
71
|
+
if (includeAny(text, [
|
|
72
|
+
"research",
|
|
73
|
+
"evidence",
|
|
74
|
+
"source",
|
|
75
|
+
"hypothesis",
|
|
76
|
+
"assumption",
|
|
77
|
+
"unknown",
|
|
78
|
+
"literature",
|
|
79
|
+
])) {
|
|
80
|
+
return "research";
|
|
81
|
+
}
|
|
82
|
+
return "mixed";
|
|
83
|
+
}
|
|
84
|
+
function inferPriority(input) {
|
|
85
|
+
const text = input.toLowerCase();
|
|
86
|
+
if (includeAny(text, ["p0", "urgent", "critical", "asap", "immediately"])) {
|
|
87
|
+
return "P0";
|
|
88
|
+
}
|
|
89
|
+
if (includeAny(text, ["p1", "high", "soon", "priority"])) {
|
|
90
|
+
return "P1";
|
|
91
|
+
}
|
|
92
|
+
return "P2";
|
|
93
|
+
}
|
|
94
|
+
function normalizeRoleTarget(input) {
|
|
95
|
+
if (!input)
|
|
96
|
+
return undefined;
|
|
97
|
+
const raw = input.trim().toLowerCase().replace(/^agent-/, "").replace(/[^a-z]/g, "");
|
|
98
|
+
if (!raw)
|
|
99
|
+
return undefined;
|
|
100
|
+
return KNOWN_ROLE_SET.has(raw) ? raw : undefined;
|
|
101
|
+
}
|
|
102
|
+
function extractTargetRole(input) {
|
|
103
|
+
const text = input.toLowerCase();
|
|
104
|
+
const explicit = text.match(/\b(?:to|into|for)\s+(?:agent[-\s]?)?([a-z-]+)\b/i)?.[1];
|
|
105
|
+
const normalizedExplicit = normalizeRoleTarget(explicit);
|
|
106
|
+
if (normalizedExplicit)
|
|
107
|
+
return normalizedExplicit;
|
|
108
|
+
const anyRole = text.match(ROLE_PATTERN)?.[1];
|
|
109
|
+
return normalizeRoleTarget(anyRole);
|
|
110
|
+
}
|
|
111
|
+
export function parseManualHandoffCommand(input) {
|
|
112
|
+
if (!input.toLowerCase().startsWith("handoff "))
|
|
113
|
+
return undefined;
|
|
114
|
+
const [, fromRaw, toRaw, ...rest] = input.split(/\s+/);
|
|
115
|
+
const from = normalizeRoleTarget(fromRaw);
|
|
116
|
+
const to = normalizeRoleTarget(toRaw);
|
|
117
|
+
if (!from || !to)
|
|
118
|
+
return undefined;
|
|
119
|
+
return {
|
|
120
|
+
from,
|
|
121
|
+
to,
|
|
122
|
+
payload: {
|
|
123
|
+
reason: rest.join(" ") || "manual handoff request from worker input",
|
|
124
|
+
mode: "manual",
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export function parseManualToolCommand(input) {
|
|
129
|
+
if (!input.toLowerCase().startsWith("tool "))
|
|
130
|
+
return undefined;
|
|
131
|
+
const [, tool, ...argsParts] = input.split(/\s+/);
|
|
132
|
+
if (!tool)
|
|
133
|
+
return undefined;
|
|
134
|
+
const rawArg = argsParts.join(" ").trim();
|
|
135
|
+
if (!rawArg)
|
|
136
|
+
return { tool, args: {} };
|
|
137
|
+
if (rawArg.startsWith("{")) {
|
|
138
|
+
try {
|
|
139
|
+
const parsed = JSON.parse(rawArg);
|
|
140
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
141
|
+
return { tool, args: parsed };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Fall through to raw payload.
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return { tool, args: { raw: rawArg } };
|
|
149
|
+
}
|
|
150
|
+
function asHandoffTaskType(domain) {
|
|
151
|
+
if (domain === "venture" || domain === "ux" || domain === "engineering") {
|
|
152
|
+
return domain;
|
|
153
|
+
}
|
|
154
|
+
return "mixed";
|
|
155
|
+
}
|
|
156
|
+
function dedupeToolIntents(calls) {
|
|
157
|
+
const seen = new Set();
|
|
158
|
+
const out = [];
|
|
159
|
+
for (const call of calls) {
|
|
160
|
+
const key = `${call.tool}:${JSON.stringify(call.args)}`;
|
|
161
|
+
if (seen.has(key))
|
|
162
|
+
continue;
|
|
163
|
+
seen.add(key);
|
|
164
|
+
out.push(call);
|
|
165
|
+
if (out.length >= 4)
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
return out;
|
|
169
|
+
}
|
|
170
|
+
function dedupeHandoffIntents(handoffs) {
|
|
171
|
+
const seen = new Set();
|
|
172
|
+
const out = [];
|
|
173
|
+
for (const handoff of handoffs) {
|
|
174
|
+
const key = `${handoff.from}->${handoff.to}:${JSON.stringify(handoff.payload)}`;
|
|
175
|
+
if (seen.has(key))
|
|
176
|
+
continue;
|
|
177
|
+
seen.add(key);
|
|
178
|
+
out.push(handoff);
|
|
179
|
+
if (out.length >= 2)
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
return out;
|
|
183
|
+
}
|
|
184
|
+
function buildCreateHandoffIntent(fromRole, toRole, input) {
|
|
185
|
+
const from = normalizeRoleTarget(fromRole) ?? "orchestrator";
|
|
186
|
+
const to = normalizeRoleTarget(toRole) ?? "ops";
|
|
187
|
+
const domain = inferDomain(input);
|
|
188
|
+
const taskType = asHandoffTaskType(domain);
|
|
189
|
+
const priority = inferPriority(input);
|
|
190
|
+
const summary = truncate(input, 96);
|
|
191
|
+
return {
|
|
192
|
+
tool: "create_handoff",
|
|
193
|
+
args: {
|
|
194
|
+
from,
|
|
195
|
+
to,
|
|
196
|
+
title: `Worker dispatch: ${truncate(summary, 64)}`,
|
|
197
|
+
task_type: taskType,
|
|
198
|
+
priority,
|
|
199
|
+
directive: input,
|
|
200
|
+
acceptance_criteria: [
|
|
201
|
+
`Execute delegated objective: ${summary}`,
|
|
202
|
+
"Return completion status with evidence references.",
|
|
203
|
+
],
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
export function planRoleExecution(roleValue, input) {
|
|
208
|
+
const normalizedRole = canonicalizeRole(roleValue);
|
|
209
|
+
const text = input.toLowerCase();
|
|
210
|
+
const domain = inferDomain(input);
|
|
211
|
+
const toolCalls = [];
|
|
212
|
+
const handoffs = [];
|
|
213
|
+
const notes = [];
|
|
214
|
+
const dispatchRequested = includeAny(text, [
|
|
215
|
+
"handoff",
|
|
216
|
+
"delegate",
|
|
217
|
+
"route to",
|
|
218
|
+
"dispatch",
|
|
219
|
+
"assign to",
|
|
220
|
+
]);
|
|
221
|
+
const targetRole = extractTargetRole(input);
|
|
222
|
+
switch (normalizedRole) {
|
|
223
|
+
case "orchestrator": {
|
|
224
|
+
toolCalls.push({ tool: "route_task", args: { description: input, domain } });
|
|
225
|
+
if (includeAny(text, ["scheduler", "queue", "tick", "reservation"])) {
|
|
226
|
+
toolCalls.push({ tool: "run_scheduler_tick", args: {} });
|
|
227
|
+
toolCalls.push({ tool: "list_jobs", args: { limit: 20 } });
|
|
228
|
+
}
|
|
229
|
+
if (includeAny(text, ["framework", "state", "status", "health"])) {
|
|
230
|
+
toolCalls.push({ tool: "get_framework_status", args: {} });
|
|
231
|
+
}
|
|
232
|
+
if (dispatchRequested && targetRole && targetRole !== normalizedRole) {
|
|
233
|
+
toolCalls.push(buildCreateHandoffIntent(normalizedRole, targetRole, input));
|
|
234
|
+
handoffs.push({
|
|
235
|
+
from: normalizedRole,
|
|
236
|
+
to: targetRole,
|
|
237
|
+
payload: { reason: truncate(input, 180), mode: "adapter" },
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
case "vos": {
|
|
243
|
+
toolCalls.push({ tool: "get_task_pack", args: { role: "vos" } });
|
|
244
|
+
toolCalls.push({ tool: "route_task", args: { description: input, domain: "venture" } });
|
|
245
|
+
if (dispatchRequested && targetRole && targetRole !== normalizedRole) {
|
|
246
|
+
toolCalls.push(buildCreateHandoffIntent(normalizedRole, targetRole, input));
|
|
247
|
+
handoffs.push({ from: normalizedRole, to: targetRole, payload: { reason: input, mode: "adapter" } });
|
|
248
|
+
}
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
case "ui": {
|
|
252
|
+
toolCalls.push({ tool: "get_task_pack", args: { role: "ui" } });
|
|
253
|
+
toolCalls.push({ tool: "route_task", args: { description: input, domain: "ux" } });
|
|
254
|
+
if (includeAny(text, ["test", "qa", "verify"])) {
|
|
255
|
+
toolCalls.push({ tool: "run_tests", args: {} });
|
|
256
|
+
}
|
|
257
|
+
if (dispatchRequested && targetRole && targetRole !== normalizedRole) {
|
|
258
|
+
toolCalls.push(buildCreateHandoffIntent(normalizedRole, targetRole, input));
|
|
259
|
+
handoffs.push({ from: normalizedRole, to: targetRole, payload: { reason: input, mode: "adapter" } });
|
|
260
|
+
}
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
case "coders": {
|
|
264
|
+
toolCalls.push({ tool: "get_task_pack", args: { role: "coders" } });
|
|
265
|
+
if (includeAny(text, ["test", "regression", "verify", "suite"])) {
|
|
266
|
+
toolCalls.push({ tool: "run_tests", args: {} });
|
|
267
|
+
}
|
|
268
|
+
if (includeAny(text, ["gate", "criteria", "quality"])) {
|
|
269
|
+
toolCalls.push({ tool: "execute_gates", args: {} });
|
|
270
|
+
}
|
|
271
|
+
if (includeAny(text, ["diff", "patch", "changes"])) {
|
|
272
|
+
toolCalls.push({ tool: "git_diff", args: {} });
|
|
273
|
+
}
|
|
274
|
+
if (dispatchRequested && targetRole && targetRole !== normalizedRole) {
|
|
275
|
+
toolCalls.push(buildCreateHandoffIntent(normalizedRole, targetRole, input));
|
|
276
|
+
handoffs.push({ from: normalizedRole, to: targetRole, payload: { reason: input, mode: "adapter" } });
|
|
277
|
+
}
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
case "astgrep": {
|
|
281
|
+
toolCalls.push({ tool: "refresh_astgrep_index", args: {} });
|
|
282
|
+
if (includeAny(text, ["scan", "delta", "workspace", "changed", "index"])) {
|
|
283
|
+
toolCalls.push({ tool: "scan_workspace_delta", args: {} });
|
|
284
|
+
}
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case "skeptic": {
|
|
288
|
+
toolCalls.push({ tool: "execute_gates", args: {} });
|
|
289
|
+
if (includeAny(text, ["risk", "blocker", "unsafe", "halt", "critical"])) {
|
|
290
|
+
toolCalls.push({
|
|
291
|
+
tool: "open_circuit_breaker",
|
|
292
|
+
args: { reason: `skeptic flagged: ${truncate(input, 160)}` },
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
case "ops": {
|
|
298
|
+
toolCalls.push({ tool: "list_jobs", args: { limit: 20 } });
|
|
299
|
+
toolCalls.push({
|
|
300
|
+
tool: "emit_status_event",
|
|
301
|
+
args: {
|
|
302
|
+
source_module: "capability-ops",
|
|
303
|
+
event_type: "WORKER_INPUT",
|
|
304
|
+
status: "in_progress",
|
|
305
|
+
summary: truncate(input, 140),
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
if (includeAny(text, ["tick", "schedule", "reservation"])) {
|
|
309
|
+
toolCalls.push({ tool: "run_scheduler_tick", args: {} });
|
|
310
|
+
}
|
|
311
|
+
if (includeAny(text, ["lease"])) {
|
|
312
|
+
toolCalls.push({ tool: "get_scheduler_lease", args: {} });
|
|
313
|
+
}
|
|
314
|
+
if (includeAny(text, ["todo", "task"])) {
|
|
315
|
+
toolCalls.push({ tool: "get_todo_state", args: {} });
|
|
316
|
+
}
|
|
317
|
+
if (dispatchRequested && targetRole && targetRole !== normalizedRole) {
|
|
318
|
+
toolCalls.push(buildCreateHandoffIntent(normalizedRole, targetRole, input));
|
|
319
|
+
handoffs.push({ from: normalizedRole, to: targetRole, payload: { reason: input, mode: "adapter" } });
|
|
320
|
+
}
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
case "research": {
|
|
324
|
+
toolCalls.push({ tool: "route_task", args: { description: input, domain: "research" } });
|
|
325
|
+
if (includeAny(text, ["skill", "pattern", "approach"])) {
|
|
326
|
+
toolCalls.push({ tool: "list_skills", args: {} });
|
|
327
|
+
}
|
|
328
|
+
if (includeAny(text, ["assumption", "hypothesis", "unknown", "gap"])) {
|
|
329
|
+
toolCalls.push({
|
|
330
|
+
tool: "context_snapshot",
|
|
331
|
+
args: {
|
|
332
|
+
name: `research-${Date.now()}`,
|
|
333
|
+
summary: truncate(input, 140),
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
case "spec": {
|
|
340
|
+
toolCalls.push({ tool: "get_task_pack", args: { role: "spec" } });
|
|
341
|
+
if (includeAny(text, ["schema", "contract", "interface", "validate"])) {
|
|
342
|
+
toolCalls.push({ tool: "validate_framework", args: {} });
|
|
343
|
+
}
|
|
344
|
+
if (includeAny(text, ["handoff", "payload"])) {
|
|
345
|
+
toolCalls.push({ tool: "get_handoff_template", args: {} });
|
|
346
|
+
}
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
case "builder": {
|
|
350
|
+
toolCalls.push({ tool: "get_task_pack", args: { role: "builder" } });
|
|
351
|
+
if (includeAny(text, ["build", "implement", "fix", "test"])) {
|
|
352
|
+
toolCalls.push({ tool: "run_tests", args: {} });
|
|
353
|
+
}
|
|
354
|
+
if (includeAny(text, ["diff", "changes", "patch"])) {
|
|
355
|
+
toolCalls.push({ tool: "git_diff", args: {} });
|
|
356
|
+
}
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
case "qa": {
|
|
360
|
+
toolCalls.push({ tool: "run_tests", args: {} });
|
|
361
|
+
toolCalls.push({ tool: "execute_gates", args: {} });
|
|
362
|
+
if (includeAny(text, ["status", "trace", "event", "regression"])) {
|
|
363
|
+
toolCalls.push({ tool: "list_status_events", args: { limit: 25 } });
|
|
364
|
+
}
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
case "docs": {
|
|
368
|
+
toolCalls.push({ tool: "get_task_pack", args: { role: "docs" } });
|
|
369
|
+
if (includeAny(text, ["kanban", "board"])) {
|
|
370
|
+
toolCalls.push({ tool: "generate_kanban_ui", args: {} });
|
|
371
|
+
}
|
|
372
|
+
if (includeAny(text, ["readme", "docs", "guide", "documentation"])) {
|
|
373
|
+
toolCalls.push({ tool: "get_run_ledger", args: {} });
|
|
374
|
+
}
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case "memory": {
|
|
378
|
+
toolCalls.push({ tool: "recall_context", args: {} });
|
|
379
|
+
if (includeAny(text, ["snapshot", "remember", "save", "capture", "context"])) {
|
|
380
|
+
toolCalls.push({
|
|
381
|
+
tool: "context_snapshot",
|
|
382
|
+
args: {
|
|
383
|
+
name: `memory-${Date.now()}`,
|
|
384
|
+
summary: truncate(input, 140),
|
|
385
|
+
},
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
if (includeAny(text, ["lesson", "guardrail", "failure"])) {
|
|
389
|
+
toolCalls.push({ tool: "get_lessons", args: {} });
|
|
390
|
+
}
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
case "security": {
|
|
394
|
+
toolCalls.push({ tool: "execute_gates", args: {} });
|
|
395
|
+
toolCalls.push({ tool: "validate_framework", args: {} });
|
|
396
|
+
if (includeAny(text, ["breach", "vulnerability", "exploit", "critical", "risk"])) {
|
|
397
|
+
toolCalls.push({
|
|
398
|
+
tool: "open_circuit_breaker",
|
|
399
|
+
args: { reason: `security escalation: ${truncate(input, 160)}` },
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
if (includeAny(text, ["resolved", "mitigated", "resume", "unblock"])) {
|
|
403
|
+
toolCalls.push({
|
|
404
|
+
tool: "close_circuit_breaker",
|
|
405
|
+
args: { reason: `security clear: ${truncate(input, 160)}` },
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
case "observability": {
|
|
411
|
+
toolCalls.push({ tool: "list_status_events", args: { limit: 50 } });
|
|
412
|
+
if (includeAny(text, ["ledger", "history", "trend"])) {
|
|
413
|
+
toolCalls.push({ tool: "get_run_ledger", args: {} });
|
|
414
|
+
}
|
|
415
|
+
if (includeAny(text, ["scheduler", "lease"])) {
|
|
416
|
+
toolCalls.push({ tool: "get_scheduler_lease", args: {} });
|
|
417
|
+
}
|
|
418
|
+
break;
|
|
419
|
+
}
|
|
420
|
+
case "eval": {
|
|
421
|
+
toolCalls.push({ tool: "run_tests", args: {} });
|
|
422
|
+
toolCalls.push({ tool: "execute_gates", args: {} });
|
|
423
|
+
if (includeAny(text, ["framework", "drift", "integrity", "validate"])) {
|
|
424
|
+
toolCalls.push({ tool: "validate_framework", args: {} });
|
|
425
|
+
}
|
|
426
|
+
break;
|
|
427
|
+
}
|
|
428
|
+
case "release": {
|
|
429
|
+
toolCalls.push({ tool: "git_status", args: {} });
|
|
430
|
+
toolCalls.push({ tool: "execute_gates", args: {} });
|
|
431
|
+
if (includeAny(text, ["log", "history", "changelog"])) {
|
|
432
|
+
toolCalls.push({ tool: "git_log", args: { limit: 20 } });
|
|
433
|
+
}
|
|
434
|
+
if (includeAny(text, ["validate", "framework", "check"])) {
|
|
435
|
+
toolCalls.push({ tool: "validate_framework", args: {} });
|
|
436
|
+
}
|
|
437
|
+
break;
|
|
438
|
+
}
|
|
439
|
+
default: {
|
|
440
|
+
toolCalls.push({ tool: "route_task", args: { description: input, domain } });
|
|
441
|
+
notes.push(`No role adapter profile for "${normalizedRole}", defaulted to route_task.`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
return {
|
|
445
|
+
toolCalls: dedupeToolIntents(toolCalls),
|
|
446
|
+
handoffs: dedupeHandoffIntents(handoffs),
|
|
447
|
+
notes,
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=role-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-adapters.js","sourceRoot":"","sources":["../../src/agent-runtime/role-adapters.ts"],"names":[],"mappings":"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"}
|