opencode-subagents-sidebar-plugin 0.1.0 → 0.1.2

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/dist/activity.js CHANGED
@@ -1,54 +1,38 @@
1
1
  function stringValue(value) {
2
- return typeof value === "string" && value.trim() ? value.trim() : undefined;
2
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
3
3
  }
4
4
  export function normalizeActivity(value) {
5
- return value
6
- .replace(/\s+/g, " ")
7
- .replace(/^[#>*_`\-\s]+/, "")
8
- .replace(/[*_`]/g, "")
9
- .trim();
5
+ return value.replace(/\s+/g, " ").replace(/^[#>*_`\-\s]+/, "").replace(/[*_`]/g, "").trim();
10
6
  }
11
7
  export function normalizeMeaningful(value) {
12
- const text = stringValue(value);
13
- return text ? stringValue(normalizeActivity(text)) : undefined;
8
+ const text = stringValue(value);
9
+ return text ? stringValue(normalizeActivity(text)) : undefined;
14
10
  }
15
11
  function toolName(value) {
16
- return value
17
- .replace(/^multi_tool_use\./, "")
18
- .replace(/[._-]+/g, " ")
19
- .replace(/\b\w/g, (character) => character.toUpperCase());
12
+ return value.replace(/^multi_tool_use\./, "").replace(/[._-]+/g, " ").replace(/\b\w/g, character => character.toUpperCase());
20
13
  }
21
14
  export function activityForPart(part) {
22
- if (part.type === "text" || part.type === "reasoning")
23
- return normalizeMeaningful(part.text);
24
- if (part.type === "subtask") {
25
- const description = normalizeMeaningful(part.description);
26
- return description ? `Delegating · ${description}` : "Delegating";
27
- }
28
- if (part.type === "retry")
29
- return `Retrying · attempt ${part.attempt}`;
30
- if (part.type === "compaction")
31
- return "Compacting context…";
32
- if (part.type !== "tool")
33
- return undefined;
34
- const name = toolName(part.tool);
35
- if (part.state.status === "pending")
36
- return `${name}…`;
37
- if (part.state.status === "error")
38
- return `${name} failed`;
39
- const title = normalizeMeaningful(part.state.title);
40
- return title ? `${name} · ${title}` : `${name}…`;
15
+ if (part.type === "text" || part.type === "reasoning") return normalizeMeaningful(part.text);
16
+ if (part.type === "subtask") {
17
+ const description = normalizeMeaningful(part.description);
18
+ return description ? `Delegating · ${description}` : "Delegating";
19
+ }
20
+ if (part.type === "retry") return `Retrying · attempt ${part.attempt}`;
21
+ if (part.type === "compaction") return "Compacting context…";
22
+ if (part.type !== "tool") return undefined;
23
+ const name = toolName(part.tool);
24
+ if (part.state.status === "pending") return `${name}…`;
25
+ if (part.state.status === "error") return `${name} failed`;
26
+ const title = normalizeMeaningful(part.state.title);
27
+ return title ? `${name} · ${title}` : `${name}…`;
41
28
  }
42
29
  export function elapsedLabel(milliseconds) {
43
- const seconds = Math.max(0, Math.floor(milliseconds / 1_000));
44
- if (seconds < 60)
45
- return `${seconds}s`;
46
- const minutes = Math.floor(seconds / 60);
47
- if (minutes < 60)
48
- return `${minutes}m ${seconds % 60}s`;
49
- const hours = Math.floor(minutes / 60);
50
- if (hours < 24)
51
- return `${hours}h ${minutes % 60}m`;
52
- return `${Math.floor(hours / 24)}d ${hours % 24}h`;
30
+ const seconds = Math.max(0, Math.floor(milliseconds / 1_000));
31
+ if (seconds < 60) return `${seconds}s`;
32
+ const minutes = Math.floor(seconds / 60);
33
+ if (minutes < 60) return `${minutes}m ${seconds % 60}s`;
34
+ const hours = Math.floor(minutes / 60);
35
+ if (hours < 24) return `${hours}h ${minutes % 60}m`;
36
+ return `${Math.floor(hours / 24)}d ${hours % 24}h`;
53
37
  }
54
38
  //# sourceMappingURL=activity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activity.js","names":["stringValue","value","trim","undefined","normalizeActivity","replace","normalizeMeaningful","text","toolName","character","toUpperCase","activityForPart","part","type","description","attempt","name","tool","state","status","title","elapsedLabel","milliseconds","seconds","Math","max","floor","minutes","hours"],"sources":["../src/activity.ts"],"sourcesContent":["import type { Part } from \"@opencode-ai/sdk/v2\"\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined\n}\n\nexport function normalizeActivity(value: string): string {\n return value\n .replace(/\\s+/g, \" \")\n .replace(/^[#>*_`\\-\\s]+/, \"\")\n .replace(/[*_`]/g, \"\")\n .trim()\n}\n\nexport function normalizeMeaningful(value: unknown): string | undefined {\n const text = stringValue(value)\n return text ? stringValue(normalizeActivity(text)) : undefined\n}\n\nfunction toolName(value: string): string {\n return value\n .replace(/^multi_tool_use\\./, \"\")\n .replace(/[._-]+/g, \" \")\n .replace(/\\b\\w/g, (character) => character.toUpperCase())\n}\n\nexport function activityForPart(part: Part): string | undefined {\n if (part.type === \"text\" || part.type === \"reasoning\") return normalizeMeaningful(part.text)\n if (part.type === \"subtask\") {\n const description = normalizeMeaningful(part.description)\n return description ? `Delegating · ${description}` : \"Delegating\"\n }\n if (part.type === \"retry\") return `Retrying · attempt ${part.attempt}`\n if (part.type === \"compaction\") return \"Compacting context…\"\n if (part.type !== \"tool\") return undefined\n\n const name = toolName(part.tool)\n if (part.state.status === \"pending\") return `${name}…`\n if (part.state.status === \"error\") return `${name} failed`\n const title = normalizeMeaningful(part.state.title)\n return title ? `${name} · ${title}` : `${name}…`\n}\n\nexport function elapsedLabel(milliseconds: number): string {\n const seconds = Math.max(0, Math.floor(milliseconds / 1_000))\n if (seconds < 60) return `${seconds}s`\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ${seconds % 60}s`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ${minutes % 60}m`\n return `${Math.floor(hours / 24)}d ${hours % 24}h`\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import type { Part, SessionStatus, ToolPart } from "@opencode-ai/sdk/v2";
2
+ export type VisibleTaskPart = ToolPart;
3
+ export declare function taskSessionID(part: ToolPart): string | undefined;
4
+ export declare function isVisibleTask(part: Part, sessionStatus: (sessionID: string) => SessionStatus | undefined): part is VisibleTaskPart;
5
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAExE,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAA;AAUtC,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAGhE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,GAC9D,IAAI,IAAI,eAAe,CASzB"}
package/dist/tasks.js ADDED
@@ -0,0 +1,23 @@
1
+ function objectValue(value) {
2
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
3
+ }
4
+ function taskMetadata(part) {
5
+ return {
6
+ ...objectValue(part.metadata),
7
+ ...objectValue(objectValue(part.state).metadata)
8
+ };
9
+ }
10
+ export function taskSessionID(part) {
11
+ const sessionID = taskMetadata(part).sessionId;
12
+ return typeof sessionID === "string" && sessionID.trim() ? sessionID.trim() : undefined;
13
+ }
14
+ export function isVisibleTask(part, sessionStatus) {
15
+ if (part.type !== "tool" || part.tool !== "task") return false;
16
+ if (part.state.status === "pending" || part.state.status === "running") return true;
17
+ if (part.state.status !== "completed" || taskMetadata(part).background !== true) return false;
18
+ const childSessionID = taskSessionID(part);
19
+ if (!childSessionID) return false;
20
+ const status = sessionStatus(childSessionID);
21
+ return status !== undefined && status.type !== "idle";
22
+ }
23
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","names":["objectValue","value","Array","isArray","taskMetadata","part","metadata","state","taskSessionID","sessionID","sessionId","trim","undefined","isVisibleTask","sessionStatus","type","tool","status","background","childSessionID"],"sources":["../src/tasks.ts"],"sourcesContent":["import type { Part, SessionStatus, ToolPart } from \"@opencode-ai/sdk/v2\"\n\nexport type VisibleTaskPart = ToolPart\n\nfunction objectValue(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : {}\n}\n\nfunction taskMetadata(part: ToolPart): Record<string, unknown> {\n return { ...objectValue(part.metadata), ...objectValue(objectValue(part.state).metadata) }\n}\n\nexport function taskSessionID(part: ToolPart): string | undefined {\n const sessionID = taskMetadata(part).sessionId\n return typeof sessionID === \"string\" && sessionID.trim() ? sessionID.trim() : undefined\n}\n\nexport function isVisibleTask(\n part: Part,\n sessionStatus: (sessionID: string) => SessionStatus | undefined,\n): part is VisibleTaskPart {\n if (part.type !== \"tool\" || part.tool !== \"task\") return false\n if (part.state.status === \"pending\" || part.state.status === \"running\") return true\n if (part.state.status !== \"completed\" || taskMetadata(part).background !== true) return false\n\n const childSessionID = taskSessionID(part)\n if (!childSessionID) return false\n const status = sessionStatus(childSessionID)\n return status !== undefined && status.type !== \"idle\"\n}\n"],"mappings":"AAIA,SAASA,WAAWA,CAACC,KAAc,EAA2B;EAC5D,OAAOA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,GAAIA,KAAK,GAA+B,CAAC,CAAC;AAC9G;AAEA,SAASG,YAAYA,CAACC,IAAc,EAA2B;EAC7D,OAAO;IAAE,GAAGL,WAAW,CAACK,IAAI,CAACC,QAAQ,CAAC;IAAE,GAAGN,WAAW,CAACA,WAAW,CAACK,IAAI,CAACE,KAAK,CAAC,CAACD,QAAQ;EAAE,CAAC;AAC5F;AAEA,OAAO,SAASE,aAAaA,CAACH,IAAc,EAAsB;EAChE,MAAMI,SAAS,GAAGL,YAAY,CAACC,IAAI,CAAC,CAACK,SAAS;EAC9C,OAAO,OAAOD,SAAS,KAAK,QAAQ,IAAIA,SAAS,CAACE,IAAI,CAAC,CAAC,GAAGF,SAAS,CAACE,IAAI,CAAC,CAAC,GAAGC,SAAS;AACzF;AAEA,OAAO,SAASC,aAAaA,CAC3BR,IAAU,EACVS,aAA+D,EACtC;EACzB,IAAIT,IAAI,CAACU,IAAI,KAAK,MAAM,IAAIV,IAAI,CAACW,IAAI,KAAK,MAAM,EAAE,OAAO,KAAK;EAC9D,IAAIX,IAAI,CAACE,KAAK,CAACU,MAAM,KAAK,SAAS,IAAIZ,IAAI,CAACE,KAAK,CAACU,MAAM,KAAK,SAAS,EAAE,OAAO,IAAI;EACnF,IAAIZ,IAAI,CAACE,KAAK,CAACU,MAAM,KAAK,WAAW,IAAIb,YAAY,CAACC,IAAI,CAAC,CAACa,UAAU,KAAK,IAAI,EAAE,OAAO,KAAK;EAE7F,MAAMC,cAAc,GAAGX,aAAa,CAACH,IAAI,CAAC;EAC1C,IAAI,CAACc,cAAc,EAAE,OAAO,KAAK;EACjC,MAAMF,MAAM,GAAGH,aAAa,CAACK,cAAc,CAAC;EAC5C,OAAOF,MAAM,KAAKL,SAAS,IAAIK,MAAM,CAACF,IAAI,KAAK,MAAM;AACvD","ignoreList":[]}
package/dist/tui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAiC,MAAM,yBAAyB,CAAA;AA+RvF,QAAA,MAAM,MAAM;;;CAGe,CAAA;AAE3B,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAiC,MAAM,yBAAyB,CAAA;AA4SvF,QAAA,MAAM,MAAM;;;CAGe,CAAA;AAE3B,eAAe,MAAM,CAAA"}
package/dist/tui.js CHANGED
@@ -1,178 +1,346 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
1
+ import { createComponent as _$createComponent } from "@opentui/solid";
2
+ import { effect as _$effect } from "@opentui/solid";
3
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
4
+ import { insertNode as _$insertNode } from "@opentui/solid";
5
+ import { insert as _$insert } from "@opentui/solid";
6
+ import { memo as _$memo } from "@opentui/solid";
7
+ import { setProp as _$setProp } from "@opentui/solid";
8
+ import { createElement as _$createElement } from "@opentui/solid";
9
+ /** @jsxImportSource @opentui/solid */
10
+
2
11
  import { activityForPart, elapsedLabel, normalizeMeaningful } from "./activity.js";
12
+ import { isVisibleTask, taskSessionID } from "./tasks.js";
3
13
  import { createEffect, createMemo, createSignal, For, on, onCleanup, onMount, Show } from "solid-js";
4
- function isActiveTask(part) {
5
- return (part.type === "tool" &&
6
- part.tool === "task" &&
7
- (part.state.status === "pending" || part.state.status === "running"));
8
- }
9
14
  function stringValue(value) {
10
- return typeof value === "string" && value.trim() ? value.trim() : undefined;
15
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
11
16
  }
12
17
  function objectValue(value) {
13
- return value && typeof value === "object" && !Array.isArray(value) ? value : {};
18
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
14
19
  }
15
20
  function taskAgent(part) {
16
- return stringValue(part.state.input.subagent_type) ?? "subagent";
21
+ return stringValue(part.state.input.subagent_type) ?? "subagent";
17
22
  }
18
23
  function taskDescription(part) {
19
- return normalizeMeaningful(part.state.input.description) ?? normalizeMeaningful(objectValue(part.state).title) ?? "Working";
20
- }
21
- function taskSessionID(part) {
22
- return stringValue(objectValue(part.state).metadata && objectValue(objectValue(part.state).metadata).sessionId);
24
+ return normalizeMeaningful(part.state.input.description) ?? normalizeMeaningful(objectValue(part.state).title) ?? "Working";
23
25
  }
24
26
  function taskModel(part) {
25
- const metadata = objectValue(objectValue(part.state).metadata);
26
- const model = objectValue(metadata.model);
27
- const providerID = stringValue(model.providerID);
28
- const modelID = stringValue(model.modelID);
29
- return providerID && modelID ? { providerID, modelID } : undefined;
27
+ const metadata = objectValue(objectValue(part.state).metadata);
28
+ const model = objectValue(metadata.model);
29
+ const providerID = stringValue(model.providerID);
30
+ const modelID = stringValue(model.modelID);
31
+ return providerID && modelID ? {
32
+ providerID,
33
+ modelID
34
+ } : undefined;
30
35
  }
31
36
  function latestActivity(api, sessionID, fallback) {
32
- if (!sessionID)
33
- return fallback;
34
- const messages = api.state.session.messages(sessionID);
35
- for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {
36
- const message = messages[messageIndex];
37
- if (message?.role !== "assistant")
38
- continue;
39
- const parts = api.state.part(message.id);
40
- for (let partIndex = parts.length - 1; partIndex >= 0; partIndex -= 1) {
41
- const candidate = parts[partIndex];
42
- if (!candidate)
43
- continue;
44
- const activity = activityForPart(candidate);
45
- if (activity)
46
- return activity;
47
- }
37
+ if (!sessionID) return fallback;
38
+ const messages = api.state.session.messages(sessionID);
39
+ for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {
40
+ const message = messages[messageIndex];
41
+ if (message?.role !== "assistant") continue;
42
+ const parts = api.state.part(message.id);
43
+ for (let partIndex = parts.length - 1; partIndex >= 0; partIndex -= 1) {
44
+ const candidate = parts[partIndex];
45
+ if (!candidate) continue;
46
+ const activity = activityForPart(candidate);
47
+ if (activity) return activity;
48
48
  }
49
- return fallback;
49
+ }
50
+ return fallback;
50
51
  }
51
52
  function modelLabel(api, part) {
52
- let model = taskModel(part);
53
- const childSessionID = taskSessionID(part);
54
- if (!model && childSessionID) {
55
- const messages = api.state.session.messages(childSessionID);
56
- for (let index = messages.length - 1; index >= 0; index -= 1) {
57
- const message = messages[index];
58
- if (message?.role === "assistant") {
59
- model = { providerID: message.providerID, modelID: message.modelID };
60
- break;
61
- }
62
- }
53
+ let model = taskModel(part);
54
+ const childSessionID = taskSessionID(part);
55
+ if (!model && childSessionID) {
56
+ const messages = api.state.session.messages(childSessionID);
57
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
58
+ const message = messages[index];
59
+ if (message?.role === "assistant") {
60
+ model = {
61
+ providerID: message.providerID,
62
+ modelID: message.modelID
63
+ };
64
+ break;
65
+ }
63
66
  }
64
- if (!model)
65
- return "starting…";
66
- return api.state.provider.find((provider) => provider.id === model.providerID)?.models[model.modelID]?.name ?? model.modelID;
67
+ }
68
+ if (!model) return "starting…";
69
+ return api.state.provider.find(provider => provider.id === model.providerID)?.models[model.modelID]?.name ?? model.modelID;
67
70
  }
68
71
  function TaskCard(props) {
69
- // The call ID is stable, while the actual ToolPart is re-read after each event.
70
- // This prevents cards from retaining a stale part object after a state update.
71
- const livePart = createMemo(() => props.tasksByCallID().get(props.callID));
72
- const childSessionID = () => taskSessionID(livePart());
73
- const isCurrent = () => childSessionID() === props.currentSessionID;
74
- const model = () => {
75
- props.revision();
76
- return modelLabel(props.api, livePart());
77
- };
78
- const activity = () => {
79
- props.revision();
80
- return latestActivity(props.api, childSessionID(), taskDescription(livePart()));
81
- };
82
- const elapsed = () => elapsedLabel(props.now() - props.startedAt(livePart()));
83
- return (_jsxs("box", { width: "100%", height: 2, overflow: "hidden", children: [_jsxs("box", { width: "100%", height: 1, flexDirection: "row", overflow: "hidden", children: [_jsxs("text", { flexGrow: 1, flexShrink: 1, minWidth: 0, wrapMode: "none", truncate: true, children: [_jsx("span", { style: {
84
- fg: livePart().state.status === "pending"
85
- ? props.api.theme.current.warning
86
- : props.api.theme.current.success,
87
- }, children: isCurrent() ? "›" : livePart().state.status === "pending" ? "…" : "●" }), _jsxs("span", { style: { fg: props.api.theme.current.text }, children: [" ", _jsx("b", { children: taskAgent(livePart()) })] })] }), _jsx("text", { flexShrink: 0, maxWidth: 20, marginLeft: 1, wrapMode: "none", truncate: true, fg: props.api.theme.current.textMuted, children: model() })] }), _jsxs("box", { width: "100%", height: 1, flexDirection: "row", overflow: "hidden", children: [_jsx("text", { flexGrow: 1, flexShrink: 1, minWidth: 0, wrapMode: "none", truncate: true, fg: props.api.theme.current.textMuted, children: activity() }), _jsx("text", { width: 8, flexShrink: 0, marginLeft: 1, wrapMode: "none", truncate: true, fg: props.api.theme.current.textMuted, children: elapsed() })] })] }));
72
+ // The call ID is stable, while the actual ToolPart is re-read after each event.
73
+ // This prevents cards from retaining a stale part object after a state update.
74
+ const livePart = createMemo(() => props.tasksByCallID().get(props.callID));
75
+ const childSessionID = () => taskSessionID(livePart());
76
+ const isCurrent = () => childSessionID() === props.currentSessionID;
77
+ const model = () => {
78
+ props.revision();
79
+ return modelLabel(props.api, livePart());
80
+ };
81
+ const activity = () => {
82
+ props.revision();
83
+ return latestActivity(props.api, childSessionID(), taskDescription(livePart()));
84
+ };
85
+ const elapsed = () => elapsedLabel(props.now() - props.startedAt(livePart()));
86
+ return (() => {
87
+ var _el$ = _$createElement("box"),
88
+ _el$2 = _$createElement("box"),
89
+ _el$3 = _$createElement("text"),
90
+ _el$4 = _$createElement("span"),
91
+ _el$5 = _$createElement("span"),
92
+ _el$6 = _$createTextNode(` `),
93
+ _el$7 = _$createElement("b"),
94
+ _el$8 = _$createElement("text"),
95
+ _el$9 = _$createElement("box"),
96
+ _el$0 = _$createElement("text"),
97
+ _el$1 = _$createElement("text");
98
+ _$insertNode(_el$, _el$2);
99
+ _$insertNode(_el$, _el$9);
100
+ _$setProp(_el$, "width", "100%");
101
+ _$setProp(_el$, "height", 2);
102
+ _$setProp(_el$, "overflow", "hidden");
103
+ _$insertNode(_el$2, _el$3);
104
+ _$insertNode(_el$2, _el$8);
105
+ _$setProp(_el$2, "width", "100%");
106
+ _$setProp(_el$2, "height", 1);
107
+ _$setProp(_el$2, "flexDirection", "row");
108
+ _$setProp(_el$2, "overflow", "hidden");
109
+ _$insertNode(_el$3, _el$4);
110
+ _$insertNode(_el$3, _el$5);
111
+ _$setProp(_el$3, "flexGrow", 1);
112
+ _$setProp(_el$3, "flexShrink", 1);
113
+ _$setProp(_el$3, "minWidth", 0);
114
+ _$setProp(_el$3, "wrapMode", "none");
115
+ _$setProp(_el$3, "truncate", true);
116
+ _$insert(_el$4, (() => {
117
+ var _c$ = _$memo(() => !!isCurrent());
118
+ return () => _c$() ? "›" : livePart().state.status === "pending" ? "…" : "●";
119
+ })());
120
+ _$insertNode(_el$5, _el$6);
121
+ _$insertNode(_el$5, _el$7);
122
+ _$insert(_el$7, () => taskAgent(livePart()));
123
+ _$setProp(_el$8, "flexShrink", 0);
124
+ _$setProp(_el$8, "maxWidth", 20);
125
+ _$setProp(_el$8, "marginLeft", 1);
126
+ _$setProp(_el$8, "wrapMode", "none");
127
+ _$setProp(_el$8, "truncate", true);
128
+ _$insert(_el$8, model);
129
+ _$insertNode(_el$9, _el$0);
130
+ _$insertNode(_el$9, _el$1);
131
+ _$setProp(_el$9, "width", "100%");
132
+ _$setProp(_el$9, "height", 1);
133
+ _$setProp(_el$9, "flexDirection", "row");
134
+ _$setProp(_el$9, "overflow", "hidden");
135
+ _$setProp(_el$0, "flexGrow", 1);
136
+ _$setProp(_el$0, "flexShrink", 1);
137
+ _$setProp(_el$0, "minWidth", 0);
138
+ _$setProp(_el$0, "wrapMode", "none");
139
+ _$setProp(_el$0, "truncate", true);
140
+ _$insert(_el$0, activity);
141
+ _$setProp(_el$1, "width", 8);
142
+ _$setProp(_el$1, "flexShrink", 0);
143
+ _$setProp(_el$1, "marginLeft", 1);
144
+ _$setProp(_el$1, "wrapMode", "none");
145
+ _$setProp(_el$1, "truncate", true);
146
+ _$insert(_el$1, elapsed);
147
+ _$effect(_p$ => {
148
+ var _v$ = {
149
+ fg: livePart().state.status === "pending" ? props.api.theme.current.warning : props.api.theme.current.success
150
+ },
151
+ _v$2 = {
152
+ fg: props.api.theme.current.text
153
+ },
154
+ _v$3 = props.api.theme.current.textMuted,
155
+ _v$4 = props.api.theme.current.textMuted,
156
+ _v$5 = props.api.theme.current.textMuted;
157
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$4, "style", _v$, _p$.e));
158
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$5, "style", _v$2, _p$.t));
159
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$8, "fg", _v$3, _p$.a));
160
+ _v$4 !== _p$.o && (_p$.o = _$setProp(_el$0, "fg", _v$4, _p$.o));
161
+ _v$5 !== _p$.i && (_p$.i = _$setProp(_el$1, "fg", _v$5, _p$.i));
162
+ return _p$;
163
+ }, {
164
+ e: undefined,
165
+ t: undefined,
166
+ a: undefined,
167
+ o: undefined,
168
+ i: undefined
169
+ });
170
+ return _el$;
171
+ })();
88
172
  }
