@elizaos/plugin-task-coordinator 2.0.3-beta.2 → 2.0.3-beta.4

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.
Files changed (176) hide show
  1. package/assets/hero.png +0 -0
  2. package/dist/AgentTabsSection.d.ts +16 -0
  3. package/dist/AgentTabsSection.d.ts.map +1 -0
  4. package/dist/AgentTabsSection.js +169 -0
  5. package/dist/AgentTabsSection.js.map +1 -0
  6. package/dist/CodingAgentControlChip.d.ts +2 -0
  7. package/dist/CodingAgentControlChip.d.ts.map +1 -0
  8. package/dist/CodingAgentControlChip.js +73 -0
  9. package/dist/CodingAgentControlChip.js.map +1 -0
  10. package/dist/CodingAgentSettingsSection.d.ts +2 -0
  11. package/dist/CodingAgentSettingsSection.d.ts.map +1 -0
  12. package/dist/CodingAgentSettingsSection.js +379 -0
  13. package/dist/CodingAgentSettingsSection.js.map +1 -0
  14. package/dist/CodingAgentTasksPanel.d.ts +4 -0
  15. package/dist/CodingAgentTasksPanel.d.ts.map +1 -0
  16. package/dist/CodingAgentTasksPanel.interact.d.ts +2 -0
  17. package/dist/CodingAgentTasksPanel.interact.d.ts.map +1 -0
  18. package/dist/CodingAgentTasksPanel.interact.js +46 -0
  19. package/dist/CodingAgentTasksPanel.interact.js.map +1 -0
  20. package/dist/CodingAgentTasksPanel.js +740 -0
  21. package/dist/CodingAgentTasksPanel.js.map +1 -0
  22. package/dist/GitHubConnectionCard.d.ts +2 -0
  23. package/dist/GitHubConnectionCard.d.ts.map +1 -0
  24. package/dist/GitHubConnectionCard.js +172 -0
  25. package/dist/GitHubConnectionCard.js.map +1 -0
  26. package/dist/GlobalPrefsSection.d.ts +10 -0
  27. package/dist/GlobalPrefsSection.d.ts.map +1 -0
  28. package/dist/GlobalPrefsSection.js +166 -0
  29. package/dist/GlobalPrefsSection.js.map +1 -0
  30. package/dist/LlmProviderSection.d.ts +10 -0
  31. package/dist/LlmProviderSection.d.ts.map +1 -0
  32. package/dist/LlmProviderSection.js +161 -0
  33. package/dist/LlmProviderSection.js.map +1 -0
  34. package/dist/ModelConfigSection.d.ts +15 -0
  35. package/dist/ModelConfigSection.d.ts.map +1 -0
  36. package/dist/ModelConfigSection.js +86 -0
  37. package/dist/ModelConfigSection.js.map +1 -0
  38. package/dist/OrchestratorView.d.ts +20 -0
  39. package/dist/OrchestratorView.d.ts.map +1 -0
  40. package/dist/OrchestratorView.js +231 -0
  41. package/dist/OrchestratorView.js.map +1 -0
  42. package/dist/OrchestratorWorkbench.d.ts +32 -0
  43. package/dist/OrchestratorWorkbench.d.ts.map +1 -0
  44. package/dist/OrchestratorWorkbench.js +3200 -0
  45. package/dist/OrchestratorWorkbench.js.map +1 -0
  46. package/dist/PtyConsoleBase.d.ts +9 -0
  47. package/dist/PtyConsoleBase.d.ts.map +1 -0
  48. package/dist/PtyConsoleBase.js +174 -0
  49. package/dist/PtyConsoleBase.js.map +1 -0
  50. package/dist/PtyConsoleDrawer.d.ts +10 -0
  51. package/dist/PtyConsoleDrawer.d.ts.map +1 -0
  52. package/dist/PtyConsoleDrawer.js +77 -0
  53. package/dist/PtyConsoleDrawer.js.map +1 -0
  54. package/dist/PtyConsoleSidePanel.d.ts +8 -0
  55. package/dist/PtyConsoleSidePanel.d.ts.map +1 -0
  56. package/dist/PtyConsoleSidePanel.js +9 -0
  57. package/dist/PtyConsoleSidePanel.js.map +1 -0
  58. package/dist/PtyTerminalPane.d.ts +10 -0
  59. package/dist/PtyTerminalPane.d.ts.map +1 -0
  60. package/dist/PtyTerminalPane.js +147 -0
  61. package/dist/PtyTerminalPane.js.map +1 -0
  62. package/dist/TaskCardList.d.ts +76 -0
  63. package/dist/TaskCardList.d.ts.map +1 -0
  64. package/dist/TaskCardList.js +327 -0
  65. package/dist/TaskCardList.js.map +1 -0
  66. package/dist/TaskCoordinatorView.d.ts +20 -0
  67. package/dist/TaskCoordinatorView.d.ts.map +1 -0
  68. package/dist/TaskCoordinatorView.js +146 -0
  69. package/dist/TaskCoordinatorView.js.map +1 -0
  70. package/dist/__e2e__/dashboard-fixture.d.ts +9 -0
  71. package/dist/__e2e__/dashboard-fixture.d.ts.map +1 -0
  72. package/dist/__e2e__/dashboard-fixture.js +123 -0
  73. package/dist/__e2e__/dashboard-fixture.js.map +1 -0
  74. package/dist/api/coding-agents-auth-sanitize.d.ts +23 -0
  75. package/dist/api/coding-agents-auth-sanitize.d.ts.map +1 -0
  76. package/dist/api/coding-agents-auth-sanitize.js +22 -0
  77. package/dist/api/coding-agents-auth-sanitize.js.map +1 -0
  78. package/dist/api/coding-agents-preflight-normalize.d.ts +29 -0
  79. package/dist/api/coding-agents-preflight-normalize.d.ts.map +1 -0
  80. package/dist/api/coding-agents-preflight-normalize.js +20 -0
  81. package/dist/api/coding-agents-preflight-normalize.js.map +1 -0
  82. package/dist/coding-agent-settings-shared.d.ts +42 -0
  83. package/dist/coding-agent-settings-shared.d.ts.map +1 -0
  84. package/dist/coding-agent-settings-shared.js +121 -0
  85. package/dist/coding-agent-settings-shared.js.map +1 -0
  86. package/dist/components/OrchestratorSpatialView.d.ts +56 -0
  87. package/dist/components/OrchestratorSpatialView.d.ts.map +1 -0
  88. package/dist/components/OrchestratorSpatialView.js +501 -0
  89. package/dist/components/OrchestratorSpatialView.js.map +1 -0
  90. package/dist/components/TaskCoordinatorSpatialView.d.ts +59 -0
  91. package/dist/components/TaskCoordinatorSpatialView.d.ts.map +1 -0
  92. package/dist/components/TaskCoordinatorSpatialView.js +294 -0
  93. package/dist/components/TaskCoordinatorSpatialView.js.map +1 -0
  94. package/dist/index.d.ts +5 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +286 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/orchestrator-capabilities.d.ts +3 -0
  99. package/dist/orchestrator-capabilities.d.ts.map +1 -0
  100. package/dist/orchestrator-capabilities.js +136 -0
  101. package/dist/orchestrator-capabilities.js.map +1 -0
  102. package/dist/orchestrator-command.d.ts +39 -0
  103. package/dist/orchestrator-command.d.ts.map +1 -0
  104. package/dist/orchestrator-command.js +52 -0
  105. package/dist/orchestrator-command.js.map +1 -0
  106. package/dist/orchestrator-diff.d.ts +19 -0
  107. package/dist/orchestrator-diff.d.ts.map +1 -0
  108. package/dist/orchestrator-diff.helpers.d.ts +18 -0
  109. package/dist/orchestrator-diff.helpers.d.ts.map +1 -0
  110. package/dist/orchestrator-diff.helpers.js +76 -0
  111. package/dist/orchestrator-diff.helpers.js.map +1 -0
  112. package/dist/orchestrator-diff.js +119 -0
  113. package/dist/orchestrator-diff.js.map +1 -0
  114. package/dist/orchestrator-markdown.d.ts +5 -0
  115. package/dist/orchestrator-markdown.d.ts.map +1 -0
  116. package/dist/orchestrator-markdown.helpers.d.ts +2 -0
  117. package/dist/orchestrator-markdown.helpers.d.ts.map +1 -0
  118. package/dist/orchestrator-markdown.helpers.js +21 -0
  119. package/dist/orchestrator-markdown.helpers.js.map +1 -0
  120. package/dist/orchestrator-markdown.js +199 -0
  121. package/dist/orchestrator-markdown.js.map +1 -0
  122. package/dist/orchestrator-params.d.ts +8 -0
  123. package/dist/orchestrator-params.d.ts.map +1 -0
  124. package/dist/orchestrator-params.js +27 -0
  125. package/dist/orchestrator-params.js.map +1 -0
  126. package/dist/orchestrator-plan.d.ts +5 -0
  127. package/dist/orchestrator-plan.d.ts.map +1 -0
  128. package/dist/orchestrator-plan.js +95 -0
  129. package/dist/orchestrator-plan.js.map +1 -0
  130. package/dist/orchestrator-reasoning.d.ts +21 -0
  131. package/dist/orchestrator-reasoning.d.ts.map +1 -0
  132. package/dist/orchestrator-reasoning.js +105 -0
  133. package/dist/orchestrator-reasoning.js.map +1 -0
  134. package/dist/orchestrator-stream.d.ts +15 -0
  135. package/dist/orchestrator-stream.d.ts.map +1 -0
  136. package/dist/orchestrator-stream.helpers.d.ts +89 -0
  137. package/dist/orchestrator-stream.helpers.d.ts.map +1 -0
  138. package/dist/orchestrator-stream.helpers.js +361 -0
  139. package/dist/orchestrator-stream.helpers.js.map +1 -0
  140. package/dist/orchestrator-stream.js +307 -0
  141. package/dist/orchestrator-stream.js.map +1 -0
  142. package/dist/pty-status-dots.d.ts +2 -0
  143. package/dist/pty-status-dots.d.ts.map +1 -0
  144. package/dist/pty-status-dots.js +6 -0
  145. package/dist/pty-status-dots.js.map +1 -0
  146. package/dist/register-slots.d.ts +20 -0
  147. package/dist/register-slots.d.ts.map +1 -0
  148. package/dist/register-slots.js +50 -0
  149. package/dist/register-slots.js.map +1 -0
  150. package/dist/register-terminal-view.d.ts +21 -0
  151. package/dist/register-terminal-view.d.ts.map +1 -0
  152. package/dist/register-terminal-view.js +46 -0
  153. package/dist/register-terminal-view.js.map +1 -0
  154. package/dist/register.d.ts +2 -0
  155. package/dist/register.d.ts.map +1 -0
  156. package/dist/register.js +23 -0
  157. package/dist/register.js.map +1 -0
  158. package/dist/session-hydration.d.ts +2 -0
  159. package/dist/session-hydration.d.ts.map +1 -0
  160. package/dist/session-hydration.js +9 -0
  161. package/dist/session-hydration.js.map +1 -0
  162. package/dist/task-coordinator-view-bundle.d.ts +4 -0
  163. package/dist/task-coordinator-view-bundle.d.ts.map +1 -0
  164. package/dist/task-coordinator-view-bundle.js +9 -0
  165. package/dist/task-coordinator-view-bundle.js.map +1 -0
  166. package/dist/ui.d.ts +2 -0
  167. package/dist/ui.d.ts.map +1 -0
  168. package/dist/ui.js +13 -0
  169. package/dist/ui.js.map +1 -0
  170. package/dist/view-format.d.ts +25 -0
  171. package/dist/view-format.d.ts.map +1 -0
  172. package/dist/view-format.js +64 -0
  173. package/dist/view-format.js.map +1 -0
  174. package/dist/views/bundle.js +1383 -0
  175. package/dist/views/bundle.js.map +1 -0
  176. package/package.json +7 -6
