| ... | ... | @@ -2352,6 +2352,7 @@ function ChatViewContent(props: ChatViewProps) { |
| 2352 | 2352 | terminalUiLaunchContext?.threadId === activeThreadId ? terminalUiLaunchContext : null; |
| 2353 | 2353 | // Default true while loading to avoid toolbar flicker. |
| 2354 | 2354 | const isGitRepo = gitStatusQuery.data?.isRepo ?? true; |
| 2355 | const showComposerContextStrip = isGitRepo && activeProject !== null; |
| 2355 | 2356 | const initialDiffPanelGitScope = |
| 2356 | 2357 | gitStatusQuery.data?.hasWorkingTreeChanges === true ? "unstaged" : "branch"; |
| 2357 | 2358 | const diffPanelGitStatusResolutionKey = gitStatusQuery.data ? "resolved" : "pending"; |
| ... | ... | @@ -5592,119 +5593,128 @@ function ChatViewContent(props: ChatViewProps) { |
| 5592 | 5593 | : undefined |
| 5593 | 5594 | } |
| 5594 | 5595 | > |
| 5595 | | <div className="chat-composer-glass-host relative z-10 mx-auto w-full max-w-3xl rounded-[22px]"> |
| 5596 | | <div ref={attachDraftHeroComposerAnchorRef} className="relative z-10"> |
| 5597 | | <ChatComposer |
| 5598 | | composerRef={composerRef} |
| 5599 | | composerDraftTarget={composerDraftTarget} |
| 5600 | | environmentId={environmentId} |
| 5601 | | routeKind={routeKind} |
| 5602 | | routeThreadRef={routeThreadRef} |
| 5603 | | draftId={draftId} |
| 5604 | | activeThreadId={activeThreadId} |
| 5605 | | activeThreadEnvironmentId={activeThread?.environmentId} |
| 5606 | | activeThread={activeThread} |
| 5607 | | isServerThread={isServerThread} |
| 5608 | | isLocalDraftThread={isLocalDraftThread} |
| 5609 | | forceExpandedOnMobile={forceExpandedMobileComposer && isDraftHeroState} |
| 5610 | | projectSelectionRequired={isLocalDraftThread && activeProject === null} |
| 5611 | | phase={phase} |
| 5612 | | isConnecting={isConnecting} |
| 5613 | | isSendBusy={isSendBusy} |
| 5614 | | isPreparingWorktree={isPreparingWorktree} |
| 5615 | | environmentUnavailable={activeEnvironmentUnavailableState} |
| 5616 | | activePendingApproval={activePendingApproval} |
| 5617 | | pendingApprovals={pendingApprovals} |
| 5618 | | pendingUserInputs={pendingUserInputs} |
| 5619 | | activePendingProgress={activePendingProgress} |
| 5620 | | activePendingResolvedAnswers={activePendingResolvedAnswers} |
| 5621 | | activePendingIsResponding={activePendingIsResponding} |
| 5622 | | activePendingDraftAnswers={activePendingDraftAnswers} |
| 5623 | | activePendingQuestionIndex={activePendingQuestionIndex} |
| 5624 | | respondingRequestIds={respondingRequestIds} |
| 5625 | | showPlanFollowUpPrompt={showPlanFollowUpPrompt} |
| 5626 | | activeProposedPlan={activeProposedPlan} |
| 5627 | | activePlan={activePlan as { turnId?: TurnId } | null} |
| 5628 | | sidebarProposedPlan={sidebarProposedPlan as { turnId?: TurnId } | null} |
| 5629 | | planSidebarLabel={planSidebarLabel} |
| 5630 | | planSidebarOpen={planSidebarOpen} |
| 5631 | | runtimeMode={runtimeMode} |
| 5632 | | interactionMode={interactionMode} |
| 5633 | | lockedProvider={lockedProvider} |
| 5634 | | providerStatuses={providerStatuses as ServerProvider[]} |
| 5635 | | activeProjectDefaultModelSelection={activeProject?.defaultModelSelection} |
| 5636 | | activeThreadModelSelection={activeThread?.modelSelection} |
| 5637 | | activeThreadActivities={activeThread?.activities} |
| 5638 | | resolvedTheme={resolvedTheme} |
| 5639 | | settings={settings} |
| 5640 | | keybindings={keybindings} |
| 5641 | | terminalOpen={Boolean(terminalUiState.terminalOpen)} |
| 5642 | | gitCwd={gitCwd} |
| 5643 | | promptRef={promptRef} |
| 5644 | | composerImagesRef={composerImagesRef} |
| 5645 | | composerTerminalContextsRef={composerTerminalContextsRef} |
| 5646 | | composerElementContextsRef={composerElementContextsRef} |
| 5647 | | onSend={onSend} |
| 5648 | | onInterrupt={onInterrupt} |
| 5649 | | onImplementPlanInNewThread={onImplementPlanInNewThread} |
| 5650 | | onRespondToApproval={onRespondToApproval} |
| 5651 | | onSelectActivePendingUserInputOption={ |
| 5652 | | onSelectActivePendingUserInputOption |
| 5653 | | } |
| 5654 | | onAdvanceActivePendingUserInput={onAdvanceActivePendingUserInput} |
| 5655 | | onPreviousActivePendingUserInputQuestion={ |
| 5656 | | onPreviousActivePendingUserInputQuestion |
| 5657 | | } |
| 5658 | | onChangeActivePendingUserInputCustomAnswer={ |
| 5659 | | onChangeActivePendingUserInputCustomAnswer |
| 5660 | | } |
| 5661 | | onProviderModelSelect={onProviderModelSelect} |
| 5662 | | getModelDisabledReason={getModelDisabledReason} |
| 5663 | | toggleInteractionMode={toggleInteractionMode} |
| 5664 | | handleRuntimeModeChange={handleRuntimeModeChange} |
| 5665 | | handleInteractionModeChange={handleInteractionModeChange} |
| 5666 | | togglePlanSidebar={togglePlanSidebar} |
| 5667 | | focusComposer={focusComposer} |
| 5668 | | scheduleComposerFocus={scheduleComposerFocus} |
| 5669 | | setThreadError={setThreadError} |
| 5670 | | onExpandImage={onExpandTimelineImage} |
| 5671 | | /> |
| 5596 | <div |
| 5597 | className={cn( |
| 5598 | "chat-composer-glass-shell relative mx-auto w-full max-w-3xl", |
| 5599 | showComposerContextStrip && "chat-composer-glass-shell-with-context", |
| 5600 | )} |
| 5601 | > |
| 5602 | <div className="chat-composer-glass-host relative z-10 w-full rounded-[22px]"> |
| 5603 | <div ref={attachDraftHeroComposerAnchorRef} className="relative z-10"> |
| 5604 | <ChatComposer |
| 5605 | composerRef={composerRef} |
| 5606 | composerDraftTarget={composerDraftTarget} |
| 5607 | environmentId={environmentId} |
| 5608 | routeKind={routeKind} |
| 5609 | routeThreadRef={routeThreadRef} |
| 5610 | draftId={draftId} |
| 5611 | activeThreadId={activeThreadId} |
| 5612 | activeThreadEnvironmentId={activeThread?.environmentId} |
| 5613 | activeThread={activeThread} |
| 5614 | isServerThread={isServerThread} |
| 5615 | isLocalDraftThread={isLocalDraftThread} |
| 5616 | forceExpandedOnMobile={forceExpandedMobileComposer && isDraftHeroState} |
| 5617 | projectSelectionRequired={isLocalDraftThread && activeProject === null} |
| 5618 | phase={phase} |
| 5619 | isConnecting={isConnecting} |
| 5620 | isSendBusy={isSendBusy} |
| 5621 | isPreparingWorktree={isPreparingWorktree} |
| 5622 | environmentUnavailable={activeEnvironmentUnavailableState} |
| 5623 | activePendingApproval={activePendingApproval} |
| 5624 | pendingApprovals={pendingApprovals} |
| 5625 | pendingUserInputs={pendingUserInputs} |
| 5626 | activePendingProgress={activePendingProgress} |
| 5627 | activePendingResolvedAnswers={activePendingResolvedAnswers} |
| 5628 | activePendingIsResponding={activePendingIsResponding} |
| 5629 | activePendingDraftAnswers={activePendingDraftAnswers} |
| 5630 | activePendingQuestionIndex={activePendingQuestionIndex} |
| 5631 | respondingRequestIds={respondingRequestIds} |
| 5632 | showPlanFollowUpPrompt={showPlanFollowUpPrompt} |
| 5633 | activeProposedPlan={activeProposedPlan} |
| 5634 | activePlan={activePlan as { turnId?: TurnId } | null} |
| 5635 | sidebarProposedPlan={sidebarProposedPlan as { turnId?: TurnId } | null} |
| 5636 | planSidebarLabel={planSidebarLabel} |
| 5637 | planSidebarOpen={planSidebarOpen} |
| 5638 | runtimeMode={runtimeMode} |
| 5639 | interactionMode={interactionMode} |
| 5640 | lockedProvider={lockedProvider} |
| 5641 | providerStatuses={providerStatuses as ServerProvider[]} |
| 5642 | activeProjectDefaultModelSelection={ |
| 5643 | activeProject?.defaultModelSelection |
| 5644 | } |
| 5645 | activeThreadModelSelection={activeThread?.modelSelection} |
| 5646 | activeThreadActivities={activeThread?.activities} |
| 5647 | resolvedTheme={resolvedTheme} |
| 5648 | settings={settings} |
| 5649 | keybindings={keybindings} |
| 5650 | terminalOpen={Boolean(terminalUiState.terminalOpen)} |
| 5651 | gitCwd={gitCwd} |
| 5652 | promptRef={promptRef} |
| 5653 | composerImagesRef={composerImagesRef} |
| 5654 | composerTerminalContextsRef={composerTerminalContextsRef} |
| 5655 | composerElementContextsRef={composerElementContextsRef} |
| 5656 | onSend={onSend} |
| 5657 | onInterrupt={onInterrupt} |
| 5658 | onImplementPlanInNewThread={onImplementPlanInNewThread} |
| 5659 | onRespondToApproval={onRespondToApproval} |
| 5660 | onSelectActivePendingUserInputOption={ |
| 5661 | onSelectActivePendingUserInputOption |
| 5662 | } |
| 5663 | onAdvanceActivePendingUserInput={onAdvanceActivePendingUserInput} |
| 5664 | onPreviousActivePendingUserInputQuestion={ |
| 5665 | onPreviousActivePendingUserInputQuestion |
| 5666 | } |
| 5667 | onChangeActivePendingUserInputCustomAnswer={ |
| 5668 | onChangeActivePendingUserInputCustomAnswer |
| 5669 | } |
| 5670 | onProviderModelSelect={onProviderModelSelect} |
| 5671 | getModelDisabledReason={getModelDisabledReason} |
| 5672 | toggleInteractionMode={toggleInteractionMode} |
| 5673 | handleRuntimeModeChange={handleRuntimeModeChange} |
| 5674 | handleInteractionModeChange={handleInteractionModeChange} |
| 5675 | togglePlanSidebar={togglePlanSidebar} |
| 5676 | focusComposer={focusComposer} |
| 5677 | scheduleComposerFocus={scheduleComposerFocus} |
| 5678 | setThreadError={setThreadError} |
| 5679 | onExpandImage={onExpandTimelineImage} |
| 5680 | /> |
| 5681 | </div> |
| 5672 | 5682 | </div> |
| 5673 | | </div> |
| 5674 | | <div className="min-h-0"> |
| 5675 | | <div |
| 5676 | | data-terminal-open={terminalUiState.terminalOpen ? "true" : undefined} |
| 5677 | | className="relative z-0" |
| 5678 | | > |
| 5679 | | {isGitRepo && ( |
| 5680 | | <div className="pointer-events-auto"> |
| 5681 | | <BranchToolbar |
| 5682 | | environmentId={activeThread.environmentId} |
| 5683 | | threadId={activeThread.id} |
| 5684 | | {...(routeKind === "draft" && draftId ? { draftId } : {})} |
| 5685 | | onEnvModeChange={onEnvModeChange} |
| 5686 | | startFromOrigin={startFromOrigin} |
| 5687 | | onStartFromOriginChange={onStartFromOriginChange} |
| 5688 | | {...(canOverrideServerThreadEnvMode |
| 5689 | | ? { effectiveEnvModeOverride: envMode } |
| 5690 | | : {})} |
| 5691 | | {...(canOverrideServerThreadEnvMode |
| 5692 | | ? { |
| 5693 | | activeThreadBranchOverride: activeThreadBranch, |
| 5694 | | onActiveThreadBranchOverrideChange: |
| 5695 | | setPendingServerThreadBranch, |
| 5696 | | } |
| 5697 | | : {})} |
| 5698 | | envLocked={envLocked} |
| 5699 | | onComposerFocusRequest={scheduleComposerFocus} |
| 5700 | | {...(canCheckoutPullRequestIntoThread |
| 5701 | | ? { onCheckoutPullRequestRequest: openPullRequestDialog } |
| 5702 | | : {})} |
| 5703 | | {...(hasMultipleEnvironments ? { onEnvironmentChange } : {})} |
| 5704 | | availableEnvironments={logicalProjectEnvironments} |
| 5705 | | /> |
| 5706 | | </div> |
| 5707 | | )} |
| 5683 | <div className="min-h-0"> |
| 5684 | <div |
| 5685 | data-terminal-open={terminalUiState.terminalOpen ? "true" : undefined} |
| 5686 | className="relative z-0" |
| 5687 | > |
| 5688 | {showComposerContextStrip && ( |
| 5689 | <div className="pointer-events-auto"> |
| 5690 | <BranchToolbar |
| 5691 | environmentId={activeThread.environmentId} |
| 5692 | threadId={activeThread.id} |
| 5693 | {...(routeKind === "draft" && draftId ? { draftId } : {})} |
| 5694 | onEnvModeChange={onEnvModeChange} |
| 5695 | startFromOrigin={startFromOrigin} |
| 5696 | onStartFromOriginChange={onStartFromOriginChange} |
| 5697 | {...(canOverrideServerThreadEnvMode |
| 5698 | ? { effectiveEnvModeOverride: envMode } |
| 5699 | : {})} |
| 5700 | {...(canOverrideServerThreadEnvMode |
| 5701 | ? { |
| 5702 | activeThreadBranchOverride: activeThreadBranch, |
| 5703 | onActiveThreadBranchOverrideChange: |
| 5704 | setPendingServerThreadBranch, |
| 5705 | } |
| 5706 | : {})} |
| 5707 | envLocked={envLocked} |
| 5708 | onComposerFocusRequest={scheduleComposerFocus} |
| 5709 | {...(canCheckoutPullRequestIntoThread |
| 5710 | ? { onCheckoutPullRequestRequest: openPullRequestDialog } |
| 5711 | : {})} |
| 5712 | {...(hasMultipleEnvironments ? { onEnvironmentChange } : {})} |
| 5713 | availableEnvironments={logicalProjectEnvironments} |
| 5714 | /> |
| 5715 | </div> |
| 5716 | )} |
| 5717 | </div> |
| 5708 | 5718 | </div> |
| 5709 | 5719 | </div> |
| 5710 | 5720 | <div |