@alivault/pico 0.9.0 → 0.10.1

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 (38) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{index-BXfOqRXc.js → index-7ls3Zqfs.js} +10 -10
  3. package/.output/public/assets/routes-CNpFhMfH.js +2161 -0
  4. package/.output/public/assets/styles-oRWMaOB0.css +2 -0
  5. package/.output/server/_libs/@base-ui/react+[...].mjs +106 -1
  6. package/.output/server/_libs/@dnd-kit/core+[...].mjs +1 -1
  7. package/.output/server/_libs/@pierre/diffs+[...].mjs +2 -2
  8. package/.output/server/_libs/@pierre/trees+[...].mjs +1 -1
  9. package/.output/server/_libs/@radix-ui/react-dialog+[...].mjs +1 -1
  10. package/.output/server/_libs/@radix-ui/react-primitive+[...].mjs +1 -1
  11. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  12. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +1 -1
  13. package/.output/server/_libs/cmdk.mjs +1 -1
  14. package/.output/server/_libs/dnd-kit__accessibility.mjs +1 -1
  15. package/.output/server/_libs/dnd-kit__sortable.mjs +1 -1
  16. package/.output/server/_libs/hast-util-from-parse5+[...].mjs +1 -1
  17. package/.output/server/_libs/hast-util-raw+[...].mjs +1 -1
  18. package/.output/server/_libs/hast-util-to-jsx-runtime+[...].mjs +1 -1
  19. package/.output/server/_libs/lucide-react.mjs +104 -11
  20. package/.output/server/_libs/mdast-util-gfm+[...].mjs +1 -1
  21. package/.output/server/_libs/next-themes.mjs +1 -1
  22. package/.output/server/_libs/radix-ui__react-compose-refs.mjs +1 -1
  23. package/.output/server/_libs/radix-ui__react-context.mjs +1 -1
  24. package/.output/server/_libs/react-markdown+[...].mjs +1 -1
  25. package/.output/server/_libs/sonner.mjs +1 -1
  26. package/.output/server/_libs/tanstack__react-hotkeys.mjs +1 -1
  27. package/.output/server/_libs/tanstack__react-query.mjs +1 -1
  28. package/.output/server/_libs/tanstack__react-store.mjs +1 -1
  29. package/.output/server/_libs/vaul.mjs +1 -1
  30. package/.output/server/_ssr/{router-DIdiRf-y.mjs → router-DhVJ7gcL.mjs} +1137 -423
  31. package/.output/server/_ssr/{routes-bPw2DezY.mjs → routes-DbGwM-bj.mjs} +51 -32
  32. package/.output/server/_ssr/{routes-7x8dHcec.mjs → routes-NB2wmfpS.mjs} +6227 -2516
  33. package/.output/server/_ssr/ssr.mjs +3 -3
  34. package/.output/server/{_tanstack-start-manifest_v-CMhyz9t-.mjs → _tanstack-start-manifest_v-DrOsJYxt.mjs} +9 -4
  35. package/.output/server/index.mjs +474 -474
  36. package/package.json +1 -1
  37. package/.output/public/assets/routes-CnNf4Tfg.js +0 -2160
  38. package/.output/public/assets/styles-DueiniTy.css +0 -2
@@ -1,11 +1,11 @@
1
1
  import { i as __toESM } from "../_runtime.mjs";
