mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 22:05:50 +00:00
* style(B1-1): 格式化 ink/buddy/cli/context/screens/tasks/services/keybindings/state (43 files) 纯格式化:移除分号、React Compiler import、import 多行展开。 修复了 Box.tsx 和 ScrollBox.tsx 中无效的 global.d.ts import。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style(B1-2): 格式化 commands (79 files) 纯格式化:移除分号、React Compiler import、import 多行展开。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style(B1-3): 格式化 components/messages,permissions,mcp,sandbox,shell (104 files) 纯格式化:移除分号、React Compiler import、import 多行展开。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style(B1-4): 格式化 components/PromptInput,FeedbackSurvey,tasks,agents,skills,design-system,wizard (73 files) 纯格式化:移除分号、React Compiler import、import 多行展开。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style(B1-5): 格式化 components其余 + hooks + tools (232 files) 纯格式化:移除分号、React Compiler import、import 多行展开。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style(B1-6): 格式化 main/entrypoints/utils/moreright (21 files) 纯格式化:移除分号、React Compiler import、import 多行展开。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: 更新 README,新增 Run.ps1/TODO.md,删除 V6.md - README.md: 大幅重写,更详细版本历史和配置示例 - Run.ps1: 新增 Windows 启动脚本 - TODO.md: 新增包完成清单 - V6.md: 删除(架构重构规划已不适用) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: 修复以前的问题 * fix: 修复 login 面板的问题 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
84 lines
2.3 KiB
TypeScript
84 lines
2.3 KiB
TypeScript
import { toString as qrToString } from 'qrcode'
|
|
import * as React from 'react'
|
|
import { useEffect, useState } from 'react'
|
|
import { Pane } from '../../components/design-system/Pane.js'
|
|
import { Box, Text } from '../../ink.js'
|
|
import { useKeybinding } from '../../keybindings/useKeybinding.js'
|
|
import { useAppState } from '../../state/AppState.js'
|
|
import type { LocalJSXCommandCall } from '../../types/command.js'
|
|
import { logForDebugging } from '../../utils/debug.js'
|
|
|
|
type Props = {
|
|
onDone: () => void
|
|
}
|
|
|
|
function SessionInfo({ onDone }: Props): React.ReactNode {
|
|
const remoteSessionUrl = useAppState(s => s.remoteSessionUrl)
|
|
const [qrCode, setQrCode] = useState<string>('')
|
|
|
|
// Generate QR code when URL is available
|
|
useEffect(() => {
|
|
if (!remoteSessionUrl) return
|
|
|
|
const url = remoteSessionUrl
|
|
async function generateQRCode(): Promise<void> {
|
|
const qr = await qrToString(url, {
|
|
type: 'utf8',
|
|
errorCorrectionLevel: 'L',
|
|
})
|
|
setQrCode(qr)
|
|
}
|
|
// Intentionally silent fail - URL is still shown so QR is non-critical
|
|
generateQRCode().catch(e => {
|
|
logForDebugging('QR code generation failed', e)
|
|
})
|
|
}, [remoteSessionUrl])
|
|
|
|
// Handle ESC to dismiss
|
|
useKeybinding('confirm:no', onDone, { context: 'Confirmation' })
|
|
|
|
// Not in remote mode
|
|
if (!remoteSessionUrl) {
|
|
return (
|
|
<Pane>
|
|
<Text color="warning">
|
|
Not in remote mode. Start with `claude --remote` to use this command.
|
|
</Text>
|
|
<Text dimColor>(press esc to close)</Text>
|
|
</Pane>
|
|
)
|
|
}
|
|
|
|
const lines = qrCode.split('\n').filter(line => line.length > 0)
|
|
const isLoading = lines.length === 0
|
|
|
|
return (
|
|
<Pane>
|
|
<Box marginBottom={1}>
|
|
<Text bold>Remote session</Text>
|
|
</Box>
|
|
|
|
{/* QR Code - silently fails if generation errors, URL is still shown */}
|
|
{isLoading ? (
|
|
<Text dimColor>Generating QR code…</Text>
|
|
) : (
|
|
lines.map((line, i) => <Text key={i}>{line}</Text>)
|
|
)}
|
|
|
|
{/* URL */}
|
|
<Box marginTop={1}>
|
|
<Text dimColor>Open in browser: </Text>
|
|
<Text color="ide">{remoteSessionUrl}</Text>
|
|
</Box>
|
|
|
|
<Box marginTop={1}>
|
|
<Text dimColor>(press esc to close)</Text>
|
|
</Box>
|
|
</Pane>
|
|
)
|
|
}
|
|
|
|
export const call: LocalJSXCommandCall = async onDone => {
|
|
return <SessionInfo onDone={onDone} />
|
|
}
|