更新大量 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,103 +1,119 @@
import { c as _c } from "react/compiler-runtime";
import * as React from 'react';
import { useState } from 'react';
import { useInterval } from 'usehooks-ts';
import { Text } from '../ink.js';
import { type AutoUpdaterResult, getLatestVersionFromGcs, getMaxVersion, shouldSkipVersion } from '../utils/autoUpdater.js';
import { isAutoUpdaterDisabled } from '../utils/config.js';
import { logForDebugging } from '../utils/debug.js';
import { getPackageManager, type PackageManager } from '../utils/nativeInstaller/packageManagers.js';
import { gt, gte } from '../utils/semver.js';
import { getInitialSettings } from '../utils/settings/settings.js';
import * as React from 'react'
import { useState } from 'react'
import { useInterval } from 'usehooks-ts'
import { Text } from '../ink.js'
import {
type AutoUpdaterResult,
getLatestVersionFromGcs,
getMaxVersion,
shouldSkipVersion,
} from '../utils/autoUpdater.js'
import { isAutoUpdaterDisabled } from '../utils/config.js'
import { logForDebugging } from '../utils/debug.js'
import {
getPackageManager,
type PackageManager,
} from '../utils/nativeInstaller/packageManagers.js'
import { gt, gte } from '../utils/semver.js'
import { getInitialSettings } from '../utils/settings/settings.js'
type Props = {
isUpdating: boolean;
onChangeIsUpdating: (isUpdating: boolean) => void;
onAutoUpdaterResult: (autoUpdaterResult: AutoUpdaterResult) => void;
autoUpdaterResult: AutoUpdaterResult | null;
showSuccessMessage: boolean;
verbose: boolean;
};
export function PackageManagerAutoUpdater(t0) {
const $ = _c(10);
const {
verbose
} = t0;
const [updateAvailable, setUpdateAvailable] = useState(false);
const [packageManager, setPackageManager] = useState("unknown");
let t1;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t1 = async () => {
false || false;
if (isAutoUpdaterDisabled()) {
return;
}
const [channel, pm] = await Promise.all([Promise.resolve(getInitialSettings()?.autoUpdatesChannel ?? "latest"), getPackageManager()]);
setPackageManager(pm);
let latest = await getLatestVersionFromGcs(channel);
const maxVersion = await getMaxVersion();
if (maxVersion && latest && gt(latest, maxVersion)) {
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
if (gte(MACRO.VERSION, maxVersion)) {
logForDebugging(`PackageManagerAutoUpdater: current version ${MACRO.VERSION} is already at or above maxVersion ${maxVersion}, skipping update`);
setUpdateAvailable(false);
return;
}
latest = maxVersion;
}
const hasUpdate = latest && !gte(MACRO.VERSION, latest) && !shouldSkipVersion(latest);
setUpdateAvailable(!!hasUpdate);
if (hasUpdate) {
logForDebugging(`PackageManagerAutoUpdater: Update available ${MACRO.VERSION} -> ${latest}`);
}
};
$[0] = t1;
} else {
t1 = $[0];
}
const checkForUpdates = t1;
let t2;
let t3;
if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
t2 = () => {
checkForUpdates();
};
t3 = [checkForUpdates];
$[1] = t2;
$[2] = t3;
} else {
t2 = $[1];
t3 = $[2];
}
React.useEffect(t2, t3);
useInterval(checkForUpdates, 1800000);
if (!updateAvailable) {
return null;
}
const updateCommand = packageManager === "homebrew" ? "brew upgrade claude-code" : packageManager === "winget" ? "winget upgrade Anthropic.ClaudeCode" : packageManager === "apk" ? "apk upgrade claude-code" : "your package manager update command";
let t4;
if ($[3] !== verbose) {
t4 = verbose && <Text dimColor={true} wrap="truncate">currentVersion: {MACRO.VERSION}</Text>;
$[3] = verbose;
$[4] = t4;
} else {
t4 = $[4];
}
let t5;
if ($[5] !== updateCommand) {
t5 = <Text color="warning" wrap="truncate">Update available! Run: <Text bold={true}>{updateCommand}</Text></Text>;
$[5] = updateCommand;
$[6] = t5;
} else {
t5 = $[6];
}
let t6;
if ($[7] !== t4 || $[8] !== t5) {
t6 = <>{t4}{t5}</>;
$[7] = t4;
$[8] = t5;
$[9] = t6;
} else {
t6 = $[9];
}
return t6;
isUpdating: boolean
onChangeIsUpdating: (isUpdating: boolean) => void
onAutoUpdaterResult: (autoUpdaterResult: AutoUpdaterResult) => void
autoUpdaterResult: AutoUpdaterResult | null
showSuccessMessage: boolean
verbose: boolean
}
export function PackageManagerAutoUpdater({ verbose }: Props): React.ReactNode {
const [updateAvailable, setUpdateAvailable] = useState(false)
const [packageManager, setPackageManager] =
useState<PackageManager>('unknown')
const checkForUpdates = React.useCallback(async () => {
if (
"production" === 'test' ||
"production" === 'development'
) {
return
}
if (isAutoUpdaterDisabled()) {
return
}
const [channel, pm] = await Promise.all([
Promise.resolve(getInitialSettings()?.autoUpdatesChannel ?? 'latest'),
getPackageManager(),
])
setPackageManager(pm)
let latest = await getLatestVersionFromGcs(channel)
// Check if max version is set (server-side kill switch for auto-updates)
const maxVersion = await getMaxVersion()
if (maxVersion && latest && gt(latest, maxVersion)) {
logForDebugging(
`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`,
)
if (gte(MACRO.VERSION, maxVersion)) {
logForDebugging(
`PackageManagerAutoUpdater: current version ${MACRO.VERSION} is already at or above maxVersion ${maxVersion}, skipping update`,
)
setUpdateAvailable(false)
return
}
latest = maxVersion
}
const hasUpdate =
latest && !gte(MACRO.VERSION, latest) && !shouldSkipVersion(latest)
setUpdateAvailable(!!hasUpdate)
if (hasUpdate) {
logForDebugging(
`PackageManagerAutoUpdater: Update available ${MACRO.VERSION} -> ${latest}`,
)
}
}, [])
// Initial check
React.useEffect(() => {
void checkForUpdates()
}, [checkForUpdates])
// Check every 30 minutes
useInterval(checkForUpdates, 30 * 60 * 1000)
if (!updateAvailable) {
return null
}
// pacman, deb, and rpm don't get specific commands because they each have
// multiple frontends (pacman: yay/paru/makepkg, deb: apt/apt-get/aptitude/nala,
// rpm: dnf/yum/zypper)
const updateCommand =
packageManager === 'homebrew'
? 'brew upgrade claude-code'
: packageManager === 'winget'
? 'winget upgrade Anthropic.ClaudeCode'
: packageManager === 'apk'
? 'apk upgrade claude-code'
: 'your package manager update command'
return (
<>
{verbose && (
<Text dimColor wrap="truncate">
currentVersion: {MACRO.VERSION}
</Text>
)}
<Text color="warning" wrap="truncate">
Update available! Run: <Text bold>{updateCommand}</Text>
</Text>
</>
)
}