opencode-subagents-sidebar-plugin 0.1.2 → 0.1.5

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 CHANGED
@@ -4,9 +4,21 @@ An OpenCode 1.17.15+ TUI-only plugin that adds a **Subagents** section to the
4
4
  sidebar footer. It shows pending and running task subagents for the current
5
5
  parent session (or when viewing one of its child sessions).
6
6
 
7
- Each subagent uses a compact two-line card: status and role with its model,
8
- then its newest meaningful activity with elapsed runtime. Completed tasks are
9
- hidden.
7
+ Each subagent uses a compact two-line card: its role with model and raw
8
+ effort/reasoning variant, then its assigned task description with a
9
+ right-aligned elapsed runtime. Click anywhere on a card to open a non-modal,
10
+ live popover attached to that card (left first, then right, with above/below
11
+ fallbacks on narrow terminals). It shows status, foreground/background mode,
12
+ child session ID, model details, and the newest visible assistant reply as a
13
+ single truncated line. When the public TUI state has not populated the child
14
+ transcript yet, the plugin hydrates it without overriding newer live state. It
15
+ waits for the child session or assistant reply when that information is not
16
+ available yet. Opening another card replaces the popover; navigating away,
17
+ opening a host dialog, or closing the popover dismisses it. The popup's **Open
18
+ Session** action is available once the child session exists (unless it is
19
+ already open); **Close** dismisses the popover.
20
+ Completed tasks are hidden unless OpenCode still reports their background child
21
+ session as active.
10
22
 
11
23
  ## Install
12
24
 
@@ -1,6 +1,2 @@
1
- import type { Part } from "@opencode-ai/sdk/v2";
2
- export declare function normalizeActivity(value: string): string;
3
- export declare function normalizeMeaningful(value: unknown): string | undefined;
4
- export declare function activityForPart(part: Part): string | undefined;
5
1
  export declare function elapsedLabel(milliseconds: number): string;
