更新大量 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,82 +1,127 @@
import { relative } from 'path';
import React from 'react';
import { getCwdState } from '../../bootstrap/state.js';
import { SandboxSettings } from '../../components/sandbox/SandboxSettings.js';
import { color } from '../../ink.js';
import { getPlatform } from '../../utils/platform.js';
import { addToExcludedCommands, SandboxManager } from '../../utils/sandbox/sandbox-adapter.js';
import { getSettings_DEPRECATED, getSettingsFilePathForSource } from '../../utils/settings/settings.js';
import type { ThemeName } from '../../utils/theme.js';
export async function call(onDone: (result?: string) => void, _context: unknown, args?: string): Promise<React.ReactNode | null> {
const settings = getSettings_DEPRECATED();
const themeName: ThemeName = settings.theme as ThemeName || 'light';
const platform = getPlatform();
import { relative } from 'path'
import React from 'react'
import { getCwdState } from '../../bootstrap/state.js'
import { SandboxSettings } from '../../components/sandbox/SandboxSettings.js'
import { color } from '../../ink.js'
import { getPlatform } from '../../utils/platform.js'
import {
addToExcludedCommands,
SandboxManager,
} from '../../utils/sandbox/sandbox-adapter.js'
import {
getSettings_DEPRECATED,
getSettingsFilePathForSource,
} from '../../utils/settings/settings.js'
import type { ThemeName } from '../../utils/theme.js'
export async function call(
onDone: (result?: string) => void,
_context: unknown,
args?: string,
): Promise<React.ReactNode | null> {
const settings = getSettings_DEPRECATED()
const themeName: ThemeName = (settings.theme as ThemeName) || 'light'
const platform = getPlatform()
if (!SandboxManager.isSupportedPlatform()) {
// WSL1 users will see this since isSupportedPlatform returns false for WSL1
const errorMessage = platform === 'wsl' ? 'Error: Sandboxing requires WSL2. WSL1 is not supported.' : 'Error: Sandboxing is currently only supported on macOS, Linux, and WSL2.';
const message = color('error', themeName)(errorMessage);
onDone(message);
return null;
const errorMessage =
platform === 'wsl'
? 'Error: Sandboxing requires WSL2. WSL1 is not supported.'
: 'Error: Sandboxing is currently only supported on macOS, Linux, and WSL2.'
const message = color('error', themeName)(errorMessage)
onDone(message)
return null
}
// Check dependencies - get structured result with errors/warnings
const depCheck = SandboxManager.checkDependencies();
const depCheck = SandboxManager.checkDependencies()
// Check if platform is in enabledPlatforms list (undocumented enterprise setting)
if (!SandboxManager.isPlatformInEnabledList()) {
const message = color('error', themeName)(`Error: Sandboxing is disabled for this platform (${platform}) via the enabledPlatforms setting.`);
onDone(message);
return null;
const message = color(
'error',
themeName,
)(
`Error: Sandboxing is disabled for this platform (${platform}) via the enabledPlatforms setting.`,
)
onDone(message)
return null
}
// Check if sandbox settings are locked by higher-priority settings
if (SandboxManager.areSandboxSettingsLockedByPolicy()) {
const message = color('error', themeName)('Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.');
onDone(message);
return null;
const message = color(
'error',
themeName,
)(
'Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.',
)
onDone(message)
return null
}
// Parse the arguments
const trimmedArgs = args?.trim() || '';
const trimmedArgs = args?.trim() || ''
// If no args, show the interactive menu
if (!trimmedArgs) {
return <SandboxSettings onComplete={onDone} depCheck={depCheck} />;
return <SandboxSettings onComplete={onDone} depCheck={depCheck} />
}
// Handle subcommands
if (trimmedArgs) {
const parts = trimmedArgs.split(' ');
const subcommand = parts[0];
const parts = trimmedArgs.split(' ')
const subcommand = parts[0]
if (subcommand === 'exclude') {
// Handle exclude subcommand
const commandPattern = trimmedArgs.slice('exclude '.length).trim();
const commandPattern = trimmedArgs.slice('exclude '.length).trim()
if (!commandPattern) {
const message = color('error', themeName)('Error: Please provide a command pattern to exclude (e.g., /sandbox exclude "npm run test:*")');
onDone(message);
return null;
const message = color(
'error',
themeName,
)(
'Error: Please provide a command pattern to exclude (e.g., /sandbox exclude "npm run test:*")',
)
onDone(message)
return null
}
// Remove quotes if present
const cleanPattern = commandPattern.replace(/^["']|["']$/g, '');
const cleanPattern = commandPattern.replace(/^["']|["']$/g, '')
// Add to excludedCommands
addToExcludedCommands(cleanPattern);
addToExcludedCommands(cleanPattern)
// Get the local settings path and make it relative to cwd
const localSettingsPath = getSettingsFilePathForSource('localSettings');
const relativePath = localSettingsPath ? relative(getCwdState(), localSettingsPath) : '.claude/settings.local.json';
const message = color('success', themeName)(`Added "${cleanPattern}" to excluded commands in ${relativePath}`);
onDone(message);
return null;
const localSettingsPath = getSettingsFilePathForSource('localSettings')
const relativePath = localSettingsPath
? relative(getCwdState(), localSettingsPath)
: '.claude/settings.local.json'
const message = color(
'success',
themeName,
)(`Added "${cleanPattern}" to excluded commands in ${relativePath}`)
onDone(message)
return null
} else {
// Unknown subcommand
const message = color('error', themeName)(`Error: Unknown subcommand "${subcommand}". Available subcommand: exclude`);
onDone(message);
return null;
const message = color(
'error',
themeName,
)(
`Error: Unknown subcommand "${subcommand}". Available subcommand: exclude`,
)
onDone(message)
return null
}
}
// Should never reach here since we handle all cases above
return null;
return null
}