mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 22:05:50 +00:00
纯格式化:移除分号、React Compiler import、import 多行展开。 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} />
|
|
}
|