@workerdeck/ui 2.11.0 → 2.12.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.
- package/build/{SessionPanel-BVbau2eR.d.mts → SessionPanel-CJwp5B3q.d.mts} +8 -3
- package/build/index.d.mts +36 -18
- package/build/index.mjs +109 -46
- package/build/index.mjs.map +1 -1
- package/build/scoped.css +4 -10
- package/build/{use-path-links-DO_79-wX.mjs → use-path-links-CepFsMdW.mjs} +137 -79
- package/build/use-path-links-CepFsMdW.mjs.map +1 -0
- package/build/workspace.d.mts +1 -1
- package/build/workspace.mjs +1 -1
- package/package.json +4 -4
- package/src/components/agent/Composer.tsx +28 -5
- package/src/components/agent/PromptTokenText.tsx +9 -1
- package/src/components/agent/SessionBrowser.tsx +17 -1
- package/src/components/agent/SessionItem.tsx +6 -23
- package/src/components/agent/SessionPanel.tsx +10 -0
- package/src/components/agent/SessionSteps.tsx +15 -55
- package/src/components/agent/SubagentToggle.tsx +69 -0
- package/src/components/agent/Transcript.tsx +91 -80
- package/src/components/agent/composer-commands.ts +18 -0
- package/src/index.ts +10 -2
- package/src/styles/terminal.css +9 -1
- package/build/use-path-links-DO_79-wX.mjs.map +0 -1
|
@@ -5,12 +5,12 @@ import { clsx } from "clsx";
|
|
|
5
5
|
import { extendTailwindMerge } from "tailwind-merge";
|
|
6
6
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import { Select } from "@base-ui/react/select";
|
|
8
|
-
import { ArrowDown, ArrowDownCircle, ArrowLeft, ArrowRight, ArrowUp, AtSign, Brain, ChartPie, Check, CheckSquare, ChevronDown, ChevronLeft, ChevronRight, ChevronsUpDown, Circle, CircleAlert, ClipboardList, Clock, Code, Copy, Download, File, FileDiff, FileText, Folder, FolderSearch, FolderTree, Gauge, Globe, Hand, Image, Info, Link2, LoaderCircle, MessageCircleQuestion, MessageSquareText, MoreHorizontal, Paperclip, PencilLine, Plug, Power, PowerOff, Puzzle, RefreshCw, RotateCcw, RotateCw, Search, ShieldCheck, SlashSquare, SlidersHorizontal, Sparkles, Square, SquarePen, Terminal, TriangleAlert, UsersRound, WifiOff, Wrench, X, Zap } from "lucide-react";
|
|
8
|
+
import { ArrowDown, ArrowDownCircle, ArrowLeft, ArrowRight, ArrowUp, AtSign, Brain, ChartPie, Check, CheckSquare, ChevronDown, ChevronLeft, ChevronRight, ChevronsUpDown, Circle, CircleAlert, ClipboardList, Clock, Code, Copy, Download, File, FileDiff, FileText, Folder, FolderSearch, FolderTree, Gauge, Globe, Hand, Image, Info, Link2, LoaderCircle, MessageCircleQuestion, MessageSquareText, MoreHorizontal, Paperclip, PencilLine, Plug, Power, PowerOff, Puzzle, RefreshCw, RotateCcw, RotateCw, Search, ShieldCheck, SlashSquare, SlidersHorizontal, Sparkles, Square, SquarePen, Terminal, TriangleAlert, Users, UsersRound, WifiOff, Wrench, X, Zap } from "lucide-react";
|
|
9
9
|
import { Menu } from "@base-ui/react/menu";
|
|
10
10
|
import { Dialog } from "@base-ui/react/dialog";
|
|
11
11
|
import { Tooltip } from "@base-ui/react/tooltip";
|
|
12
12
|
import { PRICING_NOTE, PROTOCOL_VERSION, UNPRICED_WARN_SHARE, canonicalModel, costOf, costOfByModel, isPeerSendTool, mergeUsage, orderUsageWindows, parseTodoWriteInput, parseUserQuestions, peerDeliveredTo, pricingAgeNote, rateFor, sessionTasks, subagentLabel, taskCountLabel, taskSummary, toolTitle, totalTokens, unknownBasisModels, usageInfos, usageIsStale, visibleTasks } from "@workerdeck/protocol";
|
|
13
|
-
import { recapLine, scanPromptTokens, summarizeSince, useAttachments, useClaudeSession, useDraft, useHostFileSearch, useProfileUsage, useToolCallHost } from "@workerdeck/react";
|
|
13
|
+
import { recapLine, scanPromptTokens, summarizeSince, useAttachments, useClaudeSession, useDraft, useHostFileSearch, usePeerSessions, useProfileUsage, useToolCallHost } from "@workerdeck/react";
|
|
14
14
|
import { Streamdown } from "streamdown";
|
|
15
15
|
import { StickToBottom, useStickToBottomContext } from "use-stick-to-bottom";
|
|
16
16
|
import { createPortal } from "react-dom";
|
|
@@ -4517,6 +4517,25 @@ function rankComposerRows(query, rows) {
|
|
|
4517
4517
|
scored.sort((a, b) => b.score - a.score || KIND_ORDER[a.row.kind] - KIND_ORDER[b.row.kind] || a.index - b.index);
|
|
4518
4518
|
return scored.map(({ row }) => row);
|
|
4519
4519
|
}
|
|
4520
|
+
function rankPeerSessions(query, peers) {
|
|
4521
|
+
const needle = query.trim();
|
|
4522
|
+
if (!needle) return [...peers];
|
|
4523
|
+
const scored = [];
|
|
4524
|
+
peers.forEach((peer, index) => {
|
|
4525
|
+
const score = matchScore(needle, [
|
|
4526
|
+
peer.slug,
|
|
4527
|
+
peer.label,
|
|
4528
|
+
...peer.slug.split("-")
|
|
4529
|
+
]);
|
|
4530
|
+
if (score > 0) scored.push({
|
|
4531
|
+
score,
|
|
4532
|
+
index,
|
|
4533
|
+
peer
|
|
4534
|
+
});
|
|
4535
|
+
});
|
|
4536
|
+
scored.sort((a, b) => b.score - a.score || a.index - b.index);
|
|
4537
|
+
return scored.map(({ peer }) => peer);
|
|
4538
|
+
}
|
|
4520
4539
|
function matchClientCommand(text, commands) {
|
|
4521
4540
|
const match = /^\/([\w:-]+)[ \t]*([\s\S]*)$/.exec(text.trim());
|
|
4522
4541
|
if (!match) return;
|
|
@@ -4705,15 +4724,26 @@ function usePulse(animated) {
|
|
|
4705
4724
|
//#endregion
|
|
4706
4725
|
//#region src/components/agent/PromptTokenText.tsx
|
|
4707
4726
|
const SkillNamesContext = createContext(void 0);
|
|
4727
|
+
const SessionNamesContext = createContext(void 0);
|
|
4708
4728
|
function SkillNamesProvider({ names, children }) {
|
|
4709
4729
|
return /* @__PURE__ */ jsx(SkillNamesContext.Provider, {
|
|
4710
4730
|
value: names,
|
|
4711
4731
|
children
|
|
4712
4732
|
});
|
|
4713
4733
|
}
|
|
4734
|
+
function SessionNamesProvider({ names, children }) {
|
|
4735
|
+
return /* @__PURE__ */ jsx(SessionNamesContext.Provider, {
|
|
4736
|
+
value: names,
|
|
4737
|
+
children
|
|
4738
|
+
});
|
|
4739
|
+
}
|
|
4714
4740
|
function PromptTokenText({ text, className }) {
|
|
4715
4741
|
const skills = useContext(SkillNamesContext);
|
|
4716
|
-
const
|
|
4742
|
+
const sessions = useContext(SessionNamesContext);
|
|
4743
|
+
const tokens = scanPromptTokens(text, {
|
|
4744
|
+
skills,
|
|
4745
|
+
sessions
|
|
4746
|
+
});
|
|
4717
4747
|
if (tokens.length === 0) return /* @__PURE__ */ jsx("span", {
|
|
4718
4748
|
className,
|
|
4719
4749
|
children: text
|
|
@@ -5972,7 +6002,7 @@ function TerminalSurface({ fontSize, lineHeight, bleed, affordances, className,
|
|
|
5972
6002
|
//#region src/components/agent/Composer.tsx
|
|
5973
6003
|
const SHELL_PLACEHOLDER = "Run a command on the host…";
|
|
5974
6004
|
const SHELL_HINT = "! shell mode · esc to exit";
|
|
5975
|
-
function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message the agent…", commands, skills, clientCommands, onSearchFiles, onShellCommand, attachments, toolbar, layout = "stacked", fontSize, lineHeight, affordances, draft, className, ref }) {
|
|
6005
|
+
function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message the agent…", commands, skills, clientCommands, onSearchFiles, peers, onShellCommand, attachments, toolbar, layout = "stacked", fontSize, lineHeight, affordances, draft, className, ref }) {
|
|
5976
6006
|
const inline = layout === "inline";
|
|
5977
6007
|
const terminal = useTranscriptVariant() === "terminal";
|
|
5978
6008
|
const [initialDraft] = useState(() => draft?.initialText ?? "");
|
|
@@ -6045,6 +6075,23 @@ function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message
|
|
|
6045
6075
|
chipClassName: "font-mono",
|
|
6046
6076
|
emptyMessage: "No matching files"
|
|
6047
6077
|
}));
|
|
6078
|
+
if (peers?.length) configured.push(hashtagTrigger({
|
|
6079
|
+
accessibilityLabel: "session",
|
|
6080
|
+
onSearch: (query) => rankPeerSessions(query, peers).map((peer) => ({
|
|
6081
|
+
value: peer.slug,
|
|
6082
|
+
label: peer.label,
|
|
6083
|
+
description: [
|
|
6084
|
+
peer.engine,
|
|
6085
|
+
peer.project,
|
|
6086
|
+
peer.status
|
|
6087
|
+
].filter(Boolean).join(" · "),
|
|
6088
|
+
icon: /* @__PURE__ */ jsx(Users, { className: "size-3.5 text-fg-3" })
|
|
6089
|
+
})),
|
|
6090
|
+
onSelect: (suggestion) => suggestion.value,
|
|
6091
|
+
chipStyle: "inline",
|
|
6092
|
+
chipClassName: "font-mono",
|
|
6093
|
+
emptyMessage: "No matching sessions"
|
|
6094
|
+
}));
|
|
6048
6095
|
if (onShellCommand) configured.push(launchTrigger({
|
|
6049
6096
|
char: "!",
|
|
6050
6097
|
accessibilityLabel: "shell mode",
|
|
@@ -6056,6 +6103,7 @@ function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message
|
|
|
6056
6103
|
skills,
|
|
6057
6104
|
clientCommands,
|
|
6058
6105
|
onSearchFiles,
|
|
6106
|
+
peers,
|
|
6059
6107
|
onShellCommand
|
|
6060
6108
|
]);
|
|
6061
6109
|
const saveDraft = draft?.save;
|
|
@@ -6095,6 +6143,10 @@ function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message
|
|
|
6095
6143
|
key: "@",
|
|
6096
6144
|
what: "mention a file"
|
|
6097
6145
|
} : void 0,
|
|
6146
|
+
peers?.length ? {
|
|
6147
|
+
key: "#",
|
|
6148
|
+
what: "refer to another session"
|
|
6149
|
+
} : void 0,
|
|
6098
6150
|
onShellCommand ? {
|
|
6099
6151
|
key: "!",
|
|
6100
6152
|
what: "run a shell command"
|
|
@@ -11322,7 +11374,7 @@ function TerminalShell({ active, fontSize, lineHeight, affordances, children })
|
|
|
11322
11374
|
children
|
|
11323
11375
|
});
|
|
11324
11376
|
}
|
|
11325
|
-
function Transcript({ state, fileUrl, attachmentUrl, canBrowseFiles, hostImage, variant = "cards", density = "comfortable", fontSize, lineHeight, affordances, stickyPrompt = false, scrubber, bookmarks, replaying = false, catchUp, jumpToRecapRef, repinRef, reveal, frame, onOpenSubagent, emptyState, className }) {
|
|
11377
|
+
function Transcript({ state, fileUrl, attachmentUrl, canBrowseFiles, hostImage, variant = "cards", density = "comfortable", fontSize, lineHeight, affordances, stickyPrompt = false, scrubber, bookmarks, sessionNames, replaying = false, catchUp, jumpToRecapRef, repinRef, reveal, frame, onOpenSubagent, emptyState, className }) {
|
|
11326
11378
|
const terminal = variant === "terminal";
|
|
11327
11379
|
const items = useMemo(() => frame ? subagentItems(state.items, frame.parentToolUseId) : state.items, [state.items, frame]);
|
|
11328
11380
|
const frameTask = useMemo(() => frame ? state.items.find((item) => item.kind === "tool_call" && item.id === frame.parentToolUseId) : void 0, [state.items, frame]);
|
|
@@ -11362,79 +11414,82 @@ function Transcript({ state, fileUrl, attachmentUrl, canBrowseFiles, hostImage,
|
|
|
11362
11414
|
value: variant,
|
|
11363
11415
|
children: /* @__PURE__ */ jsx(SkillNamesProvider, {
|
|
11364
11416
|
names: skillNames,
|
|
11365
|
-
children: /* @__PURE__ */
|
|
11366
|
-
|
|
11367
|
-
children:
|
|
11368
|
-
|
|
11369
|
-
|
|
11370
|
-
|
|
11371
|
-
|
|
11372
|
-
|
|
11373
|
-
|
|
11374
|
-
affordances,
|
|
11375
|
-
children: [
|
|
11376
|
-
frame ? frameTask === void 0 && !replaying ? /* @__PURE__ */ jsx("div", {
|
|
11377
|
-
className: cn(terminal ? "term-row text-fg-4" : "p-4 text-body-sm text-fg-4"),
|
|
11378
|
-
children: "This sub-agent's work is not in this transcript."
|
|
11379
|
-
}) : null : items.length === 0 && state.status !== "starting" ? emptyState !== void 0 ? emptyState : /* @__PURE__ */ jsx(SessionEmptyState, {
|
|
11380
|
-
cwd: state.cwd,
|
|
11381
|
-
hasCommands: !!state.commands?.length,
|
|
11382
|
-
hasSkills: !!state.skills?.some((s) => s.enabled),
|
|
11383
|
-
canBrowseFiles
|
|
11384
|
-
}) : null,
|
|
11385
|
-
frame && frameTask === void 0 && !replaying ? null : /* @__PURE__ */ jsx(TranscriptRows, {
|
|
11386
|
-
rows,
|
|
11387
|
-
boundary,
|
|
11388
|
-
since: catchUp?.since,
|
|
11389
|
-
terminal,
|
|
11390
|
-
replaying,
|
|
11391
|
-
stickyPrompt: !frame && stickyPrompt,
|
|
11392
|
-
gap,
|
|
11393
|
-
fontSize,
|
|
11394
|
-
lineHeight,
|
|
11395
|
-
items,
|
|
11396
|
-
pendingApprovals: state.pendingApprovals,
|
|
11397
|
-
scrubber,
|
|
11398
|
-
bookmarks: frame ? void 0 : bookmarks,
|
|
11399
|
-
affordances,
|
|
11400
|
-
fileUrl,
|
|
11401
|
-
attachmentUrl,
|
|
11402
|
-
hostImage,
|
|
11403
|
-
jumpToRecapRef,
|
|
11404
|
-
repinRef,
|
|
11405
|
-
reveal: frame ? void 0 : reveal,
|
|
11406
|
-
frameParentId: frame?.parentToolUseId,
|
|
11407
|
-
onOpenSubagent: frame ? void 0 : onOpenSubagent
|
|
11408
|
-
}),
|
|
11409
|
-
(frame ? frameTask !== void 0 && taskBusy(frameTask, items) : showLoader(state)) ? terminal ? /* @__PURE__ */ jsxs(Fragment$1, { children: [state.items.length > 0 ? /* @__PURE__ */ jsx("div", {
|
|
11410
|
-
className: "term-blank",
|
|
11411
|
-
"aria-hidden": true
|
|
11412
|
-
}) : null, /* @__PURE__ */ jsx(WorkingRow, {
|
|
11413
|
-
label: state.status === "starting" ? "Starting…" : "Working…",
|
|
11414
|
-
startedAt: runStartedAt,
|
|
11415
|
-
tokens: state.contextUsage?.totalTokens
|
|
11416
|
-
})] }) : /* @__PURE__ */ jsx(Loader, { label: state.status === "starting" ? "Starting session…" : void 0 }) : null
|
|
11417
|
-
]
|
|
11418
|
-
})
|
|
11419
|
-
}),
|
|
11420
|
-
/* @__PURE__ */ jsx(ConversationScrollButton, {}),
|
|
11421
|
-
replaying ? /* @__PURE__ */ jsx("div", {
|
|
11422
|
-
"data-slot": "transcript-hold",
|
|
11423
|
-
"aria-hidden": true,
|
|
11424
|
-
className: "wd-hold-appear visible pointer-events-none absolute inset-0 overflow-hidden",
|
|
11425
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
11426
|
-
className: cn("mx-auto w-full max-w-[var(--wd-transcript-max-width)]", !terminal && "px-4 py-4"),
|
|
11427
|
-
children: terminal ? /* @__PURE__ */ jsx(TerminalSurface, {
|
|
11417
|
+
children: /* @__PURE__ */ jsx(SessionNamesProvider, {
|
|
11418
|
+
names: sessionNames,
|
|
11419
|
+
children: /* @__PURE__ */ jsxs(Conversation, {
|
|
11420
|
+
className: cn(replaying && "invisible", className),
|
|
11421
|
+
children: [
|
|
11422
|
+
/* @__PURE__ */ jsx(ConversationContent, {
|
|
11423
|
+
className: cn(terminal && "gap-0 p-0"),
|
|
11424
|
+
children: /* @__PURE__ */ jsxs(TerminalShell, {
|
|
11425
|
+
active: terminal,
|
|
11428
11426
|
fontSize,
|
|
11429
11427
|
lineHeight,
|
|
11430
|
-
affordances
|
|
11431
|
-
|
|
11432
|
-
|
|
11433
|
-
|
|
11434
|
-
|
|
11435
|
-
|
|
11436
|
-
|
|
11437
|
-
|
|
11428
|
+
affordances,
|
|
11429
|
+
children: [
|
|
11430
|
+
frame ? frameTask === void 0 && !replaying ? /* @__PURE__ */ jsx("div", {
|
|
11431
|
+
className: cn(terminal ? "term-row text-fg-4" : "p-4 text-body-sm text-fg-4"),
|
|
11432
|
+
children: "This sub-agent's work is not in this transcript."
|
|
11433
|
+
}) : null : items.length === 0 && state.status !== "starting" ? emptyState !== void 0 ? emptyState : /* @__PURE__ */ jsx(SessionEmptyState, {
|
|
11434
|
+
cwd: state.cwd,
|
|
11435
|
+
hasCommands: !!state.commands?.length,
|
|
11436
|
+
hasSkills: !!state.skills?.some((s) => s.enabled),
|
|
11437
|
+
canBrowseFiles
|
|
11438
|
+
}) : null,
|
|
11439
|
+
frame && frameTask === void 0 && !replaying ? null : /* @__PURE__ */ jsx(TranscriptRows, {
|
|
11440
|
+
rows,
|
|
11441
|
+
boundary,
|
|
11442
|
+
since: catchUp?.since,
|
|
11443
|
+
terminal,
|
|
11444
|
+
replaying,
|
|
11445
|
+
stickyPrompt: !frame && stickyPrompt,
|
|
11446
|
+
gap,
|
|
11447
|
+
fontSize,
|
|
11448
|
+
lineHeight,
|
|
11449
|
+
items,
|
|
11450
|
+
pendingApprovals: state.pendingApprovals,
|
|
11451
|
+
scrubber,
|
|
11452
|
+
bookmarks: frame ? void 0 : bookmarks,
|
|
11453
|
+
affordances,
|
|
11454
|
+
fileUrl,
|
|
11455
|
+
attachmentUrl,
|
|
11456
|
+
hostImage,
|
|
11457
|
+
jumpToRecapRef,
|
|
11458
|
+
repinRef,
|
|
11459
|
+
reveal: frame ? void 0 : reveal,
|
|
11460
|
+
frameParentId: frame?.parentToolUseId,
|
|
11461
|
+
onOpenSubagent: frame ? void 0 : onOpenSubagent
|
|
11462
|
+
}),
|
|
11463
|
+
(frame ? frameTask !== void 0 && taskBusy(frameTask, items) : showLoader(state)) ? terminal ? /* @__PURE__ */ jsxs(Fragment$1, { children: [state.items.length > 0 ? /* @__PURE__ */ jsx("div", {
|
|
11464
|
+
className: "term-blank",
|
|
11465
|
+
"aria-hidden": true
|
|
11466
|
+
}) : null, /* @__PURE__ */ jsx(WorkingRow, {
|
|
11467
|
+
label: state.status === "starting" ? "Starting…" : "Working…",
|
|
11468
|
+
startedAt: runStartedAt,
|
|
11469
|
+
tokens: state.contextUsage?.totalTokens
|
|
11470
|
+
})] }) : /* @__PURE__ */ jsx(Loader, { label: state.status === "starting" ? "Starting session…" : void 0 }) : null
|
|
11471
|
+
]
|
|
11472
|
+
})
|
|
11473
|
+
}),
|
|
11474
|
+
/* @__PURE__ */ jsx(ConversationScrollButton, {}),
|
|
11475
|
+
replaying ? /* @__PURE__ */ jsx("div", {
|
|
11476
|
+
"data-slot": "transcript-hold",
|
|
11477
|
+
"aria-hidden": true,
|
|
11478
|
+
className: "wd-hold-appear visible pointer-events-none absolute inset-0 overflow-hidden",
|
|
11479
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
11480
|
+
className: cn("mx-auto w-full max-w-[var(--wd-transcript-max-width)]", !terminal && "px-4 py-4"),
|
|
11481
|
+
children: terminal ? /* @__PURE__ */ jsx(TerminalSurface, {
|
|
11482
|
+
fontSize,
|
|
11483
|
+
lineHeight,
|
|
11484
|
+
affordances: false,
|
|
11485
|
+
bleed: "1ch",
|
|
11486
|
+
className: "term-transcript",
|
|
11487
|
+
children: /* @__PURE__ */ jsx(WorkingRow, { label: "Loading…" })
|
|
11488
|
+
}) : /* @__PURE__ */ jsx(Loader, { label: "Loading session…" })
|
|
11489
|
+
})
|
|
11490
|
+
}) : null
|
|
11491
|
+
]
|
|
11492
|
+
})
|
|
11438
11493
|
})
|
|
11439
11494
|
})
|
|
11440
11495
|
});
|
|
@@ -11767,7 +11822,7 @@ const INTERACTIVE = [
|
|
|
11767
11822
|
"[role=\"radio\"]",
|
|
11768
11823
|
"[role=\"tab\"]"
|
|
11769
11824
|
].join(",");
|
|
11770
|
-
function SessionPanel({ client, sessionId, header, panelSurface = "internal", statusSurface = "internal", statusPlacement = "top", onOpenPanel, onVitals, transcriptVariant = "cards", transcriptDensity = "comfortable", transcriptFont = "sans", affordances, terminalMetrics, scrubber = false, bookmarks, onToggleBookmark, reveal, subagents, openSubagent, onSubagentChange, stickyPrompt = false, controlsSurface = "internal", onControls, focusComposerOnClick = false, unseen, readOnly = false, approvalPrompts, toolHost, clientTools, cacheTranscript, emptyState, onLinkClick, onOpenFile, fontSize, className }) {
|
|
11825
|
+
function SessionPanel({ client, sessionId, header, panelSurface = "internal", statusSurface = "internal", statusPlacement = "top", onOpenPanel, onVitals, transcriptVariant = "cards", transcriptDensity = "comfortable", transcriptFont = "sans", affordances, terminalMetrics, scrubber = false, bookmarks, peerMentions = true, onToggleBookmark, reveal, subagents, openSubagent, onSubagentChange, stickyPrompt = false, controlsSurface = "internal", onControls, focusComposerOnClick = false, unseen, readOnly = false, approvalPrompts, toolHost, clientTools, cacheTranscript, emptyState, onLinkClick, onOpenFile, fontSize, className }) {
|
|
11771
11826
|
const effectiveTermFontSize = terminalMetrics?.fontSize ?? fontSize;
|
|
11772
11827
|
const effectiveTermLineHeight = terminalMetrics?.lineHeight ?? (fontSize !== void 0 ? Math.round(fontSize * (18 / 13)) : void 0);
|
|
11773
11828
|
const external = panelSurface === "external";
|
|
@@ -11999,6 +12054,7 @@ function SessionPanel({ client, sessionId, header, panelSurface = "internal", st
|
|
|
11999
12054
|
engine: state.engine
|
|
12000
12055
|
});
|
|
12001
12056
|
const hostFiles = useHostFileSearch(client, state.cwd);
|
|
12057
|
+
const peers = usePeerSessions(client, sessionId, peerMentions);
|
|
12002
12058
|
const draft = useDraft(client, sessionId);
|
|
12003
12059
|
const searchComposerFiles = useCallback((query, options) => hostFiles.search(query, {
|
|
12004
12060
|
...options,
|
|
@@ -12160,6 +12216,7 @@ function SessionPanel({ client, sessionId, header, panelSurface = "internal", st
|
|
|
12160
12216
|
fileUrl: sessionId ? (path) => client.sessionFileUrl(sessionId, path) : void 0,
|
|
12161
12217
|
attachmentUrl: sessionId ? (id) => client.attachmentUrl(sessionId, id) : void 0,
|
|
12162
12218
|
canBrowseFiles: hostFiles.available,
|
|
12219
|
+
sessionNames: peers.names,
|
|
12163
12220
|
hostImage,
|
|
12164
12221
|
variant: transcriptVariant,
|
|
12165
12222
|
density: transcriptDensity,
|
|
@@ -12267,6 +12324,7 @@ function SessionPanel({ client, sessionId, header, panelSurface = "internal", st
|
|
|
12267
12324
|
attachments,
|
|
12268
12325
|
draft,
|
|
12269
12326
|
onSearchFiles: hostFiles.available ? searchComposerFiles : void 0,
|
|
12327
|
+
peers: peers.peers,
|
|
12270
12328
|
onShellCommand: shell ? runShell : void 0,
|
|
12271
12329
|
layout: controlsExternal ? "inline" : "stacked",
|
|
12272
12330
|
toolbar: controlsExternal ? void 0 : sessionControls,
|
|
@@ -12508,6 +12566,6 @@ function resolveAgainstCwd(path, cwd) {
|
|
|
12508
12566
|
return parseFileLink(path, cwd)?.path ?? path;
|
|
12509
12567
|
}
|
|
12510
12568
|
//#endregion
|
|
12511
|
-
export { TerminalDiff as $,
|
|
12569
|
+
export { TerminalDiff as $, SelectItem as $t, PermissionPrompt as A, ProgressRing as At, EntryIcon as B, DialogBody as Bt, SessionInfoDialog as C, hashtagTrigger as Ct, QuestionPrompt as D, PromptArea as Dt, QUESTION_BEHAVIORS as E, usePromptAreaState as Et, permissionModeMeta as F, copyText as Ft, Composer as G, DialogTrigger as Gt, TaskList as H, DialogContent as Ht, ModelSelect as I, Tip as It, useToolTitle as J, MenuItem as Jt, TerminalSurface as K, Menu$1 as Kt, SkillsDialog as L, TooltipContent as Lt, PERMISSION_MODES as M, CodeBlock as Mt, PermissionModeSelect as N, Spinner as Nt, parseUserQuestions as O, plainTextToSegments as Ot, permissionModeChoices as P, CopyButton as Pt, parseFileLink as Q, SelectContent as Qt, McpDialog as R, TooltipProvider as Rt, STATUS_META as S, commandTrigger as St, TerminalPermissionPrompt as T, mentionTrigger as Tt, ContextDialog as U, DialogHeader as Ut, TasksDialog as V, DialogClose as Vt, contextNote as W, DialogRow as Wt, FileLinkProvider as X, MenuTrigger as Xt, TerminalMarkdown as Y, MenuSeparator as Yt, useFileLinks as Z, Select$1 as Zt, Loader as _, matchClientCommand as _t, UsageDialog as a, Input as an, CopyAction as at, ConversationScrollButton as b, rankPeerSessions as bt, Transcript as c, Button as cn, PromptTokenText as ct, Message as d, isMutatingTool as dt, SelectItemText as en, previewPatch as et, MessageContent as f, toolIcon as ft, SessionEmptyState as g, useTranscriptVariant as gt, TerminalTranscript as h, useTranscriptDensity as ht, SessionPanel as i, Textarea as in, Row as it, Response as j, Splitter as jt, SubagentStrip as k, segmentsToPlainText as kt, ToolCallCard as l, buttonVariants as ln, SessionNamesProvider as lt, TerminalItemView as m, TranscriptVariantProvider as mt, usePathLinks as n, SelectValue as nn, Blank as nt, UsageMeters as o, Badge as on, WithActions as ot, FileCard as p, TranscriptDensityProvider as pt, ToolTitleProvider as q, MenuContent as qt, matchPath as r, PortalScope as rn, Ink as rt, useMinuteClock as s, badgeVariants as sn, useAffordances as st, resolveAgainstCwd as t, SelectTrigger as tn, Band as tt, Reasoning as u, cn as un, SkillNamesProvider as ut, Conversation as v, mergeComposerRows as vt, TerminalQuestionPrompt as w, launchTrigger as wt, StatusBar as x, skillPrompt as xt, ConversationContent as y, rankComposerRows as yt, HostFilesDialog as z, Dialog$1 as zt };
|
|
12512
12570
|
|
|
12513
|
-
//# sourceMappingURL=use-path-links-
|
|
12571
|
+
//# sourceMappingURL=use-path-links-CepFsMdW.mjs.map
|