2
- import { B as TooltipProvider$1, G as TooltipRoot, H as TooltipPositioner, U as TooltipPortal, V as TooltipPopup, W as TooltipTrigger$1, X as require_react, Y as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { $ as require_react, G as TooltipPositioner, J as TooltipRoot, K as TooltipPortal, Q as require_jsx_runtime, U as TooltipProvider$1, W as TooltipPopup, q as TooltipTrigger$1 } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { o as lazyRouteComponent, s as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
4
4
  import { n as clsx } from "../_libs/class-variance-authority+clsx.mjs";
5
5
  import { t as twMerge } from "../_libs/tailwind-merge.mjs";
6
- import { A as Command, B as ArrowRight, H as ArrowDown, P as ChevronUp, R as ArrowUp, U as ArrowBigUp, V as ArrowLeft, h as Option } from "../_libs/lucide-react.mjs";
6
+ import { F as Command, J as ArrowDown, K as ArrowRight, U as ArrowUp, Y as ArrowBigUp, g as Option, q as ArrowLeft, z as ChevronUp } from "../_libs/lucide-react.mjs";
7
7
  import { n as string, t as object } from "../_libs/zod.mjs";
8
- //#region node_modules/.nitro/vite/services/ssr/assets/routes-bPw2DezY.js
8
+ //#region node_modules/.nitro/vite/services/ssr/assets/routes-DbGwM-bj.js
9
9
  var import_react = /* @__PURE__ */ __toESM(require_react());
10
10
  var import_jsx_runtime = require_jsx_runtime();
11
11
  function cn(...inputs) {
@@ -126,21 +126,21 @@ function ShortcutArrowIcon({ arrow }) {
126
126
  function ShortcutText({ value }) {
127
127
  const tokens = tokenizeShortcut(value);
128
128
  if (tokens.length === 0) return null;
129
- return tokens.map((token, index) => {
129
+ return tokens.map((token) => {
130
130
  if (token.type === "modifier") return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShortcutModifierIcon, { modifier: token.modifier }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
131
131
  className: "sr-only",
132
132
  children: token.label
133
- })] }, `${token.modifier}-${index}`);
133
+ })] }, `modifier-${token.modifier}`);
134
134
  if (token.type === "arrow") return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShortcutArrowIcon, { arrow: token.arrow }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
135
135
  className: "sr-only",
136
136
  children: token.label
137
- })] }, `${token.arrow}-${index}`);
137
+ })] }, `arrow-${token.arrow}`);
138
138
  if (token.type === "separator") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
139
139
  "aria-hidden": "true",
140
140
  className: "mx-0.5",
141
141
  children: token.value
142
- }, `separator-${index}`);
143
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: token.value }, `text-${index}`);
142
+ }, `separator-${token.value}`);
143
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: token.value }, `text-${token.value}`);
144
144
  });
145
145
  }
146
146
  function KeyboardShortcutContent({ children, className }) {
@@ -178,13 +178,13 @@ function TooltipTrigger({ ...props }) {
178
178
  ...props
179
179
  });
180
180
  }
181
- function TooltipContent({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) {
181
+ function TooltipContent({ className, positionerClassName, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) {
182
182
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipPositioner, {
183
183
  align,
184
184
  alignOffset,
185
185
  side,
186
186
  sideOffset,
187
- className: "isolate z-50",
187
+ className: cn("isolate z-50", positionerClassName),
188
188
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipPopup, {
189
189
  "data-slot": "tooltip-content",
190
190
  className: cn("z-50 flex max-h-[min(24rem,calc(100vh-2rem))] max-w-[min(42rem,calc(100vw-2rem))] min-w-0 origin-(--transform-origin) items-center gap-1.5 overflow-x-hidden overflow-y-auto rounded-md bg-secondary px-3 py-1.5 text-xs [overflow-wrap:anywhere] whitespace-pre-wrap text-secondary-foreground has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
@@ -193,16 +193,17 @@ function TooltipContent({ className, side = "top", sideOffset = 4, align = "cent
193
193
  })
194
194
  }) });
195
195
  }
196
- function TitleTooltip({ title, children, kbd, rows, side, align, sideOffset, className }) {
196
+ function TitleTooltip({ title, children, kbd, rows, side, align, sideOffset, className, positionerClassName }) {
197
197
  if (!title) return children;
198
198
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Tooltip$1, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipTrigger, { render: children }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipContent, {
199
199
  side,
200
200
  align,
201
201
  sideOffset,
202
202
  className,
203
+ positionerClassName,
203
204
  children: rows ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
204
205
  className: "flex flex-col gap-1",
205
- children: rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
206
+ children: rows.map((row, rowOffset) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
206
207
  className: "flex items-center justify-between gap-3",
207
208
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
208
209
  className: "min-w-0",
@@ -211,7 +212,7 @@ function TitleTooltip({ title, children, kbd, rows, side, align, sideOffset, cla
211
212
  "data-slot": "kbd",
212
213
  children: row.kbd
213
214
  }) : null]
214
- }, index))
215
+ }, `tooltip-row-${rowOffset}`))
215
216
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
216
217
  className: "min-w-0",