6
2
  //# sourceMappingURL=activity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAM/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtE;AASD,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAe9D;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAQzD"}
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAQzD"}
package/dist/activity.js CHANGED
@@ -1,31 +1,3 @@
1
- function stringValue(value) {
2
- return typeof value === "string" && value.trim() ? value.trim() : undefined;
3
- }
4
- export function normalizeActivity(value) {
5
- return value.replace(/\s+/g, " ").replace(/^[#>*_`\-\s]+/, "").replace(/[*_`]/g, "").trim();
6
- }
7
- export function normalizeMeaningful(value) {
8
- const text = stringValue(value);
9
- return text ? stringValue(normalizeActivity(text)) : undefined;
10
- }
11
- function toolName(value) {
12
- return value.replace(/^multi_tool_use\./, "").replace(/[._-]+/g, " ").replace(/\b\w/g, character => character.toUpperCase());
13
- }
14
- export function activityForPart(part) {
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}…`;
28
- }
29
1
  export function elapsedLabel(milliseconds) {
30
2
  const seconds = Math.max(0, Math.floor(milliseconds / 1_000));
31
3
  if (seconds < 60) return `${seconds}s`;
@@ -1 +1 @@
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":"AAEA,SAASA,WAAWA,CAACC,KAAc,EAAsB;EACvD,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACC,IAAI,CAAC,CAAC,GAAGD,KAAK,CAACC,IAAI,CAAC,CAAC,GAAGC,SAAS;AAC7E;AAEA,OAAO,SAASC,iBAAiBA,CAACH,KAAa,EAAU;EACvD,OAAOA,KAAK,CACTI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CACpBA,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAC5BA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CACrBH,IAAI,CAAC,CAAC;AACX;AAEA,OAAO,SAASI,mBAAmBA,CAACL,KAAc,EAAsB;EACtE,MAAMM,IAAI,GAAGP,WAAW,CAACC,KAAK,CAAC;EAC/B,OAAOM,IAAI,GAAGP,WAAW,CAACI,iBAAiB,CAACG,IAAI,CAAC,CAAC,GAAGJ,SAAS;AAChE;AAEA,SAASK,QAAQA,CAACP,KAAa,EAAU;EACvC,OAAOA,KAAK,CACTI,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAChCA,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CACvBA,OAAO,CAAC,OAAO,EAAGI,SAAS,IAAKA,SAAS,CAACC,WAAW,CAAC,CAAC,CAAC;AAC7D;AAEA,OAAO,SAASC,eAAeA,CAACC,IAAU,EAAsB;EAC9D,IAAIA,IAAI,CAACC,IAAI,KAAK,MAAM,IAAID,IAAI,CAACC,IAAI,KAAK,WAAW,EAAE,OAAOP,mBAAmB,CAACM,IAAI,CAACL,IAAI,CAAC;EAC5F,IAAIK,IAAI,CAACC,IAAI,KAAK,SAAS,EAAE;IAC3B,MAAMC,WAAW,GAAGR,mBAAmB,CAACM,IAAI,CAACE,WAAW,CAAC;IACzD,OAAOA,WAAW,GAAG,gBAAgBA,WAAW,EAAE,GAAG,YAAY;EACnE;EACA,IAAIF,IAAI,CAACC,IAAI,KAAK,OAAO,EAAE,OAAO,sBAAsBD,IAAI,CAACG,OAAO,EAAE;EACtE,IAAIH,IAAI,CAACC,IAAI,KAAK,YAAY,EAAE,OAAO,qBAAqB;EAC5D,IAAID,IAAI,CAACC,IAAI,KAAK,MAAM,EAAE,OAAOV,SAAS;EAE1C,MAAMa,IAAI,GAAGR,QAAQ,CAACI,IAAI,CAACK,IAAI,CAAC;EAChC,IAAIL,IAAI,CAACM,KAAK,CAACC,MAAM,KAAK,SAAS,EAAE,OAAO,GAAGH,IAAI,GAAG;EACtD,IAAIJ,IAAI,CAACM,KAAK,CAACC,MAAM,KAAK,OAAO,EAAE,OAAO,GAAGH,IAAI,SAAS;EAC1D,MAAMI,KAAK,GAAGd,mBAAmB,CAACM,IAAI,CAACM,KAAK,CAACE,KAAK,CAAC;EACnD,OAAOA,KAAK,GAAG,GAAGJ,IAAI,MAAMI,KAAK,EAAE,GAAG,GAAGJ,IAAI,GAAG;AAClD;AAEA,OAAO,SAASK,YAAYA,CAACC,YAAoB,EAAU;EACzD,MAAMC,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,KAAK,CAACJ,YAAY,GAAG,KAAK,CAAC,CAAC;EAC7D,IAAIC,OAAO,GAAG,EAAE,EAAE,OAAO,GAAGA,OAAO,GAAG;EACtC,MAAMI,OAAO,GAAGH,IAAI,CAACE,KAAK,CAACH,OAAO,GAAG,EAAE,CAAC;EACxC,IAAII,OAAO,GAAG,EAAE,EAAE,OAAO,GAAGA,OAAO,KAAKJ,OAAO,GAAG,EAAE,GAAG;EACvD,MAAMK,KAAK,GAAGJ,IAAI,CAACE,KAAK,CAACC,OAAO,GAAG,EAAE,CAAC;EACtC,IAAIC,KAAK,GAAG,EAAE,EAAE,OAAO,GAAGA,KAAK,KAAKD,OAAO,GAAG,EAAE,GAAG;EACnD,OAAO,GAAGH,IAAI,CAACE,KAAK,CAACE,KAAK,GAAG,EAAE,CAAC,KAAKA,KAAK,GAAG,EAAE,GAAG;AACpD","ignoreList":[]}
1
+ {"version":3,"file":"activity.js","names":["elapsedLabel","milliseconds","seconds","Math","max","floor","minutes","hours"],"sources":["../src/activity.ts"],"sourcesContent":["export 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":"AAAA,OAAO,SAASA,YAAYA,CAACC,YAAoB,EAAU;EACzD,MAAMC,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,KAAK,CAACJ,YAAY,GAAG,KAAK,CAAC,CAAC;EAC7D,IAAIC,OAAO,GAAG,EAAE,EAAE,OAAO,GAAGA,OAAO,GAAG;EACtC,MAAMI,OAAO,GAAGH,IAAI,CAACE,KAAK,CAACH,OAAO,GAAG,EAAE,CAAC;EACxC,IAAII,OAAO,GAAG,EAAE,EAAE,OAAO,GAAGA,OAAO,KAAKJ,OAAO,GAAG,EAAE,GAAG;EACvD,MAAMK,KAAK,GAAGJ,IAAI,CAACE,KAAK,CAACC,OAAO,GAAG,EAAE,CAAC;EACtC,IAAIC,KAAK,GAAG,EAAE,EAAE,OAAO,GAAGA,KAAK,KAAKD,OAAO,GAAG,EAAE,GAAG;EACnD,OAAO,GAAGH,IAAI,CAACE,KAAK,CAACE,KAAK,GAAG,EAAE,CAAC,KAAKA,KAAK,GAAG,EAAE,GAAG;AACpD","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ export type PopoverAnchor = {
2
+ x: number;
3
+ y: number;
4
+ width: number;
5
+ height: number;
6
+ };
7
+ export type PopoverBounds = {
8
+ width: number;
9
+ height: number;
10
+ };
11
+ export type PopoverPlacement = {
12
+ left: number;
13
+ top: number;
14
+ width: number;
15
+ height: number;
16
+ };
17
+ /**
18
+ * Positions a root-level popover against one edge of its anchor. Sidebar cards
19
+ * prefer horizontal attachment so cards near the bottom can shift the popover
20
+ * upward without losing contact with the card.
21
+ */
22
+ export declare function placePopover(anchor: PopoverAnchor, terminal: PopoverBounds, requestedSize: PopoverBounds): PopoverPlacement;
23
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../src/popover.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,aAAa,GAC3B,gBAAgB,CAyBlB"}
@@ -0,0 +1,57 @@
1
+ function clamp(value, minimum, maximum) {
2
+ return Math.max(minimum, Math.min(value, maximum));
3
+ }
4
+
5
+ /**
6
+ * Positions a root-level popover against one edge of its anchor. Sidebar cards
7
+ * prefer horizontal attachment so cards near the bottom can shift the popover
8
+ * upward without losing contact with the card.
9
+ */
10
+ export function placePopover(anchor, terminal, requestedSize) {
11
+ const viewportWidth = Math.max(0, terminal.width);
12
+ const viewportHeight = Math.max(0, terminal.height);
13
+ const width = Math.min(Math.max(1, requestedSize.width), viewportWidth);
14
+ const height = Math.min(Math.max(1, requestedSize.height), viewportHeight);
15
+ const maxLeft = Math.max(0, viewportWidth - width);
16
+ const maxTop = Math.max(0, viewportHeight - height);
17
+ const sideTop = clamp(anchor.y, 0, maxTop);
18
+ const left = anchor.x - width;
19
+ if (left >= 0 && left <= maxLeft) return {
20
+ left,
21
+ top: sideTop,
22
+ width,
23
+ height
24
+ };
25
+ const right = anchor.x + anchor.width;
26
+ if (right >= 0 && right + width <= viewportWidth) return {
27
+ left: right,
28
+ top: sideTop,
29
+ width,
30
+ height
31
+ };
32
+ const verticalLeft = clamp(anchor.x, 0, maxLeft);
33
+ const below = anchor.y + anchor.height;
34
+ if (below >= 0 && below + height <= viewportHeight) return {
35
+ left: verticalLeft,
36
+ top: below,
37
+ width,
38
+ height
39
+ };
40
+ const above = anchor.y - height;
41
+ if (above >= 0 && above <= maxTop) return {
42
+ left: verticalLeft,
43
+ top: above,
44
+ width,
45
+ height
46
+ };
47
+
48
+ // Extremely small viewports cannot preserve attachment without covering the
49
+ // anchor. Keep the requested box fully visible and bias toward below.
50
+ return {
51
+ left: verticalLeft,
52
+ top: clamp(below, 0, maxTop),
53
+ width,
54
+ height
55
+ };
56
+ }
57
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.js","names":["clamp","value","minimum","maximum","Math","max","min","placePopover","anchor","terminal","requestedSize","viewportWidth","width","viewportHeight","height","maxLeft","maxTop","sideTop","y","left","x","top","right","verticalLeft","below","above"],"sources":["../src/popover.ts"],"sourcesContent":["export type PopoverAnchor = {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport type PopoverBounds = {\n width: number\n height: number\n}\n\nexport type PopoverPlacement = {\n left: number\n top: number\n width: number\n height: number\n}\n\nfunction clamp(value: number, minimum: number, maximum: number): number {\n return Math.max(minimum, Math.min(value, maximum))\n}\n\n/**\n * Positions a root-level popover against one edge of its anchor. Sidebar cards\n * prefer horizontal attachment so cards near the bottom can shift the popover\n * upward without losing contact with the card.\n */\nexport function placePopover(\n anchor: PopoverAnchor,\n terminal: PopoverBounds,\n requestedSize: PopoverBounds,\n): PopoverPlacement {\n const viewportWidth = Math.max(0, terminal.width)\n const viewportHeight = Math.max(0, terminal.height)\n const width = Math.min(Math.max(1, requestedSize.width), viewportWidth)\n const height = Math.min(Math.max(1, requestedSize.height), viewportHeight)\n const maxLeft = Math.max(0, viewportWidth - width)\n const maxTop = Math.max(0, viewportHeight - height)\n const sideTop = clamp(anchor.y, 0, maxTop)\n const left = anchor.x - width\n\n if (left >= 0 && left <= maxLeft) return { left, top: sideTop, width, height }\n\n const right = anchor.x + anchor.width\n if (right >= 0 && right + width <= viewportWidth) return { left: right, top: sideTop, width, height }\n\n const verticalLeft = clamp(anchor.x, 0, maxLeft)\n const below = anchor.y + anchor.height\n if (below >= 0 && below + height <= viewportHeight) return { left: verticalLeft, top: below, width, height }\n\n const above = anchor.y - height\n if (above >= 0 && above <= maxTop) return { left: verticalLeft, top: above, width, height }\n\n // Extremely small viewports cannot preserve attachment without covering the\n // anchor. Keep the requested box fully visible and bias toward below.\n return { left: verticalLeft, top: clamp(below, 0, maxTop), width, height }\n}\n"],"mappings":"AAmBA,SAASA,KAAKA,CAACC,KAAa,EAAEC,OAAe,EAAEC,OAAe,EAAU;EACtE,OAAOC,IAAI,CAACC,GAAG,CAACH,OAAO,EAAEE,IAAI,CAACE,GAAG,CAACL,KAAK,EAAEE,OAAO,CAAC,CAAC;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,YAAYA,CAC1BC,MAAqB,EACrBC,QAAuB,EACvBC,aAA4B,EACV;EAClB,MAAMC,aAAa,GAAGP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEI,QAAQ,CAACG,KAAK,CAAC;EACjD,MAAMC,cAAc,GAAGT,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEI,QAAQ,CAACK,MAAM,CAAC;EACnD,MAAMF,KAAK,GAAGR,IAAI,CAACE,GAAG,CAACF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEK,aAAa,CAACE,KAAK,CAAC,EAAED,aAAa,CAAC;EACvE,MAAMG,MAAM,GAAGV,IAAI,CAACE,GAAG,CAACF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEK,aAAa,CAACI,MAAM,CAAC,EAAED,cAAc,CAAC;EAC1E,MAAME,OAAO,GAAGX,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEM,aAAa,GAAGC,KAAK,CAAC;EAClD,MAAMI,MAAM,GAAGZ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEQ,cAAc,GAAGC,MAAM,CAAC;EACnD,MAAMG,OAAO,GAAGjB,KAAK,CAACQ,MAAM,CAACU,CAAC,EAAE,CAAC,EAAEF,MAAM,CAAC;EAC1C,MAAMG,IAAI,GAAGX,MAAM,CAACY,CAAC,GAAGR,KAAK;EAE7B,IAAIO,IAAI,IAAI,CAAC,IAAIA,IAAI,IAAIJ,OAAO,EAAE,OAAO;IAAEI,IAAI;IAAEE,GAAG,EAAEJ,OAAO;IAAEL,KAAK;IAAEE;EAAO,CAAC;EAE9E,MAAMQ,KAAK,GAAGd,MAAM,CAACY,CAAC,GAAGZ,MAAM,CAACI,KAAK;EACrC,IAAIU,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAGV,KAAK,IAAID,aAAa,EAAE,OAAO;IAAEQ,IAAI,EAAEG,KAAK;IAAED,GAAG,EAAEJ,OAAO;IAAEL,KAAK;IAAEE;EAAO,CAAC;EAErG,MAAMS,YAAY,GAAGvB,KAAK,CAACQ,MAAM,CAACY,CAAC,EAAE,CAAC,EAAEL,OAAO,CAAC;EAChD,MAAMS,KAAK,GAAGhB,MAAM,CAACU,CAAC,GAAGV,MAAM,CAACM,MAAM;EACtC,IAAIU,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAGV,MAAM,IAAID,cAAc,EAAE,OAAO;IAAEM,IAAI,EAAEI,YAAY;IAAEF,GAAG,EAAEG,KAAK;IAAEZ,KAAK;IAAEE;EAAO,CAAC;EAE5G,MAAMW,KAAK,GAAGjB,MAAM,CAACU,CAAC,GAAGJ,MAAM;EAC/B,IAAIW,KAAK,IAAI,CAAC,IAAIA,KAAK,IAAIT,MAAM,EAAE,OAAO;IAAEG,IAAI,EAAEI,YAAY;IAAEF,GAAG,EAAEI,KAAK;IAAEb,KAAK;IAAEE;EAAO,CAAC;;EAE3F;EACA;EACA,OAAO;IAAEK,IAAI,EAAEI,YAAY;IAAEF,GAAG,EAAErB,KAAK,CAACwB,KAAK,EAAE,CAAC,EAAER,MAAM,CAAC;IAAEJ,KAAK;IAAEE;EAAO,CAAC;AAC5E","ignoreList":[]}
package/dist/tasks.d.ts CHANGED
@@ -1,5 +1,22 @@
1
- import type { Part, SessionStatus, ToolPart } from "@opencode-ai/sdk/v2";
1
+ import type { Message, Part, Session, SessionStatus, ToolPart } from "@opencode-ai/sdk/v2";
2
2
  export type VisibleTaskPart = ToolPart;
3
+ export type TaskModel = {
4
+ providerID: string;
5
+ modelID: string;
6
+ variant?: string;
7
+ };
8
+ export declare function normalizeTaskDescription(value: unknown): string | undefined;
3
9
  export declare function taskSessionID(part: ToolPart): string | undefined;
10
+ export declare function taskAgent(part: VisibleTaskPart): string;
11
+ export declare function taskDescription(part: VisibleTaskPart): string;
12
+ /** Returns the latest visible assistant response as a single display line. */
13
+ export declare function latestAssistantText(messages: ReadonlyArray<Message>, partsForMessage: (messageID: string) => ReadonlyArray<Part>): string | undefined;
14
+ export declare function resolveTaskModel(part: VisibleTaskPart, childSession: Session | undefined, childMessages: ReadonlyArray<Message>): TaskModel | undefined;
15
+ export declare function taskModelLabel(model: TaskModel | undefined, displayName?: string): string;
16
+ export declare function taskVariantLabel(model: TaskModel | undefined): string | undefined;
17
+ export declare function taskStatusLabel(part: VisibleTaskPart, childStatus?: SessionStatus): string;
18
+ export declare function taskModeLabel(part: VisibleTaskPart): "Foreground" | "Background";
19
+ export declare function canOpenTaskSession(sessionID: string | undefined, currentSessionID: string): boolean;
20
+ export declare function isTaskPart(part: Part): part is VisibleTaskPart;
4
21
  export declare function isVisibleTask(part: Part, sessionStatus: (sessionID: string) => SessionStatus | undefined): part is VisibleTaskPart;
5
22
  //# sourceMappingURL=tasks.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE1F,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAA;AAEtC,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAcD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAO3E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAGhE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAEvD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAE7D;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,aAAa,CAAC,IAAI,CAAC,GAC1D,MAAM,GAAG,SAAS,CAcpB;AAgCD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,OAAO,GAAG,SAAS,EACjC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,GACpC,SAAS,GAAG,SAAS,CAYvB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEjF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,aAAa,GAAG,MAAM,CAM1F;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,GAAG,YAAY,CAEhF;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAEnG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,eAAe,CAE9D;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 CHANGED
@@ -1,18 +1,117 @@
1
1
  function objectValue(value) {
2
2
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
3
3
  }
4
+ function stringValue(value) {
5
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
6
+ }
4
7
  function taskMetadata(part) {
5
8
  return {
6
9
  ...objectValue(part.metadata),
7
10
  ...objectValue(objectValue(part.state).metadata)
8
11
  };
9
12
  }
13
+ export function normalizeTaskDescription(value) {
14
+ const text = stringValue(value);
15
+ return text?.replace(/\s+/g, " ").replace(/^[#>*_`\-\s]+/, "").replace(/[*_`]/g, "").trim() || undefined;
16
+ }
10
17
  export function taskSessionID(part) {
11
18
  const sessionID = taskMetadata(part).sessionId;
12
- return typeof sessionID === "string" && sessionID.trim() ? sessionID.trim() : undefined;
19
+ return stringValue(sessionID);
20
+ }
21
+ export function taskAgent(part) {
22
+ return stringValue(part.state.input.subagent_type) ?? "subagent";
23
+ }
24
+ export function taskDescription(part) {
25
+ return normalizeTaskDescription(part.state.input.description) ?? normalizeTaskDescription(objectValue(part.state).title) ?? "Working";
26
+ }
27
+
28
+ /** Returns the latest visible assistant response as a single display line. */
29
+ export function latestAssistantText(messages, partsForMessage) {
30
+ for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {
31
+ const message = messages[messageIndex];
32
+ if (!message || message.role !== "assistant") continue;
33
+ const text = partsForMessage(message.id).filter(part => part.type === "text" && !part.ignored).map(part => part.text).join(" ").replace(/\s+/g, " ").trim();
34
+ if (text) return text;
35
+ }
36
+ return undefined;
37
+ }
38
+ function taskMetadataModel(part) {
39
+ const model = objectValue(taskMetadata(part).model);
40
+ const providerID = stringValue(model.providerID);
41
+ const modelID = stringValue(model.modelID);
42
+ // Task metadata is created before the child chooses a model variant. Do not
43
+ // invent or retain a variant from this startup-only fallback.
44
+ return providerID && modelID ? {
45
+ providerID,
46
+ modelID
47
+ } : undefined;
48
+ }
49
+ function childSessionModel(session) {
50
+ const providerID = stringValue(session?.model?.providerID);
51
+ const modelID = stringValue(session?.model?.id);
52
+ const variant = stringValue(session?.model?.variant);
53
+ return providerID && modelID ? {
54
+ providerID,
55
+ modelID,
56
+ variant: variant ?? "default"
57
+ } : undefined;
58
+ }
59
+ function childMessageModel(message) {
60
+ if (message.role === "user") {
61
+ const providerID = stringValue(message.model.providerID);
62
+ const modelID = stringValue(message.model.modelID);
63
+ const variant = stringValue(message.model.variant);
64
+ return providerID && modelID ? {
65
+ providerID,
66
+ modelID,
67
+ variant: variant ?? "default"
68
+ } : undefined;
69
+ }
70
+ const providerID = stringValue(message.providerID);
71
+ const modelID = stringValue(message.modelID);
72
+ const variant = stringValue(message.variant);
73
+ return providerID && modelID ? {
74
+ providerID,
75
+ modelID,
76
+ variant: variant ?? "default"
77
+ } : undefined;
78
+ }
79
+ export function resolveTaskModel(part, childSession, childMessages) {
80
+ const sessionModel = childSessionModel(childSession);
81
+ if (sessionModel) return sessionModel;
82
+ for (let index = childMessages.length - 1; index >= 0; index -= 1) {
83
+ const message = childMessages[index];
84
+ if (!message) continue;
85
+ const messageModel = childMessageModel(message);
86
+ if (messageModel) return messageModel;
87
+ }
88
+ return taskMetadataModel(part);
89
+ }
90
+ export function taskModelLabel(model, displayName) {
91
+ if (!model) return "starting…";
92
+ return stringValue(displayName) ?? model.modelID;
93
+ }
94
+ export function taskVariantLabel(model) {
95
+ return model?.variant;
96
+ }
97
+ export function taskStatusLabel(part, childStatus) {
98
+ if (part.state.status === "completed" && childStatus && childStatus.type !== "idle") return "Running";
99
+ if (part.state.status === "pending") return "Pending";
100
+ if (part.state.status === "running") return "Running";
101
+ if (part.state.status === "completed") return "Completed";
102
+ return "Failed";
103
+ }
104
+ export function taskModeLabel(part) {
105
+ return taskMetadata(part).background === true ? "Background" : "Foreground";
106
+ }
107
+ export function canOpenTaskSession(sessionID, currentSessionID) {
108
+ return Boolean(sessionID && sessionID !== currentSessionID);
109
+ }
110
+ export function isTaskPart(part) {
111
+ return part.type === "tool" && part.tool === "task";
13
112
  }
14
113
  export function isVisibleTask(part, sessionStatus) {
15
- if (part.type !== "tool" || part.tool !== "task") return false;
114
+ if (!isTaskPart(part)) return false;
16
115
  if (part.state.status === "pending" || part.state.status === "running") return true;
17
116
  if (part.state.status !== "completed" || taskMetadata(part).background !== true) return false;
18
117
  const childSessionID = taskSessionID(part);
package/dist/tasks.js.map CHANGED
@@ -1 +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":[]}
1
+ {"version":3,"file":"tasks.js","names":["objectValue","value","Array","isArray","stringValue","trim","undefined","taskMetadata","part","metadata","state","normalizeTaskDescription","text","replace","taskSessionID","sessionID","sessionId","taskAgent","input","subagent_type","taskDescription","description","title","latestAssistantText","messages","partsForMessage","messageIndex","length","message","role","id","filter","type","ignored","map","join","taskMetadataModel","model","providerID","modelID","childSessionModel","session","variant","childMessageModel","resolveTaskModel","childSession","childMessages","sessionModel","index","messageModel","taskModelLabel","displayName","taskVariantLabel","taskStatusLabel","childStatus","status","taskModeLabel","background","canOpenTaskSession","currentSessionID","Boolean","isTaskPart","tool","isVisibleTask","sessionStatus","childSessionID"],"sources":["../src/tasks.ts"],"sourcesContent":["import type { Message, Part, Session, SessionStatus, ToolPart } from \"@opencode-ai/sdk/v2\"\n\nexport type VisibleTaskPart = ToolPart\n\nexport type TaskModel = {\n providerID: string\n modelID: string\n variant?: string\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 stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined\n}\n\nfunction taskMetadata(part: ToolPart): Record<string, unknown> {\n return { ...objectValue(part.metadata), ...objectValue(objectValue(part.state).metadata) }\n}\n\nexport function normalizeTaskDescription(value: unknown): string | undefined {\n const text = stringValue(value)\n return text\n ?.replace(/\\s+/g, \" \")\n .replace(/^[#>*_`\\-\\s]+/, \"\")\n .replace(/[*_`]/g, \"\")\n .trim() || undefined\n}\n\nexport function taskSessionID(part: ToolPart): string | undefined {\n const sessionID = taskMetadata(part).sessionId\n return stringValue(sessionID)\n}\n\nexport function taskAgent(part: VisibleTaskPart): string {\n return stringValue(part.state.input.subagent_type) ?? \"subagent\"\n}\n\nexport function taskDescription(part: VisibleTaskPart): string {\n return normalizeTaskDescription(part.state.input.description) ?? normalizeTaskDescription(objectValue(part.state).title) ?? \"Working\"\n}\n\n/** Returns the latest visible assistant response as a single display line. */\nexport function latestAssistantText(\n messages: ReadonlyArray<Message>,\n partsForMessage: (messageID: string) => ReadonlyArray<Part>,\n): string | undefined {\n for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {\n const message = messages[messageIndex]\n if (!message || message.role !== \"assistant\") continue\n\n const text = partsForMessage(message.id)\n .filter((part): part is Extract<Part, { type: \"text\" }> => part.type === \"text\" && !part.ignored)\n .map((part) => part.text)\n .join(\" \")\n .replace(/\\s+/g, \" \")\n .trim()\n if (text) return text\n }\n return undefined\n}\n\nfunction taskMetadataModel(part: VisibleTaskPart): TaskModel | undefined {\n const model = objectValue(taskMetadata(part).model)\n const providerID = stringValue(model.providerID)\n const modelID = stringValue(model.modelID)\n // Task metadata is created before the child chooses a model variant. Do not\n // invent or retain a variant from this startup-only fallback.\n return providerID && modelID ? { providerID, modelID } : undefined\n}\n\nfunction childSessionModel(session: Session | undefined): TaskModel | undefined {\n const providerID = stringValue(session?.model?.providerID)\n const modelID = stringValue(session?.model?.id)\n const variant = stringValue(session?.model?.variant)\n return providerID && modelID ? { providerID, modelID, variant: variant ?? \"default\" } : undefined\n}\n\nfunction childMessageModel(message: Message): TaskModel | undefined {\n if (message.role === \"user\") {\n const providerID = stringValue(message.model.providerID)\n const modelID = stringValue(message.model.modelID)\n const variant = stringValue(message.model.variant)\n return providerID && modelID ? { providerID, modelID, variant: variant ?? \"default\" } : undefined\n }\n\n const providerID = stringValue(message.providerID)\n const modelID = stringValue(message.modelID)\n const variant = stringValue(message.variant)\n return providerID && modelID ? { providerID, modelID, variant: variant ?? \"default\" } : undefined\n}\n\nexport function resolveTaskModel(\n part: VisibleTaskPart,\n childSession: Session | undefined,\n childMessages: ReadonlyArray<Message>,\n): TaskModel | undefined {\n const sessionModel = childSessionModel(childSession)\n if (sessionModel) return sessionModel\n\n for (let index = childMessages.length - 1; index >= 0; index -= 1) {\n const message = childMessages[index]\n if (!message) continue\n const messageModel = childMessageModel(message)\n if (messageModel) return messageModel\n }\n\n return taskMetadataModel(part)\n}\n\nexport function taskModelLabel(model: TaskModel | undefined, displayName?: string): string {\n if (!model) return \"starting…\"\n return stringValue(displayName) ?? model.modelID\n}\n\nexport function taskVariantLabel(model: TaskModel | undefined): string | undefined {\n return model?.variant\n}\n\nexport function taskStatusLabel(part: VisibleTaskPart, childStatus?: SessionStatus): string {\n if (part.state.status === \"completed\" && childStatus && childStatus.type !== \"idle\") return \"Running\"\n if (part.state.status === \"pending\") return \"Pending\"\n if (part.state.status === \"running\") return \"Running\"\n if (part.state.status === \"completed\") return \"Completed\"\n return \"Failed\"\n}\n\nexport function taskModeLabel(part: VisibleTaskPart): \"Foreground\" | \"Background\" {\n return taskMetadata(part).background === true ? \"Background\" : \"Foreground\"\n}\n\nexport function canOpenTaskSession(sessionID: string | undefined, currentSessionID: string): boolean {\n return Boolean(sessionID && sessionID !== currentSessionID)\n}\n\nexport function isTaskPart(part: Part): part is VisibleTaskPart {\n return part.type === \"tool\" && part.tool === \"task\"\n}\n\nexport function isVisibleTask(\n part: Part,\n sessionStatus: (sessionID: string) => SessionStatus | undefined,\n): part is VisibleTaskPart {\n if (!isTaskPart(part)) 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":"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","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;AA4SvF,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;AAknBvF,QAAA,MAAM,MAAM;;;CAGe,CAAA;AAE3B,eAAe,MAAM,CAAA"}