ace-swarm 1.1.3 → 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 +58 -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 -4
- 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/chat.d.ts.map +1 -1
- package/dist/tui/commands.d.ts +5 -1
- package/dist/tui/commands.d.ts.map +1 -1
- package/dist/tui/commands.js +83 -14
- 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 +30 -0
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +367 -39
- 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
|
|
@@ -112,6 +114,7 @@ ace mcp-config --all
|
|
|
112
114
|
```bash
|
|
113
115
|
ace mcp # start MCP server on stdio
|
|
114
116
|
ace serve # alias for mcp
|
|
117
|
+
ace tui [options] # launch interactive terminal dashboard
|
|
115
118
|
ace init [options] # bootstrap ACE files into current workspace
|
|
116
119
|
ace turnkey [options] # same as init (turnkey alias)
|
|
117
120
|
ace doctor [options] # local LLM + MCP readiness checks
|
|
@@ -119,6 +122,35 @@ ace mcp-config [--client <name>|--all] # print one/all MCP client snippets
|
|
|
119
122
|
ace paths # show resolved package/workspace paths
|
|
120
123
|
```
|
|
121
124
|
|
|
125
|
+
### Interactive TUI
|
|
126
|
+
|
|
127
|
+
Launch a full-screen terminal dashboard with Ollama model chat, agent tabs, telemetry, and task tracking:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
ace tui
|
|
131
|
+
ace tui --model llama3.1:8b --ollama-url http://127.0.0.1:11434
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The TUI starts regardless of whether Ollama is running. Use `/ollama` inside the TUI to check status, or `/pull <model>` to download models.
|
|
135
|
+
|
|
136
|
+
Key commands inside TUI:
|
|
137
|
+
|
|
138
|
+
| Command | Description |
|
|
139
|
+
|---------|-------------|
|
|
140
|
+
| `/models` | List available Ollama models |
|
|
141
|
+
| `/model <name>` | Switch active model |
|
|
142
|
+
| `/pull <name>` | Download a model |
|
|
143
|
+
| `/ollama` | Check Ollama connection status |
|
|
144
|
+
| `/agent <role>` | Start a subagent in a new tab |
|
|
145
|
+
| `/agents` | List all agent roles and status |
|
|
146
|
+
| `/status` | Show orchestrator status |
|
|
147
|
+
| `/chat` | Open new chat tab |
|
|
148
|
+
| `/logs` | Open logs tab |
|
|
149
|
+
| `/help` | List all commands |
|
|
150
|
+
| `/quit` | Exit TUI |
|
|
151
|
+
|
|
152
|
+
Keyboard shortcuts: `Alt+1-9` switch tabs, `Tab/Shift+Tab` cycle tabs, `Ctrl+N` new chat, `Ctrl+R` refresh, `Ctrl+D` quit.
|
|
153
|
+
|
|
122
154
|
Options for `init` / `turnkey`:
|
|
123
155
|
|
|
124
156
|
```bash
|
|
@@ -176,6 +208,25 @@ Resources:
|
|
|
176
208
|
- `ace://kanban` (JSON)
|
|
177
209
|
- `ace://kanban/html` (HTML)
|
|
178
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
|
+
|
|
179
230
|
## New Runtime State Stores
|
|
180
231
|
|
|
181
232
|
ACE Swarm now persists additional orchestration stores:
|
|
@@ -184,6 +235,9 @@ ACE Swarm now persists additional orchestration stores:
|
|
|
184
235
|
- `agent-state/todo-state.json` (explicit TODO statuses, dependencies, transition gates)
|
|
185
236
|
- `agent-state/index.json` (workspace delta scan index)
|
|
186
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)
|
|
187
241
|
|
|
188
242
|
New/extended tools:
|
|
189
243
|
|
|
@@ -191,12 +245,16 @@ New/extended tools:
|
|
|
191
245
|
- `scan_workspace_delta` writes indexed changed/unchanged/deleted diffs
|
|
192
246
|
- `ack_handoff` updates handoff lifecycle status
|
|
193
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`
|
|
194
249
|
|
|
195
250
|
New resources:
|
|
196
251
|
|
|
197
252
|
- `ace://run-ledger`
|
|
198
253
|
- `ace://index`
|
|
199
254
|
- `ace://handoffs/status`
|
|
255
|
+
- `ace://scheduler/queue`
|
|
256
|
+
- `ace://scheduler/reservations`
|
|
257
|
+
- `ace://scheduler/lease`
|
|
200
258
|
- `ace://kernel/directive_kernel`
|
|
201
259
|
- `ace://kernel/agent_registry`
|
|
202
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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"}
|