mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 14:25:51 +00:00
更新大量 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:
@@ -1,97 +1,103 @@
|
||||
import { c as _c } from "react/compiler-runtime";
|
||||
import figures from 'figures';
|
||||
import * as React from 'react';
|
||||
import { useEffect } from 'react';
|
||||
import { Box, Text } from '../../ink.js';
|
||||
import { errorMessage } from '../../utils/errors.js';
|
||||
import { logError } from '../../utils/log.js';
|
||||
import { validateManifest } from '../../utils/plugins/validatePlugin.js';
|
||||
import { plural } from '../../utils/stringUtils.js';
|
||||
import figures from 'figures'
|
||||
import * as React from 'react'
|
||||
import { useEffect } from 'react'
|
||||
import { Box, Text } from '../../ink.js'
|
||||
import { errorMessage } from '../../utils/errors.js'
|
||||
import { logError } from '../../utils/log.js'
|
||||
import { validateManifest } from '../../utils/plugins/validatePlugin.js'
|
||||
import { plural } from '../../utils/stringUtils.js'
|
||||
|
||||
type Props = {
|
||||
onComplete: (result?: string) => void;
|
||||
path?: string;
|
||||
};
|
||||
export function ValidatePlugin(t0) {
|
||||
const $ = _c(5);
|
||||
const {
|
||||
onComplete,
|
||||
path
|
||||
} = t0;
|
||||
let t1;
|
||||
let t2;
|
||||
if ($[0] !== onComplete || $[1] !== path) {
|
||||
t1 = () => {
|
||||
const runValidation = async function runValidation() {
|
||||
if (!path) {
|
||||
onComplete("Usage: /plugin validate <path>\n\nValidate a plugin or marketplace manifest file or directory.\n\nExamples:\n /plugin validate .claude-plugin/plugin.json\n /plugin validate /path/to/plugin-directory\n /plugin validate .\n\nWhen given a directory, automatically validates .claude-plugin/marketplace.json\nor .claude-plugin/plugin.json (prefers marketplace if both exist).\n\nOr from the command line:\n claude plugin validate <path>");
|
||||
return;
|
||||
}
|
||||
;
|
||||
try {
|
||||
const result = await validateManifest(path);
|
||||
let output = "";
|
||||
output = output + `Validating ${result.fileType} manifest: ${result.filePath}\n\n`;
|
||||
output;
|
||||
if (result.errors.length > 0) {
|
||||
output = output + `${figures.cross} Found ${result.errors.length} ${plural(result.errors.length, "error")}:\n\n`;
|
||||
output;
|
||||
result.errors.forEach(error_0 => {
|
||||
output = output + ` ${figures.pointer} ${error_0.path}: ${error_0.message}\n`;
|
||||
output;
|
||||
});
|
||||
output = output + "\n";
|
||||
output;
|
||||
}
|
||||
if (result.warnings.length > 0) {
|
||||
output = output + `${figures.warning} Found ${result.warnings.length} ${plural(result.warnings.length, "warning")}:\n\n`;
|
||||
output;
|
||||
result.warnings.forEach(warning => {
|
||||
output = output + ` ${figures.pointer} ${warning.path}: ${warning.message}\n`;
|
||||
output;
|
||||
});
|
||||
output = output + "\n";
|
||||
output;
|
||||
}
|
||||
if (result.success) {
|
||||
if (result.warnings.length > 0) {
|
||||
output = output + `${figures.tick} Validation passed with warnings\n`;
|
||||
output;
|
||||
} else {
|
||||
output = output + `${figures.tick} Validation passed\n`;
|
||||
output;
|
||||
}
|
||||
process.exitCode = 0;
|
||||
} else {
|
||||
output = output + `${figures.cross} Validation failed\n`;
|
||||
output;
|
||||
process.exitCode = 1;
|
||||
}
|
||||
onComplete(output);
|
||||
} catch (t3) {
|
||||
const error = t3;
|
||||
process.exitCode = 2;
|
||||
logError(error);
|
||||
onComplete(`${figures.cross} Unexpected error during validation: ${errorMessage(error)}`);
|
||||
}
|
||||
};
|
||||
runValidation();
|
||||
};
|
||||
t2 = [onComplete, path];
|
||||
$[0] = onComplete;
|
||||
$[1] = path;
|
||||
$[2] = t1;
|
||||
$[3] = t2;
|
||||
} else {
|
||||
t1 = $[2];
|
||||
t2 = $[3];
|
||||
}
|
||||
useEffect(t1, t2);
|
||||
let t3;
|
||||
if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
|
||||
t3 = <Box flexDirection="column"><Text>Running validation...</Text></Box>;
|
||||
$[4] = t3;
|
||||
} else {
|
||||
t3 = $[4];
|
||||
}
|
||||
return t3;
|
||||
onComplete: (result?: string) => void
|
||||
path?: string
|
||||
}
|
||||
|
||||
export function ValidatePlugin({ onComplete, path }: Props): React.ReactNode {
|
||||
useEffect(() => {
|
||||
async function runValidation() {
|
||||
// If no path provided, show usage
|
||||
if (!path) {
|
||||
onComplete(
|
||||
'Usage: /plugin validate <path>\n\n' +
|
||||
'Validate a plugin or marketplace manifest file or directory.\n\n' +
|
||||
'Examples:\n' +
|
||||
' /plugin validate .claude-plugin/plugin.json\n' +
|
||||
' /plugin validate /path/to/plugin-directory\n' +
|
||||
' /plugin validate .\n\n' +
|
||||
'When given a directory, automatically validates .claude-plugin/marketplace.json\n' +
|
||||
'or .claude-plugin/plugin.json (prefers marketplace if both exist).\n\n' +
|
||||
'Or from the command line:\n' +
|
||||
' claude plugin validate <path>',
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await validateManifest(path)
|
||||
|
||||
let output = ''
|
||||
|
||||
// Add header
|
||||
output += `Validating ${result.fileType} manifest: ${result.filePath}\n\n`
|
||||
|
||||
// Show errors
|
||||
if (result.errors.length > 0) {
|
||||
output += `${figures.cross} Found ${result.errors.length} ${plural(result.errors.length, 'error')}:\n\n`
|
||||
|
||||
result.errors.forEach(error => {
|
||||
output += ` ${figures.pointer} ${error.path}: ${error.message}\n`
|
||||
})
|
||||
|
||||
output += '\n'
|
||||
}
|
||||
|
||||
// Show warnings
|
||||
if (result.warnings.length > 0) {
|
||||
output += `${figures.warning} Found ${result.warnings.length} ${plural(result.warnings.length, 'warning')}:\n\n`
|
||||
|
||||
result.warnings.forEach(warning => {
|
||||
output += ` ${figures.pointer} ${warning.path}: ${warning.message}\n`
|
||||
})
|
||||
|
||||
output += '\n'
|
||||
}
|
||||
|
||||
// Show success or failure
|
||||
if (result.success) {
|
||||
if (result.warnings.length > 0) {
|
||||
output += `${figures.tick} Validation passed with warnings\n`
|
||||
} else {
|
||||
output += `${figures.tick} Validation passed\n`
|
||||
}
|
||||
|
||||
// Exit with code 0 (success)
|
||||
process.exitCode = 0
|
||||
} else {
|
||||
output += `${figures.cross} Validation failed\n`
|
||||
|
||||
// Exit with code 1 (validation failure)
|
||||
process.exitCode = 1
|
||||
}
|
||||
|
||||
onComplete(output)
|
||||
} catch (error) {
|
||||
// Exit with code 2 (unexpected error)
|
||||
process.exitCode = 2
|
||||
|
||||
logError(error)
|
||||
|
||||
onComplete(
|
||||
`${figures.cross} Unexpected error during validation: ${errorMessage(error)}`,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
void runValidation()
|
||||
}, [onComplete, path])
|
||||
|
||||
return (
|
||||
<Box flexDirection="column">
|
||||
<Text>Running validation...</Text>
|
||||
</Box>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user