217
218
  children: title
@@ -263,6 +264,7 @@ var RIGHT_SIDEBAR_ACTIVE_TAB_STORAGE_KEY = "pico-right-sidebar-active-tab";
263
264
  var RIGHT_SIDEBAR_WIDTHS_STORAGE_KEY = "pico-right-sidebar-widths";
264
265
  var RIGHT_SIDEBAR_FILE_TREE_WIDTH_STORAGE_KEY = "pico-right-sidebar-file-tree-width";
265
266
  var RIGHT_SIDEBAR_HISTORY_HEIGHT_STORAGE_KEY = "pico-right-sidebar-history-height";
267
+ var RIGHT_SIDEBAR_HISTORY_TAB_STORAGE_KEY = "pico-right-sidebar-history-tab";
266
268
  var PROMPT_DRAFTS_STORAGE_KEY = "pico-prompt-drafts";
267
269
  var VIEWER_CONTEXT_STORAGE_KEY = "pico-context-id";
268
270
  function createContextId() {
@@ -333,6 +335,11 @@ function promptDraftKey(target = {}) {
333
335
  if (target.sessionFile) return `file:${target.sessionFile}`;
334
336
  return `draft:${target.cwd?.trim() || "default"}`;
335
337
  }
338
+ function promptDraftKeyMatchesOwner(draftKey, ownerKey) {
339
+ if (!ownerKey) return false;
340
+ if (draftKey === ownerKey) return true;
341
+ return ownerKey === promptDraftKey() && draftKey.startsWith("draft:");
342
+ }
336
343
  function loadStoredPromptDrafts() {
337
344
  try {
338
345
  const raw = safeSessionStorageGetItem(PROMPT_DRAFTS_STORAGE_KEY);
@@ -388,7 +395,10 @@ function readStoredCollapsedDirectories() {
388
395
  if (!raw) return {};
389
396
  const parsed = JSON.parse(raw);
390
397
  if (!parsed || typeof parsed !== "object") return {};
391
- return Object.fromEntries(Object.entries(parsed).map(([key, value]) => [key.trim(), Boolean(value)]).filter(([key]) => Boolean(key)));
398
+ return Object.fromEntries(Object.entries(parsed).flatMap(([key, value]) => {
399
+ const normalizedKey = key.trim();
400
+ return normalizedKey ? [[normalizedKey, Boolean(value)]] : [];
401
+ }));
392
402
  } catch {
393
403
  return {};
394
404
  }
@@ -589,15 +599,19 @@ function normalizePromptImage(image) {
589
599
  function extractMessageText(message) {
590
600
  if (typeof message?.content === "string") return message.content;
591
601
  if (!Array.isArray(message?.content)) return "";
592
- return message.content.filter((part) => part?.type === "text").map((part) => part.text || "").join("\n");
602
+ return message.content.flatMap((part) => part?.type === "text" ? [part.text || ""] : []).join("\n");
593
603
  }
594
604
  function extractToolText(result) {
595
605
  if (!result || !Array.isArray(result.content)) return "";
596
- return result.content.filter((part) => part?.type === "text" && typeof part.text === "string").map((part) => part.text).join("\n");
606
+ return result.content.flatMap((part) => part?.type === "text" && typeof part.text === "string" ? [part.text] : []).join("\n");
597
607
  }
598
608
  function extractMessageImages(message) {
599
609
  if (!Array.isArray(message?.content)) return [];
600
- return message.content.filter((part) => part?.type === "image").map((part) => normalizePromptImage(part)).filter((part) => Boolean(part));
610
+ return message.content.flatMap((part) => {
611
+ if (part?.type !== "image") return [];
612
+ const image = normalizePromptImage(part);
613
+ return image ? [image] : [];
614
+ });
601
615
  }
602
616
  function normalizeStreamingBehavior(value) {
603
617
  return value === "steer" || value === "followUp" ? value : void 0;
@@ -884,10 +898,11 @@ function mutateToolBlockInItems(items, callId, mutate) {
884
898
  for (let index = items.length - 1; index >= 0; index -= 1) {
885
899
  const item = items[index];
886
900
  if (item?.kind !== "assistant") continue;
887
- const block = item.blocks.find((entry) => entry.type === "tool" && entry.callId === callId);
888
- if (!block) continue;
889
- mutate(block);
890
- return;
901
+ for (const block of item.blocks) {
902
+ if (block.type !== "tool" || block.callId !== callId) continue;
903
+ mutate(block);
904
+ return;
905
+ }
891
906
  }
892
907
  }
893
908
  function applyToolResultToBlock(block, update) {
@@ -940,10 +955,10 @@ function mergeAssistantBlocksForStreaming(options) {
940
955
  return block;
941
956
  });
942
957
  if (!options.preserveMissingTools) return withToolResults(mergedNextBlocks);
943
- const missingPreviousTools = previousBlocks.map((block, index) => ({
958
+ const missingPreviousTools = previousBlocks.flatMap((block, index) => block.type === "tool" && Boolean(block.callId) && !nextToolCallIds.has(block.callId || "") ? [{
944
959
  block,
945
960
  index
946
- })).filter((entry) => entry.block.type === "tool" && Boolean(entry.block.callId) && !nextToolCallIds.has(entry.block.callId || ""));
961
+ }] : []);
947
962
  if (missingPreviousTools.length === 0) return withToolResults(mergedNextBlocks);
948
963
  const blocks = [];
949
964
  let missingIndex = 0;
@@ -1000,8 +1015,9 @@ function hasMatchingCommittedUserItem(candidate, committedItems, previousIndex)
1000
1015
  function mergePendingItemsForSync(options) {
1001
1016
  if (!options.preserveOptimisticItems) return [];
1002
1017
  const mergedPendingItems = [];
1003
- for (const previousItem of pendingItemsFromPrevious(options.previousItems)) {
1004
- const previousIndex = options.previousItems.indexOf(previousItem);
1018
+ for (let previousIndex = 0; previousIndex < options.previousItems.length; previousIndex += 1) {
1019
+ const previousItem = options.previousItems[previousIndex];
1020
+ if (previousItem?.kind !== "user" || !isOptimisticPendingConversationItem(previousItem) || previousItem.queued) continue;
1005
1021
  if (hasMatchingCommittedUserItem(previousItem, options.committedItems, previousIndex)) continue;
1006
1022
  mergedPendingItems.push(previousItem);
1007
1023
  }
@@ -1013,9 +1029,6 @@ function committedItemsFromPrevious(previousItems) {
1013
1029
  return !(item.kind === "assistant" && item.streaming);
1014
1030
  });
1015
1031
  }
1016
- function pendingItemsFromPrevious(previousItems) {
1017
- return previousItems.filter((item) => item.kind === "user" && isOptimisticPendingConversationItem(item) && !item.queued);
1018
- }
1019
1032
  function isQueuedConversationItem(item) {
1020
1033
  return item.kind === "user" && Boolean(item.queued);
1021
1034
  }
@@ -1030,7 +1043,10 @@ function nextMessageItemIndex(items) {
1030
1043
  return maxIndex + 1;
1031
1044
  }
1032
1045
  function uniqueRenderKey(preferredKey, items) {
1033
- const existingRenderKeys = new Set(items.map((item) => conversationItemRenderKey(item)).filter(Boolean));
1046
+ const existingRenderKeys = new Set(items.flatMap((item) => {
1047
+ const key = conversationItemRenderKey(item);
1048
+ return key ? [key] : [];
1049
+ }));
1034
1050
  if (!existingRenderKeys.has(preferredKey)) return preferredKey;
1035
1051
  let suffix = 1;
1036
1052
  while (existingRenderKeys.has(`${preferredKey}:streaming:${suffix}`)) suffix += 1;
@@ -1216,7 +1232,10 @@ function sanitizeThinkingSummaryText(value) {
1216
1232
  function primaryThinkingSummaryText(value) {
1217
1233
  if (typeof value !== "string") return "";
1218
1234
  const normalized = value.replace(/\r\n?/g, "\n");
1219
- const paragraphs = normalized.split(/\n\s*\n+/).map((part) => sanitizeThinkingSummaryText(part)).filter(Boolean);
1235
+ const paragraphs = normalized.split(/\n\s*\n+/).flatMap((part) => {
1236
+ const summary = sanitizeThinkingSummaryText(part);
1237
+ return summary ? [summary] : [];
1238
+ });
1220
1239
  if (paragraphs.length) return paragraphs[0] || "";
1221
1240
  return sanitizeThinkingSummaryText(normalized);
1222
1241
  }
@@ -1303,11 +1322,11 @@ function getSessionTitle(summary) {
1303
1322
  if (summary?.name?.trim()) return summary.name.trim();
1304
1323
  return "New session";
1305
1324
  }
1306
- var $$splitComponentImporter = () => import("./routes-7x8dHcec.mjs");
1325
+ var $$splitComponentImporter = () => import("./routes-NB2wmfpS.mjs");
1307
1326
  var indexSearchSchema = object({ session: string().optional() });
1308
1327
  var Route = createFileRoute("/")({
1309
1328
  validateSearch: indexSearchSchema,
1310
1329
  component: lazyRouteComponent($$splitComponentImporter, "component")
1311
1330
  });
1312
1331
  //#endregion
1313
- export { readStoredCenterMessages as $, TooltipTrigger as A, extractMessageText as B, THEME_COLOR_MODE_STORAGE_KEY as C, Tooltip$1 as D, TitleTooltip as E, cn as F, normalizePromptImage as G, flattenTree as H, createCompactionSummaryItem as I, normalizeThemeColorMode as J, normalizeSessionSelectionKeys as K, createContextId as L, appliedThemeClass as M, assistantBlocksFromMessage as N, TooltipContent as O, buildItemsFromSync as P, readStoredAutoScrollEnabled as Q, createInitialSessionState as R, THEME_COLOR_MODES as S, THEME_STORAGE_KEY as T, getSessionTitle as U, extractToolText as V, mergeAssistantBlocksForStreaming as W, previewUrlForImage as X, normalizeThemeFamily as Y, promptDraftKey as Z, Route as _, themeColorModeLabel as _t, COLLAPSED_DIRECTORIES_STORAGE_KEY as a, readStoredRecentDirectories as at, SIDEBAR_DIRECTORIES_STORAGE_KEY as b, toolCategoryFromTool as bt, Kbd as c, readStoredSessionDoneSoundEnabled as ct, RECENT_DIRECTORIES_STORAGE_KEY as d, readStoredThemeColorMode as dt, readStoredCollapsedDirectories as et, RIGHT_SIDEBAR_ACTIVE_TAB_STORAGE_KEY as f, rememberStoredPromptDraft as ft, RIGHT_SIDEBAR_WIDTHS_STORAGE_KEY as g, sessionListEntryKey as gt, RIGHT_SIDEBAR_OPEN_STORAGE_KEY as h, sameContextUsage as ht, CENTER_MESSAGES_STORAGE_KEY as i, readStoredPromptDraft as it, VIEWER_CONTEXT_STORAGE_KEY as j, TooltipProvider as k, KeyboardShortcutContent as l, readStoredSidebarDirectories as lt, RIGHT_SIDEBAR_HISTORY_HEIGHT_STORAGE_KEY as m, safeLocalStorageSetItem as mt, APPLIED_THEME_STORAGE_KEY as n, readStoredHideToolBlocks as nt, DRAFT_DIRECTORY_STORAGE_KEY as o, readStoredRightSidebarOpen as ot, RIGHT_SIDEBAR_FILE_TREE_WIDTH_STORAGE_KEY as p, safeLocalStorageGetItem as pt, normalizeStoredDirectoryList as q, AUTO_SCROLL_ENABLED_STORAGE_KEY as r, readStoredPinnedSessionKeys as rt, HIDE_TOOL_BLOCKS_STORAGE_KEY as s, readStoredSessionDoneDesktopNotificationsEnabled as st, APPLIED_THEME_CLASSES as t, readStoredDraftDirectory as tt, PINNED_SESSIONS_STORAGE_KEY as u, readStoredTheme as ut, SESSION_DONE_DESKTOP_NOTIFICATIONS_ENABLED_STORAGE_KEY as v, themeFamilyLabel as vt, THEME_FAMILIES as w, Spinner as x, SESSION_DONE_SOUND_ENABLED_STORAGE_KEY as y, thinkingSummaryText as yt, extractMessageImages as z };
1332
+ export { promptDraftKeyMatchesOwner as $, TooltipProvider as A, extractMessageImages as B, THEME_COLOR_MODES as C, TitleTooltip as D, THEME_STORAGE_KEY as E, buildItemsFromSync as F, mergeAssistantBlocksForStreaming as G, extractToolText as H, cn as I, normalizeStoredDirectoryList as J, normalizePromptImage as K, createCompactionSummaryItem as L, VIEWER_CONTEXT_STORAGE_KEY as M, appliedThemeClass as N, Tooltip$1 as O, assistantBlocksFromMessage as P, promptDraftKey as Q, createContextId as R, Spinner as S, toolCategoryFromTool as St, THEME_FAMILIES as T, flattenTree as U, extractMessageText as V, getSessionTitle as W, normalizeThemeFamily as X, normalizeThemeColorMode as Y, previewUrlForImage as Z, RIGHT_SIDEBAR_WIDTHS_STORAGE_KEY as _, sameContextUsage as _t, COLLAPSED_DIRECTORIES_STORAGE_KEY as a, readStoredPinnedSessionKeys as at, SESSION_DONE_SOUND_ENABLED_STORAGE_KEY as b, themeFamilyLabel as bt, Kbd as c, readStoredRightSidebarOpen as ct, RECENT_DIRECTORIES_STORAGE_KEY as d, readStoredSidebarDirectories as dt, readStoredAutoScrollEnabled as et, RIGHT_SIDEBAR_ACTIVE_TAB_STORAGE_KEY as f, readStoredTheme as ft, RIGHT_SIDEBAR_OPEN_STORAGE_KEY as g, safeLocalStorageSetItem as gt, RIGHT_SIDEBAR_HISTORY_TAB_STORAGE_KEY as h, safeLocalStorageGetItem as ht, CENTER_MESSAGES_STORAGE_KEY as i, readStoredHideToolBlocks as it, TooltipTrigger as j, TooltipContent as k, KeyboardShortcutContent as l, readStoredSessionDoneDesktopNotificationsEnabled as lt, RIGHT_SIDEBAR_HISTORY_HEIGHT_STORAGE_KEY as m, rememberStoredPromptDraft as mt, APPLIED_THEME_STORAGE_KEY as n, readStoredCollapsedDirectories as nt, DRAFT_DIRECTORY_STORAGE_KEY as o, readStoredPromptDraft as ot, RIGHT_SIDEBAR_FILE_TREE_WIDTH_STORAGE_KEY as p, readStoredThemeColorMode as pt, normalizeSessionSelectionKeys as q, AUTO_SCROLL_ENABLED_STORAGE_KEY as r, readStoredDraftDirectory as rt, HIDE_TOOL_BLOCKS_STORAGE_KEY as s, readStoredRecentDirectories as st, APPLIED_THEME_CLASSES as t, readStoredCenterMessages as tt, PINNED_SESSIONS_STORAGE_KEY as u, readStoredSessionDoneSoundEnabled as ut, Route as v, sessionListEntryKey as vt, THEME_COLOR_MODE_STORAGE_KEY as w, SIDEBAR_DIRECTORIES_STORAGE_KEY as x, thinkingSummaryText as xt, SESSION_DONE_DESKTOP_NOTIFICATIONS_ENABLED_STORAGE_KEY as y, themeColorModeLabel as yt, createInitialSessionState as z };