# 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 **执行命令**: ```bash bun add sharp bun add -d @types/sharp ``` **验证**: 运行 `bun install` 确认无错误 ### Phase 2: 创建类型增强文件 (10分钟) #### Step 2.1: 创建 Ink 类型增强 **创建文件**: `src/types/ink-augmentation.d.ts` **精确内容**: ```typescript // Ink Key 类型增强 - 添加缺失的键盘属性 declare module 'ink' { interface Key { fn?: boolean; home?: boolean; end?: boolean; space?: boolean; } } ``` #### Step 2.2: 创建通用类型定义 **创建文件**: `src/types/common.d.ts` **精确内容**: ```typescript // 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 行之间): ```typescript export interface ProgressMessage { type: 'progress' // ... existing properties } ``` **替换为**: ```typescript export interface ProgressMessage { type: 'progress' message?: any // 添加可选的 message 属性以兼容旧代码 content: AssistantMessage normalizedMessages: NormalizedMessage[] siblingToolUseIDs: Set tools: Tool[] toolUseID: string uuid: UUID } ``` #### Step 3.2: 修复 query.ts 中的消息访问 **修改文件**: `src/query.ts` **查找内容** (第 203-210 行): ```typescript message: msg.message ``` **替换为**: ```typescript // 使用类型守卫安全访问 ...(msg.type !== 'progress' && 'message' in msg ? { message: msg.message } : {}) ``` #### Step 3.3: 修复 messageContextManager.ts **修改文件**: `src/utils/messageContextManager.ts` **查找内容** (第 136 行附近): ```typescript return { type: "assistant", message: { role: "assistant", content: [...] } } ``` **替换为**: ```typescript return { type: "assistant", message: { role: "assistant", content: [...] }, costUSD: 0, durationMs: 0, uuid: crypto.randomUUID() as UUID } ``` **注意**: 需要在文件顶部添加导入: ```typescript import type { UUID } from '../types/common'; ``` ### Phase 4: 修复 Tool 接口定义 (15分钟) #### Step 4.1: 更新 Tool 基础接口 **修改文件**: `src/Tool.ts` **查找内容**: ```typescript export interface Tool { renderResultForAssistant(output: TOutput): string; renderToolUseRejectedMessage(): React.ReactElement; // ... } ``` **替换为**: ```typescript export interface Tool { renderResultForAssistant(output: TOutput): string | any[]; renderToolUseRejectedMessage?(...args: any[]): React.ReactElement; // ...其他属性保持不变 } ``` #### Step 4.2: 更新 ToolUseContext **修改文件**: `src/Tool.ts` (或者在同一文件中查找 ToolUseContext) **查找内容**: ```typescript export interface ToolUseContext { // existing properties } ``` **替换为**: ```typescript 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 行): ```typescript "low" | "medium" | "high" | "minimal" ``` **替换为**: ```typescript "low" | "medium" | "high" ``` #### Step 5.2: 移除无用的 @ts-expect-error **修改文件列表及行号**: 1. `src/entrypoints/cli.tsx` - 删除第 318 行 2. `src/hooks/useDoublePress.ts` - 删除第 33 行 3. `src/hooks/useTextInput.ts` - 删除第 143 行 4. `src/utils/messages.tsx` - 删除第 301 行 **操作**: 直接删除包含 `// @ts-expect-error` 的整行 ### Phase 6: 验证基础修复 (5分钟) #### Step 6.1: 运行类型检查 ```bash npx tsc --noEmit 2>&1 | wc -l ``` **预期结果**: 错误数量应该从 127 减少到 70-80 左右 #### Step 6.2: 检查特定文件错误 ```bash 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: 测试运行时 ```bash bun run dev # 输入 /help 测试基础功能 ``` **预期结果**: CLI 应该能启动,基础命令能运行 ## 完成标志 - [ ] sharp 依赖已安装 - [ ] ink-augmentation.d.ts 已创建 - [ ] Message 类型错误已修复 - [ ] Tool 接口已更新 - [ ] 无用的 @ts-expect-error 已移除 - [ ] TypeScript 错误减少 40% 以上 - [ ] 基础 CLI 功能可运行 ## 注意事项 1. **不要修改功能逻辑**,只修复类型定义 2. **保留原有注释**,只添加必要的类型注释 3. **使用 git diff 检查改动**,确保没有意外修改 4. **每个文件修改后立即保存**,避免丢失工作 ## 如果遇到问题 1. 检查文件路径是否正确 2. 确认 bun 和 npm 都已安装 3. 如果找不到指定代码,使用 grep 搜索: ```bash grep -n "ProgressMessage" src/messages.ts ``` 4. 保存修改前的文件备份: ```bash cp src/messages.ts src/messages.ts.backup ``` ## 完成后 将此文档标记为完成,然后可以开始 Step 1 的并行任务。