@workerdeck/ui 2.7.2 → 2.9.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 (71) hide show
  1. package/README.md +30 -30
  2. package/build/{SessionPanel-B5FfiBxE.mjs → SessionPanel-BClL7zUS.mjs} +694 -413
  3. package/build/SessionPanel-BClL7zUS.mjs.map +1 -0
  4. package/build/{SessionPanel-_lQLhWOw.d.mts → SessionPanel-BVbau2eR.d.mts} +68 -4
  5. package/build/format.mjs +1 -1
  6. package/build/index.d.mts +22 -15
  7. package/build/index.mjs +6 -6
  8. package/build/index.mjs.map +1 -1
  9. package/build/scoped.css +26 -2
  10. package/build/{status-BO9wJloK.mjs → status-kmsBhuFG.mjs} +3 -3
  11. package/build/status-kmsBhuFG.mjs.map +1 -0
  12. package/build/workspace.d.mts +3 -2
  13. package/build/workspace.mjs +7 -8
  14. package/build/workspace.mjs.map +1 -1
  15. package/package.json +18 -18
  16. package/src/components/agent/Composer.tsx +86 -84
  17. package/src/components/agent/ContextDialog.tsx +1 -1
  18. package/src/components/agent/EntryIcon.tsx +1 -1
  19. package/src/components/agent/FileTree.tsx +1 -1
  20. package/src/components/agent/FileViewer.tsx +1 -1
  21. package/src/components/agent/HostFilesDialog.tsx +2 -2
  22. package/src/components/agent/PermissionModeSelect.tsx +2 -2
  23. package/src/components/agent/PermissionPrompt.tsx +2 -2
  24. package/src/components/agent/SessionBrowser.tsx +1 -1
  25. package/src/components/agent/SessionItem.tsx +4 -2
  26. package/src/components/agent/SessionPanel.tsx +306 -226
  27. package/src/components/agent/SessionWorkspace.tsx +3 -0
  28. package/src/components/agent/SkillsDialog.tsx +3 -3
  29. package/src/components/agent/StatusBar.tsx +1 -1
  30. package/src/components/agent/TaskList.tsx +2 -2
  31. package/src/components/agent/TranscriptRows.tsx +1 -1
  32. package/src/components/agent/UsageDialog.tsx +1 -1
  33. package/src/components/agent/UsageMeters.tsx +17 -4
  34. package/src/components/agent/composer-commands.ts +142 -0
  35. package/src/components/agent/use-path-links.ts +2 -7
  36. package/src/components/agent/use-subagent-frame.ts +2 -2
  37. package/src/components/agent/use-transcript-jumps.ts +2 -2
  38. package/src/components/prompt-area/clipboard-helpers.ts +2 -2
  39. package/src/components/prompt-area/cursor-helpers.ts +7 -7
  40. package/src/components/prompt-area/dom-helpers.ts +8 -8
  41. package/src/components/prompt-area/html-to-markdown.ts +2 -2
  42. package/src/components/prompt-area/prompt-area-engine.ts +4 -4
  43. package/src/components/prompt-area/prompt-area-list-ops.ts +10 -10
  44. package/src/components/prompt-area/prompt-area.tsx +2 -2
  45. package/src/components/prompt-area/trigger-presets.ts +6 -6
  46. package/src/components/prompt-area/types.ts +6 -6
  47. package/src/components/prompt-area/use-chip-editing.ts +8 -8
  48. package/src/components/prompt-area/use-markdown-mode.ts +3 -3
  49. package/src/components/prompt-area/use-prompt-area-events.ts +3 -3
  50. package/src/components/prompt-area/use-prompt-area-keydown.ts +3 -3
  51. package/src/components/prompt-area/use-prompt-area-state.ts +4 -4
  52. package/src/components/prompt-area/use-prompt-area.ts +5 -5
  53. package/src/components/prompt-area/use-trigger-search.ts +1 -1
  54. package/src/components/terminal/PermissionPrompt.tsx +4 -4
  55. package/src/components/terminal/affordances.tsx +1 -1
  56. package/src/components/terminal/file-link.tsx +20 -0
  57. package/src/components/terminal/height.ts +2 -2
  58. package/src/components/terminal/items.tsx +2 -2
  59. package/src/components/terminal/markdown.tsx +31 -5
  60. package/src/components/terminal/scrubber.tsx +1 -1
  61. package/src/components/terminal/todos.ts +1 -1
  62. package/src/components/ui/Splitter.tsx +1 -1
  63. package/src/index.ts +11 -1
  64. package/src/lib/context-note.ts +3 -3
  65. package/src/lib/file-link.ts +70 -0
  66. package/src/lib/format.ts +2 -2
  67. package/src/styles/scoped.entry.css +2 -2
  68. package/src/styles/terminal.css +94 -79
  69. package/src/styles/theme.css +39 -39
  70. package/build/SessionPanel-B5FfiBxE.mjs.map +0 -1
  71. package/build/status-BO9wJloK.mjs.map +0 -1
@@ -1,8 +1,58 @@
1
1
  import { ComponentType, ReactNode } from "react";
2
2
  import { LucideIcon } from "lucide-react";
