6.3 KiB
6.3 KiB
Step 0: Foundation Type System Fix (MUST COMPLETE FIRST - SERIAL)
项目背景
本项目是 Kode CLI 工具,基于 TypeScript + React (Ink 6) 构建的命令行界面。最近升级到 React 19 和 Ink 6 后出现了 127 个 TypeScript 编译错误。本任务是修复基础类型系统,为后续并行修复打下基础。
任务目标
修复核心类型定义,使得其他所有模块可以基于正确的类型定义进行修复。
系统架构概览
Kode CLI
├── src/
│ ├── messages.ts - 消息类型定义
│ ├── Tool.ts - 工具基类接口
│ ├── types/ - 类型定义目录
│ ├── query.ts - 查询系统
│ ├── utils/ - 工具函数
│ │ └── messageContextManager.ts
│ └── hooks/ - React hooks
│ └── useTextInput.ts
施工步骤
Phase 1: 安装缺失依赖 (5分钟)
Step 1.1: 安装 sharp 图像处理库
文件: package.json 执行命令:
bun add sharp
bun add -d @types/sharp
验证: 运行 bun install 确认无错误
Phase 2: 创建类型增强文件 (10分钟)
Step 2.1: 创建 Ink 类型增强
创建文件: src/types/ink-augmentation.d.ts
精确内容:
// Ink Key 类型增强 - 添加缺失的键盘属性
declare module 'ink' {
interface Key {
fn?: boolean;
home?: boolean;
end?: boolean;
space?: boolean;
}
}
Step 2.2: 创建通用类型定义
创建文件: src/types/common.d.ts
精确内容:
// UUID 类型定义
export type UUID = `${string}-${string}-${string}-${string}-${string}`;
// 扩展的工具上下文
export interface ExtendedToolUseContext extends ToolUseContext {
setToolJSX: (jsx: React.ReactElement) => void;
}
Phase 3: 修复消息类型系统 (20分钟)
Step 3.1: 修复 Message 类型定义
修改文件: src/messages.ts
查找内容 (大约在 50-100 行之间):
export interface ProgressMessage {
type: 'progress'
// ... existing properties
}
替换为:
export interface ProgressMessage {
type: 'progress'
message?: any // 添加可选的 message 属性以兼容旧代码
content: AssistantMessage
normalizedMessages: NormalizedMessage[]
siblingToolUseIDs: Set<string>
tools: Tool<any, any>[]
toolUseID: string
uuid: UUID
}
Step 3.2: 修复 query.ts 中的消息访问
修改文件: src/query.ts
查找内容 (第 203-210 行):
message: msg.message
替换为:
// 使用类型守卫安全访问
...(msg.type !== 'progress' && 'message' in msg ? { message: msg.message } : {})
Step 3.3: 修复 messageContextManager.ts
修改文件: src/utils/messageContextManager.ts
查找内容 (第 136 行附近):
return {
type: "assistant",
message: { role: "assistant", content: [...] }
}
替换为:
return {
type: "assistant",
message: { role: "assistant", content: [...] },
costUSD: 0,
durationMs: 0,
uuid: crypto.randomUUID() as UUID
}
注意: 需要在文件顶部添加导入:
import type { UUID } from '../types/common';
Phase 4: 修复 Tool 接口定义 (15分钟)
Step 4.1: 更新 Tool 基础接口
修改文件: src/Tool.ts
查找内容:
export interface Tool<TInput, TOutput> {
renderResultForAssistant(output: TOutput): string;
renderToolUseRejectedMessage(): React.ReactElement;
// ...
}
替换为:
export interface Tool<TInput, TOutput> {
renderResultForAssistant(output: TOutput): string | any[];
renderToolUseRejectedMessage?(...args: any[]): React.ReactElement;
// ...其他属性保持不变
}
Step 4.2: 更新 ToolUseContext
修改文件: src/Tool.ts (或者在同一文件中查找 ToolUseContext)
查找内容:
export interface ToolUseContext {
// existing properties
}
替换为:
export interface ToolUseContext {
// ...existing properties
setToolJSX?: (jsx: React.ReactElement) => void;
messageId?: string;
agentId?: string;
}
Phase 5: 修复其他基础类型问题 (10分钟)
Step 5.1: 修复 thinking.ts 枚举值
修改文件: src/utils/thinking.ts
查找内容 (第 115 行):
"low" | "medium" | "high" | "minimal"
替换为:
"low" | "medium" | "high"
Step 5.2: 移除无用的 @ts-expect-error
修改文件列表及行号:
src/entrypoints/cli.tsx- 删除第 318 行src/hooks/useDoublePress.ts- 删除第 33 行src/hooks/useTextInput.ts- 删除第 143 行src/utils/messages.tsx- 删除第 301 行
操作: 直接删除包含 // @ts-expect-error 的整行
Phase 6: 验证基础修复 (5分钟)
Step 6.1: 运行类型检查
npx tsc --noEmit 2>&1 | wc -l
预期结果: 错误数量应该从 127 减少到 70-80 左右
Step 6.2: 检查特定文件错误
npx tsc --noEmit 2>&1 | grep "src/messages.ts"
npx tsc --noEmit 2>&1 | grep "src/query.ts"
npx tsc --noEmit 2>&1 | grep "src/Tool.ts"
预期结果: 这些文件不应再有错误
Step 6.3: 测试运行时
bun run dev
# 输入 /help 测试基础功能
预期结果: CLI 应该能启动,基础命令能运行
完成标志
- sharp 依赖已安装
- ink-augmentation.d.ts 已创建
- Message 类型错误已修复
- Tool 接口已更新
- 无用的 @ts-expect-error 已移除
- TypeScript 错误减少 40% 以上
- 基础 CLI 功能可运行
注意事项
- 不要修改功能逻辑,只修复类型定义
- 保留原有注释,只添加必要的类型注释
- 使用 git diff 检查改动,确保没有意外修改
- 每个文件修改后立即保存,避免丢失工作
如果遇到问题
- 检查文件路径是否正确
- 确认 bun 和 npm 都已安装
- 如果找不到指定代码,使用 grep 搜索:
grep -n "ProgressMessage" src/messages.ts - 保存修改前的文件备份:
cp src/messages.ts src/messages.ts.backup
完成后
将此文档标记为完成,然后可以开始 Step 1 的并行任务。