@@ -0,0 +1,307 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import {
3
+ Check,
4
+ ChevronRight,
5
+ CircleX,
6
+ FilePen,
7
+ FilePlus,
8
+ FileText,
9
+ Globe,
10
+ Loader,
11
+ Search,
12
+ Terminal,
13
+ Wrench
14
+ } from "lucide-react";
15
+ import { useMemo, useState } from "react";
16
+ import { DiffStat, DiffView } from "./orchestrator-diff.js";
17
+ import { countDiff, lineDiff } from "./orchestrator-diff.helpers";
18
+ import { MarkdownText } from "./orchestrator-markdown.js";
19
+ import { ReasoningCell } from "./orchestrator-reasoning.js";
20
+ import { formatClockTime, formatDuration } from "./view-format.js";
21
+ const TOOL_ICON_BY_KIND = {
22
+ edit: FilePen,
23
+ read: FileText,
24
+ execute: Terminal,
25
+ search: Search,
26
+ fetch: Globe,
27
+ move: FilePen,
28
+ delete: FilePen,
29
+ think: Wrench
30
+ };
31
+ const TOOL_ICON_BY_TITLE = {
32
+ write: FilePlus,
33
+ edit: FilePen,
34
+ read: FileText,
35
+ bash: Terminal,
36
+ shell: Terminal,
37
+ grep: Search,
38
+ glob: Search,
39
+ list: Search,
40
+ webfetch: Globe,
41
+ fetch: Globe
42
+ };
43
+ function toolIcon(tool) {
44
+ return TOOL_ICON_BY_TITLE[tool.title.toLowerCase()] ?? TOOL_ICON_BY_KIND[tool.kind.toLowerCase()] ?? Wrench;
45
+ }
46
+ const VERB_BY_KIND = {
47
+ execute: ["Running", "Ran"],
48
+ read: ["Reading", "Read"],
49
+ edit: ["Editing", "Edited"],
50
+ search: ["Searching", "Searched"],
51
+ fetch: ["Fetching", "Searched web"],
52
+ move: ["Moving", "Moved"],
53
+ delete: ["Deleting", "Deleted"],
54
+ think: ["Thinking", "Thought"]
55
+ };
56
+ const VERB_BY_TITLE = {
57
+ write: ["Writing", "Wrote"],
58
+ edit: ["Editing", "Edited"],
59
+ read: ["Reading", "Read"],
60
+ bash: ["Running", "Ran"],
61
+ shell: ["Running", "Ran"],
62
+ grep: ["Searching", "Searched"],
63
+ glob: ["Searching", "Searched"],
64
+ list: ["Listing", "Listed"],
65
+ webfetch: ["Fetching", "Searched web"],
66
+ fetch: ["Fetching", "Searched web"]
67
+ };
68
+ function toolVerb(tool) {
69
+ const pair = VERB_BY_TITLE[tool.title.toLowerCase()] ?? VERB_BY_KIND[tool.kind.toLowerCase()];
70
+ if (!pair) return tool.title;
71
+ return tool.status === "running" ? pair[0] : pair[1];
72
+ }
73
+ function toolTarget(tool) {
74
+ if (tool.filePath) {
75
+ const parts = tool.filePath.split("/");
76
+ return parts[parts.length - 1] || tool.filePath;
77
+ }
78
+ if (tool.command) return tool.command;
79
+ if (tool.query) return tool.query;
80
+ return void 0;
81
+ }
82
+ const STATUS_BADGE = {
83
+ running: {
84
+ icon: Loader,
85
+ tone: "text-muted-strong",
86
+ label: "Running",
87
+ spin: true
88
+ },
89
+ done: { icon: Check, tone: "text-ok", label: "Done" },
90
+ failed: { icon: CircleX, tone: "text-red-500", label: "Failed" }
91
+ };
92
+ const MAX_BODY_CHARS = 4e3;
93
+ function clamp(text) {
94
+ if (text.length <= MAX_BODY_CHARS) return { body: text, truncated: false };
95
+ return { body: text.slice(0, MAX_BODY_CHARS), truncated: true };
96
+ }
97
+ function TruncatedNote() {
98
+ return /* @__PURE__ */ jsx("div", { className: "px-1 text-2xs text-muted/70", children: "\u2026 (truncated for display)" });
99
+ }
100
+ function clampOutput(text) {
101
+ if (text.length <= MAX_BODY_CHARS) return text;
102
+ const head = Math.ceil(MAX_BODY_CHARS * 0.6);
103
+ const tail = MAX_BODY_CHARS - head;
104
+ const elided = text.length - head - tail;
105
+ return `${text.slice(0, head).trimEnd()}
106
+
107
+ \u2026 ${elided.toLocaleString()} characters elided \u2026
108
+
109
+ ${text.slice(-tail).trimStart()}`;
110
+ }
111
+ function ToolBody({ tool }) {
112
+ const blocks = [];
113
+ if (tool.oldText !== void 0 && tool.newText !== void 0) {
114
+ const before = clamp(tool.oldText);
115
+ const after = clamp(tool.newText);
116
+ blocks.push(
117
+ /* @__PURE__ */ jsx(DiffView, { oldText: before.body, newText: after.body }, "diff")
118
+ );
119
+ if (before.truncated || after.truncated)
120
+ blocks.push(/* @__PURE__ */ jsx(TruncatedNote, {}, "diff-trunc"));
121
+ } else if (tool.newText !== void 0) {
122
+ const { body, truncated } = clamp(tool.newText);
123
+ blocks.push(/* @__PURE__ */ jsx(DiffView, { newText: body }, "content"));
124
+ if (truncated) blocks.push(/* @__PURE__ */ jsx(TruncatedNote, {}, "content-trunc"));
125
+ }
126
+ if (tool.output) {
127
+ blocks.push(
128
+ /* @__PURE__ */ jsx(
129
+ "pre",
130
+ {
131
+ className: "overflow-auto rounded-md border border-border/40 bg-bg/60 px-2.5 py-1.5 font-mono text-2xs leading-relaxed text-muted",
132
+ style: { maxHeight: "14rem" },
133
+ children: clampOutput(tool.output)
134
+ },
135
+ "out"
136
+ )
137
+ );
138
+ }
139
+ if (blocks.length === 0) return null;
140
+ return /* @__PURE__ */ jsx("div", { className: "mt-1.5 space-y-1.5", children: blocks });
141
+ }
142
+ function ToolCallCard({
143
+ tool,
144
+ onInspect
145
+ }) {
146
+ const Icon = toolIcon(tool);
147
+ const badge = STATUS_BADGE[tool.status];
148
+ const BadgeIcon = badge.icon;
149
+ const target = toolTarget(tool);
150
+ const hasBody = Boolean(tool.newText !== void 0 || tool.output);
151
+ const diffStat = useMemo(
152
+ () => tool.newText === void 0 ? null : countDiff(lineDiff(tool.oldText ?? "", tool.newText)),
153
+ [tool.oldText, tool.newText]
154
+ );
155
+ const meta = [];
156
+ if (typeof tool.exitCode === "number" && tool.exitCode !== 0)
157
+ meta.push(`exit ${tool.exitCode}`);
158
+ if (tool.durationMs !== void 0 && tool.durationMs >= 1e3)
159
+ meta.push(formatDuration(tool.durationMs));
160
+ const [open, setOpen] = useState(
161
+ () => hasBody && tool.kind !== "read" && tool.kind !== "search"
162
+ );
163
+ return /* @__PURE__ */ jsxs(
164
+ "div",
165
+ {
166
+ className: "rounded-md border border-border/50 bg-card/50",
167
+ "data-testid": "orchestrator-tool-call",
168
+ children: [
169
+ /* @__PURE__ */ jsxs(
170
+ "button",
171
+ {
172
+ type: "button",
173
+ disabled: !hasBody,
174
+ onClick: () => {
175
+ onInspect?.();
176
+ setOpen((value) => !value);
177
+ },
178
+ className: "flex w-full items-center gap-2 px-2.5 py-1.5 text-left disabled:cursor-default",
179
+ children: [
180
+ hasBody ? /* @__PURE__ */ jsx(
181
+ ChevronRight,
182
+ {
183
+ className: `h-3 w-3 shrink-0 text-muted transition-transform ${open ? "rotate-90" : ""}`
184
+ }
185
+ ) : /* @__PURE__ */ jsx("span", { className: "w-3 shrink-0" }),
186
+ /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 text-muted-strong" }),
187
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs font-semibold text-txt", children: toolVerb(tool) }),
188
+ target && target !== tool.title ? /* @__PURE__ */ jsx(
189
+ "span",
190
+ {
191
+ title: target,
192
+ className: "min-w-0 flex-1 truncate font-mono text-2xs text-muted",
193
+ children: target
194
+ }
195
+ ) : /* @__PURE__ */ jsx("span", { className: "flex-1" }),
196
+ diffStat && (diffStat.added > 0 || diffStat.removed > 0) ? /* @__PURE__ */ jsx(DiffStat, { added: diffStat.added, removed: diffStat.removed }) : null,
197
+ /* @__PURE__ */ jsxs(
198
+ "span",
199
+ {
200
+ className: `flex shrink-0 items-center gap-1 text-2xs ${badge.tone}`,
201
+ children: [
202
+ /* @__PURE__ */ jsx(
203
+ BadgeIcon,
204
+ {
205
+ className: `h-3 w-3 ${badge.spin ? "animate-spin" : ""}`
206
+ }
207
+ ),
208
+ badge.label
209
+ ]
210
+ }
211
+ ),
212
+ meta.length > 0 ? /* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono text-2xs tabular-nums text-muted/70", children: meta.join(" \xB7 ") }) : null
213
+ ]
214
+ }
215
+ ),
216
+ open ? /* @__PURE__ */ jsx("div", { className: "px-2.5 pb-2", children: /* @__PURE__ */ jsx(ToolBody, { tool }) }) : null
217
+ ]
218
+ }
219
+ );
220
+ }
221
+ function ConversationBlockView({
222
+ block,
223
+ locale,
224
+ onInspect
225
+ }) {
226
+ if (block.kind === "user") {
227
+ return /* @__PURE__ */ jsx(
228
+ "div",
229
+ {
230
+ className: "flex flex-col items-end",
231
+ "data-testid": "orchestrator-user-message",
232
+ children: /* @__PURE__ */ jsxs(
233
+ "div",
234
+ {
235
+ className: "rounded-lg border border-border/50 bg-surface px-3 py-2 text-xs text-txt",
236
+ style: { maxWidth: "80%" },
237
+ children: [
238
+ /* @__PURE__ */ jsx("div", { className: "whitespace-pre-wrap break-words leading-relaxed", children: block.content }),
239
+ /* @__PURE__ */ jsx("div", { className: "mt-1 text-3xs tabular-nums text-muted/70", children: formatClockTime(block.at, locale) })
240
+ ]
241
+ }
242
+ )
243
+ }
244
+ );
245
+ }
246
+ if (block.kind === "agent") {
247
+ return /* @__PURE__ */ jsxs(
248
+ "div",
249
+ {
250
+ className: "flex w-full flex-col items-start",
251
+ "data-testid": "orchestrator-agent-message",
252
+ children: [
253
+ /* @__PURE__ */ jsxs("div", { className: "mb-1 flex items-center gap-2 text-3xs text-muted", children: [
254
+ /* @__PURE__ */ jsx(
255
+ "span",
256
+ {
257
+ className: "inline-block h-1.5 w-1.5 rounded-full bg-muted-strong",
258
+ "aria-hidden": true
259
+ }
260
+ ),
261
+ /* @__PURE__ */ jsx("span", { className: "font-semibold tracking-tight text-txt/90", children: block.senderName }),
262
+ /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: formatClockTime(block.at, locale) })
263
+ ] }),
264
+ /* @__PURE__ */ jsx(
265
+ "div",
266
+ {
267
+ className: block.tone === "error" ? "w-full border-l-2 border-red-500/40 pl-2.5 text-red-500" : "w-full text-txt",
268
+ children: /* @__PURE__ */ jsx(MarkdownText, { text: block.content })
269
+ }
270
+ )
271
+ ]
272
+ }
273
+ );
274
+ }
275
+ if (block.kind === "tool") {
276
+ return /* @__PURE__ */ jsx(ToolCallCard, { tool: block.tool, onInspect });
277
+ }
278
+ if (block.kind === "reasoning") {
279
+ return /* @__PURE__ */ jsx(
280
+ ReasoningCell,
281
+ {
282
+ text: block.text,
283
+ durationMs: block.durationMs,
284
+ streaming: block.streaming
285
+ }
286
+ );
287
+ }
288
+ const Icon = block.icon;
289
+ return /* @__PURE__ */ jsxs(
290
+ "div",
291
+ {
292
+ className: "flex items-center gap-2 px-1 text-2xs text-muted",
293
+ "data-testid": "orchestrator-notice",
294
+ children: [
295
+ /* @__PURE__ */ jsx("span", { className: "h-px flex-1 bg-border/40" }),
296
+ /* @__PURE__ */ jsx(Icon, { className: `h-3 w-3 shrink-0 ${block.tone}` }),
297
+ /* @__PURE__ */ jsx("span", { className: `min-w-0 shrink truncate font-medium ${block.tone}`, children: block.text }),
298
+ /* @__PURE__ */ jsx("span", { className: "h-px flex-1 bg-border/40" })
299
+ ]
300
+ }
301
+ );
302
+ }
303
+ export {
304
+ ConversationBlockView,
305
+ ToolBody
306
+ };
307
+ //# sourceMappingURL=orchestrator-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/orchestrator-stream.tsx"],"sourcesContent":["import type {\n CodingAgentTaskEventRecord,\n CodingAgentTaskMessageRecord,\n} from \"@elizaos/ui\";\nimport {\n Check,\n ChevronRight,\n Circle,\n CircleAlert,\n CircleCheck,\n CircleStop,\n CircleX,\n FilePen,\n FilePlus,\n FileText,\n Globe,\n Loader,\n type LucideIcon,\n OctagonX,\n Search,\n Terminal,\n Wrench,\n} from \"lucide-react\";\nimport { type ReactNode, useMemo, useState } from \"react\";\nimport { DiffStat, DiffView } from \"./orchestrator-diff.js\";\nimport { countDiff, lineDiff } from \"./orchestrator-diff.helpers\";\nimport { MarkdownText } from \"./orchestrator-markdown.js\";\nimport { ReasoningCell } from \"./orchestrator-reasoning.js\";\nimport type {\n ConversationBlock,\n ToolStatus,\n ToolView,\n} from \"./orchestrator-stream.helpers\";\nimport { formatClockTime, formatDuration } from \"./view-format.js\";\n\nexport type {\n ConversationBlock,\n ToolView,\n} from \"./orchestrator-stream.helpers\";\n\n// The orchestrator room renders a coding-agent session the way Claude Code /\n// Codex do: a single flowing conversation of (1) the user's prompts, (2) the\n// agent's streamed prose, and (3) the tool calls it makes — each tool shown as\n// a structured card (file diff, shell command + output, search query) rather\n// than as raw stdout. The backend already captures all of this; the work here\n// is purely turning its records into that view.\n//\n// Two backend realities drive the transform in `buildConversation`:\n// • The agent's prose arrives as many tiny `agent_message_chunk` rows (one per\n// token-ish), so consecutive same-sender chunks are concatenated into one\n// turn instead of rendered as dozens of fragment bubbles.\n// • A single tool invocation emits several `tool_running` events (in_progress\n// → completed), so they are merged by session-scoped `toolCall.id` into one\n// card carrying the final status.\n\n// --- Conversation block views ----------------------------------------------\n\nconst TOOL_ICON_BY_KIND: Record<string, LucideIcon> = {\n edit: FilePen,\n read: FileText,\n execute: Terminal,\n search: Search,\n fetch: Globe,\n move: FilePen,\n delete: FilePen,\n think: Wrench,\n};\n\nconst TOOL_ICON_BY_TITLE: Record<string, LucideIcon> = {\n write: FilePlus,\n edit: FilePen,\n read: FileText,\n bash: Terminal,\n shell: Terminal,\n grep: Search,\n glob: Search,\n list: Search,\n webfetch: Globe,\n fetch: Globe,\n};\n\nfunction toolIcon(tool: ToolView): LucideIcon {\n return (\n TOOL_ICON_BY_TITLE[tool.title.toLowerCase()] ??\n TOOL_ICON_BY_KIND[tool.kind.toLowerCase()] ??\n Wrench\n );\n}\n\n// Codex labels a tool by the ACTION it took, not the raw tool name: \"Ran\",\n// \"Read\", \"Edited\", \"Searched\", not \"bash\"/\"grep\". Present tense while the call\n// is in flight, past tense once it has settled (the red badge carries failure,\n// so a failed run is still \"Ran\"). Tuple is [running, settled].\nconst VERB_BY_KIND: Record<string, readonly [string, string]> = {\n execute: [\"Running\", \"Ran\"],\n read: [\"Reading\", \"Read\"],\n edit: [\"Editing\", \"Edited\"],\n search: [\"Searching\", \"Searched\"],\n fetch: [\"Fetching\", \"Searched web\"],\n move: [\"Moving\", \"Moved\"],\n delete: [\"Deleting\", \"Deleted\"],\n think: [\"Thinking\", \"Thought\"],\n};\n\nconst VERB_BY_TITLE: Record<string, readonly [string, string]> = {\n write: [\"Writing\", \"Wrote\"],\n edit: [\"Editing\", \"Edited\"],\n read: [\"Reading\", \"Read\"],\n bash: [\"Running\", \"Ran\"],\n shell: [\"Running\", \"Ran\"],\n grep: [\"Searching\", \"Searched\"],\n glob: [\"Searching\", \"Searched\"],\n list: [\"Listing\", \"Listed\"],\n webfetch: [\"Fetching\", \"Searched web\"],\n fetch: [\"Fetching\", \"Searched web\"],\n};\n\n/** The action verb for a tool's header, status-aware. Falls back to the raw\n * tool name for kinds we don't have a verb for, so nothing renders blank. */\nfunction toolVerb(tool: ToolView): string {\n const pair =\n VERB_BY_TITLE[tool.title.toLowerCase()] ??\n VERB_BY_KIND[tool.kind.toLowerCase()];\n if (!pair) return tool.title;\n return tool.status === \"running\" ? pair[0] : pair[1];\n}\n\n/** The shortest meaningful one-liner about what a tool touched, shown in the\n * collapsed header (file name, command, or query). */\nfunction toolTarget(tool: ToolView): string | undefined {\n if (tool.filePath) {\n const parts = tool.filePath.split(\"/\");\n return parts[parts.length - 1] || tool.filePath;\n }\n if (tool.command) return tool.command;\n if (tool.query) return tool.query;\n return undefined;\n}\n\nconst STATUS_BADGE: Record<\n ToolStatus,\n { icon: LucideIcon; tone: string; label: string; spin?: boolean }\n> = {\n running: {\n icon: Loader,\n tone: \"text-muted-strong\",\n label: \"Running\",\n spin: true,\n },\n done: { icon: Check, tone: \"text-ok\", label: \"Done\" },\n failed: { icon: CircleX, tone: \"text-red-500\", label: \"Failed\" },\n};\n\nconst MAX_BODY_CHARS = 4000;\n\nfunction clamp(text: string): { body: string; truncated: boolean } {\n if (text.length <= MAX_BODY_CHARS) return { body: text, truncated: false };\n return { body: text.slice(0, MAX_BODY_CHARS), truncated: true };\n}\n\nfunction TruncatedNote(): ReactNode {\n return (\n <div className=\"px-1 text-2xs text-muted/70\">… (truncated for display)</div>\n );\n}\n\n/** Command output's meaningful result — the error, the exit summary, the last\n * failing line — usually lives at the END, so when it's too long keep BOTH\n * ends and elide the middle rather than dropping the tail (a head-only clamp\n * hides exactly the part you opened the card to read). Diffs keep the head-only\n * clamp above; a mid-string marker there would corrupt line alignment. */\nfunction clampOutput(text: string): string {\n if (text.length <= MAX_BODY_CHARS) return text;\n const head = Math.ceil(MAX_BODY_CHARS * 0.6);\n const tail = MAX_BODY_CHARS - head;\n const elided = text.length - head - tail;\n return `${text.slice(0, head).trimEnd()}\\n\\n… ${elided.toLocaleString()} characters elided …\\n\\n${text.slice(-tail).trimStart()}`;\n}\n\n/** The expandable body of a tool card: an interleaved diff for edits, the new\n * content for writes, the command + output for shells, and the raw output\n * otherwise. */\nexport function ToolBody({ tool }: { tool: ToolView }): ReactNode {\n const blocks: ReactNode[] = [];\n\n if (tool.oldText !== undefined && tool.newText !== undefined) {\n const before = clamp(tool.oldText);\n const after = clamp(tool.newText);\n blocks.push(\n <DiffView key=\"diff\" oldText={before.body} newText={after.body} />,\n );\n if (before.truncated || after.truncated)\n blocks.push(<TruncatedNote key=\"diff-trunc\" />);\n } else if (tool.newText !== undefined) {\n const { body, truncated } = clamp(tool.newText);\n blocks.push(<DiffView key=\"content\" newText={body} />);\n if (truncated) blocks.push(<TruncatedNote key=\"content-trunc\" />);\n }\n\n // The command itself is already shown (untruncated on hover) in the card\n // header, so the body carries only its output — no redundant `$` echo.\n if (tool.output) {\n blocks.push(\n <pre\n key=\"out\"\n className=\"overflow-auto rounded-md border border-border/40 bg-bg/60 px-2.5 py-1.5 font-mono text-2xs leading-relaxed text-muted\"\n style={{ maxHeight: \"14rem\" }}\n >\n {clampOutput(tool.output)}\n </pre>,\n );\n }\n\n if (blocks.length === 0) return null;\n return <div className=\"mt-1.5 space-y-1.5\">{blocks}</div>;\n}\n\nfunction ToolCallCard({\n tool,\n onInspect,\n}: {\n tool: ToolView;\n onInspect?: () => void;\n}): ReactNode {\n const Icon = toolIcon(tool);\n const badge = STATUS_BADGE[tool.status];\n const BadgeIcon = badge.icon;\n const target = toolTarget(tool);\n // The command lives in the header; only a diff/new content or captured\n // output makes the card expandable. A command that printed nothing is a\n // single tidy line — no chevron, no empty body.\n const hasBody = Boolean(tool.newText !== undefined || tool.output);\n // Edit/write magnitude shown on the collapsed header so the reader sees the\n // size of a change without expanding it.\n const diffStat = useMemo(\n () =>\n tool.newText === undefined\n ? null\n : countDiff(lineDiff(tool.oldText ?? \"\", tool.newText)),\n [tool.oldText, tool.newText],\n );\n // Codex-style result suffix: a non-zero exit code (red badge already conveys\n // failure) and the wall-clock duration, both dim/mono.\n const meta: string[] = [];\n if (typeof tool.exitCode === \"number\" && tool.exitCode !== 0)\n meta.push(`exit ${tool.exitCode}`);\n // Only surface a duration once it's meaningful. A non-streaming command\n // (e.g. `pip install --quiet`) emits its start and end events within the\n // same tick, so a sub-second event-span is a logging artifact, not a real\n // runtime — showing \"1ms\" for a multi-second install would be misleading.\n if (tool.durationMs !== undefined && tool.durationMs >= 1000)\n meta.push(formatDuration(tool.durationMs));\n // Open by default while the agent is mid-edit so the change is visible as it\n // streams; collapse finished read/search calls to keep the room scannable.\n const [open, setOpen] = useState(\n () => hasBody && tool.kind !== \"read\" && tool.kind !== \"search\",\n );\n return (\n <div\n className=\"rounded-md border border-border/50 bg-card/50\"\n data-testid=\"orchestrator-tool-call\"\n >\n <button\n type=\"button\"\n disabled={!hasBody}\n onClick={() => {\n onInspect?.();\n setOpen((value) => !value);\n }}\n className=\"flex w-full items-center gap-2 px-2.5 py-1.5 text-left disabled:cursor-default\"\n >\n {hasBody ? (\n <ChevronRight\n className={`h-3 w-3 shrink-0 text-muted transition-transform ${open ? \"rotate-90\" : \"\"}`}\n />\n ) : (\n <span className=\"w-3 shrink-0\" />\n )}\n <Icon className=\"h-3.5 w-3.5 shrink-0 text-muted-strong\" />\n <span className=\"shrink-0 text-xs font-semibold text-txt\">\n {toolVerb(tool)}\n </span>\n {target && target !== tool.title ? (\n <span\n title={target}\n className=\"min-w-0 flex-1 truncate font-mono text-2xs text-muted\"\n >\n {target}\n </span>\n ) : (\n <span className=\"flex-1\" />\n )}\n {diffStat && (diffStat.added > 0 || diffStat.removed > 0) ? (\n <DiffStat added={diffStat.added} removed={diffStat.removed} />\n ) : null}\n <span\n className={`flex shrink-0 items-center gap-1 text-2xs ${badge.tone}`}\n >\n <BadgeIcon\n className={`h-3 w-3 ${badge.spin ? \"animate-spin\" : \"\"}`}\n />\n {badge.label}\n </span>\n {meta.length > 0 ? (\n <span className=\"shrink-0 font-mono text-2xs tabular-nums text-muted/70\">\n {meta.join(\" · \")}\n </span>\n ) : null}\n </button>\n {open ? (\n <div className=\"px-2.5 pb-2\">{<ToolBody tool={tool} />}</div>\n ) : null}\n </div>\n );\n}\n\nexport function ConversationBlockView({\n block,\n locale,\n onInspect,\n}: {\n block: ConversationBlock;\n locale?: string;\n onInspect?: () => void;\n}): ReactNode {\n if (block.kind === \"user\") {\n return (\n <div\n className=\"flex flex-col items-end\"\n data-testid=\"orchestrator-user-message\"\n >\n <div\n className=\"rounded-lg border border-border/50 bg-surface px-3 py-2 text-xs text-txt\"\n style={{ maxWidth: \"80%\" }}\n >\n <div className=\"whitespace-pre-wrap break-words leading-relaxed\">\n {block.content}\n </div>\n <div className=\"mt-1 text-3xs tabular-nums text-muted/70\">\n {formatClockTime(block.at, locale)}\n </div>\n </div>\n </div>\n );\n }\n\n if (block.kind === \"agent\") {\n // Codex Desktop renders the assistant turn FLAT (full-width markdown, no\n // bubble) with a small identity marker — only the user's turn is bubbled.\n return (\n <div\n className=\"flex w-full flex-col items-start\"\n data-testid=\"orchestrator-agent-message\"\n >\n <div className=\"mb-1 flex items-center gap-2 text-3xs text-muted\">\n <span\n className=\"inline-block h-1.5 w-1.5 rounded-full bg-muted-strong\"\n aria-hidden\n />\n <span className=\"font-semibold tracking-tight text-txt/90\">\n {block.senderName}\n </span>\n <span className=\"tabular-nums\">\n {formatClockTime(block.at, locale)}\n </span>\n </div>\n <div\n className={\n block.tone === \"error\"\n ? \"w-full border-l-2 border-red-500/40 pl-2.5 text-red-500\"\n : \"w-full text-txt\"\n }\n >\n <MarkdownText text={block.content} />\n </div>\n </div>\n );\n }\n\n if (block.kind === \"tool\") {\n return <ToolCallCard tool={block.tool} onInspect={onInspect} />;\n }\n\n if (block.kind === \"reasoning\") {\n return (\n <ReasoningCell\n text={block.text}\n durationMs={block.durationMs}\n streaming={block.streaming}\n />\n );\n }\n\n const Icon = block.icon;\n return (\n <div\n className=\"flex items-center gap-2 px-1 text-2xs text-muted\"\n data-testid=\"orchestrator-notice\"\n >\n <span className=\"h-px flex-1 bg-border/40\" />\n <Icon className={`h-3 w-3 shrink-0 ${block.tone}`} />\n <span className={`min-w-0 shrink truncate font-medium ${block.tone}`}>\n {block.text}\n </span>\n <span className=\"h-px flex-1 bg-border/40\" />\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,2 @@
1
+ export { PULSE_STATUSES, STATUS_DOT } from "@elizaos/ui";
2
+ //# sourceMappingURL=pty-status-dots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-status-dots.d.ts","sourceRoot":"","sources":["../src/pty-status-dots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PULSE_STATUSES, STATUS_DOT } from "@elizaos/ui";
2
+ export {
3
+ PULSE_STATUSES,
4
+ STATUS_DOT
5
+ };
6
+ //# sourceMappingURL=pty-status-dots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pty-status-dots.ts"],"sourcesContent":["export { PULSE_STATUSES, STATUS_DOT } from \"@elizaos/ui\";\n"],"mappings":"AAAA,SAAS,gBAAgB,kBAAkB;","names":[]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Side-effect module that registers task-coordinator React components
3
+ * with app-core's slot registry at import time.
4
+ *
5
+ * The root app loads this module from its main entry so app-core's slot
6
+ * wrappers — CodingAgentSettingsSection,
7
+ * CodingAgentTasksPanel, CodingAgentControlChip — render the real
8
+ * components. Without this import they render as empty slot defaults.
9
+ *
10
+ * This keeps app-core → app-task-coordinator off the static import graph
11
+ * (app-core depends only on its own slot registry) while still letting
12
+ * task-coordinator depend on app-core for hooks, types, and the client.
13
+ */
14
+ import type { TaskCoordinatorCodingAgentControlChipProps, TaskCoordinatorCodingAgentSettingsSectionProps, TaskCoordinatorCodingAgentTasksPanelProps, TaskCoordinatorPtyConsoleBaseProps } from "@elizaos/ui/slots/task-coordinator-slots";
15
+ import { type ComponentType } from "react";
16
+ export declare const CodingAgentControlChip: ComponentType<TaskCoordinatorCodingAgentControlChipProps>;
17
+ export declare const CodingAgentSettingsSection: ComponentType<TaskCoordinatorCodingAgentSettingsSectionProps>;
18
+ export declare const CodingAgentTasksPanel: ComponentType<TaskCoordinatorCodingAgentTasksPanelProps>;
19
+ export declare const PtyConsoleBase: ComponentType<TaskCoordinatorPtyConsoleBaseProps>;
20
+ //# sourceMappingURL=register-slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-slots.d.ts","sourceRoot":"","sources":["../src/register-slots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,0CAA0C,EAC1C,8CAA8C,EAC9C,yCAAyC,EACzC,kCAAkC,EACnC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAef,eAAO,MAAM,sBAAsB,2DAKhC,CAAC;AACJ,eAAO,MAAM,0BAA0B,+DAKpC,CAAC;AACJ,eAAO,MAAM,qBAAqB,0DAK/B,CAAC;AACJ,eAAO,MAAM,cAAc,mDAI1B,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { registerTaskCoordinatorSlots, registerTaskWidget } from "@elizaos/ui";
2
+ import {
3
+ createElement,
4
+ lazy,
5
+ Suspense
6
+ } from "react";
7
+ function lazySlot(loader) {
8
+ const LazyComponent = lazy(loader);
9
+ return function LazyTaskCoordinatorSlot(props) {
10
+ return createElement(
11
+ Suspense,
12
+ { fallback: null },
13
+ createElement(LazyComponent, props)
14
+ );
15
+ };
16
+ }
17
+ const CodingAgentControlChip = lazySlot(
18
+ () => import("./CodingAgentControlChip.js").then((module) => ({
19
+ default: module.CodingAgentControlChip
20
+ }))
21
+ );
22
+ const CodingAgentSettingsSection = lazySlot(
23
+ () => import("./CodingAgentSettingsSection.js").then((module) => ({
24
+ default: module.CodingAgentSettingsSection
25
+ }))
26
+ );
27
+ const CodingAgentTasksPanel = lazySlot(
28
+ () => import("./CodingAgentTasksPanel.js").then((module) => ({
29
+ default: module.CodingAgentTasksPanel
30
+ }))
31
+ );
32
+ const PtyConsoleBase = lazySlot(
33
+ () => import("./PtyConsoleBase.js").then((module) => ({
34
+ default: module.PtyConsoleBase
35
+ }))
36
+ );
37
+ registerTaskCoordinatorSlots({
38
+ CodingAgentControlChip,
39
+ CodingAgentSettingsSection,
40
+ CodingAgentTasksPanel,
41
+ PtyConsoleBase
42
+ });
43
+ registerTaskWidget();
44
+ export {
45
+ CodingAgentControlChip,
46
+ CodingAgentSettingsSection,
47
+ CodingAgentTasksPanel,
48
+ PtyConsoleBase
49
+ };
50
+ //# sourceMappingURL=register-slots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/register-slots.ts"],"sourcesContent":["/**\n * Side-effect module that registers task-coordinator React components\n * with app-core's slot registry at import time.\n *\n * The root app loads this module from its main entry so app-core's slot\n * wrappers — CodingAgentSettingsSection,\n * CodingAgentTasksPanel, CodingAgentControlChip — render the real\n * components. Without this import they render as empty slot defaults.\n *\n * This keeps app-core → app-task-coordinator off the static import graph\n * (app-core depends only on its own slot registry) while still letting\n * task-coordinator depend on app-core for hooks, types, and the client.\n */\n\nimport { registerTaskCoordinatorSlots, registerTaskWidget } from \"@elizaos/ui\";\nimport type {\n TaskCoordinatorCodingAgentControlChipProps,\n TaskCoordinatorCodingAgentSettingsSectionProps,\n TaskCoordinatorCodingAgentTasksPanelProps,\n TaskCoordinatorPtyConsoleBaseProps,\n} from \"@elizaos/ui/slots/task-coordinator-slots\";\nimport {\n createElement,\n lazy,\n Suspense,\n type ComponentType,\n type LazyExoticComponent,\n} from \"react\";\n\nfunction lazySlot<P extends object>(\n loader: () => Promise<{ default: ComponentType<P> }>,\n): ComponentType<P> {\n const LazyComponent: LazyExoticComponent<ComponentType<P>> = lazy(loader);\n return function LazyTaskCoordinatorSlot(props: P) {\n return createElement(\n Suspense,\n { fallback: null },\n createElement(LazyComponent, props),\n );\n };\n}\n\nexport const CodingAgentControlChip =\n lazySlot<TaskCoordinatorCodingAgentControlChipProps>(() =>\n import(\"./CodingAgentControlChip.js\").then((module) => ({\n default: module.CodingAgentControlChip,\n })),\n );\nexport const CodingAgentSettingsSection =\n lazySlot<TaskCoordinatorCodingAgentSettingsSectionProps>(() =>\n import(\"./CodingAgentSettingsSection.js\").then((module) => ({\n default: module.CodingAgentSettingsSection,\n })),\n );\nexport const CodingAgentTasksPanel =\n lazySlot<TaskCoordinatorCodingAgentTasksPanelProps>(() =>\n import(\"./CodingAgentTasksPanel.js\").then((module) => ({\n default: module.CodingAgentTasksPanel,\n })),\n );\nexport const PtyConsoleBase = lazySlot<TaskCoordinatorPtyConsoleBaseProps>(() =>\n import(\"./PtyConsoleBase.js\").then((module) => ({\n default: module.PtyConsoleBase,\n })),\n);\n\nregisterTaskCoordinatorSlots({\n CodingAgentControlChip,\n CodingAgentSettingsSection,\n CodingAgentTasksPanel,\n PtyConsoleBase,\n});\n\n// The orchestrator owns the in-chat task widget: a reply's `[TASK:<id>]` marker\n// renders the live task card only when this plugin is loaded.\nregisterTaskWidget();\n"],"mappings":"AAcA,SAAS,8BAA8B,0BAA0B;AAOjE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAEP,SAAS,SACP,QACkB;AAClB,QAAM,gBAAuD,KAAK,MAAM;AACxE,SAAO,SAAS,wBAAwB,OAAU;AAChD,WAAO;AAAA,MACL;AAAA,MACA,EAAE,UAAU,KAAK;AAAA,MACjB,cAAc,eAAe,KAAK;AAAA,IACpC;AAAA,EACF;AACF;AAEO,MAAM,yBACX;AAAA,EAAqD,MACnD,OAAO,6BAA6B,EAAE,KAAK,CAAC,YAAY;AAAA,IACtD,SAAS,OAAO;AAAA,EAClB,EAAE;AACJ;AACK,MAAM,6BACX;AAAA,EAAyD,MACvD,OAAO,iCAAiC,EAAE,KAAK,CAAC,YAAY;AAAA,IAC1D,SAAS,OAAO;AAAA,EAClB,EAAE;AACJ;AACK,MAAM,wBACX;AAAA,EAAoD,MAClD,OAAO,4BAA4B,EAAE,KAAK,CAAC,YAAY;AAAA,IACrD,SAAS,OAAO;AAAA,EAClB,EAAE;AACJ;AACK,MAAM,iBAAiB;AAAA,EAA6C,MACzE,OAAO,qBAAqB,EAAE,KAAK,CAAC,YAAY;AAAA,IAC9C,SAAS,OAAO;AAAA,EAClB,EAAE;AACJ;AAEA,6BAA6B;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAID,mBAAmB;","names":[]}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Register the orchestrator view for terminal rendering.
3
+ *
4
+ * The agent terminal mounts plugin views by id from the `@elizaos/tui` terminal
5
+ * registry. This makes the orchestrator's `"tui"` modality render for real in
6
+ * the terminal (the unified {@link OrchestratorSpatialView}) rather than only
7
+ * navigating a GUI shell. A module-level snapshot lets a host push live
8
+ * orchestrator data; with no host the workbench renders an empty, statusless
9
+ * task list.
10
+ */
11
+ import { type OrchestratorSnapshot } from "./components/OrchestratorSpatialView.tsx";
12
+ import { type TaskCoordinatorSnapshot } from "./components/TaskCoordinatorSpatialView.tsx";
13
+ /** Update the snapshot the registered terminal view renders from. */
14
+ export declare function setOrchestratorTerminalSnapshot(next: OrchestratorSnapshot): void;
15
+ /** Register the orchestrator terminal view; returns an unregister function. */
16
+ export declare function registerOrchestratorTerminalView(): () => void;
17
+ /** Update the snapshot the registered task-coordinator terminal view renders. */
18
+ export declare function setTaskCoordinatorTerminalSnapshot(next: TaskCoordinatorSnapshot): void;
19
+ /** Register the task-coordinator terminal view; returns an unregister function. */
20
+ export declare function registerTaskCoordinatorTerminalView(): () => void;
21
+ //# sourceMappingURL=register-terminal-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-terminal-view.d.ts","sourceRoot":"","sources":["../src/register-terminal-view.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAEL,KAAK,uBAAuB,EAE7B,MAAM,6CAA6C,CAAC;AAYrD,qEAAqE;AACrE,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,oBAAoB,GACzB,IAAI,CAEN;AAED,+EAA+E;AAC/E,wBAAgB,gCAAgC,IAAI,MAAM,IAAI,CAI7D;AAKD,iFAAiF;AACjF,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,uBAAuB,GAC5B,IAAI,CAEN;AAED,mFAAmF;AACnF,wBAAgB,mCAAmC,IAAI,MAAM,IAAI,CAMhE"}
@@ -0,0 +1,46 @@
1
+ import { registerSpatialTerminalView } from "@elizaos/ui/spatial/tui";
2
+ import { createElement } from "react";
3
+ import {
4
+ OrchestratorSpatialView
5
+ } from "./components/OrchestratorSpatialView.js";
6
+ import {
7
+ EMPTY_TASK_COORDINATOR_SNAPSHOT,
8
+ TaskCoordinatorSpatialView
9
+ } from "./components/TaskCoordinatorSpatialView.js";
10
+ const EMPTY = {
11
+ status: null,
12
+ threads: [],
13
+ hasMore: false,
14
+ detail: null,
15
+ planSteps: [],
16
+ pendingInputs: []
17
+ };
18
+ let current = EMPTY;
19
+ function setOrchestratorTerminalSnapshot(next) {
20
+ current = next;
21
+ }
22
+ function registerOrchestratorTerminalView() {
23
+ return registerSpatialTerminalView(
24
+ "orchestrator",
25
+ () => createElement(OrchestratorSpatialView, { snapshot: current })
26
+ );
27
+ }
28
+ let currentTaskCoordinator = EMPTY_TASK_COORDINATOR_SNAPSHOT;
29
+ function setTaskCoordinatorTerminalSnapshot(next) {
30
+ currentTaskCoordinator = next;
31
+ }
32
+ function registerTaskCoordinatorTerminalView() {
33
+ return registerSpatialTerminalView(
34
+ "task-coordinator",
35
+ () => createElement(TaskCoordinatorSpatialView, {
36
+ snapshot: currentTaskCoordinator
37
+ })
38
+ );
39
+ }
40
+ export {
41
+ registerOrchestratorTerminalView,
42
+ registerTaskCoordinatorTerminalView,
43
+ setOrchestratorTerminalSnapshot,
44
+ setTaskCoordinatorTerminalSnapshot
45
+ };
46
+ //# sourceMappingURL=register-terminal-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/register-terminal-view.tsx"],"sourcesContent":["/**\n * Register the orchestrator view for terminal rendering.\n *\n * The agent terminal mounts plugin views by id from the `@elizaos/tui` terminal\n * registry. This makes the orchestrator's `\"tui\"` modality render for real in\n * the terminal (the unified {@link OrchestratorSpatialView}) rather than only\n * navigating a GUI shell. A module-level snapshot lets a host push live\n * orchestrator data; with no host the workbench renders an empty, statusless\n * task list.\n */\n\nimport { registerSpatialTerminalView } from \"@elizaos/ui/spatial/tui\";\nimport { createElement } from \"react\";\nimport {\n type OrchestratorSnapshot,\n OrchestratorSpatialView,\n} from \"./components/OrchestratorSpatialView.js\";\nimport {\n EMPTY_TASK_COORDINATOR_SNAPSHOT,\n type TaskCoordinatorSnapshot,\n TaskCoordinatorSpatialView,\n} from \"./components/TaskCoordinatorSpatialView.js\";\n\nconst EMPTY: OrchestratorSnapshot = {\n status: null,\n threads: [],\n hasMore: false,\n detail: null,\n planSteps: [],\n pendingInputs: [],\n};\nlet current: OrchestratorSnapshot = EMPTY;\n\n/** Update the snapshot the registered terminal view renders from. */\nexport function setOrchestratorTerminalSnapshot(\n next: OrchestratorSnapshot,\n): void {\n current = next;\n}\n\n/** Register the orchestrator terminal view; returns an unregister function. */\nexport function registerOrchestratorTerminalView(): () => void {\n return registerSpatialTerminalView(\"orchestrator\", () =>\n createElement(OrchestratorSpatialView, { snapshot: current }),\n );\n}\n\nlet currentTaskCoordinator: TaskCoordinatorSnapshot =\n EMPTY_TASK_COORDINATOR_SNAPSHOT;\n\n/** Update the snapshot the registered task-coordinator terminal view renders. */\nexport function setTaskCoordinatorTerminalSnapshot(\n next: TaskCoordinatorSnapshot,\n): void {\n currentTaskCoordinator = next;\n}\n\n/** Register the task-coordinator terminal view; returns an unregister function. */\nexport function registerTaskCoordinatorTerminalView(): () => void {\n return registerSpatialTerminalView(\"task-coordinator\", () =>\n createElement(TaskCoordinatorSpatialView, {\n snapshot: currentTaskCoordinator,\n }),\n );\n}\n"],"mappings":"AAWA,SAAS,mCAAmC;AAC5C,SAAS,qBAAqB;AAC9B;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AAEP,MAAM,QAA8B;AAAA,EAClC,QAAQ;AAAA,EACR,SAAS,CAAC;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW,CAAC;AAAA,EACZ,eAAe,CAAC;AAClB;AACA,IAAI,UAAgC;AAG7B,SAAS,gCACd,MACM;AACN,YAAU;AACZ;AAGO,SAAS,mCAA+C;AAC7D,SAAO;AAAA,IAA4B;AAAA,IAAgB,MACjD,cAAc,yBAAyB,EAAE,UAAU,QAAQ,CAAC;AAAA,EAC9D;AACF;AAEA,IAAI,yBACF;AAGK,SAAS,mCACd,MACM;AACN,2BAAyB;AAC3B;AAGO,SAAS,sCAAkD;AAChE,SAAO;AAAA,IAA4B;AAAA,IAAoB,MACrD,cAAc,4BAA4B;AAAA,MACxC,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -0,0 +1,2 @@
1
+ import "./register-slots.js";
2
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAEA,OAAO,qBAAqB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { registerAppShellPage } from "@elizaos/ui/app-shell-registry";
2
+ import "./register-slots.js";
3
+ registerAppShellPage({
4
+ id: "orchestrator",
5
+ pluginId: "@elizaos/plugin-task-coordinator",
6
+ label: "Orchestrator",
7
+ icon: "Layers",
8
+ path: "/orchestrator",
9
+ order: 70,
10
+ group: "developer",
11
+ fullBleed: true,
12
+ loader: () => import("./OrchestratorWorkbench.js").then((module) => ({
13
+ default: module.OrchestratorWorkbench
14
+ }))
15
+ });
16
+ if (typeof window === "undefined") {
17
+ void import("./register-terminal-view.js").then((m) => {
18
+ m.registerOrchestratorTerminalView();
19
+ m.registerTaskCoordinatorTerminalView();
20
+ }).catch(() => {
21
+ });
22
+ }
23
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/register.ts"],"sourcesContent":["import { registerAppShellPage } from \"@elizaos/ui/app-shell-registry\";\n\nimport \"./register-slots.js\";\n\nregisterAppShellPage({\n id: \"orchestrator\",\n pluginId: \"@elizaos/plugin-task-coordinator\",\n label: \"Orchestrator\",\n icon: \"Layers\",\n path: \"/orchestrator\",\n order: 70,\n group: \"developer\",\n fullBleed: true,\n loader: () =>\n import(\"./OrchestratorWorkbench.js\").then((module) => ({\n default: module.OrchestratorWorkbench,\n })),\n});\n\n// In a terminal host (the Node agent, no DOM), register the unified\n// orchestrator + task-coordinator views so they render inline in the terminal.\n// Lazy + DOM-guarded so the terminal engine stays out of browser/mobile bundles.\nif (typeof window === \"undefined\") {\n void import(\"./register-terminal-view.js\")\n .then((m) => {\n m.registerOrchestratorTerminalView();\n m.registerTaskCoordinatorTerminalView();\n })\n .catch(() => {\n // Terminal rendering is best-effort; never block plugin load.\n });\n}\n"],"mappings":"AAAA,SAAS,4BAA4B;AAErC,OAAO;AAEP,qBAAqB;AAAA,EACnB,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ,MACN,OAAO,4BAA4B,EAAE,KAAK,CAAC,YAAY;AAAA,IACrD,SAAS,OAAO;AAAA,EAClB,EAAE;AACN,CAAC;AAKD,IAAI,OAAO,WAAW,aAAa;AACjC,OAAK,OAAO,6BAA6B,EACtC,KAAK,CAAC,MAAM;AACX,MAAE,iCAAiC;AACnC,MAAE,oCAAoC;AAAA,EACxC,CAAC,EACA,MAAM,MAAM;AAAA,EAEb,CAAC;AACL;","names":[]}
@@ -0,0 +1,2 @@
1
+ export { mapServerTasksToSessions, type ServerTask, TERMINAL_STATUSES, } from "@elizaos/ui";
2
+ //# sourceMappingURL=session-hydration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-hydration.d.ts","sourceRoot":"","sources":["../src/session-hydration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,KAAK,UAAU,EACf,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import {
2
+ mapServerTasksToSessions,
3
+ TERMINAL_STATUSES
4
+ } from "@elizaos/ui";
5
+ export {
6
+ TERMINAL_STATUSES,
7
+ mapServerTasksToSessions
8
+ };
9
+ //# sourceMappingURL=session-hydration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/session-hydration.ts"],"sourcesContent":["export {\n mapServerTasksToSessions,\n type ServerTask,\n TERMINAL_STATUSES,\n} from \"@elizaos/ui\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAEA;AAAA,OACK;","names":[]}
@@ -0,0 +1,4 @@
1
+ export { interact } from "./CodingAgentTasksPanel.interact";
2
+ export { OrchestratorView } from "./OrchestratorView";
3
+ export { TaskCoordinatorView } from "./TaskCoordinatorView";
4
+ //# sourceMappingURL=task-coordinator-view-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-coordinator-view-bundle.d.ts","sourceRoot":"","sources":["../src/task-coordinator-view-bundle.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { interact } from "./CodingAgentTasksPanel.interact";
2
+ import { OrchestratorView } from "./OrchestratorView.js";
3
+ import { TaskCoordinatorView } from "./TaskCoordinatorView.js";
4
+ export {
5
+ OrchestratorView,
6
+ TaskCoordinatorView,
7
+ interact
8
+ };
9
+ //# sourceMappingURL=task-coordinator-view-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/task-coordinator-view-bundle.ts"],"sourcesContent":["// Vite view-bundle entry. Re-exports the unified tri-modal view wrappers the\n// manifest declares (`TaskCoordinatorView`, `OrchestratorView`) plus the shared\n// `interact` capability handler, so the built bundle (dist/views/bundle.js)\n// exposes the named exports the view loader reads. Kept separate from the view\n// component files so they export only React components and stay\n// Fast-Refresh-compatible.\n//\n// The legacy GUI surfaces (`CodingAgentTasksPanel`, `OrchestratorWorkbench`)\n// reach their mounts through other paths — the app-core slot registry\n// (register-slots.ts) and the app-shell page registry (register.ts) — not this\n// bundle, so they are intentionally absent here.\nexport { interact } from \"./CodingAgentTasksPanel.interact\";\nexport { OrchestratorView } from \"./OrchestratorView.js\";\nexport { TaskCoordinatorView } from \"./TaskCoordinatorView.js\";\n"],"mappings":"AAWA,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AACjC,SAAS,2BAA2B;","names":[]}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { CodingAgentControlChip, CodingAgentSettingsSection, CodingAgentTasksPanel, PtyConsoleBase, } from "./register-slots.js";
2
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,cAAc,GACf,MAAM,qBAAqB,CAAC"}