3
- import { ModelOption, PermissionMode, PermissionRequest, SessionTask, SkillInfo, SubagentInfo } from "@workerdeck/protocol";
3
+ import { ModelOption, PermissionMode, PermissionRequest, SessionTask, SkillInfo, SlashCommandInfo, SubagentInfo } from "@workerdeck/protocol";
4
4
  import { ClientToolHandler, ConnectionState, TranscriptState, UseToolCallHostOptions } from "@workerdeck/react";
5
5
  import { WorkerDeckClient } from "@workerdeck/client";
6
+ //#region src/components/agent/composer-commands.d.ts
7
+ type ClientCommand = {
8
+ name: string;
9
+ description: string;
10
+ argumentHint?: string;
11
+ requiresArgs?: boolean;
12
+ run: (args: string) => boolean;
13
+ };
14
+ type ComposerRow = {
15
+ kind: 'command';
16
+ name: string;
17
+ description?: string;
18
+ argumentHint?: string;
19
+ aliases?: string[];
20
+ } | {
21
+ kind: 'client';
22
+ name: string;
23
+ description?: string;
24
+ argumentHint?: string;
25
+ command: ClientCommand;
26
+ } | {
27
+ kind: 'skill';
28
+ name: string;
29
+ label: string;
30
+ description?: string;
31
+ enabled: boolean;
32
+ scope?: string;
33
+ skill: SkillInfo;
34
+ };
35
+ declare function skillPrompt(skill: SkillInfo): string;
36
+ declare function mergeComposerRows(sources: {
37
+ commands?: readonly SlashCommandInfo[];
38
+ clientCommands?: readonly ClientCommand[];
39
+ skills?: readonly SkillInfo[];
40
+ }): ComposerRow[];
41
+ declare function rankComposerRows(query: string, rows: readonly ComposerRow[]): ComposerRow[];
42
+ declare function matchClientCommand(text: string, commands: readonly ClientCommand[]): {
43
+ command: ClientCommand;
44
+ args: string;
45
+ } | undefined;
46
+ type ComposerCommandRow = {
47
+ kind: ComposerRow['kind'];
48
+ name: string;
49
+ label: string;
50
+ description?: string;
51
+ scope?: string;
52
+ enabled: boolean;
53
+ insertText: string;
54
+ };
55
+ //#endregion
6
56
  //#region src/components/agent/PermissionModeSelect.d.ts
