Kode-cli/.sub_task/step_0_foundation_serial.md

239 lines
6.3 KiB
Markdown

# 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<string>
tools: Tool<any, any>[]
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<TInput, TOutput> {
renderResultForAssistant(output: TOutput): string;
renderToolUseRejectedMessage(): React.ReactElement;
// ...
}
```
**替换为**:
```typescript
export interface Tool<TInput, TOutput> {
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 的并行任务。