@workerdeck/ui 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/build/{SessionPanel-CnNYEX80.d.mts → SessionPanel-CnU_IJ3-.d.mts} +24 -9
  2. package/build/{SessionPanel-DMPhsNlW.mjs → SessionPanel-DPx8Iz8a.mjs} +439 -74
  3. package/build/SessionPanel-DPx8Iz8a.mjs.map +1 -0
  4. package/build/{format-DfI_je9S.d.mts → format-ljc3lKpA.d.mts} +1 -1
  5. package/build/format.d.mts +16 -5
  6. package/build/format.mjs +2 -3
  7. package/build/index.d.mts +237 -8
  8. package/build/index.mjs +399 -167
  9. package/build/index.mjs.map +1 -1
  10. package/build/{format-DqR56Y8l.mjs → status-BE-zg88x.mjs} +154 -2
  11. package/build/status-BE-zg88x.mjs.map +1 -0
  12. package/build/workspace.d.mts +4 -1
  13. package/build/workspace.mjs +4 -3
  14. package/build/workspace.mjs.map +1 -1
  15. package/package.json +4 -4
  16. package/src/components/agent/ContextRing.tsx +41 -0
  17. package/src/components/agent/EngineIcon.tsx +40 -0
  18. package/src/components/agent/SessionBrowser.tsx +115 -22
  19. package/src/components/agent/SessionPanel.tsx +153 -3
  20. package/src/components/agent/SessionSteps.tsx +233 -0
  21. package/src/components/agent/SessionWorkspace.tsx +4 -0
  22. package/src/components/agent/StatusBar.tsx +4 -2
  23. package/src/components/agent/SubagentStrip.tsx +134 -0
  24. package/src/components/agent/Transcript.tsx +138 -19
  25. package/src/components/agent/transcript-rows.ts +9 -1
  26. package/src/components/terminal/TerminalTranscript.tsx +77 -3
  27. package/src/components/terminal/affordances.tsx +34 -0
  28. package/src/components/terminal/blocks.ts +28 -0
  29. package/src/components/terminal/height.ts +24 -0
  30. package/src/components/terminal/items.tsx +1 -1
  31. package/src/components/terminal/scrubber.tsx +28 -3
  32. package/src/components/terminal/tool-run.ts +49 -5
  33. package/src/index.ts +19 -1
  34. package/src/lib/status.ts +16 -3
  35. package/src/styles/terminal.css +10 -0
  36. package/src/styles/theme.css +42 -0
  37. package/build/SessionPanel-DMPhsNlW.mjs.map +0 -1
  38. package/build/format-DqR56Y8l.mjs.map +0 -1
  39. package/build/status-Ydzi7n6j.mjs +0 -143
  40. package/build/status-Ydzi7n6j.mjs.map +0 -1
@@ -56,4 +56,4 @@ declare function toolInputPreview(input: unknown, max?: number): string;
56
56
  declare function friendlyModel(id: string | undefined): string | undefined;
57
57
  //#endregion
58
58
  export { formatDuration as a, formatRelativeTime as c, rateLimitWindowSeconds as d, toolInputPreview as f, formatCountdown as i, formatTokens as l, formatBytes as n, formatRateLimitWindow as o, formatCost as r, formatRateLimitWindowLong as s, formatAgoPrecise as t, friendlyModel as u };
59
- //# sourceMappingURL=format-DfI_je9S.d.mts.map
59
+ //# sourceMappingURL=format-ljc3lKpA.d.mts.map
@@ -1,5 +1,5 @@
1
- import { a as formatDuration, c as formatRelativeTime, d as rateLimitWindowSeconds, f as toolInputPreview, i as formatCountdown, l as formatTokens, n as formatBytes, o as formatRateLimitWindow, r as formatCost, s as formatRateLimitWindowLong, t as formatAgoPrecise, u as friendlyModel } from "./format-DfI_je9S.mjs";
2
- import { ContextUsage, ModelOption, RateLimitInfo, SessionStatus } from "@workerdeck/protocol";
1
+ import { a as formatDuration, c as formatRelativeTime, d as rateLimitWindowSeconds, f as toolInputPreview, i as formatCountdown, l as formatTokens, n as formatBytes, o as formatRateLimitWindow, r as formatCost, s as formatRateLimitWindowLong, t as formatAgoPrecise, u as friendlyModel } from "./format-ljc3lKpA.mjs";
2
+ import { ModelOption, RateLimitInfo, SessionStatus } from "@workerdeck/protocol";
3
3
 
