8426 lines · 318.1 KB · TypeScript
RawDownload
import { useLoadBalancedEnvironment } from "../hooks/useLoadBalancedEnvironment";import type { UsageLimitSourceSnapshots } from "@t3tools/contracts";import {  collectProviderUsageLimits,  hasProviderUsageLimits,  isUsageLimitsCommand,} from "@t3tools/shared/usageLimits";import { feedbackBannerItem } from "./chat/ComposerFeedback";import { usageLimitsBannerItem } from "./chat/ComposerUsageLimits";import { derivePendingRequests } from "@t3tools/client-runtime/pending-requests";import {  type AssistantCitation,  type ApprovalRequestId,  type ChatFileAttachment,  DEFAULT_MODEL,  type EnvironmentId,  type MessageId,  type ModelSelection,  type ProjectScript,  type ProjectId,  type ProviderApprovalDecision,  type PreviewAnnotationPayload,  ProviderInstanceId,  type ServerProvider,  type ResolvedKeybindingsConfig,  type ScopedThreadRef,  type ThreadId,  type ThreadLinkedPullRequest,  type TurnId,  type KeybindingCommand,  OrchestrationThreadActivity,  PROVIDER_SEND_TURN_MAX_ATTACHMENTS,  ProviderInteractionMode,  ProviderDriverKind,  resolveEnvironmentMachineKind,  RuntimeMode,  TerminalOpenInput,} from "@t3tools/contracts";import { type EnvironmentConnectionPresentation } from "@t3tools/client-runtime/connection";import { wasBootstrapThreadDeleted } from "@t3tools/client-runtime/errors";import { type CodexArtifactTemplate } from "@t3tools/client-runtime/codex-artifact-templates";import { effectiveSnoozed, threadWokeAt } from "@t3tools/client-runtime/state/thread-settled";import {  parseCodexFeedbackCommand,  submitCodexFeedback,  type CodexFeedbackSubmission,} from "@t3tools/client-runtime/state/threads";import {  parseScopedThreadKey,  scopedThreadKey,  scopeProjectRef,  scopeThreadRef,} from "@t3tools/client-runtime/environment";import {  applyClaudePromptEffortPrefix,  createModelSelection,  resolvePromptInjectedEffort,} from "@t3tools/shared/model";import {  projectScriptCwd,  projectScriptRuntimeEnv,  resolveProjectScripts,} from "@t3tools/shared/projectScripts";import { truncate } from "@t3tools/shared/String";import { resolveThreadReferenceCopyTarget } from "@t3tools/shared/threadReference";import {  getTerminalLabel,  nextTerminalId,  resolveTerminalSessionLabel,} from "@t3tools/shared/terminalLabels";import { Debouncer } from "@tanstack/react-pacer";import { useAtomValue } from "@effect/atom-react";import {  lazy,  memo,  Suspense,  useCallback,  useEffect,  useEffectEvent,  useLayoutEffect,  useMemo,  useRef,  useState,} from "react";import { flushSync } from "react-dom";import { useLocation, useNavigate } from "@tanstack/react-router";import { assistantCitationsToPlainText } from "@t3tools/shared/assistantCitations";import { assistantCitationFromLocation } from "../lib/assistantCitationNavigation";import type { AssistantCitationSourceAnchor } from "~/lib/assistantTextSelection";import { useShallow } from "zustand/react/shallow";import {  isAtomCommandInterrupted,  mapAtomCommandResult,  settlePromise,  squashAtomCommandFailure,  type AtomCommandResult,} from "@t3tools/client-runtime/state/runtime";import * as Cause from "effect/Cause";import * as Schema from "effect/Schema";import { AsyncResult } from "effect/unstable/reactivity";import { isElectron } from "../env";import { readLocalApi } from "../localApi";import { useDiffPanelStore } from "../diffPanelStore";import {  collapseExpandedComposerCursor,  type ComposerSubmissionIntent,  parseStandaloneComposerSlashCommand,} from "../composer-logic";import {  createMessageAttachmentPreviewProjector,  derivePhase,  deriveTimelineEntriesWithState,  deriveActiveWorkStartedAt,  deriveActivePlanState,  findLatestProposedPlan,  deriveWorkLogEntries,  hasActionableProposedPlan,  isLatestTurnSettled,  selectHandoffImageResources,  type TimelineEntriesProjection,} from "../session-logic";import { type LegendListRef } from "@legendapp/list/react";import {  CHAT_TIMELINE_ANCHOR_OFFSET,  getAnchoredTurnMetrics,  timelineContentOverflowsViewport,  type TimelineScrollMode,} from "./chat/timelineScrollAnchoring";import {  buildPendingUserInputAnswers,  derivePendingUserInputProgress,  setPendingUserInputCustomAnswer,  togglePendingUserInputOptionSelection,  type PendingUserInputDraftAnswer,} from "../pendingUserInput";import { useUiStateStore } from "../uiStateStore";import {  latestWorkspaceMutationId,  useWorkspaceMutationRefresh,} from "../hooks/useWorkspaceMutationRefresh";import {  buildPlanImplementationThreadTitle,  buildPlanImplementationPrompt,  resolvePlanFollowUpSubmission,} from "../proposedPlan";import {  DEFAULT_INTERACTION_MODE,  DEFAULT_RUNTIME_MODE,  DEFAULT_THREAD_TERMINAL_ID,  MAX_TERMINALS_PER_GROUP,  type ChatMessage,  isBrowserPreviewAttachment,  isImageAttachment,  type SessionPhase,  type Thread,} from "../types";import { useTheme } from "../hooks/useTheme";import { writeTextToClipboard } from "../hooks/useCopyToClipboard";import { isCommandPaletteOpen } from "../commandPaletteBus";import { buildTemporaryWorktreeBranchName } from "@t3tools/shared/git";import { useMediaQuery } from "../hooks/useMediaQuery";import { RIGHT_PANEL_INLINE_LAYOUT_MEDIA_QUERY } from "../rightPanelLayout";import {  pullRequestSurface,  selectActiveRightPanel,  selectActiveRightPanelSurface,  selectThreadRightPanelState,  type RightPanelSurface,  useRightPanelStore,} from "../rightPanelStore";import {  isPreviewSupportedInRuntime,  setActivePreviewTab,  useThreadPreviewState,} from "../previewStateStore";import { previewRuntimeTabId } from "../browser/previewRuntimeTabId";import { BrowserSettingsReadError } from "../browser/openFileInPreview";import { addBrowserSurface } from "./preview/addBrowserSurface";import { closePreviewSession } from "./preview/closePreviewSession";import { ThreadPreviewMiniPlayer } from "./preview/ThreadPreviewMiniPlayer";import { subscribePreviewAction } from "./preview/previewActionBus";import { getConfiguredPreviewUrls } from "./preview/previewEmptyStateLogic";import { makeWorkspaceFileDropHandlers } from "./chat/workspaceFileDrop";import {  selectThreadPreviewMiniPlayer,  usePreviewMiniPlayerStore,} from "../previewMiniPlayerStore";import { isThreadOwnPullRequest } from "./pullRequest/pullRequestDetail.logic";import { PullRequestDetailPanel } from "./pullRequest/PullRequestDetailPanel";import { PullRequestDetailGhost } from "./pullRequest/PullRequestGhosts";import { PullRequestsUnavailableState } from "./pullRequest/PullRequestsUnavailableState";import { RightPanelTabs } from "./RightPanelTabs";import { AgentsPanel } from "./AgentsPanel";import {  deriveAgentPanelModel,  foldSubagentActivities,} from "@t3tools/client-runtime/state/subagentRuntime";import { BranchToolbar } from "./BranchToolbar";import { resolveShortcutCommand, shortcutLabelForCommand } from "../keybindings";import ThreadTerminalDrawer from "./ThreadTerminalDrawer";import {  AlarmClockIcon,  CheckCircle2Icon,  ChevronDownIcon,  GitBranchIcon,  Minimize2Icon,  PaperclipIcon,  WifiOffIcon,} from "lucide-react";import { cn, randomHex } from "~/lib/utils";import { stackedThreadToast, toastManager } from "./ui/toast";import { decodeProjectScriptKeybindingRule } from "~/lib/projectScriptKeybindings";import { type NewProjectScriptInput } from "./ProjectScriptsControl";import {  buildProjectScript,  commandForProjectScript,  nextProjectScriptId,  projectScriptIdFromCommand,} from "~/projectScripts";import { newDraftId, newMessageId, newThreadId } from "~/lib/utils";import { useBrowserHistoryStore } from "~/browserHistoryStore";import { registerFaviconProjectForThread } from "~/browserFaviconStore";import { getProviderModelCapabilities } from "../providerModels";import {  applyProviderInstanceSettings,  deriveProviderInstanceEntries,  NO_PROVIDER_MODEL_SELECTION,  sortProviderInstanceEntries,} from "../providerInstances";import {  useClientSettings,  useClientSettingsHydrated,  useEnvironmentSettings,} from "../hooks/useSettings";import { useNowMinute } from "../hooks/useNowMinute";import { usePanelAnimationSettings, usePanelPresence } from "../panelAnimations";import { useNewThreadHandler } from "../hooks/useHandleNewThread";import { useOpenPanelPullRequestUrl } from "../hooks/useOpenPanelPullRequestUrl";import { useThreadActions } from "../hooks/useThreadActions";import { resolveAppModelSelectionForInstance } from "../modelSelection";import { confirmTerminalClose, isTerminalCloseConfirmPending } from "../lib/terminalCloseConfirm";import { isPreviewFocused } from "../lib/previewFocus";import { getTerminalFocusOwner } from "../lib/terminalFocus";import {  preventRepeatedTerminalCloseShortcut,  preventTerminalCloseShortcut,} from "../lib/terminalCloseShortcut";import { resolveNewDraftStartFromOrigin } from "../lib/chatThreadActions";import {  derivePhysicalProjectKey,  deriveLogicalProjectKeyFromSettings,  selectProjectGroupingSettings,} from "../logicalProject";import { buildPhysicalToLogicalProjectKeyMap } from "../sidebarProjectGrouping";import { buildDraftThreadRouteParams, buildThreadRouteParams } from "../threadRoutes";import {  beginBackgroundDraftSubmissionByRef,  clearBackgroundDraftSubmissionByRef,  composerDraftHasUserContent,  type ComposerFileAttachment,  type ComposerImageAttachment,  type DraftThreadEnvMode,  finalizePromotedDraftThreadByRef,  markPromotedDraftThreadByRef,  useComposerDraftStore,  type DraftId,} from "../composerDraftStore";import {  appendTerminalContextsToPrompt,  formatTerminalContextLabel,  type TerminalContextDraft,  type TerminalContextSelection,} from "../lib/terminalContext";import {  appendElementContextsToPrompt,  type ElementContextDraft,  formatElementContextLabel,} from "../lib/elementContext";import { appendPreviewAnnotationPrompt } from "../lib/previewAnnotation";import { appendReviewCommentsToPrompt, type ReviewCommentContext } from "../reviewCommentContext";import { environmentCatalog } from "../connection/catalog";import { selectThreadTerminalUiState, useTerminalUiStateStore } from "../terminalUiStateStore";import { useKnownTerminalSessions, useThreadRunningTerminalIds } from "../state/terminalSessions";import { useEnvironmentQuery } from "../state/query";import {  environmentServerConfigsAtom,  primaryServerAvailableEditorsAtom,  primaryServerKeybindingsAtom,  primaryServerSettingsAtom,  serverEnvironment,} from "../state/server";import { terminalEnvironment } from "../state/terminal";import { threadEnvironment, useEnvironmentThread } from "../state/threads";import {  requestOlderThreadTurns,  threadHasOlderTurns,} from "@t3tools/client-runtime/state/threads";import { resolveProviderSkillsForCwd } from "@t3tools/client-runtime/providerSkills";import { vcsEnvironment } from "../state/vcs";import { useEnvironments, usePrimaryEnvironment } from "../state/environments";import {  useProject,  useProjects,  useThread,  useThreadRefs,  useThreadShell,} from "../state/entities";import { environmentShell } from "../state/shell";import { ChatComposer, type ChatComposerHandle } from "./chat/ChatComposer";import { createPageScrollController, type PageScrollKey } from "./chat/pageScrollController";import { DraftHeroHeadline } from "./chat/DraftHeroHeadline";import { ExpandedImageDialog } from "./chat/ExpandedImageDialog";import { PullRequestThreadDialog } from "./PullRequestThreadDialog";import { MessagesTimeline } from "./chat/MessagesTimeline";import type { AssistantCitationRequest } from "./chat/AssistantCitationSource";import { resolveTimelineIsAtEnd } from "./chat/MessagesTimeline.logic";import { resolveComposerTimelineInset } from "./composerFooterLayout";import { ChatHeader } from "./chat/ChatHeader";import { PanelLayoutControls, RightPanelMaximizeControl } from "./chat/PanelLayoutControls";import { expandedImageKey, type ExpandedImagePreview } from "./chat/ExpandedImagePreview";import { NoActiveThreadState } from "./NoActiveThreadState";import { WorkspacePageHeader } from "./WorkspacePageHeader";import {  type EnvironmentOption,  resolveEffectiveEnvMode,  resolveLocalCheckoutBranchMismatch,  shouldShowComposerContextStrip,  shouldShowEnvironmentIndicator,} from "./BranchToolbar.logic";import {  getProviderStatusBannerKey,  ProviderStatusBanner,  shouldShowProviderStatusBanner,} from "./chat/ProviderStatusBanner";import {  dismissThreadErrorBannerForSession,  getThreadErrorBannerKey,  isThreadErrorBannerDismissedForSession,  shouldShowThreadErrorBanner,  ThreadErrorBanner,} from "./chat/ThreadErrorBanner";import type { ComposerBannerStackItem } from "./chat/ComposerBannerStack";import { ComposerSurface } from "./chat/ComposerSurface";import {  hasAvailableCompactionProvider,  hasDismissedResumeCompaction,  shouldOfferResumeCompaction,} from "./chat/ContextWindowMeter.logic";import { deriveLatestContextWindowSnapshot, formatContextWindowTokens } from "../lib/contextWindow";import {  DRAFT_HERO_TRANSITION_ANIMATION_ID,  DRAFT_HERO_TRANSITION_DURATION_MS,  DRAFT_HERO_TRANSITION_EASING,  MOBILE_COMPOSER_VIEW_TRANSITION_NAME,  MOBILE_DRAFT_HEADLINE_VIEW_TRANSITION_NAME,  runMobileComposerTransition,} from "./chat/draftHeroTransition";import {  MAX_HIDDEN_MOUNTED_TERMINAL_THREADS,  agentControlledBrowserCloseConfirmation,  branchMismatchKey,  buildExpiredTerminalContextToastCopy,  buildLocalDraftThread,  buildLoadingThreadFromShell,  buildRunningThreadTurnInterruptInput,  buildThreadTurnInterruptInput,  collectUserMessageBlobPreviewUrls,  createLocalDispatchSnapshot,  deriveComposerSendState,  dismissBranchMismatchForSession,  hasEnvironmentReconnectWarningGraceElapsed,  latestTurnStartFailureId,  scheduleEnvironmentReconnectWarning,  hasServerAcknowledgedLocalDispatch,  isBranchMismatchDismissedForSession,  shouldDockDraftHeroForSubmission,  shouldReleaseTimelineAnchorForToolActivity,  shouldShowBranchMismatchBanner,  shouldShowPlanFollowUpPrompt,  shouldOpenProactivePullRequest,  shouldRetargetThreadPullRequestPanel,  shouldOpenProactiveTurnDiff,  shouldRenderPreviewMiniPlayer,  getStartedThreadModelChangeBlockReason,  LAST_INVOKED_SCRIPT_BY_PROJECT_KEY,  LastInvokedScriptByProjectSchema,  type LocalDispatchSnapshot,  PullRequestDialogState,  cloneComposerImageForRetry,  deriveLockedProvider,  readFileAsDataUrl,  resolveFileAttachmentUrl,  reconcileMountedTerminalThreadIds,  resolveBackgroundDraftWorkspaceOptions,  resolveComposerInteractionMode,  resolveComposerProviderSelection,  resolveDraftHeroState,  observeProactivePanelUserChoice,  resolveProactiveTurnDiffAction,  resolveThreadMetadataUpdateForNextTurn,  resolveSendEnvMode,  revokeBlobPreviewUrl,  revokeUserMessagePreviewUrls,  shouldWriteThreadErrorToCurrentServerThread,  startNewThreadForProject,  codexArtifactTemplatePromptToAppend,  toolGroupConsumesUpwardNavigation,  waitForStartedServerThread,  shouldRefocusComposerOnWindowFocus,} from "./ChatView.logic";import type { ThreadSyncPhase } from "../threadSync";import { useLocalStorage } from "~/hooks/useLocalStorage";import { useComposerHandleContext } from "../composerHandleContext";import {  awaitAttachmentUploads,  getUploadedAttachments,  releaseDraftAttachments,  startAttachmentUpload,} from "../lib/attachmentUploadQueue";import { sanitizeThreadErrorMessage } from "~/rpc/transportError";import { RightPanelSheet } from "./RightPanelSheet";import { previewEnvironment } from "../state/preview";import { clampFileAttachmentUploadBytes } from "@t3tools/client-runtime/state/attachments";import { appAtomRegistry } from "../rpc/atomRegistry";import { fileAttachmentCapabilityBlockReason } from "./chat/composerAttachmentFiles";import { assetEnvironment } from "../state/assets";import { readPreparedConnection } from "../state/session";import { useAtomCommand } from "../state/use-atom-command";import { useAtomQueryRunner } from "../state/use-atom-query-runner";import { Button } from "./ui/button";import {  AlertDialog,  AlertDialogClose,  AlertDialogDescription,  AlertDialogFooter,  AlertDialogHeader,  AlertDialogPopup,  AlertDialogTitle,} from "./ui/alert-dialog";import { Tooltip, TooltipPopup, TooltipTrigger } from "./ui/tooltip";import { ServerUpdateAction } from "./ServerUpdateAction";import {  ComposerServerUpdateIcon,  ComposerServerUpdateStatus,} from "./chat/ComposerServerUpdateStatus";import {  buildVersionMismatchDismissalKey,  dismissServerUpdateFailure,  dismissVersionMismatch,  isServerUpdateFailureDismissed,  isVersionMismatchDismissed,  resolveServerConfigVersionMismatch,  resolveServerSelfUpdateCapability,  serverUpdateGuidance,  supportsDesktopAppUpdate,  supportsServerUpdateThreadContinuation,} from "../versionSkew";import { useAssetUrls } from "../assets/assetUrls";import { ATTACHMENT_ONLY_BOOTSTRAP_PROMPT } from "./chat/composerPromptHistory"; const EMPTY_ACTIVITIES: OrchestrationThreadActivity[] = [];const EMPTY_PROVIDERS: ServerProvider[] = [];const EMPTY_USAGE_LIMIT_SOURCES: UsageLimitSourceSnapshots = [];const EMPTY_PROVIDER_SKILLS: ServerProvider["skills"] = [];const EMPTY_PENDING_USER_INPUT_ANSWERS: Record<string, PendingUserInputDraftAnswer> = {};function useDraftHeroLayoutTransition(isDraftHeroState: boolean) {  const transitionGroupRef = useRef<HTMLDivElement | null>(null);  const composerAnchorRef = useRef<HTMLDivElement | null>(null);  const previousStateRef = useRef(isDraftHeroState);  const previousComposerRectRef = useRef<DOMRect | null>(null);  const animationRef = useRef<Animation | null>(null);  const attachTransitionGroupRef = (element: HTMLDivElement | null) => {    transitionGroupRef.current = element;  };  const attachComposerAnchorRef = (element: HTMLDivElement | null) => {    composerAnchorRef.current = element;  };  const captureComposerRect = () => {    previousComposerRectRef.current = composerAnchorRef.current?.getBoundingClientRect() ?? null;  };   useLayoutEffect(() => {    const transitionGroup = transitionGroupRef.current;    const nextComposerRect = composerAnchorRef.current?.getBoundingClientRect() ?? null;    const stateChanged = previousStateRef.current !== isDraftHeroState;    const prefersReducedMotion =      typeof window !== "undefined" &&      window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;    const mobileComposerTransitionActive =      typeof document !== "undefined" &&      document.documentElement.dataset.mobileComposerRouteTransition === "true";     animationRef.current?.cancel();    animationRef.current = null;     const previousComposerRect = previousComposerRectRef.current;    if (      stateChanged &&      !prefersReducedMotion &&      !mobileComposerTransitionActive &&

Lines 1–500 of 8426.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t