mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-28 11:41:04 +00:00
- Extract shared BaseTextInput component with readline keyboard handling - Add AgentComposer and AgentFooter components for agent interaction - Add useAgentStreamingState hook for managing agent streaming state - Refactor InputPrompt to use BaseTextInput with agent tab bar focus support - Move calculatePromptWidths to shared layoutUtils - Disable auto-accept indicator on agent tabs (agents handle their own) This enables a dedicated input experience for agent tabs with proper focus management and keyboard navigation between main input and agent tabs. Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Qwen Team
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @fileoverview Lightweight footer for agent tabs showing approval mode
|
|
* and context usage. Mirrors the main Footer layout but without
|
|
* main-agent-specific concerns (vim mode, shell mode, exit prompts, etc.).
|
|
*/
|
|
|
|
import type React from 'react';
|
|
import { Box, Text } from 'ink';
|
|
import { ApprovalMode } from '@qwen-code/qwen-code-core';
|
|
import { AutoAcceptIndicator } from '../AutoAcceptIndicator.js';
|
|
import { ContextUsageDisplay } from '../ContextUsageDisplay.js';
|
|
import { theme } from '../../semantic-colors.js';
|
|
|
|
interface AgentFooterProps {
|
|
approvalMode: ApprovalMode | undefined;
|
|
promptTokenCount: number;
|
|
contextWindowSize: number | undefined;
|
|
terminalWidth: number;
|
|
}
|
|
|
|
export const AgentFooter: React.FC<AgentFooterProps> = ({
|
|
approvalMode,
|
|
promptTokenCount,
|
|
contextWindowSize,
|
|
terminalWidth,
|
|
}) => {
|
|
const showApproval =
|
|
approvalMode !== undefined && approvalMode !== ApprovalMode.DEFAULT;
|
|
const showContext = promptTokenCount > 0 && contextWindowSize !== undefined;
|
|
|
|
if (!showApproval && !showContext) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<Box
|
|
justifyContent="space-between"
|
|
width="100%"
|
|
flexDirection="row"
|
|
alignItems="center"
|
|
>
|
|
<Box marginLeft={2}>
|
|
{showApproval ? (
|
|
<AutoAcceptIndicator approvalMode={approvalMode} />
|
|
) : null}
|
|
</Box>
|
|
<Box marginRight={2}>
|
|
{showContext && (
|
|
<Text color={theme.text.accent}>
|
|
<ContextUsageDisplay
|
|
promptTokenCount={promptTokenCount}
|
|
terminalWidth={terminalWidth}
|
|
contextWindowSize={contextWindowSize!}
|
|
/>
|
|
</Text>
|
|
)}
|
|
</Box>
|
|
</Box>
|
|
);
|
|
};
|