4
4
  //#region src/lib/status.d.ts
5
5
  /**
@@ -94,8 +94,19 @@ declare function currentModel(vitals: ModelReadings | undefined): ModelOption |
94
94
  * id, and to "Default" while the session is on the CLI's own pick. */
95
95
  declare function modelLabel(vitals: ModelReadings | undefined): string;
96
96
  /** Context percentage as its meter severity — the reading and the colour come
97
- * from one place so a panel and a status bar never disagree. */
98
- declare function contextSeverity(usage: ContextUsage | undefined): StatusSeverity;
97
+ * from one place so a panel and a status bar never disagree.
98
+ *
99
+ * Takes only the number it reads, so the compact `ContextReading` that rides
100
+ * the sessions list and the full `ContextUsage` on the event stream are coloured
101
+ * by one rule rather than two. */
102
+ declare function contextSeverity(usage: {
103
+ percentage: number;
104
+ } | undefined): StatusSeverity;
105
+ /** {@link meterSeverity} as a text colour class. Here rather than beside each
106
+ * meter because the status bar, the context dialog and a sessions-list row all
107
+ * paint the same reading, and a fourth copy of the thresholds is a fourth
108
+ * chance for one surface to call 81% orange and another call it grey. */
109
+ declare function meterColorClass(pct: number | undefined): string;
99
110
  //#endregion
100
- export { ModelReadings, StatusPresentation, StatusReadings, StatusSeverity, UsageLane, contextSeverity, currentModel, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, meterSeverity, modelLabel, rateLimitWindowSeconds, statusPresentation, tightestWindow, toolInputPreview, usageWindow, windowLabel };
111
+ export { ModelReadings, StatusPresentation, StatusReadings, StatusSeverity, UsageLane, contextSeverity, currentModel, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, meterColorClass, meterSeverity, modelLabel, rateLimitWindowSeconds, statusPresentation, tightestWindow, toolInputPreview, usageWindow, windowLabel };
101
112
  //# sourceMappingURL=format.d.mts.map
package/build/format.mjs CHANGED
@@ -1,3 +1,2 @@
1
- import { a as formatDuration, c as formatRelativeTime, d as rateLimitWindowSeconds, f as toolInputPreview, i as formatCountdown, l as formatTokens, n as formatBytes, o as formatRateLimitWindow, r as formatCost, s as formatRateLimitWindowLong, t as formatAgoPrecise, u as friendlyModel } from "./format-DqR56Y8l.mjs";
2
- import { a as statusPresentation, c as windowLabel, i as modelLabel, n as currentModel, o as tightestWindow, r as meterSeverity, s as usageWindow, t as contextSeverity } from "./status-Ydzi7n6j.mjs";
3
- export { contextSeverity, currentModel, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, meterSeverity, modelLabel, rateLimitWindowSeconds, statusPresentation, tightestWindow, toolInputPreview, usageWindow, windowLabel };
1
+ import { _ as formatRelativeTime, a as modelLabel, b as rateLimitWindowSeconds, c as usageWindow, d as formatBytes, f as formatCost, g as formatRateLimitWindowLong, h as formatRateLimitWindow, i as meterSeverity, l as windowLabel, m as formatDuration, n as currentModel, o as statusPresentation, p as formatCountdown, r as meterColorClass, s as tightestWindow, t as contextSeverity, u as formatAgoPrecise, v as formatTokens, x as toolInputPreview, y as friendlyModel } from "./status-BE-zg88x.mjs";
2
+ export { contextSeverity, currentModel, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, meterColorClass, meterSeverity, modelLabel, rateLimitWindowSeconds, statusPresentation, tightestWindow, toolInputPreview, usageWindow, windowLabel };
package/build/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as formatDuration, c as formatRelativeTime, d as rateLimitWindowSeconds, f as toolInputPreview, i as formatCountdown, l as formatTokens, n as formatBytes, o as formatRateLimitWindow, r as formatCost, s as formatRateLimitWindowLong, t as formatAgoPrecise, u as friendlyModel } from "./format-DfI_je9S.mjs";
2
- import { C as permissionModeChoices, S as PermissionModeSelectProps, _ as useAffordances, a as SessionVitals, b as PermissionModeMeta, c as TranscriptDensityProvider, d as TranscriptVariantProvider, f as useTranscriptDensity, g as WithActions, h as TerminalAffordances, i as SessionSurfacePanel, l as TranscriptFont, m as CopyAction, n as SessionPanel, o as TerminalMetrics, p as useTranscriptVariant, r as SessionPanelProps, s as TranscriptDensity, t as SessionControls, u as TranscriptVariant, v as PERMISSION_MODES, w as permissionModeMeta, x as PermissionModeSelect, y as PermissionModeChoice } from "./SessionPanel-CnNYEX80.mjs";
1
+ import { a as formatDuration, c as formatRelativeTime, d as rateLimitWindowSeconds, f as toolInputPreview, i as formatCountdown, l as formatTokens, n as formatBytes, o as formatRateLimitWindow, r as formatCost, s as formatRateLimitWindowLong, t as formatAgoPrecise, u as friendlyModel } from "./format-ljc3lKpA.mjs";
2
+ import { C as permissionModeChoices, S as PermissionModeSelectProps, _ as useAffordances, a as SessionVitals, b as PermissionModeMeta, c as TranscriptDensityProvider, d as TranscriptVariantProvider, f as useTranscriptDensity, g as WithActions, h as TerminalAffordances, i as SessionSurfacePanel, l as TranscriptFont, m as CopyAction, n as SessionPanel, o as TerminalMetrics, p as useTranscriptVariant, r as SessionPanelProps, s as TranscriptDensity, t as SessionControls, u as TranscriptVariant, v as PERMISSION_MODES, w as permissionModeMeta, x as PermissionModeSelect, y as PermissionModeChoice } from "./SessionPanel-CnU_IJ3-.mjs";
3
3
  import * as _$react from "react";
