@elizaos/plugin-task-coordinator 2.0.3-beta.2 → 2.0.3-beta.3
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/assets/hero.png +0 -0
- package/dist/AgentTabsSection.d.ts +16 -0
- package/dist/AgentTabsSection.d.ts.map +1 -0
- package/dist/AgentTabsSection.js +169 -0
- package/dist/AgentTabsSection.js.map +1 -0
- package/dist/CodingAgentControlChip.d.ts +2 -0
- package/dist/CodingAgentControlChip.d.ts.map +1 -0
- package/dist/CodingAgentControlChip.js +73 -0
- package/dist/CodingAgentControlChip.js.map +1 -0
- package/dist/CodingAgentSettingsSection.d.ts +2 -0
- package/dist/CodingAgentSettingsSection.d.ts.map +1 -0
- package/dist/CodingAgentSettingsSection.js +379 -0
- package/dist/CodingAgentSettingsSection.js.map +1 -0
- package/dist/CodingAgentTasksPanel.d.ts +4 -0
- package/dist/CodingAgentTasksPanel.d.ts.map +1 -0
- package/dist/CodingAgentTasksPanel.interact.d.ts +2 -0
- package/dist/CodingAgentTasksPanel.interact.d.ts.map +1 -0
- package/dist/CodingAgentTasksPanel.interact.js +46 -0
- package/dist/CodingAgentTasksPanel.interact.js.map +1 -0
- package/dist/CodingAgentTasksPanel.js +740 -0
- package/dist/CodingAgentTasksPanel.js.map +1 -0
- package/dist/GitHubConnectionCard.d.ts +2 -0
- package/dist/GitHubConnectionCard.d.ts.map +1 -0
- package/dist/GitHubConnectionCard.js +172 -0
- package/dist/GitHubConnectionCard.js.map +1 -0
- package/dist/GlobalPrefsSection.d.ts +10 -0
- package/dist/GlobalPrefsSection.d.ts.map +1 -0
- package/dist/GlobalPrefsSection.js +166 -0
- package/dist/GlobalPrefsSection.js.map +1 -0
- package/dist/LlmProviderSection.d.ts +10 -0
- package/dist/LlmProviderSection.d.ts.map +1 -0
- package/dist/LlmProviderSection.js +161 -0
- package/dist/LlmProviderSection.js.map +1 -0
- package/dist/ModelConfigSection.d.ts +15 -0
- package/dist/ModelConfigSection.d.ts.map +1 -0
- package/dist/ModelConfigSection.js +86 -0
- package/dist/ModelConfigSection.js.map +1 -0
- package/dist/OrchestratorView.d.ts +20 -0
- package/dist/OrchestratorView.d.ts.map +1 -0
- package/dist/OrchestratorView.js +231 -0
- package/dist/OrchestratorView.js.map +1 -0
- package/dist/OrchestratorWorkbench.d.ts +32 -0
- package/dist/OrchestratorWorkbench.d.ts.map +1 -0
- package/dist/OrchestratorWorkbench.js +3200 -0
- package/dist/OrchestratorWorkbench.js.map +1 -0
- package/dist/PtyConsoleBase.d.ts +9 -0
- package/dist/PtyConsoleBase.d.ts.map +1 -0
- package/dist/PtyConsoleBase.js +174 -0
- package/dist/PtyConsoleBase.js.map +1 -0
- package/dist/PtyConsoleDrawer.d.ts +10 -0
- package/dist/PtyConsoleDrawer.d.ts.map +1 -0
- package/dist/PtyConsoleDrawer.js +77 -0
- package/dist/PtyConsoleDrawer.js.map +1 -0
- package/dist/PtyConsoleSidePanel.d.ts +8 -0
- package/dist/PtyConsoleSidePanel.d.ts.map +1 -0
- package/dist/PtyConsoleSidePanel.js +9 -0
- package/dist/PtyConsoleSidePanel.js.map +1 -0
- package/dist/PtyTerminalPane.d.ts +10 -0
- package/dist/PtyTerminalPane.d.ts.map +1 -0
- package/dist/PtyTerminalPane.js +147 -0
- package/dist/PtyTerminalPane.js.map +1 -0
- package/dist/TaskCardList.d.ts +76 -0
- package/dist/TaskCardList.d.ts.map +1 -0
- package/dist/TaskCardList.js +327 -0
- package/dist/TaskCardList.js.map +1 -0
- package/dist/TaskCoordinatorView.d.ts +20 -0
- package/dist/TaskCoordinatorView.d.ts.map +1 -0
- package/dist/TaskCoordinatorView.js +146 -0
- package/dist/TaskCoordinatorView.js.map +1 -0
- package/dist/__e2e__/dashboard-fixture.d.ts +9 -0
- package/dist/__e2e__/dashboard-fixture.d.ts.map +1 -0
- package/dist/__e2e__/dashboard-fixture.js +123 -0
- package/dist/__e2e__/dashboard-fixture.js.map +1 -0
- package/dist/api/coding-agents-auth-sanitize.d.ts +23 -0
- package/dist/api/coding-agents-auth-sanitize.d.ts.map +1 -0
- package/dist/api/coding-agents-auth-sanitize.js +22 -0
- package/dist/api/coding-agents-auth-sanitize.js.map +1 -0
- package/dist/api/coding-agents-preflight-normalize.d.ts +29 -0
- package/dist/api/coding-agents-preflight-normalize.d.ts.map +1 -0
- package/dist/api/coding-agents-preflight-normalize.js +20 -0
- package/dist/api/coding-agents-preflight-normalize.js.map +1 -0
- package/dist/coding-agent-settings-shared.d.ts +42 -0
- package/dist/coding-agent-settings-shared.d.ts.map +1 -0
- package/dist/coding-agent-settings-shared.js +121 -0
- package/dist/coding-agent-settings-shared.js.map +1 -0
- package/dist/components/OrchestratorSpatialView.d.ts +56 -0
- package/dist/components/OrchestratorSpatialView.d.ts.map +1 -0
- package/dist/components/OrchestratorSpatialView.js +501 -0
- package/dist/components/OrchestratorSpatialView.js.map +1 -0
- package/dist/components/TaskCoordinatorSpatialView.d.ts +59 -0
- package/dist/components/TaskCoordinatorSpatialView.d.ts.map +1 -0
- package/dist/components/TaskCoordinatorSpatialView.js +294 -0
- package/dist/components/TaskCoordinatorSpatialView.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +286 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator-capabilities.d.ts +3 -0
- package/dist/orchestrator-capabilities.d.ts.map +1 -0
- package/dist/orchestrator-capabilities.js +136 -0
- package/dist/orchestrator-capabilities.js.map +1 -0
- package/dist/orchestrator-command.d.ts +39 -0
- package/dist/orchestrator-command.d.ts.map +1 -0
- package/dist/orchestrator-command.js +52 -0
- package/dist/orchestrator-command.js.map +1 -0
- package/dist/orchestrator-diff.d.ts +19 -0
- package/dist/orchestrator-diff.d.ts.map +1 -0
- package/dist/orchestrator-diff.helpers.d.ts +18 -0
- package/dist/orchestrator-diff.helpers.d.ts.map +1 -0
- package/dist/orchestrator-diff.helpers.js +76 -0
- package/dist/orchestrator-diff.helpers.js.map +1 -0
- package/dist/orchestrator-diff.js +119 -0
- package/dist/orchestrator-diff.js.map +1 -0
- package/dist/orchestrator-markdown.d.ts +5 -0
- package/dist/orchestrator-markdown.d.ts.map +1 -0
- package/dist/orchestrator-markdown.helpers.d.ts +2 -0
- package/dist/orchestrator-markdown.helpers.d.ts.map +1 -0
- package/dist/orchestrator-markdown.helpers.js +21 -0
- package/dist/orchestrator-markdown.helpers.js.map +1 -0
- package/dist/orchestrator-markdown.js +199 -0
- package/dist/orchestrator-markdown.js.map +1 -0
- package/dist/orchestrator-params.d.ts +8 -0
- package/dist/orchestrator-params.d.ts.map +1 -0
- package/dist/orchestrator-params.js +27 -0
- package/dist/orchestrator-params.js.map +1 -0
- package/dist/orchestrator-plan.d.ts +5 -0
- package/dist/orchestrator-plan.d.ts.map +1 -0
- package/dist/orchestrator-plan.js +95 -0
- package/dist/orchestrator-plan.js.map +1 -0
- package/dist/orchestrator-reasoning.d.ts +21 -0
- package/dist/orchestrator-reasoning.d.ts.map +1 -0
- package/dist/orchestrator-reasoning.js +105 -0
- package/dist/orchestrator-reasoning.js.map +1 -0
- package/dist/orchestrator-stream.d.ts +15 -0
- package/dist/orchestrator-stream.d.ts.map +1 -0
- package/dist/orchestrator-stream.helpers.d.ts +89 -0
- package/dist/orchestrator-stream.helpers.d.ts.map +1 -0
- package/dist/orchestrator-stream.helpers.js +361 -0
- package/dist/orchestrator-stream.helpers.js.map +1 -0
- package/dist/orchestrator-stream.js +307 -0
- package/dist/orchestrator-stream.js.map +1 -0
- package/dist/pty-status-dots.d.ts +2 -0
- package/dist/pty-status-dots.d.ts.map +1 -0
- package/dist/pty-status-dots.js +6 -0
- package/dist/pty-status-dots.js.map +1 -0
- package/dist/register-slots.d.ts +20 -0
- package/dist/register-slots.d.ts.map +1 -0
- package/dist/register-slots.js +50 -0
- package/dist/register-slots.js.map +1 -0
- package/dist/register-terminal-view.d.ts +21 -0
- package/dist/register-terminal-view.d.ts.map +1 -0
- package/dist/register-terminal-view.js +46 -0
- package/dist/register-terminal-view.js.map +1 -0
- package/dist/register.d.ts +2 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +23 -0
- package/dist/register.js.map +1 -0
- package/dist/session-hydration.d.ts +2 -0
- package/dist/session-hydration.d.ts.map +1 -0
- package/dist/session-hydration.js +9 -0
- package/dist/session-hydration.js.map +1 -0
- package/dist/task-coordinator-view-bundle.d.ts +4 -0
- package/dist/task-coordinator-view-bundle.d.ts.map +1 -0
- package/dist/task-coordinator-view-bundle.js +9 -0
- package/dist/task-coordinator-view-bundle.js.map +1 -0
- package/dist/ui.d.ts +2 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +13 -0
- package/dist/ui.js.map +1 -0
- package/dist/view-format.d.ts +25 -0
- package/dist/view-format.d.ts.map +1 -0
- package/dist/view-format.js +64 -0
- package/dist/view-format.js.map +1 -0
- package/dist/views/bundle.js +1383 -0
- package/dist/views/bundle.js.map +1 -0
- package/package.json +7 -6
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import {
|
|
3
|
+
Button,
|
|
4
|
+
Card,
|
|
5
|
+
Divider,
|
|
6
|
+
Field,
|
|
7
|
+
HStack,
|
|
8
|
+
List,
|
|
9
|
+
Text,
|
|
10
|
+
VStack
|
|
11
|
+
} from "@elizaos/ui/spatial";
|
|
12
|
+
const EMPTY_TASK_COORDINATOR_SNAPSHOT = {
|
|
13
|
+
threads: [],
|
|
14
|
+
selectedThreadId: null,
|
|
15
|
+
detail: null,
|
|
16
|
+
showArchived: false,
|
|
17
|
+
search: ""
|
|
18
|
+
};
|
|
19
|
+
const STATUS_TONE = {
|
|
20
|
+
open: "primary",
|
|
21
|
+
active: "success",
|
|
22
|
+
validating: "primary",
|
|
23
|
+
waiting_on_user: "warning",
|
|
24
|
+
blocked: "warning",
|
|
25
|
+
interrupted: "warning",
|
|
26
|
+
done: "success",
|
|
27
|
+
failed: "danger",
|
|
28
|
+
archived: "muted"
|
|
29
|
+
};
|
|
30
|
+
const STATUS_MARK = {
|
|
31
|
+
open: "o",
|
|
32
|
+
active: ">",
|
|
33
|
+
validating: "~",
|
|
34
|
+
waiting_on_user: "?",
|
|
35
|
+
blocked: "!",
|
|
36
|
+
interrupted: "!",
|
|
37
|
+
done: "+",
|
|
38
|
+
failed: "x",
|
|
39
|
+
archived: "."
|
|
40
|
+
};
|
|
41
|
+
function statusTone(status) {
|
|
42
|
+
return STATUS_TONE[status] ?? "muted";
|
|
43
|
+
}
|
|
44
|
+
function statusMark(status) {
|
|
45
|
+
return STATUS_MARK[status] ?? ".";
|
|
46
|
+
}
|
|
47
|
+
function statusLabel(status) {
|
|
48
|
+
return status.replace(/_/g, " ");
|
|
49
|
+
}
|
|
50
|
+
function clamp(text, max) {
|
|
51
|
+
if (text.length <= max) return text;
|
|
52
|
+
return `${text.slice(0, Math.max(0, max - 1))}\u2026`;
|
|
53
|
+
}
|
|
54
|
+
function toTaskCoordinatorRow(thread) {
|
|
55
|
+
return {
|
|
56
|
+
id: thread.id,
|
|
57
|
+
title: thread.title,
|
|
58
|
+
subtitle: thread.summary || thread.originalRequest || void 0,
|
|
59
|
+
status: thread.status,
|
|
60
|
+
sessionCount: thread.sessionCount,
|
|
61
|
+
decisionCount: thread.decisionCount
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function TaskCoordinatorSpatialView({
|
|
65
|
+
snapshot,
|
|
66
|
+
onAction
|
|
67
|
+
}) {
|
|
68
|
+
const dispatch = (action) => () => onAction?.(action);
|
|
69
|
+
if (snapshot.detail) {
|
|
70
|
+
return /* @__PURE__ */ jsx(
|
|
71
|
+
TaskDetail,
|
|
72
|
+
{
|
|
73
|
+
detail: snapshot.detail,
|
|
74
|
+
dispatch,
|
|
75
|
+
onAction
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return /* @__PURE__ */ jsx(
|
|
80
|
+
TaskList,
|
|
81
|
+
{
|
|
82
|
+
threads: snapshot.threads,
|
|
83
|
+
showArchived: snapshot.showArchived,
|
|
84
|
+
search: snapshot.search,
|
|
85
|
+
loading: snapshot.loading,
|
|
86
|
+
error: snapshot.error,
|
|
87
|
+
dispatch,
|
|
88
|
+
onAction
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
function TaskList({
|
|
93
|
+
threads,
|
|
94
|
+
showArchived,
|
|
95
|
+
search,
|
|
96
|
+
loading,
|
|
97
|
+
error,
|
|
98
|
+
dispatch,
|
|
99
|
+
onAction
|
|
100
|
+
}) {
|
|
101
|
+
const activeCount = threads.filter((t) => t.status === "active").length;
|
|
102
|
+
const doneCount = threads.filter((t) => t.status === "done").length;
|
|
103
|
+
return /* @__PURE__ */ jsxs(Card, { gap: 1, padding: 1, children: [
|
|
104
|
+
/* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", wrap: true, children: [
|
|
105
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", grow: 1, children: loading ? "loading" : `${threads.length} total` }),
|
|
106
|
+
activeCount > 0 ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "success", children: `${activeCount} active` }) : null,
|
|
107
|
+
doneCount > 0 ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "primary", children: `${doneCount} done` }) : null
|
|
108
|
+
] }),
|
|
109
|
+
error ? /* @__PURE__ */ jsx(Text, { tone: "danger", style: "caption", children: error }) : null,
|
|
110
|
+
/* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", wrap: true, children: [
|
|
111
|
+
/* @__PURE__ */ jsx(
|
|
112
|
+
Field,
|
|
113
|
+
{
|
|
114
|
+
placeholder: "Search tasks",
|
|
115
|
+
value: search,
|
|
116
|
+
agent: "search",
|
|
117
|
+
grow: 1,
|
|
118
|
+
onChange: (value) => onAction?.(`search:${value}`)
|
|
119
|
+
}
|
|
120
|
+
),
|
|
121
|
+
/* @__PURE__ */ jsx(
|
|
122
|
+
Button,
|
|
123
|
+
{
|
|
124
|
+
variant: showArchived ? "solid" : "outline",
|
|
125
|
+
tone: "default",
|
|
126
|
+
agent: "toggle-archived",
|
|
127
|
+
onPress: dispatch("toggle-archived"),
|
|
128
|
+
children: showArchived ? "Hide archived" : "Show archived"
|
|
129
|
+
}
|
|
130
|
+
),
|
|
131
|
+
/* @__PURE__ */ jsx(
|
|
132
|
+
Button,
|
|
133
|
+
{
|
|
134
|
+
variant: "ghost",
|
|
135
|
+
tone: "default",
|
|
136
|
+
agent: "refresh",
|
|
137
|
+
onPress: dispatch("refresh"),
|
|
138
|
+
children: "Refresh"
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
] }),
|
|
142
|
+
/* @__PURE__ */ jsx(Divider, { label: "tasks" }),
|
|
143
|
+
threads.length === 0 ? /* @__PURE__ */ jsx(Text, { tone: "muted", align: "center", style: "caption", children: loading ? "Loading" : "None" }) : /* @__PURE__ */ jsx(List, { gap: 1, children: threads.map((thread) => /* @__PURE__ */ jsx(TaskRow, { thread, dispatch }, thread.id)) })
|
|
144
|
+
] });
|
|
145
|
+
}
|
|
146
|
+
function TaskRow({
|
|
147
|
+
thread,
|
|
148
|
+
dispatch
|
|
149
|
+
}) {
|
|
150
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: 0, agent: `task-${thread.id}`, children: [
|
|
151
|
+
/* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", children: [
|
|
152
|
+
/* @__PURE__ */ jsx(Text, { tone: statusTone(thread.status), children: statusMark(thread.status) }),
|
|
153
|
+
/* @__PURE__ */ jsx(Text, { bold: true, wrap: false, grow: 1, children: thread.title }),
|
|
154
|
+
/* @__PURE__ */ jsx(
|
|
155
|
+
Button,
|
|
156
|
+
{
|
|
157
|
+
variant: "outline",
|
|
158
|
+
tone: "default",
|
|
159
|
+
agent: `open-${thread.id}`,
|
|
160
|
+
onPress: dispatch(`open:${thread.id}`),
|
|
161
|
+
children: "Open"
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
] }),
|
|
165
|
+
/* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", wrap: true, children: [
|
|
166
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", tone: statusTone(thread.status), children: statusLabel(thread.status) }),
|
|
167
|
+
thread.sessionCount > 0 ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `${thread.sessionCount} sess` }) : null,
|
|
168
|
+
thread.decisionCount > 0 ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `${thread.decisionCount} dec` }) : null,
|
|
169
|
+
thread.subtitle ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", grow: 1, wrap: false, children: clamp(thread.subtitle, 80) }) : null
|
|
170
|
+
] })
|
|
171
|
+
] });
|
|
172
|
+
}
|
|
173
|
+
function TaskDetail({
|
|
174
|
+
detail,
|
|
175
|
+
dispatch
|
|
176
|
+
}) {
|
|
177
|
+
return /* @__PURE__ */ jsxs(Card, { gap: 1, padding: 1, children: [
|
|
178
|
+
/* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", children: [
|
|
179
|
+
/* @__PURE__ */ jsx(
|
|
180
|
+
Button,
|
|
181
|
+
{
|
|
182
|
+
variant: "ghost",
|
|
183
|
+
tone: "default",
|
|
184
|
+
agent: "back",
|
|
185
|
+
onPress: dispatch("back"),
|
|
186
|
+
children: "< Tasks"
|
|
187
|
+
}
|
|
188
|
+
),
|
|
189
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", tone: statusTone(detail.status), grow: 1, children: statusLabel(detail.status) })
|
|
190
|
+
] }),
|
|
191
|
+
/* @__PURE__ */ jsx(Text, { style: "subheading", bold: true, wrap: true, children: detail.title }),
|
|
192
|
+
detail.originalRequest ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", wrap: true, children: clamp(detail.originalRequest, 200) }) : null,
|
|
193
|
+
/* @__PURE__ */ jsx(HStack, { gap: 1, wrap: true, children: detail.status === "archived" ? /* @__PURE__ */ jsx(Button, { agent: "reopen-thread", onPress: dispatch("reopen-thread"), children: "Reopen" }) : /* @__PURE__ */ jsx(
|
|
194
|
+
Button,
|
|
195
|
+
{
|
|
196
|
+
variant: "ghost",
|
|
197
|
+
tone: "danger",
|
|
198
|
+
agent: "delete-thread",
|
|
199
|
+
onPress: dispatch("delete-thread"),
|
|
200
|
+
children: "Delete"
|
|
201
|
+
}
|
|
202
|
+
) }),
|
|
203
|
+
detail.acceptanceCriteria.length > 0 ? /* @__PURE__ */ jsx(AcceptanceSection, { criteria: detail.acceptanceCriteria }) : null,
|
|
204
|
+
/* @__PURE__ */ jsx(SessionsSection, { sessions: detail.sessions }),
|
|
205
|
+
detail.artifacts.length > 0 ? /* @__PURE__ */ jsx(ArtifactsSection, { artifacts: detail.artifacts }) : null,
|
|
206
|
+
detail.decisions.length > 0 ? /* @__PURE__ */ jsx(DecisionsSection, { decisions: detail.decisions }) : null,
|
|
207
|
+
detail.events.length > 0 ? /* @__PURE__ */ jsx(EventsSection, { events: detail.events }) : null
|
|
208
|
+
] });
|
|
209
|
+
}
|
|
210
|
+
function AcceptanceSection({ criteria }) {
|
|
211
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: 0, children: [
|
|
212
|
+
/* @__PURE__ */ jsx(Divider, { label: "acceptance" }),
|
|
213
|
+
/* @__PURE__ */ jsx(List, { gap: 0, children: criteria.slice(0, 8).map((criterion) => /* @__PURE__ */ jsx(Text, { style: "caption", wrap: true, children: clamp(criterion, 110) }, criterion)) })
|
|
214
|
+
] });
|
|
215
|
+
}
|
|
216
|
+
function SessionsSection({
|
|
217
|
+
sessions
|
|
218
|
+
}) {
|
|
219
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: 0, children: [
|
|
220
|
+
/* @__PURE__ */ jsx(Divider, { label: `sessions (${sessions.length})` }),
|
|
221
|
+
sessions.length === 0 ? /* @__PURE__ */ jsx(Text, { tone: "muted", align: "center", style: "caption", children: "None" }) : /* @__PURE__ */ jsx(List, { gap: 0, children: sessions.slice(-6).reverse().map((session) => /* @__PURE__ */ jsxs(VStack, { gap: 0, agent: `session-${session.id}`, children: [
|
|
222
|
+
/* @__PURE__ */ jsx(Text, { bold: true, wrap: false, children: session.label }),
|
|
223
|
+
/* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", wrap: true, children: [
|
|
224
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", tone: statusTone(session.status), children: statusLabel(session.status) }),
|
|
225
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: session.framework }),
|
|
226
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", grow: 1, wrap: false, children: session.workdir || session.repo || "no workspace" })
|
|
227
|
+
] })
|
|
228
|
+
] }, session.id)) })
|
|
229
|
+
] });
|
|
230
|
+
}
|
|
231
|
+
function ArtifactsSection({
|
|
232
|
+
artifacts
|
|
233
|
+
}) {
|
|
234
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: 0, children: [
|
|
235
|
+
/* @__PURE__ */ jsx(Divider, { label: `artifacts (${artifacts.length})` }),
|
|
236
|
+
/* @__PURE__ */ jsx(List, { gap: 0, children: artifacts.slice(-6).reverse().map((artifact) => /* @__PURE__ */ jsxs(
|
|
237
|
+
HStack,
|
|
238
|
+
{
|
|
239
|
+
gap: 1,
|
|
240
|
+
align: "center",
|
|
241
|
+
agent: `artifact-${artifact.id}`,
|
|
242
|
+
children: [
|
|
243
|
+
/* @__PURE__ */ jsx(Text, { grow: 1, wrap: false, children: artifact.title }),
|
|
244
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", wrap: false, children: artifact.artifactType })
|
|
245
|
+
]
|
|
246
|
+
},
|
|
247
|
+
artifact.id
|
|
248
|
+
)) })
|
|
249
|
+
] });
|
|
250
|
+
}
|
|
251
|
+
function DecisionsSection({
|
|
252
|
+
decisions
|
|
253
|
+
}) {
|
|
254
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: 0, children: [
|
|
255
|
+
/* @__PURE__ */ jsx(Divider, { label: `decisions (${decisions.length})` }),
|
|
256
|
+
/* @__PURE__ */ jsx(List, { gap: 0, children: decisions.slice(-6).reverse().map((decision) => /* @__PURE__ */ jsxs(
|
|
257
|
+
HStack,
|
|
258
|
+
{
|
|
259
|
+
gap: 1,
|
|
260
|
+
align: "center",
|
|
261
|
+
agent: `decision-${decision.id}`,
|
|
262
|
+
children: [
|
|
263
|
+
/* @__PURE__ */ jsx(Text, { tone: "primary", wrap: false, children: decision.decision }),
|
|
264
|
+
/* @__PURE__ */ jsx(Text, { grow: 1, wrap: false, children: clamp(decision.reasoning || decision.promptText, 100) })
|
|
265
|
+
]
|
|
266
|
+
},
|
|
267
|
+
decision.id
|
|
268
|
+
)) })
|
|
269
|
+
] });
|
|
270
|
+
}
|
|
271
|
+
function EventsSection({ events }) {
|
|
272
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: 0, children: [
|
|
273
|
+
/* @__PURE__ */ jsx(Divider, { label: `events (${events.length})` }),
|
|
274
|
+
/* @__PURE__ */ jsx(List, { gap: 0, children: events.slice(-6).reverse().map((event) => /* @__PURE__ */ jsxs(
|
|
275
|
+
HStack,
|
|
276
|
+
{
|
|
277
|
+
gap: 1,
|
|
278
|
+
align: "center",
|
|
279
|
+
agent: `event-${event.id}`,
|
|
280
|
+
children: [
|
|
281
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", wrap: false, children: event.eventType.replace(/_/g, " ") }),
|
|
282
|
+
/* @__PURE__ */ jsx(Text, { style: "caption", grow: 1, wrap: false, children: clamp(event.summary, 90) })
|
|
283
|
+
]
|
|
284
|
+
},
|
|
285
|
+
event.id
|
|
286
|
+
)) })
|
|
287
|
+
] });
|
|
288
|
+
}
|
|
289
|
+
export {
|
|
290
|
+
EMPTY_TASK_COORDINATOR_SNAPSHOT,
|
|
291
|
+
TaskCoordinatorSpatialView,
|
|
292
|
+
toTaskCoordinatorRow
|
|
293
|
+
};
|
|
294
|
+
//# sourceMappingURL=TaskCoordinatorSpatialView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/TaskCoordinatorSpatialView.tsx"],"sourcesContent":["/**\n * TaskCoordinatorSpatialView — the coding-agent task coordinator authored once\n * with the spatial vocabulary, so it renders correctly wherever it is displayed:\n *\n * - GUI / XR — mounted in `<SpatialSurface>` (DOM; XR scales up).\n * - TUI — rendered to real terminal lines by the agent terminal, via\n * `registerSpatialTerminalView` (see `register-terminal-view.tsx`).\n *\n * It is purely presentational (a typed snapshot + an action callback in,\n * primitives out) and imports only the cross-modality primitives plus a\n * type-only view of the task-thread records from `@elizaos/ui`, so it is safe to\n * render in the Node agent process where the terminal lives (the `import type`\n * is erased).\n *\n * Two modes:\n * - list — the searchable task-thread list with count chips and a\n * show-archived toggle; the coordinator landing.\n * - detail — drill-down for one thread: acceptance criteria, sessions,\n * artifacts, decisions, events, and recent messages, with\n * Delete/Reopen affordances.\n */\n\nimport type {\n CodingAgentTaskArtifactRecord,\n CodingAgentTaskDecisionRecord,\n CodingAgentTaskEventRecord,\n CodingAgentTaskSessionRecord,\n CodingAgentTaskThread,\n CodingAgentTaskThreadDetail,\n} from \"@elizaos/ui\";\nimport {\n Button,\n Card,\n Divider,\n Field,\n HStack,\n List,\n type SpatialTone,\n Text,\n VStack,\n} from \"@elizaos/ui/spatial\";\n\ntype TaskStatus = CodingAgentTaskThread[\"status\"];\n\n/** A task-thread row distilled for list display. */\nexport interface TaskCoordinatorRow {\n id: string;\n title: string;\n subtitle?: string;\n status: string;\n sessionCount: number;\n decisionCount: number;\n}\n\nexport interface TaskCoordinatorSnapshot {\n /** The current page of task threads (server-filtered). */\n threads: TaskCoordinatorRow[];\n /** The open thread id, or null on the list landing. */\n selectedThreadId: string | null;\n /** The open thread's drill-down, or null on the list landing. */\n detail: CodingAgentTaskThreadDetail | null;\n /** Whether the archived threads are included in the current list. */\n showArchived: boolean;\n /** The current search query. */\n search: string;\n loading?: boolean;\n error?: string | null;\n}\n\nexport const EMPTY_TASK_COORDINATOR_SNAPSHOT: TaskCoordinatorSnapshot = {\n threads: [],\n selectedThreadId: null,\n detail: null,\n showArchived: false,\n search: \"\",\n};\n\nconst STATUS_TONE: Record<TaskStatus, SpatialTone> = {\n open: \"primary\",\n active: \"success\",\n validating: \"primary\",\n waiting_on_user: \"warning\",\n blocked: \"warning\",\n interrupted: \"warning\",\n done: \"success\",\n failed: \"danger\",\n archived: \"muted\",\n};\n\nconst STATUS_MARK: Record<TaskStatus, string> = {\n open: \"o\",\n active: \">\",\n validating: \"~\",\n waiting_on_user: \"?\",\n blocked: \"!\",\n interrupted: \"!\",\n done: \"+\",\n failed: \"x\",\n archived: \".\",\n};\n\nfunction statusTone(status: string): SpatialTone {\n return STATUS_TONE[status as TaskStatus] ?? \"muted\";\n}\n\nfunction statusMark(status: string): string {\n return STATUS_MARK[status as TaskStatus] ?? \".\";\n}\n\nfunction statusLabel(status: string): string {\n return status.replace(/_/g, \" \");\n}\n\nfunction clamp(text: string, max: number): string {\n if (text.length <= max) return text;\n return `${text.slice(0, Math.max(0, max - 1))}…`;\n}\n\n/** Distil a thread record into the presentational row shape. */\nexport function toTaskCoordinatorRow(\n thread: CodingAgentTaskThread,\n): TaskCoordinatorRow {\n return {\n id: thread.id,\n title: thread.title,\n subtitle: thread.summary || thread.originalRequest || undefined,\n status: thread.status,\n sessionCount: thread.sessionCount,\n decisionCount: thread.decisionCount,\n };\n}\n\nexport interface TaskCoordinatorSpatialViewProps {\n snapshot: TaskCoordinatorSnapshot;\n /**\n * Dispatch by agent id. List: `open:<threadId>`, `search:<text>`,\n * `toggle-archived`, `refresh`. Detail: `back`, `delete-thread`,\n * `reopen-thread`.\n */\n onAction?: (action: string) => void;\n}\n\nexport function TaskCoordinatorSpatialView({\n snapshot,\n onAction,\n}: TaskCoordinatorSpatialViewProps) {\n const dispatch = (action: string) => () => onAction?.(action);\n if (snapshot.detail) {\n return (\n <TaskDetail\n detail={snapshot.detail}\n dispatch={dispatch}\n onAction={onAction}\n />\n );\n }\n return (\n <TaskList\n threads={snapshot.threads}\n showArchived={snapshot.showArchived}\n search={snapshot.search}\n loading={snapshot.loading}\n error={snapshot.error}\n dispatch={dispatch}\n onAction={onAction}\n />\n );\n}\n\nfunction TaskList({\n threads,\n showArchived,\n search,\n loading,\n error,\n dispatch,\n onAction,\n}: {\n threads: TaskCoordinatorRow[];\n showArchived: boolean;\n search: string;\n loading?: boolean;\n error?: string | null;\n dispatch: (action: string) => () => void;\n onAction?: (action: string) => void;\n}) {\n const activeCount = threads.filter((t) => t.status === \"active\").length;\n const doneCount = threads.filter((t) => t.status === \"done\").length;\n return (\n <Card gap={1} padding={1}>\n <HStack gap={1} align=\"center\" wrap>\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n {loading ? \"loading\" : `${threads.length} total`}\n </Text>\n {activeCount > 0 ? (\n <Text style=\"caption\" tone=\"success\">\n {`${activeCount} active`}\n </Text>\n ) : null}\n {doneCount > 0 ? (\n <Text style=\"caption\" tone=\"primary\">\n {`${doneCount} done`}\n </Text>\n ) : null}\n </HStack>\n\n {error ? (\n <Text tone=\"danger\" style=\"caption\">\n {error}\n </Text>\n ) : null}\n\n <HStack gap={1} align=\"center\" wrap>\n <Field\n placeholder=\"Search tasks\"\n value={search}\n agent=\"search\"\n grow={1}\n onChange={(value) => onAction?.(`search:${value}`)}\n />\n <Button\n variant={showArchived ? \"solid\" : \"outline\"}\n tone=\"default\"\n agent=\"toggle-archived\"\n onPress={dispatch(\"toggle-archived\")}\n >\n {showArchived ? \"Hide archived\" : \"Show archived\"}\n </Button>\n <Button\n variant=\"ghost\"\n tone=\"default\"\n agent=\"refresh\"\n onPress={dispatch(\"refresh\")}\n >\n Refresh\n </Button>\n </HStack>\n\n <Divider label=\"tasks\" />\n {threads.length === 0 ? (\n <Text tone=\"muted\" align=\"center\" style=\"caption\">\n {loading ? \"Loading\" : \"None\"}\n </Text>\n ) : (\n <List gap={1}>\n {threads.map((thread) => (\n <TaskRow key={thread.id} thread={thread} dispatch={dispatch} />\n ))}\n </List>\n )}\n </Card>\n );\n}\n\nfunction TaskRow({\n thread,\n dispatch,\n}: {\n thread: TaskCoordinatorRow;\n dispatch: (action: string) => () => void;\n}) {\n return (\n <VStack gap={0} agent={`task-${thread.id}`}>\n <HStack gap={1} align=\"center\">\n <Text tone={statusTone(thread.status)}>\n {statusMark(thread.status)}\n </Text>\n <Text bold wrap={false} grow={1}>\n {thread.title}\n </Text>\n <Button\n variant=\"outline\"\n tone=\"default\"\n agent={`open-${thread.id}`}\n onPress={dispatch(`open:${thread.id}`)}\n >\n Open\n </Button>\n </HStack>\n <HStack gap={1} align=\"center\" wrap>\n <Text style=\"caption\" tone={statusTone(thread.status)}>\n {statusLabel(thread.status)}\n </Text>\n {thread.sessionCount > 0 ? (\n <Text style=\"caption\" tone=\"muted\">\n {`${thread.sessionCount} sess`}\n </Text>\n ) : null}\n {thread.decisionCount > 0 ? (\n <Text style=\"caption\" tone=\"muted\">\n {`${thread.decisionCount} dec`}\n </Text>\n ) : null}\n {thread.subtitle ? (\n <Text style=\"caption\" tone=\"muted\" grow={1} wrap={false}>\n {clamp(thread.subtitle, 80)}\n </Text>\n ) : null}\n </HStack>\n </VStack>\n );\n}\n\nfunction TaskDetail({\n detail,\n dispatch,\n}: {\n detail: CodingAgentTaskThreadDetail;\n dispatch: (action: string) => () => void;\n onAction?: (action: string) => void;\n}) {\n return (\n <Card gap={1} padding={1}>\n <HStack gap={1} align=\"center\">\n <Button\n variant=\"ghost\"\n tone=\"default\"\n agent=\"back\"\n onPress={dispatch(\"back\")}\n >\n {\"< Tasks\"}\n </Button>\n <Text style=\"caption\" tone={statusTone(detail.status)} grow={1}>\n {statusLabel(detail.status)}\n </Text>\n </HStack>\n\n <Text style=\"subheading\" bold wrap>\n {detail.title}\n </Text>\n {detail.originalRequest ? (\n <Text style=\"caption\" tone=\"muted\" wrap>\n {clamp(detail.originalRequest, 200)}\n </Text>\n ) : null}\n\n <HStack gap={1} wrap>\n {detail.status === \"archived\" ? (\n <Button agent=\"reopen-thread\" onPress={dispatch(\"reopen-thread\")}>\n Reopen\n </Button>\n ) : (\n <Button\n variant=\"ghost\"\n tone=\"danger\"\n agent=\"delete-thread\"\n onPress={dispatch(\"delete-thread\")}\n >\n Delete\n </Button>\n )}\n </HStack>\n\n {detail.acceptanceCriteria.length > 0 ? (\n <AcceptanceSection criteria={detail.acceptanceCriteria} />\n ) : null}\n\n <SessionsSection sessions={detail.sessions} />\n\n {detail.artifacts.length > 0 ? (\n <ArtifactsSection artifacts={detail.artifacts} />\n ) : null}\n\n {detail.decisions.length > 0 ? (\n <DecisionsSection decisions={detail.decisions} />\n ) : null}\n\n {detail.events.length > 0 ? (\n <EventsSection events={detail.events} />\n ) : null}\n </Card>\n );\n}\n\nfunction AcceptanceSection({ criteria }: { criteria: string[] }) {\n return (\n <VStack gap={0}>\n <Divider label=\"acceptance\" />\n <List gap={0}>\n {criteria.slice(0, 8).map((criterion) => (\n <Text key={criterion} style=\"caption\" wrap>\n {clamp(criterion, 110)}\n </Text>\n ))}\n </List>\n </VStack>\n );\n}\n\nfunction SessionsSection({\n sessions,\n}: {\n sessions: CodingAgentTaskSessionRecord[];\n}) {\n return (\n <VStack gap={0}>\n <Divider label={`sessions (${sessions.length})`} />\n {sessions.length === 0 ? (\n <Text tone=\"muted\" align=\"center\" style=\"caption\">\n None\n </Text>\n ) : (\n <List gap={0}>\n {sessions\n .slice(-6)\n .reverse()\n .map((session) => (\n <VStack key={session.id} gap={0} agent={`session-${session.id}`}>\n <Text bold wrap={false}>\n {session.label}\n </Text>\n <HStack gap={1} align=\"center\" wrap>\n <Text style=\"caption\" tone={statusTone(session.status)}>\n {statusLabel(session.status)}\n </Text>\n <Text style=\"caption\" tone=\"muted\">\n {session.framework}\n </Text>\n <Text style=\"caption\" tone=\"muted\" grow={1} wrap={false}>\n {session.workdir || session.repo || \"no workspace\"}\n </Text>\n </HStack>\n </VStack>\n ))}\n </List>\n )}\n </VStack>\n );\n}\n\nfunction ArtifactsSection({\n artifacts,\n}: {\n artifacts: CodingAgentTaskArtifactRecord[];\n}) {\n return (\n <VStack gap={0}>\n <Divider label={`artifacts (${artifacts.length})`} />\n <List gap={0}>\n {artifacts\n .slice(-6)\n .reverse()\n .map((artifact) => (\n <HStack\n key={artifact.id}\n gap={1}\n align=\"center\"\n agent={`artifact-${artifact.id}`}\n >\n <Text grow={1} wrap={false}>\n {artifact.title}\n </Text>\n <Text style=\"caption\" tone=\"muted\" wrap={false}>\n {artifact.artifactType}\n </Text>\n </HStack>\n ))}\n </List>\n </VStack>\n );\n}\n\nfunction DecisionsSection({\n decisions,\n}: {\n decisions: CodingAgentTaskDecisionRecord[];\n}) {\n return (\n <VStack gap={0}>\n <Divider label={`decisions (${decisions.length})`} />\n <List gap={0}>\n {decisions\n .slice(-6)\n .reverse()\n .map((decision) => (\n <HStack\n key={decision.id}\n gap={1}\n align=\"center\"\n agent={`decision-${decision.id}`}\n >\n <Text tone=\"primary\" wrap={false}>\n {decision.decision}\n </Text>\n <Text grow={1} wrap={false}>\n {clamp(decision.reasoning || decision.promptText, 100)}\n </Text>\n </HStack>\n ))}\n </List>\n </VStack>\n );\n}\n\nfunction EventsSection({ events }: { events: CodingAgentTaskEventRecord[] }) {\n return (\n <VStack gap={0}>\n <Divider label={`events (${events.length})`} />\n <List gap={0}>\n {events\n .slice(-6)\n .reverse()\n .map((event) => (\n <HStack\n key={event.id}\n gap={1}\n align=\"center\"\n agent={`event-${event.id}`}\n >\n <Text style=\"caption\" tone=\"muted\" wrap={false}>\n {event.eventType.replace(/_/g, \" \")}\n </Text>\n <Text style=\"caption\" grow={1} wrap={false}>\n {clamp(event.summary, 90)}\n </Text>\n </HStack>\n ))}\n </List>\n </VStack>\n );\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Plugin } from "@elizaos/core";
|
|
2
|
+
declare const taskCoordinatorPlugin: Plugin;
|
|
3
|
+
export default taskCoordinatorPlugin;
|
|
4
|
+
export { ORCHESTRATOR_STATUS_COMMAND_ACTION, ORCHESTRATOR_STATUS_COMMAND_KEY, ORCHESTRATOR_VIEW_ID, orchestratorStatusCommandAction, registerOrchestratorCommands, } from "./orchestrator-command";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,eAAe,CAAC;AA0L5D,QAAA,MAAM,qBAAqB,EAAE,MAuF5B,CAAC;AAEF,eAAe,qBAAqB,CAAC;AACrC,OAAO,EACL,kCAAkC,EAClC,+BAA+B,EAC/B,oBAAoB,EACpB,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import {
|
|
2
|
+
orchestratorStatusCommandAction,
|
|
3
|
+
registerOrchestratorCommands
|
|
4
|
+
} from "./orchestrator-command.js";
|
|
5
|
+
const ORCHESTRATOR_CAPABILITIES = [
|
|
6
|
+
{ id: "orchestrator-status", description: "Get orchestrator status" },
|
|
7
|
+
{
|
|
8
|
+
id: "orchestrator-list-tasks",
|
|
9
|
+
description: "List orchestrator task threads",
|
|
10
|
+
params: {
|
|
11
|
+
status: {
|
|
12
|
+
type: "string",
|
|
13
|
+
description: "Filter by task status (e.g. active, paused, done)"
|
|
14
|
+
},
|
|
15
|
+
search: { type: "string", description: "Optional search query" },
|
|
16
|
+
includeArchived: {
|
|
17
|
+
type: "boolean",
|
|
18
|
+
description: "Include archived task threads"
|
|
19
|
+
},
|
|
20
|
+
limit: { type: "number", description: "Maximum threads to return" }
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: "orchestrator-open-task",
|
|
25
|
+
description: "Open an orchestrator task thread",
|
|
26
|
+
params: {
|
|
27
|
+
taskId: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Task thread id to open; opens the most recent task when omitted"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: "orchestrator-create-task",
|
|
35
|
+
description: "Create an orchestrator task",
|
|
36
|
+
params: {
|
|
37
|
+
title: { type: "string", description: "Short task title" },
|
|
38
|
+
goal: {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "Durable goal the sub-agent works until complete"
|
|
41
|
+
},
|
|
42
|
+
originalRequest: {
|
|
43
|
+
type: "string",
|
|
44
|
+
description: "The user's original request text, if any"
|
|
45
|
+
},
|
|
46
|
+
kind: { type: "string", description: "Optional task kind/category" },
|
|
47
|
+
priority: {
|
|
48
|
+
type: "string",
|
|
49
|
+
description: "Priority: low, normal, high, or urgent"
|
|
50
|
+
},
|
|
51
|
+
acceptanceCriteria: {
|
|
52
|
+
type: "array",
|
|
53
|
+
description: "List of acceptance-criteria strings"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: "orchestrator-pause-task",
|
|
59
|
+
description: "Pause an orchestrator task",
|
|
60
|
+
params: {
|
|
61
|
+
taskId: { type: "string", description: "Task thread id to pause" }
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "orchestrator-resume-task",
|
|
66
|
+
description: "Resume an orchestrator task",
|
|
67
|
+
params: {
|
|
68
|
+
taskId: { type: "string", description: "Task thread id to resume" }
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: "orchestrator-pause-all",
|
|
73
|
+
description: "Pause all active orchestrator tasks"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: "orchestrator-resume-all",
|
|
77
|
+
description: "Resume all paused orchestrator tasks"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "orchestrator-delete-task",
|
|
81
|
+
description: "Delete an orchestrator task",
|
|
82
|
+
params: {
|
|
83
|
+
taskId: { type: "string", description: "Task thread id to delete" }
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: "orchestrator-fork-task",
|
|
88
|
+
description: "Fork an orchestrator task",
|
|
89
|
+
params: {
|
|
90
|
+
taskId: { type: "string", description: "Source task thread id" },
|
|
91
|
+
title: { type: "string", description: "Title for the fork" },
|
|
92
|
+
goal: { type: "string", description: "Goal override for the fork" },
|
|
93
|
+
priority: {
|
|
94
|
+
type: "string",
|
|
95
|
+
description: "Priority: low, normal, high, or urgent"
|
|
96
|
+
},
|
|
97
|
+
acceptanceCriteria: {
|
|
98
|
+
type: "array",
|
|
99
|
+
description: "List of acceptance-criteria strings"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: "orchestrator-update-task",
|
|
105
|
+
description: "Update an orchestrator task's title, goal, summary, priority, or acceptance criteria",
|
|
106
|
+
params: {
|
|
107
|
+
taskId: { type: "string", description: "Task thread id to update" },
|
|
108
|
+
title: { type: "string", description: "New task title" },
|
|
109
|
+
goal: { type: "string", description: "New durable goal" },
|
|
110
|
+
summary: { type: "string", description: "New task summary" },
|
|
111
|
+
priority: {
|
|
112
|
+
type: "string",
|
|
113
|
+
description: "Priority: low, normal, high, or urgent"
|
|
114
|
+
},
|
|
115
|
+
acceptanceCriteria: {
|
|
116
|
+
type: "array",
|
|
117
|
+
description: "List of acceptance-criteria strings"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: "orchestrator-validate-task",
|
|
123
|
+
description: "Record a validation result for an orchestrator task",
|
|
124
|
+
params: {
|
|
125
|
+
taskId: { type: "string", description: "Task thread id to validate" },
|
|
126
|
+
passed: { type: "boolean", description: "Whether validation passed" },
|
|
127
|
+
summary: { type: "string", description: "Validation summary" },
|
|
128
|
+
evidence: {
|
|
129
|
+
type: "string",
|
|
130
|
+
description: "Evidence supporting the result"
|
|
131
|
+
},
|
|
132
|
+
verifier: {
|
|
133
|
+
type: "string",
|
|
134
|
+
description: "Who or what performed validation"
|
|
135
|
+
},
|
|
136
|
+
humanOverride: {
|
|
137
|
+
type: "boolean",
|
|
138
|
+
description: "Whether a human explicitly overrode the result"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: "orchestrator-add-agent",
|
|
144
|
+
description: "Add a sub-agent to an orchestrator task",
|
|
145
|
+
params: {
|
|
146
|
+
taskId: { type: "string", description: "Target task thread id" },
|
|
147
|
+
framework: {
|
|
148
|
+
type: "string",
|
|
149
|
+
description: "Coding agent framework (claude, codex, opencode...)"
|
|
150
|
+
},
|
|
151
|
+
providerSource: {
|
|
152
|
+
type: "string",
|
|
153
|
+
description: "Provider/subscription source for the sub-agent"
|
|
154
|
+
},
|
|
155
|
+
model: { type: "string", description: "Model id to use" },
|
|
156
|
+
workdir: { type: "string", description: "Working directory" },
|
|
157
|
+
repo: { type: "string", description: "Repository to work in" },
|
|
158
|
+
label: { type: "string", description: "Display label for the agent" },
|
|
159
|
+
task: { type: "string", description: "Initial task text" }
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: "orchestrator-stop-agent",
|
|
164
|
+
description: "Stop a sub-agent on an orchestrator task",
|
|
165
|
+
params: {
|
|
166
|
+
taskId: { type: "string", description: "Task thread id" },
|
|
167
|
+
sessionId: {
|
|
168
|
+
type: "string",
|
|
169
|
+
description: "Sub-agent session id to stop"
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
id: "orchestrator-send-message",
|
|
175
|
+
description: "Send a message to an orchestrator task",
|
|
176
|
+
params: {
|
|
177
|
+
taskId: { type: "string", description: "Target task thread id" },
|
|
178
|
+
content: { type: "string", description: "Message content to send" }
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
];
|
|
182
|
+
const taskCoordinatorPlugin = {
|
|
183
|
+
name: "@elizaos/plugin-task-coordinator",
|
|
184
|
+
description: "Coding agent task coordinator and session control surface.",
|
|
185
|
+
// Contribute the orchestrator view's slash command into the universal command
|
|
186
|
+
// registry once the runtime is up. `@elizaos/plugin-commands` boots before app
|
|
187
|
+
// plugins, so its per-runtime store already exists here (#8790).
|
|
188
|
+
init: async (_config, runtime) => {
|
|
189
|
+
registerOrchestratorCommands(runtime.agentId);
|
|
190
|
+
},
|
|
191
|
+
// Deterministic handler for the registered slash command.
|
|
192
|
+
actions: [orchestratorStatusCommandAction],
|
|
193
|
+
views: [
|
|
194
|
+
// ONE declaration → GUI + XR + TUI, all drawn from the single
|
|
195
|
+
// TaskCoordinatorView spatial source. `modalities` is a plain literal here
|
|
196
|
+
// (index.ts is not in the view bundle), so no brand-new `@elizaos/core`
|
|
197
|
+
// runtime export reaches the bundle build.
|
|
198
|
+
{
|
|
199
|
+
id: "task-coordinator",
|
|
200
|
+
label: "Task Coordinator",
|
|
201
|
+
description: "Coding agent task threads, sessions, and controls",
|
|
202
|
+
icon: "SquareTerminal",
|
|
203
|
+
path: "/task-coordinator",
|
|
204
|
+
modalities: ["gui", "xr", "tui"],
|
|
205
|
+
bundlePath: "dist/views/bundle.js",
|
|
206
|
+
componentExport: "TaskCoordinatorView",
|
|
207
|
+
capabilities: [
|
|
208
|
+
{
|
|
209
|
+
id: "list-sessions",
|
|
210
|
+
description: "List active coding-agent sessions"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
id: "list-task-threads",
|
|
214
|
+
description: "List coding-agent task threads",
|
|
215
|
+
params: {
|
|
216
|
+
search: { type: "string", description: "Optional search query" },
|
|
217
|
+
includeArchived: {
|
|
218
|
+
type: "boolean",
|
|
219
|
+
description: "Include archived task threads"
|
|
220
|
+
},
|
|
221
|
+
limit: { type: "number", description: "Maximum threads to return" }
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
id: "open-thread",
|
|
226
|
+
description: "Open a coding-agent task thread",
|
|
227
|
+
params: {
|
|
228
|
+
threadId: { type: "string", description: "Task thread id" }
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: "stop-session",
|
|
233
|
+
description: "Stop a running coding-agent session",
|
|
234
|
+
params: {
|
|
235
|
+
sessionId: { type: "string", description: "Session id to stop" }
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
{ id: "refresh", description: "Refresh task coordinator state" }
|
|
239
|
+
],
|
|
240
|
+
tags: [
|
|
241
|
+
"developer",
|
|
242
|
+
"coding-agent",
|
|
243
|
+
"coding",
|
|
244
|
+
"build",
|
|
245
|
+
"feature",
|
|
246
|
+
"app builder",
|
|
247
|
+
"tasks"
|
|
248
|
+
],
|
|
249
|
+
visibleInManager: true,
|
|
250
|
+
desktopTabEnabled: true
|
|
251
|
+
},
|
|
252
|
+
// ONE declaration → GUI + XR + TUI, all drawn from the single
|
|
253
|
+
// OrchestratorView spatial source.
|
|
254
|
+
{
|
|
255
|
+
id: "orchestrator",
|
|
256
|
+
label: "Orchestrator",
|
|
257
|
+
description: "Multi-agent task orchestration workbench",
|
|
258
|
+
icon: "Layers",
|
|
259
|
+
path: "/orchestrator",
|
|
260
|
+
modalities: ["gui", "xr", "tui"],
|
|
261
|
+
bundlePath: "dist/views/bundle.js",
|
|
262
|
+
componentExport: "OrchestratorView",
|
|
263
|
+
capabilities: ORCHESTRATOR_CAPABILITIES,
|
|
264
|
+
tags: ["developer", "coding-agent", "orchestrator"],
|
|
265
|
+
visibleInManager: true,
|
|
266
|
+
desktopTabEnabled: true
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
};
|
|
270
|
+
var index_default = taskCoordinatorPlugin;
|
|
271
|
+
import {
|
|
272
|
+
ORCHESTRATOR_STATUS_COMMAND_ACTION,
|
|
273
|
+
ORCHESTRATOR_STATUS_COMMAND_KEY,
|
|
274
|
+
ORCHESTRATOR_VIEW_ID,
|
|
275
|
+
orchestratorStatusCommandAction as orchestratorStatusCommandAction2,
|
|
276
|
+
registerOrchestratorCommands as registerOrchestratorCommands2
|
|
277
|
+
} from "./orchestrator-command.js";
|
|
278
|
+
export {
|
|
279
|
+
ORCHESTRATOR_STATUS_COMMAND_ACTION,
|
|
280
|
+
ORCHESTRATOR_STATUS_COMMAND_KEY,
|
|
281
|
+
ORCHESTRATOR_VIEW_ID,
|
|
282
|
+
index_default as default,
|
|
283
|
+
orchestratorStatusCommandAction2 as orchestratorStatusCommandAction,
|
|
284
|
+
registerOrchestratorCommands2 as registerOrchestratorCommands
|
|
285
|
+
};
|
|
286
|
+
//# sourceMappingURL=index.js.map
|