更新大量 tsx 原始文件; 已经迁移 login panel; 部分 (#121)

* 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>
This commit is contained in:
claude-code-best
2026-04-04 23:24:27 +08:00
committed by GitHub
parent 02694918b5
commit 5b1a52b8e0
559 changed files with 103807 additions and 101817 deletions

View File

@@ -1,139 +1,122 @@
import { c as _c } from "react/compiler-runtime";
import figures from 'figures';
import * as React from 'react';
import { useState } from 'react';
import type { Root } from '../ink.js';
import { Box, Text, useAnimationFrame } from '../ink.js';
import { AppStateProvider } from '../state/AppState.js';
import { checkOutTeleportedSessionBranch, processMessagesForTeleportResume, type TeleportProgressStep, type TeleportResult, teleportResumeCodeSession } from '../utils/teleport.js';
import figures from 'figures'
import * as React from 'react'
import { useState } from 'react'
import type { Root } from '../ink.js'
import { Box, Text, useAnimationFrame } from '../ink.js'
import { AppStateProvider } from '../state/AppState.js'
import {
checkOutTeleportedSessionBranch,
processMessagesForTeleportResume,
type TeleportProgressStep,
type TeleportResult,
teleportResumeCodeSession,
} from '../utils/teleport.js'
type Props = {
currentStep: TeleportProgressStep;
sessionId?: string;
};
const SPINNER_FRAMES = ['◐', '◓', '◑', '◒'];
const STEPS: {
key: TeleportProgressStep;
label: string;
}[] = [{
key: 'validating',
label: 'Validating session'
}, {
key: 'fetching_logs',
label: 'Fetching session logs'
}, {
key: 'fetching_branch',
label: 'Getting branch info'
}, {
key: 'checking_out',
label: 'Checking out branch'
}];
export function TeleportProgress(t0) {
const $ = _c(16);
const {
currentStep,
sessionId
} = t0;
const [ref, time] = useAnimationFrame(100);
const frame = Math.floor(time / 100) % SPINNER_FRAMES.length;
let t1;
if ($[0] !== currentStep) {
t1 = s => s.key === currentStep;
$[0] = currentStep;
$[1] = t1;
} else {
t1 = $[1];
}
const currentStepIndex = STEPS.findIndex(t1);
const t2 = SPINNER_FRAMES[frame];
let t3;
if ($[2] !== t2) {
t3 = <Box marginBottom={1}><Text bold={true} color="claude">{t2} Teleporting session</Text></Box>;
$[2] = t2;
$[3] = t3;
} else {
t3 = $[3];
}
let t4;
if ($[4] !== sessionId) {
t4 = sessionId && <Box marginBottom={1}><Text dimColor={true}>{sessionId}</Text></Box>;
$[4] = sessionId;
$[5] = t4;
} else {
t4 = $[5];
}
let t5;
if ($[6] !== currentStepIndex || $[7] !== frame) {
t5 = STEPS.map((step, index) => {
const isComplete = index < currentStepIndex;
const isCurrent = index === currentStepIndex;
const isPending = index > currentStepIndex;
let icon;
let color;
if (isComplete) {
icon = figures.tick;
color = "green";
} else {
if (isCurrent) {
icon = SPINNER_FRAMES[frame];
color = "claude";
} else {
icon = figures.circle;
color = undefined;
}
}
return <Box key={step.key} flexDirection="row"><Box width={2}><Text color={color as never} dimColor={isPending}>{icon}</Text></Box><Text dimColor={isPending} bold={isCurrent}>{step.label}</Text></Box>;
});
$[6] = currentStepIndex;
$[7] = frame;
$[8] = t5;
} else {
t5 = $[8];
}
let t6;
if ($[9] !== t5) {
t6 = <Box flexDirection="column" marginLeft={2}>{t5}</Box>;
$[9] = t5;
$[10] = t6;
} else {
t6 = $[10];
}
let t7;
if ($[11] !== ref || $[12] !== t3 || $[13] !== t4 || $[14] !== t6) {
t7 = <Box ref={ref} flexDirection="column" paddingX={1} paddingY={1}>{t3}{t4}{t6}</Box>;
$[11] = ref;
$[12] = t3;
$[13] = t4;
$[14] = t6;
$[15] = t7;
} else {
t7 = $[15];
}
return t7;
currentStep: TeleportProgressStep
sessionId?: string
}
const SPINNER_FRAMES = ['◐', '◓', '◑', '◒']
const STEPS: { key: TeleportProgressStep; label: string }[] = [
{ key: 'validating', label: 'Validating session' },
{ key: 'fetching_logs', label: 'Fetching session logs' },
{ key: 'fetching_branch', label: 'Getting branch info' },
{ key: 'checking_out', label: 'Checking out branch' },
]
export function TeleportProgress({
currentStep,
sessionId,
}: Props): React.ReactNode {
const [ref, time] = useAnimationFrame(100)
const frame = Math.floor(time / 100) % SPINNER_FRAMES.length
const currentStepIndex = STEPS.findIndex(s => s.key === currentStep)
return (
<Box ref={ref} flexDirection="column" paddingX={1} paddingY={1}>
<Box marginBottom={1}>
<Text bold color="claude">
{SPINNER_FRAMES[frame]} Teleporting session
</Text>
</Box>
{sessionId && (
<Box marginBottom={1}>
<Text dimColor>{sessionId}</Text>
</Box>
)}
<Box flexDirection="column" marginLeft={2}>
{STEPS.map((step, index) => {
const isComplete = index < currentStepIndex
const isCurrent = index === currentStepIndex
const isPending = index > currentStepIndex
let icon: string
let color: string | undefined
if (isComplete) {
icon = figures.tick
color = 'green'
} else if (isCurrent) {
icon = SPINNER_FRAMES[frame]!
color = 'claude'
} else {
icon = figures.circle
color = undefined
}
return (
<Box key={step.key} flexDirection="row">
<Box width={2}>
<Text color={color as never} dimColor={isPending}>
{icon}
</Text>
</Box>
<Text dimColor={isPending} bold={isCurrent}>
{step.label}
</Text>
</Box>
)
})}
</Box>
</Box>
)
}
/**
* Teleports to a remote session with progress UI rendered into the existing root.
* Fetches the session, checks out the branch, and returns the result.
*/
export async function teleportWithProgress(root: Root, sessionId: string): Promise<TeleportResult> {
export async function teleportWithProgress(
root: Root,
sessionId: string,
): Promise<TeleportResult> {
// Capture the setState function from the rendered component
let setStep: (step: TeleportProgressStep) => void = () => {};
let setStep: (step: TeleportProgressStep) => void = () => {}
function TeleportProgressWrapper(): React.ReactNode {
const [step, _setStep] = useState<TeleportProgressStep>('validating');
setStep = _setStep;
return <TeleportProgress currentStep={step} sessionId={sessionId} />;
const [step, _setStep] = useState<TeleportProgressStep>('validating')
setStep = _setStep
return <TeleportProgress currentStep={step} sessionId={sessionId} />
}
root.render(<AppStateProvider>
root.render(
<AppStateProvider>
<TeleportProgressWrapper />
</AppStateProvider>);
const result = await teleportResumeCodeSession(sessionId, setStep);
setStep('checking_out');
const {
branchName,
branchError
} = await checkOutTeleportedSessionBranch(result.branch);
</AppStateProvider>,
)
const result = await teleportResumeCodeSession(sessionId, setStep)
setStep('checking_out')
const { branchName, branchError } = await checkOutTeleportedSessionBranch(
result.branch,
)
return {
messages: processMessagesForTeleportResume(result.log, branchError),
branchName
};
branchName,
}
}