4
4
  import { ButtonHTMLAttributes, FunctionComponent, HTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode, Ref, RefObject, TextareaHTMLAttributes } from "react";
5
5
  import { VariantProps } from "class-variance-authority";
@@ -15,7 +15,7 @@ import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
15
15
  import * as _$_base_ui_react_tooltip0 from "@base-ui/react/tooltip";
16
16
  import { Tooltip } from "@base-ui/react/tooltip";
17
17
  import { toast } from "sonner";
18
- import { ContextUsage, FilePatch, ModelOption, PermissionRequest, ProfileEngine, ProjectIcon as ProjectIcon$1, QuestionBehavior, RateLimitInfo, SessionInfo, SessionRow, SessionStatus, SkillInfo, SlashCommandInfo, UsageWindowRow, UserQuestion, ViewConfig, WorkspaceScope } from "@workerdeck/protocol";
18
+ import { ContextReading, ContextUsage, FilePatch, ModelOption, PermissionRequest, ProfileEngine, ProjectIcon as ProjectIcon$1, QuestionBehavior, RateLimitInfo, SessionInfo, SessionRow, SessionStatus, SkillInfo, SlashCommandInfo, UsageWindowRow, UserQuestion, ViewConfig, WorkspaceScope } from "@workerdeck/protocol";
19
19
  import { ConnectionState, TranscriptItem, TranscriptState, UseAttachmentsResult } from "@workerdeck/react";
20
20
  import * as _$class_variance_authority_types0 from "class-variance-authority/types";
21
21
  import { WorkerDeckClient } from "@workerdeck/client";
@@ -758,6 +758,11 @@ declare function isSegmentsEmpty(segments: Segment[]): boolean;
758
758
  /** Extracts chips matching a specific trigger character. */
759
759
  declare function getChipsByTrigger(segments: Segment[], trigger: string): ChipSegment[];
760
760
  //#endregion
761
+ //#region src/components/terminal/blocks.d.ts
762
+ type ToolCallItem$1 = Extract<TranscriptItem, {
763
+ kind: 'tool_call';
764
+ }>;
765
+ //#endregion
761
766
  //#region src/components/terminal/row.d.ts