7
57
  type PermissionModeMeta = {
8
58
  value: PermissionMode;
@@ -49,6 +99,18 @@ declare function CopyAction({ text, label }: {
49
99
  label?: string;
50
100
  }): import("react").JSX.Element;
51
101
  //#endregion
102
+ //#region src/components/terminal/file-link.d.ts
103
+ type FileLinkOpener = (path: string, line?: number) => void;
104
+ type FileLinkHandle = {
105
+ cwd?: string;
106
+ open: FileLinkOpener;
107
+ };
108
+ declare function FileLinkProvider({ value, children }: {
109
+ value: FileLinkHandle | undefined;
110
+ children: ReactNode;
111
+ }): import("react").JSX.Element;
112
+ declare function useFileLinks(): FileLinkHandle | undefined;
113
+ //#endregion
52
114
  //#region src/components/agent/transcript-variant.d.ts
53
115
  type TranscriptVariant = 'cards' | 'terminal';
54
116
  declare function TranscriptVariantProvider({ value, children }: {
@@ -91,6 +153,7 @@ interface SessionPanelProps {
91
153
  scrubber?: boolean;
92
154
  bookmarks?: readonly string[];
93
155
  onToggleBookmark?: (itemId: string) => void;
156
+ onOpenFile?: FileLinkOpener;
94
157
  reveal?: {
95
158
  toolUseId: string;
96
159
  nonce: number;
@@ -139,6 +202,7 @@ type SessionVitals = {
139
202
  permissionMode: TranscriptState['permissionMode'];
140
203
  permissionModes: PermissionModeChoice[];
141
204
  skills: SkillInfo[] | undefined;
205
+ composerCommands: ComposerCommandRow[];
142
206
  cwd: TranscriptState['cwd'];
143
207
  contextUsage: TranscriptState['contextUsage'];
144
208
  tasks: SessionTask[];
@@ -147,7 +211,7 @@ type SessionVitals = {
147
211
  itemCount: number;
148
212
  totalCostUsd: number;
149
213
  };
150
- declare function SessionPanel({ client, sessionId, header, panelSurface, statusSurface, statusPlacement, onOpenPanel, onVitals, transcriptVariant, transcriptDensity, transcriptFont, affordances, terminalMetrics, scrubber, bookmarks, onToggleBookmark, reveal, subagents, openSubagent, onSubagentChange, stickyPrompt, controlsSurface, onControls, focusComposerOnClick, unseen, readOnly, approvalPrompts, toolHost, clientTools, cacheTranscript, emptyState, onLinkClick, fontSize, className }: SessionPanelProps): import("react").JSX.Element;
214
+ declare function SessionPanel({ client, sessionId, header, panelSurface, statusSurface, statusPlacement, onOpenPanel, onVitals, transcriptVariant, transcriptDensity, transcriptFont, affordances, terminalMetrics, scrubber, bookmarks, onToggleBookmark, reveal, subagents, openSubagent, onSubagentChange, stickyPrompt, controlsSurface, onControls, focusComposerOnClick, unseen, readOnly, approvalPrompts, toolHost, clientTools, cacheTranscript, emptyState, onLinkClick, onOpenFile, fontSize, className }: SessionPanelProps): import("react").JSX.Element;
151
215
  //#endregion
152
- export { PermissionModeSelectProps as C, PermissionModeSelect as S, permissionModeMeta as T, WithActions as _, SessionSurfacePanel as a, PermissionModeChoice as b, TranscriptDensity as c, TranscriptVariant as d, TranscriptVariantProvider as f, TerminalAffordances as g, CopyAction as h, SessionPanelProps as i, TranscriptDensityProvider as l, useTranscriptVariant as m, SessionControls as n, SessionVitals as o, useTranscriptDensity as p, SessionPanel as r, TerminalMetrics as s, ApprovalPromptProps as t, TranscriptFont as u, useAffordances as v, permissionModeChoices as w, PermissionModeMeta as x, PERMISSION_MODES as y };
153
- //# sourceMappingURL=SessionPanel-_lQLhWOw.d.mts.map
216
+ export { ClientCommand as A, PERMISSION_MODES as C, PermissionModeSelectProps as D, PermissionModeSelect as E, skillPrompt as F, matchClientCommand as M, mergeComposerRows as N, permissionModeChoices as O, rankComposerRows as P, useAffordances as S, PermissionModeMeta as T, FileLinkProvider as _, SessionSurfacePanel as a, TerminalAffordances as b, TranscriptDensity as c, TranscriptVariant as d, TranscriptVariantProvider as f, FileLinkOpener as g, FileLinkHandle as h, SessionPanelProps as i, ComposerRow as j, permissionModeMeta as k, TranscriptDensityProvider as l, useTranscriptVariant as m, SessionControls as n, SessionVitals as o, useTranscriptDensity as p, SessionPanel as r, TerminalMetrics as s, ApprovalPromptProps as t, TranscriptFont as u, useFileLinks as v, PermissionModeChoice as w, WithActions as x, CopyAction as y };
217
+ //# sourceMappingURL=SessionPanel-BVbau2eR.d.mts.map
package/build/format.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { C as rateLimitWindowSeconds, S as friendlyModel, _ as formatDuration, a as meterTintClass, b as formatRelativeTime, c as tightestWindow, d as COMPACTION_TEXT, f as compactionText, g as formatCountdown, h as formatCost, i as meterSeverity, l as usageWindow, m as formatBytes, n as currentModel, o as modelLabel, p as formatAgoPrecise, r as meterColorClass, s as statusPresentation, t as contextSeverity, u as windowLabel, v as formatRateLimitWindow, w as toolInputPreview, x as formatTokens, y as formatRateLimitWindowLong } from "./status-BO9wJloK.mjs";
1
+ import { C as rateLimitWindowSeconds, S as friendlyModel, _ as formatDuration, a as meterTintClass, b as formatRelativeTime, c as tightestWindow, d as COMPACTION_TEXT, f as compactionText, g as formatCountdown, h as formatCost, i as meterSeverity, l as usageWindow, m as formatBytes, n as currentModel, o as modelLabel, p as formatAgoPrecise, r as meterColorClass, s as statusPresentation, t as contextSeverity, u as windowLabel, v as formatRateLimitWindow, w as toolInputPreview, x as formatTokens, y as formatRateLimitWindowLong } from "./status-kmsBhuFG.mjs";
2
2
  export { COMPACTION_TEXT, compactionText, contextSeverity, currentModel, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, meterColorClass, meterSeverity, meterTintClass, modelLabel, rateLimitWindowSeconds, statusPresentation, tightestWindow, toolInputPreview, usageWindow, windowLabel };
package/build/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as formatCost, c as formatRateLimitWindow, d as formatTokens, f as friendlyModel, i as formatBytes, l as formatRateLimitWindowLong, m as toolInputPreview, o as formatCountdown, p as rateLimitWindowSeconds, r as formatAgoPrecise, s as formatDuration, u as formatRelativeTime } from "./format-eS_oUry-.mjs";
2
- import { C as PermissionModeSelectProps, S as PermissionModeSelect, T as permissionModeMeta, _ as WithActions, a as SessionSurfacePanel, b as PermissionModeChoice, c as TranscriptDensity, d as TranscriptVariant, f as TranscriptVariantProvider, g as TerminalAffordances, h as CopyAction, i as SessionPanelProps, l as TranscriptDensityProvider, m as useTranscriptVariant, n as SessionControls, o as SessionVitals, p as useTranscriptDensity, r as SessionPanel, s as TerminalMetrics, t as ApprovalPromptProps, u as TranscriptFont, v as useAffordances, w as permissionModeChoices, x as PermissionModeMeta, y as PERMISSION_MODES } from "./SessionPanel-_lQLhWOw.mjs";
2
+ import { A as ClientCommand, C as PERMISSION_MODES, D as PermissionModeSelectProps, E as PermissionModeSelect, F as skillPrompt, M as matchClientCommand, N as mergeComposerRows, O as permissionModeChoices, P as rankComposerRows, S as useAffordances, T as PermissionModeMeta, _ as FileLinkProvider, a as SessionSurfacePanel, b as TerminalAffordances, c as TranscriptDensity, d as TranscriptVariant, f as TranscriptVariantProvider, g as FileLinkOpener, h as FileLinkHandle, i as SessionPanelProps, j as ComposerRow, k as permissionModeMeta, l as TranscriptDensityProvider, m as useTranscriptVariant, n as SessionControls, o as SessionVitals, p as useTranscriptDensity, r as SessionPanel, s as TerminalMetrics, t as ApprovalPromptProps, u as TranscriptFont, v as useFileLinks, w as PermissionModeChoice, x as WithActions, y as CopyAction } from "./SessionPanel-BVbau2eR.mjs";
3
3
  import { ButtonHTMLAttributes, FunctionComponent, HTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode, Ref, RefObject, TextareaHTMLAttributes } from "react";
4
4
  import { VariantProps } from "class-variance-authority";
5
5
  import { ClassValue } from "clsx";
@@ -69,7 +69,7 @@ declare const MenuItem: FunctionComponent<Menu$1.Item.Props & {
69
69
  declare const MenuSeparator: FunctionComponent<Menu$1.Separator.Props>;
70
70
  //#endregion
71
71
  //#region src/components/ui/Dialog.d.ts
72
- declare const Dialog: typeof Dialog$1.Root;
72
+ declare const Dialog: <Payload>(props: Dialog$1.Root.Props<Payload>) => import("react").JSX.Element;
73
73
  declare const DialogTrigger: Dialog$1.Trigger;
74
74
  declare const DialogClose: import("react").ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogCloseProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
75
75
  declare const DialogContent: FunctionComponent<Dialog$1.Popup.Props & {
@@ -202,7 +202,7 @@ type TriggerPosition = 'start' | 'any';
202
202
  * - 'dropdown': Shows a popover with suggestions from `onSearch`
203
203
  * - 'callback': Inserts the char, then fires `onActivate` with the typed query
204
204
  * - 'launch': Fires `onActivate` on keydown and SUPPRESSES the char (it never
205
- * enters the editor) — for opening an external surface (dialog, palette) where
205
+ * enters the editor) - for opening an external surface (dialog, palette) where
206
206
  * no in-editor text should appear. Honors `position` like the other modes.
207
207
  */
208
208
  type TriggerMode = 'dropdown' | 'callback' | 'launch';
@@ -257,7 +257,7 @@ type TriggerConfig = {
257
257
  * For 'dropdown' mode: opt a suggestion out of becoming a chip.
258
258
  *
259
259
  * Return a string and the trigger's range is replaced with that **plain,
260
- * editable text** — the trigger character included — with the caret left at
260
+ * editable text** - the trigger character included - with the caret left at
261
261
  * its end. Return undefined and the suggestion resolves to a chip as usual,
262
262
  * so one dropdown can mix both kinds.
263
263
  *
@@ -378,7 +378,7 @@ type PromptAreaProps = {
378
378
  /**
379
379
  * When markdown is on, the editor rewrites typed list markers (`- ` / `* `)
380
380
  * to a `•` bullet glyph in the model. Set to `false` to keep the original
381
- * marker in the value/`onChange` text — needed when a host renders the output
381
+ * marker in the value/`onChange` text - needed when a host renders the output
382
382
  * as real markdown, where `•` is not a valid list marker. Default `true`.
383
383
  */
384
384
  normalizeBullets?: boolean;
@@ -413,8 +413,8 @@ type PromptAreaProps = {
413
413
  * the caret kept where the edit happened. Chips count as their
414
414
  * `trigger + displayText` length.
415
415
  *
416
- * The cap applies to typing only. Paste is not capped — divert it via
417
- * `onRawPaste` if needed — and the imperative `setText` / `appendText` also
416
+ * The cap applies to typing only. Paste is not capped - divert it via
417
+ * `onRawPaste` if needed - and the imperative `setText` / `appendText` also
418
418
  * bypass it, so a programmatic write can exceed the cap until the next
419
419
  * keystroke truncates.
420
420
  */
@@ -458,7 +458,7 @@ type PromptAreaProps = {
458
458
  onBlur?: (e: React.FocusEvent<HTMLDivElement>) => void;
459
459
  /**
460
460
  * Called at the start of a paste, before PromptArea reads the clipboard. Call
461
- * `preventDefault()` to take over the paste completely — e.g. to divert large
461
+ * `preventDefault()` to take over the paste completely - e.g. to divert large
462
462
  * text or non-image files to an upload pipeline. The built-in segment/image
463
463
  * paste handling is skipped when the event's default is prevented.
464
464
  */
@@ -549,11 +549,11 @@ type UsePromptAreaStateOptions = {
549
549
  initialValue?: Segment[];
550
550
  };
551
551
  type PromptAreaBind = {
552
- /** Ref to attach to PromptArea — gives access to imperative methods. */
552
+ /** Ref to attach to PromptArea - gives access to imperative methods. */
553
553
  ref: React.RefObject<PromptAreaHandle | null>;
554
- /** Current segment array — pass as `value` prop. */
554
+ /** Current segment array - pass as `value` prop. */
555
555
  value: Segment[];
556
- /** Setter — pass as `onChange` prop. */
556
+ /** Setter - pass as `onChange` prop. */
557
557
  onChange: (segments: Segment[]) => void;
558
558
  };
559
559
  type PromptAreaState = {
@@ -596,7 +596,7 @@ type CommandTriggerOptions = TriggerPresetOptions & {
596
596
  char?: string;
597
597
  /**
598
598
  * Where the command trigger is valid. Defaults to `'any'`, so commands fire
599
- * anywhere a `/` follows whitespace — not just at the start of a line.
599
+ * anywhere a `/` follows whitespace - not just at the start of a line.
600
600
  * Set to `'start'` to restrict the dropdown to the very start of the input
601
601
  * or immediately after a newline (the classic slash-command behavior).
602
602
  */
@@ -781,6 +781,13 @@ declare function Ink({ tone, bold, className, ...props }: HTMLAttributes<HTMLSpa
781
781
  bold?: boolean;
782
782
  }): import("react").JSX.Element;
783
783
  //#endregion
784
+ //#region src/lib/file-link.d.ts
785
+ type FileLink = {
786
+ path: string;
787
+ line?: number;
788
+ };
789
+ declare function parseFileLink(href: string | undefined, cwd: string | undefined): FileLink | undefined;
790
+ //#endregion
784
791
  //#region src/components/agent/Conversation.d.ts
785
792
  interface ConversationProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
786
793
  children: ReactNode;
@@ -894,6 +901,7 @@ interface ComposerProps {
894
901
  placeholder?: string;
895
902
  commands?: SlashCommandInfo[];
896
903
  skills?: SkillInfo[];
904
+ clientCommands?: ClientCommand[];
897
905
  onSearchFiles?: (query: string, options: {
898
906
  signal: AbortSignal;
899
907
  }) => Promise<ComposerFileMatch[]>;
@@ -912,8 +920,7 @@ interface ComposerProps {
912
920
  className?: string;
913
921
  ref?: Ref<ComposerHandle>;
914
922
  }
915
- declare function skillPrompt(skill: SkillInfo): string;
916
- declare function Composer({ onSend, onInterrupt, busy, disabled, placeholder, commands, skills, onSearchFiles, onShellCommand, attachments, toolbar, layout, fontSize, lineHeight, affordances, draft, className, ref }: ComposerProps): import("react").JSX.Element;
923
+ declare function Composer({ onSend, onInterrupt, busy, disabled, placeholder, commands, skills, clientCommands, onSearchFiles, onShellCommand, attachments, toolbar, layout, fontSize, lineHeight, affordances, draft, className, ref }: ComposerProps): import("react").JSX.Element;
917
924
  //#endregion
918
925
  //#region src/components/agent/ModelSelect.d.ts
919
926
  interface ModelSelectProps {
@@ -1200,5 +1207,5 @@ declare function copyText(value: string): Promise<boolean>;
1200
1207
  declare function toolIcon(toolName: string): LucideIcon;
1201
1208
  declare function isMutatingTool(toolName: string): boolean;
1202
1209
  //#endregion
1203
- export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, AlertDialogTrigger, type ApprovalPromptProps, 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, SessionItem, type SessionItemProps, 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, TaskList, type TaskListProps, TasksDialog, type TasksDialogProps, 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, ToolTitleProvider, 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, launchTrigger, mentionTrigger, parseUserQuestions, permissionModeChoices, permissionModeMeta, plainTextToSegments, previewPatch, rateLimitWindowSeconds, rowShapeClass, runningSteps, segmentsToPlainText, sessionSteps, skillPrompt, toast, toolIcon, toolInputPreview, useAffordances, useMinuteClock, usePromptAreaState, useToolTitle, useTranscriptDensity, useTranscriptVariant, vendorMarkClass, vendorTextClass };
1210
+ export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, AlertDialogTrigger, type ApprovalPromptProps, Badge, type BadgeProps, Band, Blank, Button, type ButtonProps, Card, CardContent, CardHeader, CardTitle, type ChipSegment, type ClientCommand, CodeBlock, type CodeBlockProps, Composer, type ComposerFileMatch, type ComposerHandle, type ComposerProps, type ComposerRow, 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, type FileLink, type FileLinkHandle, type FileLinkOpener, FileLinkProvider, 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, SessionItem, type SessionItemProps, 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, TaskList, type TaskListProps, TasksDialog, type TasksDialogProps, 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, ToolTitleProvider, 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, launchTrigger, matchClientCommand, mentionTrigger, mergeComposerRows, parseFileLink, parseUserQuestions, permissionModeChoices, permissionModeMeta, plainTextToSegments, previewPatch, rankComposerRows, rateLimitWindowSeconds, rowShapeClass, runningSteps, segmentsToPlainText, sessionSteps, skillPrompt, toast, toolIcon, toolInputPreview, useAffordances, useFileLinks, useMinuteClock, usePromptAreaState, useToolTitle, useTranscriptDensity, useTranscriptVariant, vendorMarkClass, vendorTextClass };
1204
1211
  //# sourceMappingURL=index.d.mts.map
package/build/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as Ink, A as PERMISSION_MODES, At as DialogContent, B as TaskList, Bt as SelectContent, C as TerminalPermissionPrompt, Ct as copyText, D as SubagentStrip, Dt as Dialog, E as parseUserQuestions, Et as TooltipProvider, F as SkillsDialog, Ft as MenuContent, G as TerminalSurface, Gt as PortalScope, H as contextNote, Ht as SelectItemText, I as McpDialog, It as MenuItem, J as TerminalMarkdown, Jt as Badge, K as ToolTitleProvider, Kt as Textarea, L as HostFilesDialog, Lt as MenuSeparator, M as permissionModeChoices, Mt as DialogRow, N as permissionModeMeta, Nt as DialogTrigger, O as PermissionPrompt, Ot as DialogBody, P as ModelSelect, Pt as Menu, Q as Blank, Qt as cn, Rt as MenuTrigger, S as TerminalQuestionPrompt, St as CopyButton, T as QuestionPrompt, Tt as TooltipContent, U as Composer, Ut as SelectTrigger, V as ContextDialog, Vt as SelectItem, W as skillPrompt, Wt as SelectValue, X as previewPatch, Xt as Button, Y as TerminalDiff, Yt as badgeVariants, Z as Band, Zt as buttonVariants, _ as ConversationContent, _t as segmentsToPlainText, a as Transcript, at as toolIcon, b as STATUS_META, bt as CodeBlock, c as PromptTokenText, ct as useTranscriptDensity, d as FileCard, dt as hashtagTrigger, et as Row, f as TerminalItemView, ft as launchTrigger, g as Conversation, gt as plainTextToSegments, h as Loader, ht as PromptArea, i as useMinuteClock, it as isMutatingTool, j as PermissionModeSelect, jt as DialogHeader, k as Response, kt as DialogClose, l as Message, lt as useTranscriptVariant, m as SessionEmptyState, mt as usePromptAreaState, n as UsageDialog, nt as WithActions, o as ToolCallCard, ot as TranscriptDensityProvider, p as TerminalTranscript, pt as mentionTrigger, q as useToolTitle, qt as Input, r as UsageMeters, rt as useAffordances, s as Reasoning, st as TranscriptVariantProvider, t as SessionPanel, tt as CopyAction, u as MessageContent, ut as commandTrigger, v as ConversationScrollButton, vt as ProgressRing, w as QUESTION_BEHAVIORS, wt as Tip, x as SessionInfoDialog, xt as Spinner, y as StatusBar, yt as Splitter, z as TasksDialog, zt as Select } from "./SessionPanel-B5FfiBxE.mjs";
2
- import { C as rateLimitWindowSeconds, S as friendlyModel, _ as formatDuration, b as formatRelativeTime, c as tightestWindow, g as formatCountdown, h as formatCost, i as meterSeverity, m as formatBytes, o as modelLabel, p as formatAgoPrecise, r as meterColorClass, s as statusPresentation, t as contextSeverity, u as windowLabel, v as formatRateLimitWindow, w as toolInputPreview, x as formatTokens, y as formatRateLimitWindowLong } from "./status-BO9wJloK.mjs";
1
+ import { $ as Band, $t as Input, A as PERMISSION_MODES, At as Tip, B as TaskList, Bt as Menu, C as TerminalPermissionPrompt, Ct as segmentsToPlainText, D as SubagentStrip, Dt as Spinner, E as parseUserQuestions, Et as CodeBlock, F as SkillsDialog, Ft as DialogClose, G as ToolTitleProvider, Gt as Select, H as contextNote, Ht as MenuItem, I as McpDialog, It as DialogContent, J as FileLinkProvider, Jt as SelectItemText, K as useToolTitle, Kt as SelectContent, L as HostFilesDialog, Lt as DialogHeader, M as permissionModeChoices, Mt as TooltipProvider, N as permissionModeMeta, Nt as Dialog, O as PermissionPrompt, Ot as CopyButton, P as ModelSelect, Pt as DialogBody, Q as previewPatch, Qt as Textarea, Rt as DialogRow, S as TerminalQuestionPrompt, St as plainTextToSegments, T as QuestionPrompt, Tt as Splitter, U as Composer, Ut as MenuSeparator, V as ContextDialog, Vt as MenuContent, W as TerminalSurface, Wt as MenuTrigger, X as parseFileLink, Xt as SelectValue, Y as useFileLinks, Yt as SelectTrigger, Z as TerminalDiff, Zt as PortalScope, _ as ConversationContent, _t as hashtagTrigger, a as Transcript, at as useAffordances, b as STATUS_META, bt as usePromptAreaState, c as PromptTokenText, ct as TranscriptDensityProvider, d as FileCard, dt as useTranscriptVariant, en as Badge, et as Blank, f as TerminalItemView, ft as matchClientCommand, g as Conversation, gt as commandTrigger, h as Loader, ht as skillPrompt, i as useMinuteClock, in as cn, it as WithActions, j as PermissionModeSelect, jt as TooltipContent, k as Response, kt as copyText, l as Message, lt as TranscriptVariantProvider, m as SessionEmptyState, mt as rankComposerRows, n as UsageDialog, nn as Button, nt as Row, o as ToolCallCard, ot as isMutatingTool, p as TerminalTranscript, pt as mergeComposerRows, q as TerminalMarkdown, qt as SelectItem, r as UsageMeters, rn as buttonVariants, rt as CopyAction, s as Reasoning, st as toolIcon, t as SessionPanel, tn as badgeVariants, tt as Ink, u as MessageContent, ut as useTranscriptDensity, v as ConversationScrollButton, vt as launchTrigger, w as QUESTION_BEHAVIORS, wt as ProgressRing, x as SessionInfoDialog, xt as PromptArea, y as StatusBar, yt as mentionTrigger, z as TasksDialog, zt as DialogTrigger } from "./SessionPanel-BClL7zUS.mjs";
2
+ import { C as rateLimitWindowSeconds, S as friendlyModel, _ as formatDuration, b as formatRelativeTime, c as tightestWindow, g as formatCountdown, h as formatCost, i as meterSeverity, m as formatBytes, o as modelLabel, p as formatAgoPrecise, r as meterColorClass, s as statusPresentation, t as contextSeverity, u as windowLabel, v as formatRateLimitWindow, w as toolInputPreview, x as formatTokens, y as formatRateLimitWindowLong } from "./status-kmsBhuFG.mjs";
3
3
  import { Fragment, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
5
  import { Anchor, ArrowRight, Atom, Beaker, BellRing, Bike, Binary, Blocks, Bot, Box, Brain, Briefcase, Brush, Bug, Building2, Cable, Camera, Car, Cat, Check, ChevronDown, ChevronRight, CircleAlert, CircleSlash, CircuitBoard, Cloud, Code, Coffee, Cog, Compass, Container, Cpu, CreditCard, Database, Diamond, Dog, Eraser, Feather, Film, Flame, FlaskConical, Folder, Gamepad2, Gauge, Gem, Ghost, Gift, GitBranch, Globe, GraduationCap, Hammer, Hexagon, House, Image, Key, Landmark, Laptop, Layers, Leaf, Library, Lightbulb, Lock, Mail, Map as Map$1, MessageCircle, Mic, Monitor, Moon, Mountain, Music, Network, Newspaper, Notebook, Orbit, Package, Palette, PauseCircle, PenTool, Pencil, Phone, PiggyBank, Plane, Plug, Puzzle, Radar, Radio, Receipt, Rocket, Ruler, Satellite, Scale, Scissors, Search, SearchX, Server, Shield, Ship, ShoppingCart, Signal, Smartphone, Sparkles, Sprout, Square, Star, Sun, Table, Tag, Target, Telescope, Terminal, TestTube, Trash2, TreePine, Trophy, Truck, Umbrella, Users, Wallet, Wand, Waves, Webhook, Wifi, Wrench, X, Zap } from "lucide-react";
@@ -609,7 +609,7 @@ function SessionItem({ row, active = false, activeStepKey, showGateway, showProj
609
609
  const extras = [
610
610
  showGateway ? row.hostName : void 0,
611
611
  info.profile ? `@${info.profile}` : void 0,
612
- cost === "—" ? void 0 : cost
612
+ cost === "-" ? void 0 : cost
613
613
  ].filter((part) => Boolean(part));
614
614
  const model = friendlyModel(info.model);
615
615
  const parts = [];
@@ -666,7 +666,7 @@ function SessionItem({ row, active = false, activeStepKey, showGateway, showProj
666
666
  }),
667
667
  row.unseen > 0 ? /* @__PURE__ */ jsx("span", {
668
668
  title: `${row.unseen} new message${row.unseen === 1 ? "" : "s"}`,
669
- className: cn("flex h-4 min-w-6 shrink-0 items-center justify-center rounded-full px-2", "text-[0.75rem] leading-none tracking-[-0.005em] tabular-nums", row.state === "working" || row.state === "attention" ? "bg-accent text-accent-fg" : "bg-badge text-badge-fg"),
669
+ className: cn("flex h-4 min-w-6 shrink-0 items-center justify-center rounded-full px-2", "text-[0.75rem] leading-none tracking-[-0.005em] tabular-nums", row.state === "working" ? "bg-badge text-badge-fg" : "bg-accent text-accent-fg"),
670
670
  children: row.unseen
671
671
  }) : null,
672
672
  /* @__PURE__ */ jsx(ContextRing, {
@@ -1002,7 +1002,7 @@ function SessionRowItem({ row, active, activeSubagentId, showGateway, showProjec
1002
1002
  }) : null,
1003
1003
  onClearContext && info.capabilities?.clearContext ? /* @__PURE__ */ jsx(RowAction, {
1004
1004
  label: "Clear context",
1005
- title: "Clear the conversation — the session keeps running and the old conversation stays resumable",
1005
+ title: "Clear the conversation - the session keeps running and the old conversation stays resumable",
1006
1006
  onClick: () => onClearContext(row),
1007
1007
  children: /* @__PURE__ */ jsx(Eraser, { className: "size-3 text-fg-3" })
1008
1008
  }) : null,
@@ -1080,6 +1080,6 @@ function OneOfSelect({ label, value, options, onChange }) {
1080
1080
  });
1081
1081
  }
1082
1082
  //#endregion
1083
- export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, AlertDialogTrigger, Badge, Band, Blank, Button, Card, CardContent, CardHeader, CardTitle, CodeBlock, Composer, ContextDialog, ContextRing, Conversation, ConversationContent, ConversationScrollButton, CopyAction, CopyButton, Dialog, DialogBody, DialogClose, DialogContent, DialogHeader, DialogRow, DialogTrigger, Empty, EmptyKey, EngineIcon, FileCard, HostFilesDialog, Ink, Input, Loader, McpDialog, Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Message, MessageContent, ModelSelect, PERMISSION_MODES, PermissionModeSelect, PermissionPrompt, ProgressRing, ProjectIcon, PromptArea, PromptTokenText, QUESTION_BEHAVIORS, QuestionPrompt, Reasoning, Response, Row, STATUS_META, Select, SelectContent, SelectItem, SelectItemText, SelectTrigger, SelectValue, SessionBrowser, SessionEmptyState, SessionInfoDialog, SessionItem, SessionList, SessionListItem, SessionPanel, SessionStatusIcon, SkillsDialog, Spinner, Splitter, StatusBar, StepRow, StepToggle, SubagentStrip, TaskList, TasksDialog, TerminalDiff, TerminalItemView, TerminalMarkdown, TerminalPermissionPrompt, TerminalQuestionPrompt, TerminalStatusLine, TerminalSurface, TerminalTranscript, Textarea, Tip, Toaster, ToolCallCard, ToolTitleProvider, TooltipContent, TooltipProvider, Transcript, TranscriptDensityProvider, TranscriptVariantProvider, UsageDialog, UsageMeters, WithActions, badgeVariants, buttonVariants, cn, commandTrigger, copyText, engineMark, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, getChipsByTrigger, hashtagTrigger, isMutatingTool, isSegmentsEmpty, launchTrigger, mentionTrigger, parseUserQuestions, permissionModeChoices, permissionModeMeta, plainTextToSegments, previewPatch, rateLimitWindowSeconds, rowShapeClass, runningSteps, segmentsToPlainText, sessionSteps, skillPrompt, toast, toolIcon, toolInputPreview, useAffordances, useMinuteClock, usePromptAreaState, useToolTitle, useTranscriptDensity, useTranscriptVariant, vendorMarkClass, vendorTextClass };
1083
+ export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, AlertDialogTrigger, Badge, Band, Blank, Button, Card, CardContent, CardHeader, CardTitle, CodeBlock, Composer, ContextDialog, ContextRing, Conversation, ConversationContent, ConversationScrollButton, CopyAction, CopyButton, Dialog, DialogBody, DialogClose, DialogContent, DialogHeader, DialogRow, DialogTrigger, Empty, EmptyKey, EngineIcon, FileCard, FileLinkProvider, HostFilesDialog, Ink, Input, Loader, McpDialog, Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Message, MessageContent, ModelSelect, PERMISSION_MODES, PermissionModeSelect, PermissionPrompt, ProgressRing, ProjectIcon, PromptArea, PromptTokenText, QUESTION_BEHAVIORS, QuestionPrompt, Reasoning, Response, Row, STATUS_META, Select, SelectContent, SelectItem, SelectItemText, SelectTrigger, SelectValue, SessionBrowser, SessionEmptyState, SessionInfoDialog, SessionItem, SessionList, SessionListItem, SessionPanel, SessionStatusIcon, SkillsDialog, Spinner, Splitter, StatusBar, StepRow, StepToggle, SubagentStrip, TaskList, TasksDialog, TerminalDiff, TerminalItemView, TerminalMarkdown, TerminalPermissionPrompt, TerminalQuestionPrompt, TerminalStatusLine, TerminalSurface, TerminalTranscript, Textarea, Tip, Toaster, ToolCallCard, ToolTitleProvider, TooltipContent, TooltipProvider, Transcript, TranscriptDensityProvider, TranscriptVariantProvider, UsageDialog, UsageMeters, WithActions, badgeVariants, buttonVariants, cn, commandTrigger, copyText, engineMark, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, getChipsByTrigger, hashtagTrigger, isMutatingTool, isSegmentsEmpty, launchTrigger, matchClientCommand, mentionTrigger, mergeComposerRows, parseFileLink, parseUserQuestions, permissionModeChoices, permissionModeMeta, plainTextToSegments, previewPatch, rankComposerRows, rateLimitWindowSeconds, rowShapeClass, runningSteps, segmentsToPlainText, sessionSteps, skillPrompt, toast, toolIcon, toolInputPreview, useAffordances, useFileLinks, useMinuteClock, usePromptAreaState, useToolTitle, useTranscriptDensity, useTranscriptVariant, vendorMarkClass, vendorTextClass };
1084
1084
 
1085
1085
  //# sourceMappingURL=index.mjs.map