89
173
  function RunningSubagents(props) {
90
- const [scopeSessionID, setScopeSessionID] = createSignal(props.sessionID);
91
- const [revision, setRevision] = createSignal(0);
92
- const [now, setNow] = createSignal(Date.now());
93
- const firstSeen = new Map();
94
- let sessionRequest = 0;
95
- const selectSession = async (sessionID, known) => {
96
- const currentRequest = ++sessionRequest;
97
- let session = known ?? props.api.state.session.get(sessionID);
98
- if (!session) {
99
- try {
100
- const result = await props.api.client.session.get({
101
- sessionID,
102
- directory: props.api.state.path.directory,
103
- });
104
- session = result.data;
105
- }
106
- catch {
107
- // A later session event retries after local state is populated.
108
- }
109
- }
110
- if (props.api.lifecycle.signal.aborted || currentRequest !== sessionRequest)
111
- return;
112
- setScopeSessionID(session?.parentID ?? sessionID);
113
- setRevision((value) => value + 1);
174
+ const [scopeSessionID, setScopeSessionID] = createSignal();
175
+ const [hydratedMessages, setHydratedMessages] = createSignal([]);
176
+ const [revision, setRevision] = createSignal(0);
177
+ const [now, setNow] = createSignal(Date.now());
178
+ const firstSeen = new Map();
179
+ let sessionRequest = 0;
180
+ const loadMessages = async (sessionID, request) => {
181
+ if (props.api.state.session.messages(sessionID).length) return;
182
+ try {
183
+ const result = await props.api.client.session.messages({
184
+ sessionID,
185
+ directory: props.api.state.path.directory
186
+ }, {
187
+ throwOnError: true
188
+ });
189
+ if (props.api.lifecycle.signal.aborted || request !== sessionRequest || scopeSessionID() !== sessionID) return;
190
+ setHydratedMessages(result.data);
191
+ setRevision(value => value + 1);
192
+ } catch {
193
+ // Live session events can populate the public TUI state after a failed hydration.
194
+ }
195
+ };
196
+ const selectSession = async (sessionID, known) => {
197
+ const currentRequest = ++sessionRequest;
198
+ setScopeSessionID(undefined);
199
+ setHydratedMessages([]);
200
+ let session = known ?? props.api.state.session.get(sessionID);
201
+ if (!session) {
202
+ try {
203
+ const result = await props.api.client.session.get({
204
+ sessionID,
205
+ directory: props.api.state.path.directory
206
+ }, {
207
+ throwOnError: true
208
+ });
209
+ session = result.data;
210
+ } catch {
211
+ // Leave the scope unset so a failed child lookup cannot show its own tasks.
212
+ // A later session event retries after local state is populated.
213
+ return;
214
+ }
215
+ }
216
+ if (props.api.lifecycle.signal.aborted || currentRequest !== sessionRequest) return;
217
+ const parentSessionID = session.parentID ?? session.id;
218
+ setScopeSessionID(parentSessionID);
219
+ setRevision(value => value + 1);
220
+ void loadMessages(parentSessionID, currentRequest);
221
+ };
222
+ createEffect(on(() => props.sessionID, sessionID => void selectSession(sessionID)));
223
+ const running = createMemo(() => {
224
+ revision();
225
+ const sessionID = scopeSessionID();
226
+ if (!sessionID) return [];
227
+ const messages = props.api.state.session.messages(sessionID);
228
+ const parts = messages.length ? messages.flatMap(message => props.api.state.part(message.id)) : hydratedMessages().flatMap(message => message.parts);
229
+ return parts.filter(part => isVisibleTask(part, props.api.state.session.status));
230
+ });
231
+ const tasksByCallID = createMemo(() => new Map(running().map(part => [part.callID, part])));
232
+ const taskCallIDs = createMemo(() => running().map(part => part.callID));
233
+ const activeChildSessions = createMemo(() => new Set(running().map(taskSessionID).filter(sessionID => Boolean(sessionID))));
234
+ const startedAt = part => {
235
+ if (part.state.status !== "pending") return part.state.time.start;
236
+ const existing = firstSeen.get(part.callID);
237
+ if (existing !== undefined) return existing;
238
+ const value = now();
239
+ firstSeen.set(part.callID, value);
240
+ return value;
241
+ };
242
+ const unregister = [];
243
+ let timer;
244
+ onMount(() => {
245
+ const syncCurrentSession = session => {
246
+ if (session.id === props.sessionID) void selectSession(session.id, session);
247
+ if (session.parentID === scopeSessionID() || activeChildSessions().has(session.id)) {
248
+ setRevision(value => value + 1);
249
+ }
114
250
  };
115
- createEffect(on(() => props.sessionID, (sessionID) => void selectSession(sessionID)));
116
- const running = createMemo(() => {
117
- revision();
118
- return props.api.state.session
119
- .messages(scopeSessionID())
120
- .flatMap((message) => props.api.state.part(message.id))
121
- .filter(isActiveTask);
122
- });
123
- const tasksByCallID = createMemo(() => new Map(running().map((part) => [part.callID, part])));
124
- const taskCallIDs = createMemo(() => running().map((part) => part.callID));
125
- const activeChildSessions = createMemo(() => new Set(running().map(taskSessionID).filter((sessionID) => Boolean(sessionID))));
126
- const startedAt = (part) => {
127
- if (part.state.status === "running")
128
- return part.state.time.start;
129
- const existing = firstSeen.get(part.callID);
130
- if (existing !== undefined)
131
- return existing;
132
- const value = now();
133
- firstSeen.set(part.callID, value);
134
- return value;
251
+ const refreshSession = sessionID => {
252
+ if (sessionID === scopeSessionID() || activeChildSessions().has(sessionID)) {
253
+ setRevision(value => value + 1);
254
+ }
135
255
  };
136
- const unregister = [];
137
- let timer;
138
- onMount(() => {
139
- const syncCurrentSession = (session) => {
140
- if (session.id === props.sessionID)
141
- void selectSession(session.id, session);
142
- if (session.parentID === scopeSessionID() || activeChildSessions().has(session.id)) {
143
- setRevision((value) => value + 1);
144
- }
145
- };
146
- const refreshSession = (sessionID) => {
147
- if (sessionID === scopeSessionID() || activeChildSessions().has(sessionID)) {
148
- setRevision((value) => value + 1);
149
- }
256
+ unregister.push(props.api.event.on("session.created", event => syncCurrentSession(event.properties.info)), props.api.event.on("session.updated", event => syncCurrentSession(event.properties.info)), props.api.event.on("message.updated", event => refreshSession(event.properties.sessionID)), props.api.event.on("message.part.updated", event => refreshSession(event.properties.sessionID)), props.api.event.on("message.part.removed", event => refreshSession(event.properties.sessionID)));
257
+ timer = setInterval(() => setNow(Date.now()), 1_000);
258
+ });
259
+ onCleanup(() => {
260
+ sessionRequest += 1;
261
+ if (timer) clearInterval(timer);
262
+ for (const dispose of unregister) dispose();
263
+ });
264
+ return (() => {
265
+ var _el$10 = _$createElement("box"),
266
+ _el$11 = _$createElement("text"),
267
+ _el$12 = _$createElement("b"),
268
+ _el$14 = _$createElement("span");
269
+ _$insertNode(_el$10, _el$11);
270
+ _$setProp(_el$10, "overflow", "hidden");
271
+ _$insertNode(_el$11, _el$12);
272
+ _$insertNode(_el$11, _el$14);
273
+ _$insertNode(_el$12, _$createTextNode(`Subagents`));
274
+ _$insert(_el$14, (() => {
275
+ var _c$2 = _$memo(() => !!running().length);
276
+ return () => _c$2() ? ` (${running().length} running)` : "";
277
+ })());
278
+ _$insert(_el$10, _$createComponent(Show, {
279
+ get when() {
280
+ return taskCallIDs().length > 0;
281
+ },
282
+ get fallback() {
283
+ return (() => {
284
+ var _el$15 = _$createElement("text");
285
+ _$insertNode(_el$15, _$createTextNode(`No subagent running`));
286
+ _$effect(_$p => _$setProp(_el$15, "fg", props.api.theme.current.textMuted, _$p));
287
+ return _el$15;
288
+ })();
289
+ },
290
+ get children() {
291
+ return _$createComponent(For, {
292
+ get each() {
293
+ return taskCallIDs();
294
+ },
295
+ children: callID => _$createComponent(TaskCard, {
296
+ get api() {
297
+ return props.api;
298
+ },
299
+ callID: callID,
300
+ get currentSessionID() {
301
+ return props.sessionID;
302
+ },
303
+ tasksByCallID: tasksByCallID,
304
+ revision: revision,
305
+ now: now,
306
+ startedAt: startedAt
307
+ })
308
+ });
309
+ }
310
+ }), null);
311
+ _$effect(_p$ => {
312
+ var _v$6 = props.api.theme.current.text,
313
+ _v$7 = {
314
+ fg: props.api.theme.current.textMuted
150
315
  };
151
- unregister.push(props.api.event.on("session.created", (event) => syncCurrentSession(event.properties.info)), props.api.event.on("session.updated", (event) => syncCurrentSession(event.properties.info)), props.api.event.on("message.updated", (event) => refreshSession(event.properties.sessionID)), props.api.event.on("message.part.updated", (event) => refreshSession(event.properties.sessionID)), props.api.event.on("message.part.removed", (event) => refreshSession(event.properties.sessionID)));
152
- timer = setInterval(() => setNow(Date.now()), 1_000);
153
- });
154
- onCleanup(() => {
155
- sessionRequest += 1;
156
- if (timer)
157
- clearInterval(timer);
158
- for (const dispose of unregister)
159
- dispose();
316
+ _v$6 !== _p$.e && (_p$.e = _$setProp(_el$11, "fg", _v$6, _p$.e));
317
+ _v$7 !== _p$.t && (_p$.t = _$setProp(_el$14, "style", _v$7, _p$.t));
318
+ return _p$;
319
+ }, {
320
+ e: undefined,
321
+ t: undefined
160
322
  });
161
- return (_jsxs("box", { overflow: "hidden", children: [_jsxs("text", { fg: props.api.theme.current.text, children: [_jsx("b", { children: "Subagents" }), _jsx("span", { style: { fg: props.api.theme.current.textMuted }, children: running().length ? ` (${running().length} running)` : "" })] }), _jsx(Show, { when: taskCallIDs().length > 0, fallback: _jsx("text", { fg: props.api.theme.current.textMuted, children: "No subagent running" }), children: _jsx(For, { each: taskCallIDs(), children: (callID) => (_jsx(TaskCard, { api: props.api, callID: callID, currentSessionID: props.sessionID, tasksByCallID: tasksByCallID, revision: revision, now: now, startedAt: startedAt })) }) })] }));
323
+ return _el$10;
324
+ })();
162
325
  }
163
- const tui = async (api) => {
164
- api.slots.register({
165
- order: 90,
166
- slots: {
167
- sidebar_footer(_ctx, props) {
168
- return _jsx(RunningSubagents, { api: api, sessionID: props.session_id });
169
- },
170
- },
171
- });
326
+ const tui = async api => {
327
+ api.slots.register({
328
+ order: 90,
329
+ slots: {
330
+ sidebar_footer(_ctx, props) {
331
+ return _$createComponent(RunningSubagents, {
332
+ api: api,
333
+ get sessionID() {
334
+ return props.session_id;
335
+ }
336
+ });
337
+ }
338
+ }
339
+ });
172
340
  };
173
341
  const plugin = {
174
- id: "opencode-subagents-sidebar-plugin",
175
- tui,
342
+ id: "opencode-subagents-sidebar-plugin",
343
+ tui
176
344
  };
177
345
  export default plugin;
178
346
  //# sourceMappingURL=tui.js.map
package/dist/tui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui.js","names":["activityForPart","elapsedLabel","normalizeMeaningful","isVisibleTask","taskSessionID","createEffect","createMemo","createSignal","For","on","onCleanup","onMount","Show","stringValue","value","trim","undefined","objectValue","Array","isArray","taskAgent","part","state","input","subagent_type","taskDescription","description","title","taskModel","metadata","model","providerID","modelID","latestActivity","api","sessionID","fallback","messages","session","messageIndex","length","message","role","parts","id","partIndex","candidate","activity","modelLabel","childSessionID","index","provider","find","models","name","TaskCard","props","livePart","tasksByCallID","get","callID","isCurrent","currentSessionID","revision","elapsed","now","startedAt","_el$","_$createElement","_el$2","_el$3","_el$4","_el$5","_el$6","_$createTextNode","_el$7","_el$8","_el$9","_el$0","_el$1","_$insertNode","_$setProp","_$insert","_c$","_$memo","status","_$effect","_p$","_v$","fg","theme","current","warning","success","_v$2","text","_v$3","textMuted","_v$4","_v$5","e","t","a","o","i","RunningSubagents","scopeSessionID","setScopeSessionID","hydratedMessages","setHydratedMessages","setRevision","setNow","Date","firstSeen","Map","sessionRequest","loadMessages","request","result","client","directory","path","throwOnError","lifecycle","signal","aborted","data","selectSession","known","currentRequest","parentSessionID","parentID","running","flatMap","filter","map","taskCallIDs","activeChildSessions","Set","Boolean","time","start","existing","set","unregister","timer","syncCurrentSession","has","refreshSession","push","event","properties","info","setInterval","clearInterval","dispose","_el$10","_el$11","_el$12","_el$14","_c$2","_$createComponent","when","_el$15","_$p","children","each","_v$6","_v$7","tui","slots","register","order","sidebar_footer","_ctx","session_id","plugin"],"sources":["../src/tui.tsx"],"sourcesContent":["/** @jsxImportSource @opentui/solid */\n\nimport type { TuiPlugin, TuiPluginApi, TuiPluginModule } from \"@opencode-ai/plugin/tui\"\nimport type { Message, Part, Session } from \"@opencode-ai/sdk/v2\"\nimport { activityForPart, elapsedLabel, normalizeMeaningful } from \"./activity.js\"\nimport { isVisibleTask, taskSessionID, type VisibleTaskPart } from \"./tasks.js\"\nimport { createEffect, createMemo, createSignal, For, on, onCleanup, onMount, Show } from \"solid-js\"\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : {}\n}\n\nfunction taskAgent(part: VisibleTaskPart): string {\n return stringValue(part.state.input.subagent_type) ?? \"subagent\"\n}\n\nfunction taskDescription(part: VisibleTaskPart): string {\n return normalizeMeaningful(part.state.input.description) ?? normalizeMeaningful(objectValue(part.state).title) ?? \"Working\"\n}\n\nfunction taskModel(part: VisibleTaskPart): { providerID: string; modelID: string } | undefined {\n const metadata = objectValue(objectValue(part.state).metadata)\n const model = objectValue(metadata.model)\n const providerID = stringValue(model.providerID)\n const modelID = stringValue(model.modelID)\n return providerID && modelID ? { providerID, modelID } : undefined\n}\n\nfunction latestActivity(api: TuiPluginApi, sessionID: string | undefined, fallback: string): string {\n if (!sessionID) return fallback\n\n const messages = api.state.session.messages(sessionID)\n for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {\n const message = messages[messageIndex]\n if (message?.role !== \"assistant\") continue\n\n const parts = api.state.part(message.id)\n for (let partIndex = parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const candidate = parts[partIndex]\n if (!candidate) continue\n const activity = activityForPart(candidate)\n if (activity) return activity\n }\n }\n return fallback\n}\n\nfunction modelLabel(api: TuiPluginApi, part: VisibleTaskPart): string {\n let model = taskModel(part)\n const childSessionID = taskSessionID(part)\n if (!model && childSessionID) {\n const messages = api.state.session.messages(childSessionID)\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index]\n if (message?.role === \"assistant\") {\n model = { providerID: message.providerID, modelID: message.modelID }\n break\n }\n }\n }\n\n if (!model) return \"starting…\"\n return api.state.provider.find((provider) => provider.id === model.providerID)?.models[model.modelID]?.name ?? model.modelID\n}\n\nfunction TaskCard(props: {\n api: TuiPluginApi\n callID: string\n currentSessionID: string\n tasksByCallID: () => Map<string, VisibleTaskPart>\n revision: () => number\n now: () => number\n startedAt: (part: VisibleTaskPart) => number\n}) {\n // The call ID is stable, while the actual ToolPart is re-read after each event.\n // This prevents cards from retaining a stale part object after a state update.\n const livePart = createMemo(() => props.tasksByCallID().get(props.callID))\n const childSessionID = () => taskSessionID(livePart()!)\n const isCurrent = () => childSessionID() === props.currentSessionID\n const model = () => {\n props.revision()\n return modelLabel(props.api, livePart()!)\n }\n const activity = () => {\n props.revision()\n return latestActivity(props.api, childSessionID(), taskDescription(livePart()!))\n }\n const elapsed = () => elapsedLabel(props.now() - props.startedAt(livePart()!))\n\n return (\n <box width=\"100%\" height={2} overflow=\"hidden\">\n <box width=\"100%\" height={1} flexDirection=\"row\" overflow=\"hidden\">\n <text flexGrow={1} flexShrink={1} minWidth={0} wrapMode=\"none\" truncate>\n <span\n style={{\n fg:\n livePart()!.state.status === \"pending\"\n ? props.api.theme.current.warning\n : props.api.theme.current.success,\n }}\n >\n {isCurrent() ? \"›\" : livePart()!.state.status === \"pending\" ? \"…\" : \"●\"}\n </span>\n <span style={{ fg: props.api.theme.current.text }}>\n {\" \"}\n <b>{taskAgent(livePart()!)}</b>\n </span>\n </text>\n <text\n flexShrink={0}\n maxWidth={20}\n marginLeft={1}\n wrapMode=\"none\"\n truncate\n fg={props.api.theme.current.textMuted}\n >\n {model()}\n </text>\n </box>\n <box width=\"100%\" height={1} flexDirection=\"row\" overflow=\"hidden\">\n <text\n flexGrow={1}\n flexShrink={1}\n minWidth={0}\n wrapMode=\"none\"\n truncate\n fg={props.api.theme.current.textMuted}\n >\n {activity()}\n </text>\n <text\n width={8}\n flexShrink={0}\n marginLeft={1}\n wrapMode=\"none\"\n truncate\n fg={props.api.theme.current.textMuted}\n >\n {elapsed()}\n </text>\n </box>\n </box>\n )\n}\n\nfunction RunningSubagents(props: { api: TuiPluginApi; sessionID: string }) {\n const [scopeSessionID, setScopeSessionID] = createSignal<string>()\n const [hydratedMessages, setHydratedMessages] = createSignal<ReadonlyArray<{ info: Message; parts: ReadonlyArray<Part> }>>([])\n const [revision, setRevision] = createSignal(0)\n const [now, setNow] = createSignal(Date.now())\n const firstSeen = new Map<string, number>()\n let sessionRequest = 0\n\n const loadMessages = async (sessionID: string, request: number): Promise<void> => {\n if (props.api.state.session.messages(sessionID).length) return\n\n try {\n const result = await props.api.client.session.messages(\n { sessionID, directory: props.api.state.path.directory },\n { throwOnError: true },\n )\n if (props.api.lifecycle.signal.aborted || request !== sessionRequest || scopeSessionID() !== sessionID) return\n setHydratedMessages(result.data)\n setRevision((value) => value + 1)\n } catch {\n // Live session events can populate the public TUI state after a failed hydration.\n }\n }\n\n const selectSession = async (sessionID: string, known?: Session): Promise<void> => {\n const currentRequest = ++sessionRequest\n setScopeSessionID(undefined)\n setHydratedMessages([])\n let session = known ?? props.api.state.session.get(sessionID)\n\n if (!session) {\n try {\n const result = await props.api.client.session.get(\n { sessionID, directory: props.api.state.path.directory },\n { throwOnError: true },\n )\n session = result.data\n } catch {\n // Leave the scope unset so a failed child lookup cannot show its own tasks.\n // A later session event retries after local state is populated.\n return\n }\n }\n\n if (props.api.lifecycle.signal.aborted || currentRequest !== sessionRequest) return\n const parentSessionID = session.parentID ?? session.id\n setScopeSessionID(parentSessionID)\n setRevision((value) => value + 1)\n void loadMessages(parentSessionID, currentRequest)\n }\n\n createEffect(on(() => props.sessionID, (sessionID) => void selectSession(sessionID)))\n\n const running = createMemo(() => {\n revision()\n const sessionID = scopeSessionID()\n if (!sessionID) return []\n\n const messages = props.api.state.session.messages(sessionID)\n const parts = messages.length\n ? messages.flatMap((message) => props.api.state.part(message.id))\n : hydratedMessages().flatMap((message) => message.parts)\n return parts.filter((part) => isVisibleTask(part, props.api.state.session.status))\n })\n const tasksByCallID = createMemo(() => new Map(running().map((part) => [part.callID, part])))\n const taskCallIDs = createMemo(() => running().map((part) => part.callID))\n const activeChildSessions = createMemo(\n () => new Set(running().map(taskSessionID).filter((sessionID): sessionID is string => Boolean(sessionID))),\n )\n\n const startedAt = (part: VisibleTaskPart): number => {\n if (part.state.status !== \"pending\") return part.state.time.start\n const existing = firstSeen.get(part.callID)\n if (existing !== undefined) return existing\n const value = now()\n firstSeen.set(part.callID, value)\n return value\n }\n\n const unregister: Array<() => void> = []\n let timer: ReturnType<typeof setInterval> | undefined\n\n onMount(() => {\n const syncCurrentSession = (session: Session) => {\n if (session.id === props.sessionID) void selectSession(session.id, session)\n if (session.parentID === scopeSessionID() || activeChildSessions().has(session.id)) {\n setRevision((value) => value + 1)\n }\n }\n const refreshSession = (sessionID: string) => {\n if (sessionID === scopeSessionID() || activeChildSessions().has(sessionID)) {\n setRevision((value) => value + 1)\n }\n }\n\n unregister.push(\n props.api.event.on(\"session.created\", (event) => syncCurrentSession(event.properties.info)),\n props.api.event.on(\"session.updated\", (event) => syncCurrentSession(event.properties.info)),\n props.api.event.on(\"message.updated\", (event) => refreshSession(event.properties.sessionID)),\n props.api.event.on(\"message.part.updated\", (event) => refreshSession(event.properties.sessionID)),\n props.api.event.on(\"message.part.removed\", (event) => refreshSession(event.properties.sessionID)),\n )\n timer = setInterval(() => setNow(Date.now()), 1_000)\n })\n\n onCleanup(() => {\n sessionRequest += 1\n if (timer) clearInterval(timer)\n for (const dispose of unregister) dispose()\n })\n\n return (\n <box overflow=\"hidden\">\n <text fg={props.api.theme.current.text}>\n <b>Subagents</b>\n <span style={{ fg: props.api.theme.current.textMuted }}>\n {running().length ? ` (${running().length} running)` : \"\"}\n </span>\n </text>\n\n <Show\n when={taskCallIDs().length > 0}\n fallback={<text fg={props.api.theme.current.textMuted}>No subagent running</text>}\n >\n <For each={taskCallIDs()}>\n {(callID) => (\n <TaskCard\n api={props.api}\n callID={callID}\n currentSessionID={props.sessionID}\n tasksByCallID={tasksByCallID}\n revision={revision}\n now={now}\n startedAt={startedAt}\n />\n )}\n </For>\n </Show>\n </box>\n )\n}\n\nconst tui: TuiPlugin = async (api) => {\n api.slots.register({\n order: 90,\n slots: {\n sidebar_footer(_ctx, props) {\n return <RunningSubagents api={api} sessionID={props.session_id} />\n },\n },\n })\n}\n\nconst plugin = {\n id: \"opencode-subagents-sidebar-plugin\",\n tui,\n} satisfies TuiPluginModule\n\nexport default plugin\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-subagents-sidebar-plugin",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "OpenCode TUI sidebar footer for active subagents.",
5
5
  "keywords": [
6
6
  "opencode",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "scripts": {
37
37
  "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
38
- "build": "npm run clean && tsc --project tsconfig.build.json",
38
+ "build": "npm run clean && tsc --project tsconfig.build.json && babel src --extensions .ts,.tsx --out-dir dist --source-maps",
39
39
  "typecheck": "tsc --noEmit --project tsconfig.json",
40
40
  "test": "npm run build && node --test test/*.test.mjs",
41
41
  "check": "npm run typecheck && npm test"
@@ -46,6 +46,10 @@
46
46
  "solid-js": "1.9.12"
47
47
  },
48
48
  "devDependencies": {
49
+ "@babel/cli": "7.28.0",
50
+ "@babel/core": "7.28.0",
51
+ "@babel/preset-typescript": "7.27.1",
52
+ "babel-preset-solid": "1.9.12",
49
53
  "typescript": "5.9.3"
50
54
  }
51
55
  }