762
767
  /**
763
768
  * The primitives every terminal row is built from.
@@ -949,6 +954,41 @@ interface TranscriptProps {
949
954
  toolUseId: string;
950
955
  nonce: number;
951
956
  };
957
+ /**
958
+ * Render **only** the work one sub-agent did, rather than the conversation —
959
+ * the sub-agent takeover's frame.
960
+ *
961
+ * Membership is `subagentItems` (`terminal/blocks.ts`), which is also the rule
962
+ * iOS will mirror: everything the agent produced, and not the spawning `Task`
963
+ * call itself, which *is* the frame rather than a row in it.
964
+ *
965
+ * Features are switched off internally whenever it is set, and the gate lives
966
+ * here rather than at the call site on purpose: each is keyed to a
967
+ * **full-transcript item index**, so a host that passed a frame and a catch-up
968
+ * boundary together would not be making a strange choice, it would be making
969
+ * an incoherent one. Those are the catch-up boundary and its recap row, the
970
+ * sticky prompt, `reveal`, and the scrubber's **bookmarks** (host indices in
971
+ * full-transcript space).
972
+ *
973
+ * The **scrubber itself stays**, and the distinction is the point: the rail
974
+ * derives every one of its inputs from the rows it is given, and inside a
975
+ * frame those are the sub-agent's own — so it marks that agent's prompts,
976
+ * answers and failures at that agent's offsets. It was originally gated with
977
+ * the marks, on the reasonable-looking argument that they are one feature;
978
+ * they are two, and a fifty-tool agent run is exactly where a rail earns its
979
+ * keep. What stays besides is everything that makes a long stream readable —
980
+ * virtualization, the height epoch, the follow spring, the replay hold.
981
+ */
982
+ frame?: {
983
+ parentToolUseId: string;
984
+ };
985
+ /**
986
+ * Raise the takeover from a `Task` row. Absent draws no affordance, which is
987
+ * what the plain renderer and the cards variant get: cards folds nothing, so
988
+ * it has no task blocks to hang this on, and reaches the takeover from the
989
+ * sessions list instead.
990
+ */
991
+ onOpenSubagent?: (toolUseId: string) => void;
952
992
  className?: string;
953
993
  }
