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