opencode-subagents-sidebar-plugin 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -12
- package/dist/activity.d.ts +4 -0
- package/dist/activity.d.ts.map +1 -1
- package/dist/activity.js +39 -0
- package/dist/activity.js.map +1 -1
- package/dist/tasks.d.ts +0 -2
- package/dist/tasks.d.ts.map +1 -1
- package/dist/tasks.js +0 -11
- package/dist/tasks.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +313 -268
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
package/dist/tui.js
CHANGED
|
@@ -10,9 +10,9 @@ import { createElement as _$createElement } from "@opentui/solid";
|
|
|
10
10
|
/** @jsxImportSource @opentui/solid */
|
|
11
11
|
|
|
12
12
|
import { Portal, useTerminalDimensions } from "@opentui/solid";
|
|
13
|
-
import { elapsedLabel } from "./activity.js";
|
|
13
|
+
import { elapsedLabel, latestAssistantActivity } from "./activity.js";
|
|
14
14
|
import { placePopover } from "./popover.js";
|
|
15
|
-
import { canOpenTaskSession, isTaskPart, isVisibleTask,
|
|
15
|
+
import { canOpenTaskSession, isTaskPart, isVisibleTask, resolveTaskModel, taskAgent, taskDescription, taskModeLabel, taskModelLabel, taskSessionID, taskStatusLabel, taskVariantLabel } from "./tasks.js";
|
|
16
16
|
import { createEffect, createMemo, createSignal, For, on, onCleanup, onMount, Show } from "solid-js";
|
|
17
17
|
const POPOVER_SIZE = {
|
|
18
18
|
width: 52,
|
|
@@ -33,7 +33,6 @@ function TaskPopover(props) {
|
|
|
33
33
|
const callID = () => props.ownership().callID;
|
|
34
34
|
let portalWrapper;
|
|
35
35
|
let hydrationRequest = 0;
|
|
36
|
-
let requestedHydration;
|
|
37
36
|
const fallback = () => {
|
|
38
37
|
const known = props.fallbackFor(callID());
|
|
39
38
|
if (known) return known;
|
|
@@ -66,17 +65,14 @@ function TaskPopover(props) {
|
|
|
66
65
|
if (!sessionID) return undefined;
|
|
67
66
|
const messages = props.api.state.session.messages(sessionID);
|
|
68
67
|
const parts = new Map();
|
|
69
|
-
let hasParts = false;
|
|
70
68
|
for (const message of messages) {
|
|
71
69
|
const messageParts = props.api.state.part(message.id);
|
|
72
70
|
parts.set(message.id, messageParts);
|
|
73
|
-
if (messageParts.length) hasParts = true;
|
|
74
71
|
}
|
|
75
72
|
return {
|
|
76
73
|
sessionID,
|
|
77
74
|
messages,
|
|
78
|
-
parts
|
|
79
|
-
hasParts
|
|
75
|
+
parts
|
|
80
76
|
};
|
|
81
77
|
});
|
|
82
78
|
const ownsHydration = (token, sessionID, request) => {
|
|
@@ -92,34 +88,24 @@ function TaskPopover(props) {
|
|
|
92
88
|
throwOnError: true
|
|
93
89
|
});
|
|
94
90
|
if (!ownsHydration(token, sessionID, request)) return;
|
|
95
|
-
if (liveChildMessages()?.hasParts) return;
|
|
96
91
|
setHydratedChildMessages({
|
|
97
92
|
token,
|
|
98
93
|
sessionID,
|
|
99
94
|
messages: result.data
|
|
100
95
|
});
|
|
101
|
-
} catch {
|
|
102
|
-
if (ownsHydration(token, sessionID, request)) requestedHydration = undefined;
|
|
103
|
-
}
|
|
96
|
+
} catch {}
|
|
104
97
|
};
|
|
105
98
|
createEffect(() => {
|
|
99
|
+
props.revision();
|
|
100
|
+
props.now();
|
|
106
101
|
const ownership = props.ownership();
|
|
107
102
|
const sessionID = childSessionID();
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
requestedHydration = undefined;
|
|
112
|
-
hydrationRequest += 1;
|
|
113
|
-
}
|
|
103
|
+
if (!sessionID) {
|
|
104
|
+
hydrationRequest += 1;
|
|
105
|
+
setHydratedChildMessages(undefined);
|
|
114
106
|
return;
|
|
115
107
|
}
|
|
116
|
-
if (requestedHydration?.token === ownership.token && requestedHydration.sessionID === sessionID) return;
|
|
117
108
|
const request = ++hydrationRequest;
|
|
118
|
-
requestedHydration = {
|
|
119
|
-
token: ownership.token,
|
|
120
|
-
sessionID
|
|
121
|
-
};
|
|
122
|
-
setHydratedChildMessages(undefined);
|
|
123
109
|
void hydrateChildMessages(ownership.token, sessionID, request);
|
|
124
110
|
});
|
|
125
111
|
const latestResponse = createMemo(() => {
|
|
@@ -127,14 +113,17 @@ function TaskPopover(props) {
|
|
|
127
113
|
const sessionID = childSessionID();
|
|
128
114
|
if (!sessionID) return undefined;
|
|
129
115
|
const live = liveChildMessages();
|
|
130
|
-
|
|
116
|
+
const liveActivity = live ? latestAssistantActivity(live.messages, messageID => live.parts.get(messageID) ?? []) : undefined;
|
|
117
|
+
if (liveActivity) return liveActivity;
|
|
131
118
|
const hydrated = hydratedChildMessages();
|
|
132
119
|
if (!hydrated || hydrated.token !== ownership.token || hydrated.sessionID !== sessionID) return undefined;
|
|
133
120
|
const parts = new Map(hydrated.messages.map(message => [message.info.id, message.parts]));
|
|
134
|
-
return
|
|
121
|
+
return latestAssistantActivity(hydrated.messages.map(message => message.info), messageID => parts.get(messageID) ?? []);
|
|
135
122
|
});
|
|
136
|
-
const responseLabel = () => latestResponse() ?? (childSessionID() ? "Waiting for
|
|
137
|
-
const
|
|
123
|
+
const responseLabel = () => latestResponse() ?? (childSessionID() ? "Waiting for subagent activity" : "Waiting for child session");
|
|
124
|
+
const stopInside = event => event.stopPropagation();
|
|
125
|
+
const openSession = event => {
|
|
126
|
+
event.stopPropagation();
|
|
138
127
|
const sessionID = childSessionID();
|
|
139
128
|
if (!canOpen() || !sessionID) return;
|
|
140
129
|
props.api.route.navigate("session", {
|
|
@@ -142,21 +131,24 @@ function TaskPopover(props) {
|
|
|
142
131
|
});
|
|
143
132
|
props.close();
|
|
144
133
|
};
|
|
145
|
-
const
|
|
134
|
+
const closePopover = event => {
|
|
135
|
+
event.stopPropagation();
|
|
136
|
+
props.close();
|
|
137
|
+
};
|
|
138
|
+
const applyPortalOverlay = (next = viewport()) => {
|
|
146
139
|
const wrapper = portalWrapper;
|
|
147
140
|
if (!wrapper || wrapper.isDestroyed) return;
|
|
148
141
|
wrapper.position = "absolute";
|
|
149
|
-
wrapper.left =
|
|
150
|
-
wrapper.top =
|
|
142
|
+
wrapper.left = 0;
|
|
143
|
+
wrapper.top = 0;
|
|
151
144
|
wrapper.width = next.width;
|
|
152
145
|
wrapper.height = next.height;
|
|
153
146
|
wrapper.zIndex = POPOVER_Z_INDEX;
|
|
154
147
|
wrapper.focusable = false;
|
|
155
148
|
};
|
|
156
|
-
createEffect(() =>
|
|
149
|
+
createEffect(() => applyPortalOverlay(viewport()));
|
|
157
150
|
onCleanup(() => {
|
|
158
151
|
hydrationRequest += 1;
|
|
159
|
-
requestedHydration = undefined;
|
|
160
152
|
portalWrapper = undefined;
|
|
161
153
|
});
|
|
162
154
|
return _$createComponent(Portal, {
|
|
@@ -165,124 +157,138 @@ function TaskPopover(props) {
|
|
|
165
157
|
},
|
|
166
158
|
ref: element => {
|
|
167
159
|
portalWrapper = element;
|
|
168
|
-
|
|
160
|
+
applyPortalOverlay();
|
|
169
161
|
},
|
|
170
162
|
get children() {
|
|
171
163
|
var _el$ = _$createElement("box"),
|
|
172
|
-
_el$2 = _$createElement("
|
|
173
|
-
_el$3 = _$createElement("
|
|
174
|
-
_el$
|
|
175
|
-
_el$6 = _$
|
|
176
|
-
_el$7 = _$
|
|
177
|
-
_el$8 = _$
|
|
178
|
-
_el$9 = _$
|
|
179
|
-
_el$0 = _$
|
|
180
|
-
_el$1 = _$
|
|
181
|
-
_el$10 = _$
|
|
182
|
-
_el$11 = _$
|
|
183
|
-
_el$12 = _$
|
|
184
|
-
_el$13 = _$createTextNode(`
|
|
185
|
-
_el$14 = _$
|
|
186
|
-
_el$15 = _$
|
|
187
|
-
_el$16 = _$
|
|
188
|
-
_el$17 = _$
|
|
189
|
-
_el$18 = _$
|
|
164
|
+
_el$2 = _$createElement("box"),
|
|
165
|
+
_el$3 = _$createElement("text"),
|
|
166
|
+
_el$4 = _$createElement("b"),
|
|
167
|
+
_el$6 = _$createElement("text"),
|
|
168
|
+
_el$7 = _$createTextNode(`Agent: `),
|
|
169
|
+
_el$8 = _$createElement("text"),
|
|
170
|
+
_el$9 = _$createTextNode(`Assigned: `),
|
|
171
|
+
_el$0 = _$createElement("text"),
|
|
172
|
+
_el$1 = _$createTextNode(`Current: `),
|
|
173
|
+
_el$10 = _$createElement("text"),
|
|
174
|
+
_el$11 = _$createTextNode(`Status: `),
|
|
175
|
+
_el$12 = _$createElement("text"),
|
|
176
|
+
_el$13 = _$createTextNode(`Model: `),
|
|
177
|
+
_el$14 = _$createTextNode(` · `),
|
|
178
|
+
_el$15 = _$createElement("text"),
|
|
179
|
+
_el$16 = _$createTextNode(` · `),
|
|
180
|
+
_el$17 = _$createElement("text"),
|
|
181
|
+
_el$18 = _$createTextNode(`Child: `),
|
|
190
182
|
_el$19 = _$createElement("box"),
|
|
191
|
-
_el$20 = _$createElement("
|
|
192
|
-
_el$21 = _$createElement("
|
|
193
|
-
_el$
|
|
194
|
-
_el$24 = _$createElement("
|
|
195
|
-
_el$25 = _$createElement("
|
|
183
|
+
_el$20 = _$createElement("box"),
|
|
184
|
+
_el$21 = _$createElement("text"),
|
|
185
|
+
_el$22 = _$createElement("b"),
|
|
186
|
+
_el$24 = _$createElement("box"),
|
|
187
|
+
_el$25 = _$createElement("text"),
|
|
188
|
+
_el$26 = _$createElement("b");
|
|
196
189
|
_$insertNode(_el$, _el$2);
|
|
197
|
-
_$insertNode(_el$, _el$5);
|
|
198
|
-
_$insertNode(_el$, _el$7);
|
|
199
|
-
_$insertNode(_el$, _el$9);
|
|
200
|
-
_$insertNode(_el$, _el$1);
|
|
201
|
-
_$insertNode(_el$, _el$11);
|
|
202
|
-
_$insertNode(_el$, _el$14);
|
|
203
|
-
_$insertNode(_el$, _el$16);
|
|
204
|
-
_$insertNode(_el$, _el$18);
|
|
205
190
|
_$setProp(_el$, "width", "100%");
|
|
206
191
|
_$setProp(_el$, "height", "100%");
|
|
207
192
|
_$setProp(_el$, "focusable", false);
|
|
208
|
-
_$setProp(_el$, "live", true);
|
|
209
|
-
_$setProp(_el$, "border", true);
|
|
210
|
-
_$setProp(_el$, "padding", 1);
|
|
211
|
-
_$setProp(_el$, "flexDirection", "column");
|
|
212
|
-
_$setProp(_el$, "overflow", "hidden");
|
|
213
193
|
_$insertNode(_el$2, _el$3);
|
|
214
|
-
_$
|
|
215
|
-
_$
|
|
216
|
-
_$insertNode(_el$
|
|
217
|
-
_$insertNode(_el$
|
|
218
|
-
_$
|
|
219
|
-
_$
|
|
220
|
-
_$
|
|
221
|
-
_$insertNode(_el$
|
|
222
|
-
_$setProp(_el$
|
|
223
|
-
_$setProp(_el$
|
|
224
|
-
_$
|
|
225
|
-
_$
|
|
226
|
-
_$setProp(_el$
|
|
227
|
-
_$setProp(_el$
|
|
228
|
-
_$
|
|
229
|
-
_$
|
|
230
|
-
_$
|
|
231
|
-
_$setProp(_el$
|
|
232
|
-
_$
|
|
233
|
-
_$insertNode(_el$
|
|
234
|
-
_$insertNode(_el$
|
|
235
|
-
_$setProp(_el$
|
|
236
|
-
_$setProp(_el$
|
|
237
|
-
_$insert(_el$
|
|
238
|
-
_$
|
|
239
|
-
_$
|
|
240
|
-
_$setProp(_el$
|
|
241
|
-
_$
|
|
242
|
-
_$
|
|
243
|
-
_$
|
|
244
|
-
_$
|
|
245
|
-
_$
|
|
246
|
-
_$
|
|
247
|
-
_$
|
|
248
|
-
_$
|
|
249
|
-
_$
|
|
250
|
-
_$
|
|
251
|
-
_$
|
|
194
|
+
_$insertNode(_el$2, _el$6);
|
|
195
|
+
_$insertNode(_el$2, _el$8);
|
|
196
|
+
_$insertNode(_el$2, _el$0);
|
|
197
|
+
_$insertNode(_el$2, _el$10);
|
|
198
|
+
_$insertNode(_el$2, _el$12);
|
|
199
|
+
_$insertNode(_el$2, _el$15);
|
|
200
|
+
_$insertNode(_el$2, _el$17);
|
|
201
|
+
_$insertNode(_el$2, _el$19);
|
|
202
|
+
_$setProp(_el$2, "position", "absolute");
|
|
203
|
+
_$setProp(_el$2, "focusable", false);
|
|
204
|
+
_$setProp(_el$2, "live", true);
|
|
205
|
+
_$setProp(_el$2, "border", true);
|
|
206
|
+
_$setProp(_el$2, "padding", 1);
|
|
207
|
+
_$setProp(_el$2, "flexDirection", "column");
|
|
208
|
+
_$setProp(_el$2, "overflow", "hidden");
|
|
209
|
+
_$setProp(_el$2, "onMouseUp", stopInside);
|
|
210
|
+
_$insertNode(_el$3, _el$4);
|
|
211
|
+
_$setProp(_el$3, "wrapMode", "none");
|
|
212
|
+
_$setProp(_el$3, "truncate", true);
|
|
213
|
+
_$insertNode(_el$4, _$createTextNode(`Subagent details`));
|
|
214
|
+
_$insertNode(_el$6, _el$7);
|
|
215
|
+
_$setProp(_el$6, "wrapMode", "none");
|
|
216
|
+
_$setProp(_el$6, "truncate", true);
|
|
217
|
+
_$insert(_el$6, () => taskAgent(part() ?? fallback().part), null);
|
|
218
|
+
_$insertNode(_el$8, _el$9);
|
|
219
|
+
_$setProp(_el$8, "wrapMode", "none");
|
|
220
|
+
_$setProp(_el$8, "truncate", true);
|
|
221
|
+
_$insert(_el$8, () => taskDescription(part() ?? fallback().part), null);
|
|
222
|
+
_$insertNode(_el$0, _el$1);
|
|
223
|
+
_$setProp(_el$0, "wrapMode", "none");
|
|
224
|
+
_$setProp(_el$0, "truncate", true);
|
|
225
|
+
_$insert(_el$0, responseLabel, null);
|
|
226
|
+
_$insertNode(_el$10, _el$11);
|
|
227
|
+
_$setProp(_el$10, "wrapMode", "none");
|
|
228
|
+
_$setProp(_el$10, "truncate", true);
|
|
229
|
+
_$insert(_el$10, () => taskStatusLabel(part() ?? fallback().part, childSessionID() ? props.api.state.session.status(childSessionID()) : undefined), null);
|
|
230
|
+
_$insertNode(_el$12, _el$13);
|
|
231
|
+
_$insertNode(_el$12, _el$14);
|
|
232
|
+
_$setProp(_el$12, "wrapMode", "none");
|
|
233
|
+
_$setProp(_el$12, "truncate", true);
|
|
234
|
+
_$insert(_el$12, () => modelName(props.api, model()), _el$14);
|
|
235
|
+
_$insert(_el$12, () => taskVariantLabel(model()) ?? "pending", null);
|
|
236
|
+
_$insertNode(_el$15, _el$16);
|
|
237
|
+
_$setProp(_el$15, "wrapMode", "none");
|
|
238
|
+
_$setProp(_el$15, "truncate", true);
|
|
239
|
+
_$insert(_el$15, () => taskModeLabel(part() ?? fallback().part), _el$16);
|
|
240
|
+
_$insert(_el$15, () => elapsedLabel(props.now() - props.startedAt(part() ?? fallback().part)), null);
|
|
241
|
+
_$insertNode(_el$17, _el$18);
|
|
242
|
+
_$setProp(_el$17, "wrapMode", "none");
|
|
243
|
+
_$setProp(_el$17, "truncate", true);
|
|
244
|
+
_$insert(_el$17, () => childSessionID() ?? "Waiting for child session", null);
|
|
252
245
|
_$insertNode(_el$19, _el$20);
|
|
253
|
-
_$
|
|
246
|
+
_$insertNode(_el$19, _el$24);
|
|
247
|
+
_$setProp(_el$19, "flexDirection", "row");
|
|
248
|
+
_$setProp(_el$19, "gap", 2);
|
|
254
249
|
_$insertNode(_el$20, _el$21);
|
|
255
|
-
_$
|
|
256
|
-
_$insertNode(_el$
|
|
250
|
+
_$setProp(_el$20, "onMouseUp", openSession);
|
|
251
|
+
_$insertNode(_el$21, _el$22);
|
|
252
|
+
_$insertNode(_el$22, _$createTextNode(`Open Session`));
|
|
257
253
|
_$insertNode(_el$24, _el$25);
|
|
258
|
-
_$
|
|
254
|
+
_$setProp(_el$24, "onMouseUp", closePopover);
|
|
255
|
+
_$insertNode(_el$25, _el$26);
|
|
256
|
+
_$insertNode(_el$26, _$createTextNode(`Close`));
|
|
259
257
|
_$effect(_p$ => {
|
|
260
|
-
var _v$ = props.
|
|
261
|
-
_v$2 =
|
|
262
|
-
_v$3 =
|
|
263
|
-
_v$4 =
|
|
264
|
-
_v$5 =
|
|
265
|
-
_v$6 = props.api.theme.current.
|
|
266
|
-
_v$7 = props.api.theme.current.
|
|
267
|
-
_v$8 = props.api.theme.current.
|
|
268
|
-
_v$9 = props.api.theme.current.
|
|
258
|
+
var _v$ = props.close,
|
|
259
|
+
_v$2 = placement().left,
|
|
260
|
+
_v$3 = placement().top,
|
|
261
|
+
_v$4 = placement().width,
|
|
262
|
+
_v$5 = placement().height,
|
|
263
|
+
_v$6 = props.api.theme.current.borderActive,
|
|
264
|
+
_v$7 = props.api.theme.current.backgroundPanel,
|
|
265
|
+
_v$8 = props.api.theme.current.text,
|
|
266
|
+
_v$9 = props.api.theme.current.text,
|
|
269
267
|
_v$0 = props.api.theme.current.textMuted,
|
|
270
|
-
_v$1 =
|
|
271
|
-
_v$10 = props.
|
|
272
|
-
_v$11 = props.api.theme.current.
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
_v$
|
|
278
|
-
_v$
|
|
279
|
-
_v$
|
|
280
|
-
_v$
|
|
281
|
-
_v$
|
|
282
|
-
_v$
|
|
283
|
-
_v$
|
|
284
|
-
_v$
|
|
285
|
-
_v$
|
|
268
|
+
_v$1 = props.api.theme.current.textMuted,
|
|
269
|
+
_v$10 = props.api.theme.current.textMuted,
|
|
270
|
+
_v$11 = props.api.theme.current.textMuted,
|
|
271
|
+
_v$12 = props.api.theme.current.textMuted,
|
|
272
|
+
_v$13 = props.api.theme.current.textMuted,
|
|
273
|
+
_v$14 = canOpen() ? props.api.theme.current.primary : props.api.theme.current.textMuted,
|
|
274
|
+
_v$15 = props.api.theme.current.primary;
|
|
275
|
+
_v$ !== _p$.e && (_p$.e = _$setProp(_el$, "onMouseUp", _v$, _p$.e));
|
|
276
|
+
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, "left", _v$2, _p$.t));
|
|
277
|
+
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$2, "top", _v$3, _p$.a));
|
|
278
|
+
_v$4 !== _p$.o && (_p$.o = _$setProp(_el$2, "width", _v$4, _p$.o));
|
|
279
|
+
_v$5 !== _p$.i && (_p$.i = _$setProp(_el$2, "height", _v$5, _p$.i));
|
|
280
|
+
_v$6 !== _p$.n && (_p$.n = _$setProp(_el$2, "borderColor", _v$6, _p$.n));
|
|
281
|
+
_v$7 !== _p$.s && (_p$.s = _$setProp(_el$2, "backgroundColor", _v$7, _p$.s));
|
|
282
|
+
_v$8 !== _p$.h && (_p$.h = _$setProp(_el$3, "fg", _v$8, _p$.h));
|
|
283
|
+
_v$9 !== _p$.r && (_p$.r = _$setProp(_el$6, "fg", _v$9, _p$.r));
|
|
284
|
+
_v$0 !== _p$.d && (_p$.d = _$setProp(_el$8, "fg", _v$0, _p$.d));
|
|
285
|
+
_v$1 !== _p$.l && (_p$.l = _$setProp(_el$0, "fg", _v$1, _p$.l));
|
|
286
|
+
_v$10 !== _p$.u && (_p$.u = _$setProp(_el$10, "fg", _v$10, _p$.u));
|
|
287
|
+
_v$11 !== _p$.c && (_p$.c = _$setProp(_el$12, "fg", _v$11, _p$.c));
|
|
288
|
+
_v$12 !== _p$.w && (_p$.w = _$setProp(_el$15, "fg", _v$12, _p$.w));
|
|
289
|
+
_v$13 !== _p$.m && (_p$.m = _$setProp(_el$17, "fg", _v$13, _p$.m));
|
|
290
|
+
_v$14 !== _p$.f && (_p$.f = _$setProp(_el$21, "fg", _v$14, _p$.f));
|
|
291
|
+
_v$15 !== _p$.y && (_p$.y = _$setProp(_el$25, "fg", _v$15, _p$.y));
|
|
286
292
|
return _p$;
|
|
287
293
|
}, {
|
|
288
294
|
e: undefined,
|
|
@@ -297,12 +303,90 @@ function TaskPopover(props) {
|
|
|
297
303
|
d: undefined,
|
|
298
304
|
l: undefined,
|
|
299
305
|
u: undefined,
|
|
300
|
-
c: undefined
|
|
306
|
+
c: undefined,
|
|
307
|
+
w: undefined,
|
|
308
|
+
m: undefined,
|
|
309
|
+
f: undefined,
|
|
310
|
+
y: undefined
|
|
301
311
|
});
|
|
302
312
|
return _el$;
|
|
303
313
|
}
|
|
304
314
|
});
|
|
305
315
|
}
|
|
316
|
+
function ModelVariant(props) {
|
|
317
|
+
return (() => {
|
|
318
|
+
var _el$28 = _$createElement("box"),
|
|
319
|
+
_el$29 = _$createElement("text");
|
|
320
|
+
_$insertNode(_el$28, _el$29);
|
|
321
|
+
_$setProp(_el$28, "flexShrink", 1);
|
|
322
|
+
_$setProp(_el$28, "minWidth", 0);
|
|
323
|
+
_$setProp(_el$28, "maxWidth", 28);
|
|
324
|
+
_$setProp(_el$28, "marginLeft", 1);
|
|
325
|
+
_$setProp(_el$28, "flexDirection", "row");
|
|
326
|
+
_$setProp(_el$29, "flexGrow", 1);
|
|
327
|
+
_$setProp(_el$29, "flexShrink", 1);
|
|
328
|
+
_$setProp(_el$29, "minWidth", 0);
|
|
329
|
+
_$setProp(_el$29, "wrapMode", "none");
|
|
330
|
+
_$setProp(_el$29, "truncate", true);
|
|
331
|
+
_$insert(_el$29, () => modelName(props.api, props.model()));
|
|
332
|
+
_$insert(_el$28, _$createComponent(Show, {
|
|
333
|
+
get when() {
|
|
334
|
+
return taskVariantLabel(props.model());
|
|
335
|
+
},
|
|
336
|
+
get fallback() {
|
|
337
|
+
return _$createComponent(Show, {
|
|
338
|
+
get when() {
|
|
339
|
+
return props.model();
|
|
340
|
+
},
|
|
341
|
+
get children() {
|
|
342
|
+
return [(() => {
|
|
343
|
+
var _el$30 = _$createElement("text");
|
|
344
|
+
_$insertNode(_el$30, _$createTextNode(`·`));
|
|
345
|
+
_$setProp(_el$30, "flexShrink", 0);
|
|
346
|
+
_$setProp(_el$30, "marginLeft", 1);
|
|
347
|
+
_$setProp(_el$30, "wrapMode", "none");
|
|
348
|
+
_$effect(_$p => _$setProp(_el$30, "fg", props.api.theme.current.textMuted, _$p));
|
|
349
|
+
return _el$30;
|
|
350
|
+
})(), (() => {
|
|
351
|
+
var _el$32 = _$createElement("text"),
|
|
352
|
+
_el$33 = _$createElement("b");
|
|
353
|
+
_$insertNode(_el$32, _el$33);
|
|
354
|
+
_$setProp(_el$32, "flexShrink", 0);
|
|
355
|
+
_$setProp(_el$32, "marginLeft", 1);
|
|
356
|
+
_$setProp(_el$32, "wrapMode", "none");
|
|
357
|
+
_$setProp(_el$32, "truncate", true);
|
|
358
|
+
_$insertNode(_el$33, _$createTextNode(`pending`));
|
|
359
|
+
_$effect(_$p => _$setProp(_el$32, "fg", props.api.theme.current.warning, _$p));
|
|
360
|
+
return _el$32;
|
|
361
|
+
})()];
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
},
|
|
365
|
+
children: variant => [(() => {
|
|
366
|
+
var _el$35 = _$createElement("text");
|
|
367
|
+
_$insertNode(_el$35, _$createTextNode(`·`));
|
|
368
|
+
_$setProp(_el$35, "flexShrink", 0);
|
|
369
|
+
_$setProp(_el$35, "marginLeft", 1);
|
|
370
|
+
_$setProp(_el$35, "wrapMode", "none");
|
|
371
|
+
_$effect(_$p => _$setProp(_el$35, "fg", props.api.theme.current.textMuted, _$p));
|
|
372
|
+
return _el$35;
|
|
373
|
+
})(), (() => {
|
|
374
|
+
var _el$37 = _$createElement("text"),
|
|
375
|
+
_el$38 = _$createElement("b");
|
|
376
|
+
_$insertNode(_el$37, _el$38);
|
|
377
|
+
_$setProp(_el$37, "flexShrink", 0);
|
|
378
|
+
_$setProp(_el$37, "marginLeft", 1);
|
|
379
|
+
_$setProp(_el$37, "wrapMode", "none");
|
|
380
|
+
_$setProp(_el$37, "truncate", true);
|
|
381
|
+
_$insert(_el$38, variant);
|
|
382
|
+
_$effect(_$p => _$setProp(_el$37, "fg", props.api.theme.current.warning, _$p));
|
|
383
|
+
return _el$37;
|
|
384
|
+
})()]
|
|
385
|
+
}), null);
|
|
386
|
+
_$effect(_$p => _$setProp(_el$29, "fg", props.api.theme.current.text, _$p));
|
|
387
|
+
return _el$28;
|
|
388
|
+
})();
|
|
389
|
+
}
|
|
306
390
|
function TaskCard(props) {
|
|
307
391
|
// The call ID is stable, while the actual ToolPart is re-read after each event.
|
|
308
392
|
// This prevents cards from retaining a stale part object after a state update.
|
|
@@ -355,131 +439,85 @@ function TaskCard(props) {
|
|
|
355
439
|
props.openPopup(props.callID, currentAnchor);
|
|
356
440
|
};
|
|
357
441
|
return (() => {
|
|
358
|
-
var _el$
|
|
359
|
-
_el$
|
|
360
|
-
_el$
|
|
361
|
-
_el$
|
|
362
|
-
_el$
|
|
363
|
-
_el$
|
|
364
|
-
_el$
|
|
365
|
-
_el$
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
_$insertNode(_el$27, _el$28);
|
|
369
|
-
_$insertNode(_el$27, _el$33);
|
|
442
|
+
var _el$39 = _$createElement("box"),
|
|
443
|
+
_el$40 = _$createElement("box"),
|
|
444
|
+
_el$41 = _$createElement("text"),
|
|
445
|
+
_el$42 = _$createElement("b"),
|
|
446
|
+
_el$43 = _$createElement("box"),
|
|
447
|
+
_el$44 = _$createElement("text"),
|
|
448
|
+
_el$45 = _$createElement("box"),
|
|
449
|
+
_el$46 = _$createElement("text");
|
|
450
|
+
_$insertNode(_el$39, _el$40);
|
|
451
|
+
_$insertNode(_el$39, _el$43);
|
|
370
452
|
_$use(element => {
|
|
371
453
|
card = element;
|
|
372
454
|
updateAnchor();
|
|
373
|
-
}, _el$
|
|
374
|
-
_$setProp(_el$
|
|
375
|
-
_$setProp(_el$
|
|
376
|
-
_$setProp(_el$
|
|
377
|
-
_$setProp(_el$
|
|
378
|
-
_$setProp(_el$
|
|
379
|
-
_$setProp(_el$
|
|
380
|
-
_$setProp(_el$
|
|
381
|
-
_$insertNode(_el$
|
|
382
|
-
_$
|
|
383
|
-
_$setProp(_el$
|
|
384
|
-
_$setProp(_el$
|
|
385
|
-
_$setProp(_el$
|
|
386
|
-
_$
|
|
387
|
-
_$
|
|
388
|
-
_$setProp(_el$
|
|
389
|
-
_$setProp(_el$
|
|
390
|
-
_$setProp(_el$
|
|
391
|
-
_$setProp(_el$
|
|
392
|
-
_$
|
|
393
|
-
_$insert(_el$30, (() => {
|
|
455
|
+
}, _el$39);
|
|
456
|
+
_$setProp(_el$39, "onSizeChange", updateAnchor);
|
|
457
|
+
_$setProp(_el$39, "renderBefore", updateAnchor);
|
|
458
|
+
_$setProp(_el$39, "width", "100%");
|
|
459
|
+
_$setProp(_el$39, "height", 2);
|
|
460
|
+
_$setProp(_el$39, "flexDirection", "column");
|
|
461
|
+
_$setProp(_el$39, "overflow", "hidden");
|
|
462
|
+
_$setProp(_el$39, "onMouseUp", openDetails);
|
|
463
|
+
_$insertNode(_el$40, _el$41);
|
|
464
|
+
_$setProp(_el$40, "width", "100%");
|
|
465
|
+
_$setProp(_el$40, "height", 1);
|
|
466
|
+
_$setProp(_el$40, "flexDirection", "row");
|
|
467
|
+
_$setProp(_el$40, "overflow", "hidden");
|
|
468
|
+
_$insertNode(_el$41, _el$42);
|
|
469
|
+
_$setProp(_el$41, "flexGrow", 1);
|
|
470
|
+
_$setProp(_el$41, "flexShrink", 1);
|
|
471
|
+
_$setProp(_el$41, "minWidth", 0);
|
|
472
|
+
_$setProp(_el$41, "wrapMode", "none");
|
|
473
|
+
_$setProp(_el$41, "truncate", true);
|
|
474
|
+
_$insert(_el$42, (() => {
|
|
394
475
|
var _c$ = _$memo(() => !!part());
|
|
395
476
|
return () => _c$() ? taskAgent(part()) : "subagent";
|
|
396
477
|
})());
|
|
397
|
-
_$
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
_$setProp(_el$31, "maxWidth", 28);
|
|
401
|
-
_$setProp(_el$31, "marginLeft", 1);
|
|
402
|
-
_$setProp(_el$31, "flexDirection", "row");
|
|
403
|
-
_$setProp(_el$32, "flexGrow", 1);
|
|
404
|
-
_$setProp(_el$32, "flexShrink", 1);
|
|
405
|
-
_$setProp(_el$32, "minWidth", 0);
|
|
406
|
-
_$setProp(_el$32, "wrapMode", "none");
|
|
407
|
-
_$setProp(_el$32, "truncate", true);
|
|
408
|
-
_$insert(_el$32, () => modelName(props.api, model()));
|
|
409
|
-
_$insert(_el$31, _$createComponent(Show, {
|
|
410
|
-
get when() {
|
|
411
|
-
return taskVariantLabel(model());
|
|
478
|
+
_$insert(_el$40, _$createComponent(ModelVariant, {
|
|
479
|
+
get api() {
|
|
480
|
+
return props.api;
|
|
412
481
|
},
|
|
413
|
-
|
|
414
|
-
return _$createComponent(Show, {
|
|
415
|
-
get when() {
|
|
416
|
-
return model();
|
|
417
|
-
},
|
|
418
|
-
get children() {
|
|
419
|
-
var _el$37 = _$createElement("text");
|
|
420
|
-
_$insertNode(_el$37, _$createTextNode(`· pending`));
|
|
421
|
-
_$setProp(_el$37, "flexShrink", 0);
|
|
422
|
-
_$setProp(_el$37, "marginLeft", 1);
|
|
423
|
-
_$setProp(_el$37, "wrapMode", "none");
|
|
424
|
-
_$setProp(_el$37, "truncate", true);
|
|
425
|
-
_$effect(_$p => _$setProp(_el$37, "fg", props.api.theme.current.textMuted, _$p));
|
|
426
|
-
return _el$37;
|
|
427
|
-
}
|
|
428
|
-
});
|
|
429
|
-
},
|
|
430
|
-
children: variant => (() => {
|
|
431
|
-
var _el$39 = _$createElement("text"),
|
|
432
|
-
_el$40 = _$createTextNode(`· `);
|
|
433
|
-
_$insertNode(_el$39, _el$40);
|
|
434
|
-
_$setProp(_el$39, "flexShrink", 0);
|
|
435
|
-
_$setProp(_el$39, "marginLeft", 1);
|
|
436
|
-
_$setProp(_el$39, "wrapMode", "none");
|
|
437
|
-
_$setProp(_el$39, "truncate", true);
|
|
438
|
-
_$insert(_el$39, variant, null);
|
|
439
|
-
_$effect(_$p => _$setProp(_el$39, "fg", props.api.theme.current.textMuted, _$p));
|
|
440
|
-
return _el$39;
|
|
441
|
-
})()
|
|
482
|
+
model: model
|
|
442
483
|
}), null);
|
|
443
|
-
_$insertNode(_el$
|
|
444
|
-
_$insertNode(_el$
|
|
445
|
-
_$setProp(_el$
|
|
446
|
-
_$setProp(_el$
|
|
447
|
-
_$setProp(_el$
|
|
448
|
-
_$setProp(_el$
|
|
449
|
-
_$setProp(_el$
|
|
450
|
-
_$setProp(_el$
|
|
451
|
-
_$setProp(_el$
|
|
452
|
-
_$setProp(_el$
|
|
453
|
-
_$setProp(_el$
|
|
454
|
-
_$insert(_el$
|
|
484
|
+
_$insertNode(_el$43, _el$44);
|
|
485
|
+
_$insertNode(_el$43, _el$45);
|
|
486
|
+
_$setProp(_el$43, "width", "100%");
|
|
487
|
+
_$setProp(_el$43, "height", 1);
|
|
488
|
+
_$setProp(_el$43, "flexDirection", "row");
|
|
489
|
+
_$setProp(_el$43, "overflow", "hidden");
|
|
490
|
+
_$setProp(_el$44, "flexGrow", 1);
|
|
491
|
+
_$setProp(_el$44, "flexShrink", 1);
|
|
492
|
+
_$setProp(_el$44, "minWidth", 0);
|
|
493
|
+
_$setProp(_el$44, "wrapMode", "none");
|
|
494
|
+
_$setProp(_el$44, "truncate", true);
|
|
495
|
+
_$insert(_el$44, (() => {
|
|
455
496
|
var _c$2 = _$memo(() => !!part());
|
|
456
497
|
return () => _c$2() ? taskDescription(part()) : "Working";
|
|
457
498
|
})());
|
|
458
|
-
_$insertNode(_el$
|
|
459
|
-
_$setProp(_el$
|
|
460
|
-
_$setProp(_el$
|
|
461
|
-
_$setProp(_el$
|
|
462
|
-
_$setProp(_el$
|
|
463
|
-
_$setProp(_el$
|
|
464
|
-
_$setProp(_el$
|
|
465
|
-
_$insert(_el$
|
|
499
|
+
_$insertNode(_el$45, _el$46);
|
|
500
|
+
_$setProp(_el$45, "width", 8);
|
|
501
|
+
_$setProp(_el$45, "flexShrink", 0);
|
|
502
|
+
_$setProp(_el$45, "flexDirection", "row");
|
|
503
|
+
_$setProp(_el$45, "justifyContent", "flex-end");
|
|
504
|
+
_$setProp(_el$46, "wrapMode", "none");
|
|
505
|
+
_$setProp(_el$46, "truncate", true);
|
|
506
|
+
_$insert(_el$46, elapsed);
|
|
466
507
|
_$effect(_p$ => {
|
|
467
|
-
var _v$
|
|
468
|
-
_v$
|
|
469
|
-
_v$
|
|
470
|
-
|
|
471
|
-
_v$
|
|
472
|
-
_v$
|
|
473
|
-
_v$14 !== _p$.a && (_p$.a = _$setProp(_el$34, "fg", _v$14, _p$.a));
|
|
474
|
-
_v$15 !== _p$.o && (_p$.o = _$setProp(_el$36, "fg", _v$15, _p$.o));
|
|
508
|
+
var _v$16 = props.api.theme.current.text,
|
|
509
|
+
_v$17 = props.api.theme.current.textMuted,
|
|
510
|
+
_v$18 = props.api.theme.current.textMuted;
|
|
511
|
+
_v$16 !== _p$.e && (_p$.e = _$setProp(_el$41, "fg", _v$16, _p$.e));
|
|
512
|
+
_v$17 !== _p$.t && (_p$.t = _$setProp(_el$44, "fg", _v$17, _p$.t));
|
|
513
|
+
_v$18 !== _p$.a && (_p$.a = _$setProp(_el$46, "fg", _v$18, _p$.a));
|
|
475
514
|
return _p$;
|
|
476
515
|
}, {
|
|
477
516
|
e: undefined,
|
|
478
517
|
t: undefined,
|
|
479
|
-
a: undefined
|
|
480
|
-
o: undefined
|
|
518
|
+
a: undefined
|
|
481
519
|
});
|
|
482
|
-
return _el$
|
|
520
|
+
return _el$39;
|
|
483
521
|
})();
|
|
484
522
|
}
|
|
485
523
|
function RunningSubagents(props) {
|
|
@@ -644,33 +682,39 @@ function RunningSubagents(props) {
|
|
|
644
682
|
setOpenPopup(undefined);
|
|
645
683
|
});
|
|
646
684
|
return (() => {
|
|
647
|
-
var _el$
|
|
648
|
-
_el$
|
|
649
|
-
_el$
|
|
650
|
-
_el$
|
|
651
|
-
_$insertNode(_el$
|
|
652
|
-
_$setProp(_el$
|
|
653
|
-
_$
|
|
654
|
-
_$
|
|
655
|
-
_$insertNode(_el$
|
|
656
|
-
_$
|
|
685
|
+
var _el$47 = _$createElement("box"),
|
|
686
|
+
_el$48 = _$createElement("text"),
|
|
687
|
+
_el$49 = _$createElement("b"),
|
|
688
|
+
_el$51 = _$createElement("span");
|
|
689
|
+
_$insertNode(_el$47, _el$48);
|
|
690
|
+
_$setProp(_el$47, "overflow", "hidden");
|
|
691
|
+
_$setProp(_el$47, "flexDirection", "column");
|
|
692
|
+
_$setProp(_el$47, "gap", 1);
|
|
693
|
+
_$insertNode(_el$48, _el$49);
|
|
694
|
+
_$insertNode(_el$48, _el$51);
|
|
695
|
+
_$insertNode(_el$49, _$createTextNode(`Subagents`));
|
|
696
|
+
_$insert(_el$51, (() => {
|
|
657
697
|
var _c$3 = _$memo(() => !!visibleTaskParts().length);
|
|
658
698
|
return () => _c$3() ? ` (${visibleTaskParts().length} running)` : "";
|
|
659
699
|
})());
|
|
660
|
-
_$insert(_el$
|
|
700
|
+
_$insert(_el$47, _$createComponent(Show, {
|
|
661
701
|
get when() {
|
|
662
702
|
return taskCallIDs().length > 0;
|
|
663
703
|
},
|
|
664
704
|
get fallback() {
|
|
665
705
|
return (() => {
|
|
666
|
-
var _el$
|
|
667
|
-
_$insertNode(_el$
|
|
668
|
-
_$effect(_$p => _$setProp(_el$
|
|
669
|
-
return _el$
|
|
706
|
+
var _el$53 = _$createElement("text");
|
|
707
|
+
_$insertNode(_el$53, _$createTextNode(`No subagent running`));
|
|
708
|
+
_$effect(_$p => _$setProp(_el$53, "fg", props.api.theme.current.textMuted, _$p));
|
|
709
|
+
return _el$53;
|
|
670
710
|
})();
|
|
671
711
|
},
|
|
672
712
|
get children() {
|
|
673
|
-
|
|
713
|
+
var _el$52 = _$createElement("box");
|
|
714
|
+
_$setProp(_el$52, "width", "100%");
|
|
715
|
+
_$setProp(_el$52, "flexDirection", "column");
|
|
716
|
+
_$setProp(_el$52, "gap", 1);
|
|
717
|
+
_$insert(_el$52, _$createComponent(For, {
|
|
674
718
|
get each() {
|
|
675
719
|
return taskCallIDs();
|
|
676
720
|
},
|
|
@@ -688,10 +732,11 @@ function RunningSubagents(props) {
|
|
|
688
732
|
openPopup: showPopup,
|
|
689
733
|
updatePopupAnchor: updatePopupAnchor
|
|
690
734
|
})
|
|
691
|
-
});
|
|
735
|
+
}));
|
|
736
|
+
return _el$52;
|
|
692
737
|
}
|
|
693
738
|
}), null);
|
|
694
|
-
_$insert(_el$
|
|
739
|
+
_$insert(_el$47, _$createComponent(Show, {
|
|
695
740
|
get when() {
|
|
696
741
|
return openPopup();
|
|
697
742
|
},
|
|
@@ -715,18 +760,18 @@ function RunningSubagents(props) {
|
|
|
715
760
|
})
|
|
716
761
|
}), null);
|
|
717
762
|
_$effect(_p$ => {
|
|
718
|
-
var _v$
|
|
719
|
-
_v$
|
|
763
|
+
var _v$19 = props.api.theme.current.text,
|
|
764
|
+
_v$20 = {
|
|
720
765
|
fg: props.api.theme.current.textMuted
|
|
721
766
|
};
|
|
722
|
-
_v$
|
|
723
|
-
_v$
|
|
767
|
+
_v$19 !== _p$.e && (_p$.e = _$setProp(_el$48, "fg", _v$19, _p$.e));
|
|
768
|
+
_v$20 !== _p$.t && (_p$.t = _$setProp(_el$51, "style", _v$20, _p$.t));
|
|
724
769
|
return _p$;
|
|
725
770
|
}, {
|
|
726
771
|
e: undefined,
|
|
727
772
|
t: undefined
|
|
728
773
|
});
|
|
729
|
-
return _el$
|
|
774
|
+
return _el$47;
|
|
730
775
|
})();
|
|
731
776
|
}
|
|
732
777
|
const tui = async api => {
|