954
994
  declare function Transcript({
@@ -970,6 +1010,8 @@ declare function Transcript({
970
1010
  jumpToRecapRef,
971
1011
  repinRef,
972
1012
  reveal,
1013
+ frame,
1014
+ onOpenSubagent,
973
1015
  className
974
1016
  }: TranscriptProps): _$react.JSX.Element;
975
1017
  //#endregion
@@ -1865,6 +1907,10 @@ interface SessionBrowserProps {
1865
1907
  * double-click would have already left the page.
1866
1908
  */
1867
1909
  onRename?: (row: SessionRow, title: string) => void;
1910
+ /** Open a session *at* one of its sub-agents, when the host can scroll a
1911
+ * transcript to a `Task` row. Absent, the sub-agent list still expands and a
1912
+ * step just opens its session — see `SessionRowItemProps`. */
1913
+ onSelectSubagent?: (row: SessionRow, toolUseId: string) => void;
1868
1914
  /** Rendered when nothing at all exists (as opposed to nothing matching). */
1869
1915
  emptyState?: React.ReactNode;
1870
1916
  /**
@@ -1916,16 +1962,28 @@ declare function SessionBrowser({
1916
1962
  onSelect,
1917
1963
  onDelete,
1918
1964
  onRename,
1965
+ onSelectSubagent,
1919
1966
  emptyState,
1920
1967
  showControls,
1921
1968
  projectIcons,
1922
1969
  className
1923
1970
  }: SessionBrowserProps): _$react.JSX.Element;
1924
1971
  /**
1925
- * State as one glyph on the right edge — a ringing bell when it wants a human, a
1926
- * spinner while it works, a moon when it is only sleeping. Replaces the text
1927
- * badge: in a sidebar the word costs more room than it earns, and the states
1928
- * that matter are the two you can recognise without reading.
1972
+ * State as one glyph — a ringing bell when it wants a human, a spinner while it
1973
+ * works, a moon when it is only sleeping. Replaces the text badge: in a sidebar
1974
+ * the word costs more room than it earns, and the states that matter are the two
1975
+ * you can recognise without reading.
1976
+ *
1977
+ * **It reads `row.state`, not `info.status`, and that distinction is the whole
1978
+ * point of the row model.** `sessionState` already folds in the arm this glyph
1979
+ * cannot see for itself: a *background* sub-agent outlives its turn by design, so
1980
+ * the turn ends, `status` comes to rest at `idle`, and the agent keeps working.
1981
+ * Reading the raw status drew a **moon on a row filed under the "Working"
1982
+ * header** — the list contradicting itself on one line, which is exactly what a
1983
+ * derived view model exists to prevent. The value was in scope and unread.
1984
+ *
1985
+ * The terminal statuses still come off `info.status`, because `ended` collapses
1986
+ * `failed` and `closed` into one bucket and those are worth telling apart here.
1929
1987
  */
1930
1988
  declare function SessionStatusIcon({
1931
1989
  row
@@ -1943,6 +2001,17 @@ declare function SessionStatusIcon({
1943
2001
  * `kimi-k2`), and falling through to no mark rather than guessing wrong.
1944
2002
  */
1945
2003
  declare function engineMark(engine: string, model?: string): string | undefined;
2004
+ /** The colour a session's engine mark wears. Pass it to `EngineIcon`'s
2005
+ * `className` rather than to a parent: the svg carries its own `text-fg-3`,
2006
+ * and only a class on the element itself is merged over it. */
2007
+ declare function vendorMarkClass(engine: string, model?: string): string;
2008
+ /** The colour the model *name* wears beside that mark — muted unless the vendor
2009
+ * is one whose accent survives at label size. See `VENDOR_TEXT`.
2010
+ *
2011
+ * The fallback is `text-fg-3` rather than the metadata line's own `text-fg-4`,
2012
+ * so an unbranded model still sits one step above the project and gateway
2013
+ * beside it — the order the spec lists them in, held without a colour. */
2014
+ declare function vendorTextClass(engine: string, model?: string): string;
1946
2015
  declare function EngineIcon({
1947
2016
  engine,
1948
2017
  model,
@@ -1953,6 +2022,138 @@ declare function EngineIcon({
1953
2022
  className?: string;
1954
2023
  }): _$react.JSX.Element;
1955
2024
  //#endregion
2025
+ //#region src/components/agent/SessionSteps.d.ts
2026
+ /**
2027
+ * The work *under* a session row, and the one row shape every client renders it
2028
+ * through.
2029
+ *
2030
+ * This lived inside the VS Code webview first, which is exactly why the
2031
+ * dashboard had none of it. Nothing in here is extension-specific: a session's
2032
+ * sub-agents are a protocol fact, and a disclosure over them is a list
2033
+ * affordance. It sits in `packages/ui` so the sidebar, the dashboard and (in its
2034
+ * own idiom) the phone are annotating rows the same way rather than three ways.
2035
+ *
2036
+ * Today the only source is `SessionInfo.subagents`. The other — the CLI's own
2037
+ * **task checklist**, the to-do list it keeps for the current turn — is what the
2038
+ * design was drawn from, and it is not built: nothing on the wire carries it yet
2039
+ * (see `_docs/features/sub-agent-handling.md`, second thread, which opens with
2040
+ * "check a capture" rather than "design a surface"). When it arrives it is a
2041
+ * *source*, not a second row component: checklist when the session has one, its
2042
+ * sub-agents otherwise.
2043
+ *
2044
+ * That is also why `state` has a `pending` arm no sub-agent can produce. A
2045
+ * sub-agent record exists only once dispatched, so it is never queued; a to-do
2046
+ * is queued for most of its life, and dropping the state would mean widening the
2047
+ * union later — the shape is cheaper to state now than to retrofit.
2048
+ */
2049
+ type Step = {
2050
+ key: string;
2051
+ label: string; /** What one of these is called, for the disclosure's count. */
2052
+ noun: string;
2053
+ /**
2054
+ * An **agent** has an identity and work of its own, so it is pressable and
2055
+ * wears the sub-agent colour. A **task** is something the model described with
2056
+ * no agent behind it (`isAgentRecord`), so it is inert: there is no frame to
2057
+ * open, and a row that offered one would show an empty screen.
2058
+ *
2059
+ * Two values and not a boolean because the checklist source this shape was
2060
+ * drawn for (see above) produces the second kind natively — a to-do is a task
2061
+ * in exactly this sense, and it will slot in here rather than widening
2062
+ * anything.
2063
+ */
2064
+ kind: 'agent' | 'task';
2065
+ state: 'done' | 'running' | 'pending' | 'failed'; /** A trailing reading — a sub-agent's tool count. Absent draws nothing. */
2066
+ detail?: string;
2067
+ title: string;
2068
+ onSelect: () => void;
2069
+ };
2070
+ declare function sessionSteps(info: SessionInfo, onSelectSubagent: (toolUseId: string) => void): Step[];
2071
+ /** How many of these are still going — the live half of the disclosure's count. */
2072
+ declare function runningSteps(steps: readonly Step[]): number;
2073
+ /**
2074
+ * The disclosure, which is also the reading: `3 agents` — or `2 of 3 agents`
2075
+ * while some have settled, because "how many are still going" is the live
2076
+ * question and a bare total answers it wrong the moment one finishes.
2077
+ *
2078
+ * Sub-agents are an annotation on a working row rather than a state of their own
2079
+ * (see `runningSubagents` in protocol's `session-list.ts`), so this never
2080
+ * competes with the row's status glyph: that still says what the *session* is
2081
+ * doing.
2082
+ */
2083
+ declare function StepToggle({
2084
+ expanded,
2085
+ running,
2086
+ total,
2087
+ noun,
2088
+ onToggle
2089
+ }: {
2090
+ expanded: boolean;
2091
+ running: number;
2092
+ total: number;
2093
+ noun: string;
2094
+ onToggle: () => void;
2095
+ }): _$react.JSX.Element;
2096
+ /**
2097
+ * One step under its session. Pressing an **agent** hands the panel over to that
2098
+ * agent's own work — it is not a session and never becomes one, but it does now
2099
+ * have a surface (`SessionPanel.openSubagent`). A host that cannot frame one
2100
+ * falls back to revealing its `Task` row, which was this row's only meaning
2101
+ * before the takeover existed. A **task** is not pressable at all; see
2102
+ * {@link Step.kind}.
2103
+ *
2104
+ * Divided from the row's header and from each other by a rule rather than by
2105
+ * indentation: these are a list *inside* the row, and at 11px an indent is not
2106
+ * enough to say so. The rule is black at 25% so it darkens whatever the row is
2107
+ * filled with, selected or not, without needing a colour per state.
2108
+ */
2109
+ declare function StepRow({
2110
+ step,
2111
+ onSelect
2112
+ }: {
2113
+ step: Step;
2114
+ onSelect: () => void;
2115
+ }): _$react.JSX.Element;
2116
+ //#endregion
2117
+ //#region src/components/agent/SubagentStrip.d.ts
2118
+ /**
2119
+ * The one line above a sub-agent takeover: who this is, how it is doing, and the
2120
+ * way back.
2121
+ *
2122
+ * **It claims exactly what the `TaskRow` it was opened from claims** — the same
2123
+ * `taskBusy` / `taskFailed` / tool count over the same items — and deliberately
2124
+ * *not* `SubagentInfo.status`. Protocol documents those two as divergent on
2125
+ * purpose (`index.ts:1476-1487`), but that divergence is transcript-versus-*list*
2126
+ * and this surface **is** the transcript. The disagreement that must not exist
2127
+ * here is between a header and the rows directly beneath it.
2128
+ *
2129
+ * The rollup is still allowed one job — naming an agent whose `Task` call is not
2130
+ * in the transcript — because a label is not content, and `SessionInfo.subagents`
2131
+ * keeps only eight settled records (`SUBAGENT_HISTORY`), so it can never be the
2132
+ * source of what a frame *shows*.
2133
+ *
2134
+ * Both variants, because the panel has two and a strip that only existed in one
2135
+ * would make the takeover a terminal-theme feature rather than a session feature.
2136
+ */
2137
+ declare function SubagentStrip({
2138
+ task,
2139
+ items,
2140
+ label,
2141
+ onBack,
2142
+ terminal,
2143
+ fontSize,
2144
+ lineHeight
2145
+ }: {
2146
+ /** The spawning call. Absent when the transcript does not have it — the strip
2147
+ * still draws, because the way back must exist even when the content cannot. */
2148
+ task: ToolCallItem$1 | undefined; /** The frame's items, for the busy reading and the tool count. */
2149
+ items: readonly TranscriptItem[]; /** Fallback name when there is no task item. */
2150
+ label: string;
2151
+ onBack: () => void;
2152
+ terminal: boolean;
2153
+ fontSize?: number;
2154
+ lineHeight?: number;
2155
+ }): _$react.JSX.Element;
2156
+ //#endregion
1956
2157
  //#region src/components/agent/ProjectIcon.d.ts
1957
2158
  declare function ProjectIcon({
1958
2159
  icon,
@@ -2028,6 +2229,34 @@ declare const STATUS_META: Record<SessionStatus, {
2028
2229
  busy: boolean;
2029
2230
  }>;
2030
2231
  //#endregion
2232
+ //#region src/components/agent/ContextRing.d.ts
2233
+ /**
2234
+ * How full a session's context window is, sized for a **list row**.
2235
+ *
2236
+ * The reading the session screen has always drawn, moved somewhere it answers a
2237
+ * question the session screen cannot: *which* of these thirty sessions is
2238
+ * bloating. That is also why it is a ring and not a number — across a list, a
2239
+ * ring is read at a glance and `71%` has to be read one row at a time.
2240
+ *
2241
+ * **Absent draws nothing, and absent is not zero.** A promptless session, a
2242
+ * parked one from before the field existed, or an engine that reports no window
2243
+ * has no reading; an empty ring would claim its context is empty rather than
2244
+ * unknown. The title carries the exact numbers for anyone who wants them.
2245
+ *
2246
+ * Shared rather than spelled per client: the dashboard's row and the VS Code
2247
+ * sidebar's card both draw it, and two copies would be two sets of thresholds
2248
+ * the day one of them is nudged.
2249
+ */
2250
+ declare function ContextRing({
2251
+ usage,
2252
+ size,
2253
+ className
2254
+ }: {
2255
+ usage: ContextReading | undefined;
2256
+ size?: number;
2257
+ className?: string;
2258
+ }): _$react.JSX.Element | null;
2259
+ //#endregion
2031
2260
  //#region src/lib/utils.d.ts
2032
2261
  declare function cn(...inputs: ClassValue[]): string;
2033
2262
  //#endregion
@@ -2070,5 +2299,5 @@ declare function toolIcon(toolName: string): LucideIcon;
2070
2299
  */
2071
2300
  declare function isMutatingTool(toolName: string): boolean;
2072
2301
  //#endregion
2073
- export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, AlertDialogTrigger, Badge, type BadgeProps, Band, Blank, Button, type ButtonProps, Card, CardContent, CardHeader, CardTitle, type ChipSegment, CodeBlock, type CodeBlockProps, Composer, type ComposerFileMatch, type ComposerHandle, type ComposerProps, ContextDialog, type ContextDialogProps, Conversation, ConversationContent, type ConversationProps, ConversationScrollButton, CopyAction, CopyButton, type CopyButtonProps, Dialog, DialogBody, DialogClose, DialogContent, DialogHeader, DialogRow, DialogTrigger, Empty, EmptyKey, EngineIcon, FileCard, type FileCardProps, type FileDeliveredItem, HostFilesDialog, type HostFilesDialogProps, Ink, Input, Loader, McpDialog, type McpDialogProps, Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Message, MessageContent, type MessageProps, ModelSelect, type ModelSelectProps, PERMISSION_MODES, type PermissionModeChoice, type PermissionModeMeta, PermissionModeSelect, type PermissionModeSelectProps, PermissionPrompt, type PermissionPromptProps, ProgressRing, type ProgressRingProps, ProjectIcon, PromptArea, type PromptAreaHandle, type PromptAreaProps, PromptTokenText, QUESTION_BEHAVIORS, type QuestionBehaviorMeta, QuestionPrompt, type QuestionPromptProps, Reasoning, type ReasoningProps, Response, type ResponseProps, Row, type RowProps, STATUS_META, type Segment, Select, SelectContent, SelectItem, SelectItemText, SelectTrigger, SelectValue, SessionBrowser, type SessionBrowserProps, type SessionControls, SessionEmptyState, type SessionEmptyStateProps, SessionInfoDialog, type SessionInfoDialogProps, SessionList, SessionListItem, type SessionListItemProps, type SessionListProps, SessionPanel, type SessionPanelProps, SessionStatusIcon, type SessionSurfacePanel, type SessionVitals, SkillsDialog, type SkillsDialogProps, Spinner, Splitter, type SplitterProps, StatusBar, type StatusBarProps, type TerminalAffordances, TerminalDiff, TerminalItemView, TerminalMarkdown, type TerminalMarkdownProps, type TerminalMetrics, TerminalPermissionPrompt, type TerminalPermissionPromptProps, TerminalQuestionPrompt, type TerminalQuestionPromptProps, TerminalStatusLine, type TerminalStatusLineProps, TerminalSurface, type TerminalSurfaceProps, TerminalTranscript, type TerminalTranscriptProps, type TextSegment, Textarea, Tip, Toaster, type Tone, ToolCallCard, type ToolCallCardProps, type ToolCallItem, TooltipContent, TooltipProvider, Transcript, type TranscriptDensity, TranscriptDensityProvider, type TranscriptFont, type TranscriptProps, type TranscriptVariant, TranscriptVariantProvider, type TriggerConfig, type TriggerSuggestion, UsageDialog, type UsageDialogProps, UsageMeters, WithActions, badgeVariants, buttonVariants, cn, commandTrigger, copyText, engineMark, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, getChipsByTrigger, hashtagTrigger, isMutatingTool, isSegmentsEmpty, mentionTrigger, parseUserQuestions, permissionModeChoices, permissionModeMeta, plainTextToSegments, previewPatch, rateLimitWindowSeconds, rowShapeClass, segmentsToPlainText, skillPrompt, toast, toolIcon, toolInputPreview, useAffordances, useMinuteClock, usePromptAreaState, useTranscriptDensity, useTranscriptVariant };
2302
+ export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, AlertDialogTrigger, Badge, type BadgeProps, Band, Blank, Button, type ButtonProps, Card, CardContent, CardHeader, CardTitle, type ChipSegment, CodeBlock, type CodeBlockProps, Composer, type ComposerFileMatch, type ComposerHandle, type ComposerProps, ContextDialog, type ContextDialogProps, ContextRing, Conversation, ConversationContent, type ConversationProps, ConversationScrollButton, CopyAction, CopyButton, type CopyButtonProps, Dialog, DialogBody, DialogClose, DialogContent, DialogHeader, DialogRow, DialogTrigger, Empty, EmptyKey, EngineIcon, FileCard, type FileCardProps, type FileDeliveredItem, HostFilesDialog, type HostFilesDialogProps, Ink, Input, Loader, McpDialog, type McpDialogProps, Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Message, MessageContent, type MessageProps, ModelSelect, type ModelSelectProps, PERMISSION_MODES, type PermissionModeChoice, type PermissionModeMeta, PermissionModeSelect, type PermissionModeSelectProps, PermissionPrompt, type PermissionPromptProps, ProgressRing, type ProgressRingProps, ProjectIcon, PromptArea, type PromptAreaHandle, type PromptAreaProps, PromptTokenText, QUESTION_BEHAVIORS, type QuestionBehaviorMeta, QuestionPrompt, type QuestionPromptProps, Reasoning, type ReasoningProps, Response, type ResponseProps, Row, type RowProps, STATUS_META, type Segment, Select, SelectContent, SelectItem, SelectItemText, SelectTrigger, SelectValue, SessionBrowser, type SessionBrowserProps, type SessionControls, SessionEmptyState, type SessionEmptyStateProps, SessionInfoDialog, type SessionInfoDialogProps, SessionList, SessionListItem, type SessionListItemProps, type SessionListProps, SessionPanel, type SessionPanelProps, SessionStatusIcon, type SessionSurfacePanel, type SessionVitals, SkillsDialog, type SkillsDialogProps, Spinner, Splitter, type SplitterProps, StatusBar, type StatusBarProps, type Step, StepRow, StepToggle, SubagentStrip, type TerminalAffordances, TerminalDiff, TerminalItemView, TerminalMarkdown, type TerminalMarkdownProps, type TerminalMetrics, TerminalPermissionPrompt, type TerminalPermissionPromptProps, TerminalQuestionPrompt, type TerminalQuestionPromptProps, TerminalStatusLine, type TerminalStatusLineProps, TerminalSurface, type TerminalSurfaceProps, TerminalTranscript, type TerminalTranscriptProps, type TextSegment, Textarea, Tip, Toaster, type Tone, ToolCallCard, type ToolCallCardProps, type ToolCallItem, TooltipContent, TooltipProvider, Transcript, type TranscriptDensity, TranscriptDensityProvider, type TranscriptFont, type TranscriptProps, type TranscriptVariant, TranscriptVariantProvider, type TriggerConfig, type TriggerSuggestion, UsageDialog, type UsageDialogProps, UsageMeters, WithActions, badgeVariants, buttonVariants, cn, commandTrigger, copyText, engineMark, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, getChipsByTrigger, hashtagTrigger, isMutatingTool, isSegmentsEmpty, mentionTrigger, parseUserQuestions, permissionModeChoices, permissionModeMeta, plainTextToSegments, previewPatch, rateLimitWindowSeconds, rowShapeClass, runningSteps, segmentsToPlainText, sessionSteps, skillPrompt, toast, toolIcon, toolInputPreview, useAffordances, useMinuteClock, usePromptAreaState, useTranscriptDensity, useTranscriptVariant, vendorMarkClass, vendorTextClass };
2074
2303
  //# sourceMappingURL=index.d.mts.map