first commit
This commit is contained in:
496
claude-code-中文Wiki/15-其他重要模块.md
Normal file
496
claude-code-中文Wiki/15-其他重要模块.md
Normal file
@@ -0,0 +1,496 @@
|
||||
# 其他重要模块
|
||||
|
||||
本文档介绍 Claude Code 中不属于前几章的重要模块。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
src/
|
||||
├── bootstrap/ # 启动引导
|
||||
├── memdir/ # 持久化内存目录
|
||||
├── native-ts/ # 原生 TypeScript 工具
|
||||
│ ├── yoga-layout/ # Yoga 布局引擎
|
||||
│ ├── file-index/ # 文件索引
|
||||
│ └── color-diff/ # 颜色差异计算
|
||||
├── voice/ # 语音输入
|
||||
├── vim/ # Vim 模式
|
||||
├── keybindings/ # 快捷键配置
|
||||
├── moreright/ # 权限扩展 UI
|
||||
├── outputStyles/ # 输出样式管理
|
||||
└── query/ # 查询管道
|
||||
├── tokenBudget.ts # Token 预算管理
|
||||
├── stopHooks.ts # 停止钩子
|
||||
└── config.ts # 查询配置
|
||||
```
|
||||
|
||||
## 1. 启动引导 (bootstrap/)
|
||||
|
||||
### 1.1 引导状态 (state.ts)
|
||||
|
||||
**文件**: `src/bootstrap/state.ts` (~56KB)
|
||||
|
||||
管理应用启动状态和全局状态。
|
||||
|
||||
**主要功能**:
|
||||
- 启动时间跟踪
|
||||
- 交互时间统计
|
||||
- 功能开关状态
|
||||
- 工作目录管理
|
||||
|
||||
**关键函数**:
|
||||
|
||||
| 函数 | 用途 |
|
||||
|------|------|
|
||||
| `getOriginalCwd()` | 获取原始工作目录 |
|
||||
| `getKairosActive()` | 获取 Kairos 状态 |
|
||||
| `flushInteractionTime()` | 刷新交互时间 |
|
||||
| `markScrollActivity()` | 标记滚动活动 |
|
||||
|
||||
## 2. 持久化内存 (memdir/)
|
||||
|
||||
### 2.1 内存目录核心 (memdir.ts)
|
||||
|
||||
**文件**: `src/memdir/memdir.ts` (~21KB)
|
||||
|
||||
管理 MEMORY.md 文件和自动记忆系统。
|
||||
|
||||
**主要功能**:
|
||||
- 内存文件读写
|
||||
- 记忆检索
|
||||
- 入口点截断
|
||||
- 团队记忆管理
|
||||
|
||||
**关键常量**:
|
||||
```typescript
|
||||
export const ENTRYPOINT_NAME = 'MEMORY.md'
|
||||
export const MAX_ENTRYPOINT_LINES = 200
|
||||
export const MAX_ENTRYPOINT_BYTES = 25_000
|
||||
```
|
||||
|
||||
**截断函数**:
|
||||
```typescript
|
||||
export function truncateEntrypointContent(
|
||||
raw: string
|
||||
): EntrypointTruncation {
|
||||
// 1. 按行截断 (最多200行)
|
||||
// 2. 按字节截断 (最多25KB)
|
||||
// 3. 返回截断结果和警告信息
|
||||
}
|
||||
```
|
||||
|
||||
### 2.2 记忆类型 (memoryTypes.ts)
|
||||
|
||||
**文件**: `src/memdir/memoryTypes.ts` (~23KB)
|
||||
|
||||
定义记忆相关的数据结构和常量。
|
||||
|
||||
```typescript
|
||||
// 记忆入口
|
||||
interface MemoryEntry {
|
||||
id: string
|
||||
type: 'individual' | 'team'
|
||||
keywords: string[]
|
||||
content: string
|
||||
createdAt: number
|
||||
accessedAt: number
|
||||
}
|
||||
|
||||
// 记忆类型
|
||||
const TYPES_SECTION_INDIVIDUAL = ...
|
||||
const TRUSTING_RECALL_SECTION = ...
|
||||
const WHAT_NOT_TO_SAVE_SECTION = ...
|
||||
```
|
||||
|
||||
### 2.3 路径管理 (paths.ts)
|
||||
|
||||
**文件**: `src/memdir/paths.ts` (~11KB)
|
||||
|
||||
管理内存目录的路径计算。
|
||||
|
||||
```typescript
|
||||
export function getMemoryDir(): string {
|
||||
return join(getProjectDir(), '.claude', 'memory')
|
||||
}
|
||||
|
||||
export function getAutoMemPath(): string {
|
||||
return join(getMemoryDir(), 'auto', 'MEMORY.md')
|
||||
}
|
||||
```
|
||||
|
||||
### 2.4 相关文件
|
||||
|
||||
| 文件 | 用途 |
|
||||
|------|------|
|
||||
| `findRelevantMemories.ts` | 查找相关记忆 |
|
||||
| `memoryAge.ts` | 记忆老化计算 |
|
||||
| `memoryScan.ts` | 记忆扫描 |
|
||||
| `teamMemPaths.ts` | 团队记忆路径 |
|
||||
| `teamMemPrompts.ts` | 团队记忆提示词 |
|
||||
|
||||
## 3. 原生 TypeScript 工具 (native-ts/)
|
||||
|
||||
### 3.1 Yoga 布局引擎 (yoga-layout/)
|
||||
|
||||
封装 Facebook Yoga 布局引擎。
|
||||
|
||||
**注意**: Yoga 是用 C++ 编写的,通过原生绑定调用。
|
||||
|
||||
```typescript
|
||||
// 获取 Yoga 计数器
|
||||
export function getYogaCounters(): {
|
||||
ms: number
|
||||
visited: number
|
||||
measured: number
|
||||
cacheHits: number
|
||||
live: number
|
||||
}
|
||||
```
|
||||
|
||||
### 3.2 文件索引 (file-index/)
|
||||
|
||||
文件内容的快速索引系统。
|
||||
|
||||
**用途**:
|
||||
- 代码搜索加速
|
||||
- 上下文构建
|
||||
- 记忆检索
|
||||
|
||||
### 3.3 颜色差异 (color-diff/)
|
||||
|
||||
计算颜色之间的视觉差异。
|
||||
|
||||
```typescript
|
||||
// Delta E (CIE2000) 计算
|
||||
export function colorDistance(
|
||||
color1: RGB,
|
||||
color2: RGB
|
||||
): number {
|
||||
// 返回 Delta E 值
|
||||
// < 1: 几乎不可察觉
|
||||
// 1-2: 轻微差异
|
||||
// 2-5: 有感差异
|
||||
// > 5: 明显差异
|
||||
}
|
||||
```
|
||||
|
||||
## 4. 语音输入 (voice/)
|
||||
|
||||
### 4.1 语音模式启用 (voiceModeEnabled.ts)
|
||||
|
||||
**文件**: `src/voice/voiceModeEnabled.ts`
|
||||
|
||||
检查语音输入模式是否启用。
|
||||
|
||||
```typescript
|
||||
export function isVoiceModeEnabled(): boolean {
|
||||
return isEnvTruthy('VOICE_MODE_ENABLED')
|
||||
}
|
||||
```
|
||||
|
||||
## 5. Vim 模式 (vim/)
|
||||
|
||||
### 5.1 模块结构
|
||||
|
||||
```
|
||||
vim/
|
||||
├── motions.ts # 动作 (h/j/k/l/w/b/e/...)
|
||||
├── operators.ts # 操作符 (d/y/c/s/r)
|
||||
├── textObjects.ts # 文本对象 (iw/aW/is/as/...)
|
||||
├── transitions.ts # 状态转换
|
||||
└── types.ts # 类型定义
|
||||
```
|
||||
|
||||
### 5.2 核心概念
|
||||
|
||||
**动作 (Motions)**:
|
||||
```typescript
|
||||
// 基础动作
|
||||
type Motion =
|
||||
| { type: 'char'; direction: 'left' | 'right' }
|
||||
| { type: 'word'; direction: 'forward' | 'backward' }
|
||||
| { type: 'line'; direction: 'up' | 'down' }
|
||||
| { type: 'lineStart' }
|
||||
| { type: 'lineEnd' }
|
||||
```
|
||||
|
||||
**操作符 (Operators)**:
|
||||
```typescript
|
||||
type Operator =
|
||||
| { type: 'delete' }
|
||||
| { type: 'yank' }
|
||||
| { type: 'change' }
|
||||
| { type: 'replace' }
|
||||
| { type: 'swapCase' }
|
||||
```
|
||||
|
||||
**状态机**:
|
||||
```typescript
|
||||
type VimState =
|
||||
| 'normal' // 普通模式
|
||||
| 'insert' // 插入模式
|
||||
| 'visual' // 可视模式
|
||||
| 'operator' // 操作符等待
|
||||
```
|
||||
|
||||
### 5.3 状态转换 (transitions.ts)
|
||||
|
||||
**文件**: `src/vim/transitions.ts` (~12KB)
|
||||
|
||||
管理 Vim 模式的状态转换。
|
||||
|
||||
```typescript
|
||||
// 转换函数
|
||||
function transition(
|
||||
state: VimState,
|
||||
input: VimInput
|
||||
): VimState
|
||||
|
||||
// 示例: Normal -> Insert
|
||||
// i -> Insert
|
||||
// a -> Insert (after cursor)
|
||||
// o -> Insert (new line below)
|
||||
|
||||
// 示例: Normal -> Visual
|
||||
// v -> Visual (character-wise)
|
||||
// V -> Visual (line-wise)
|
||||
```
|
||||
|
||||
## 6. 快捷键配置 (keybindings/)
|
||||
|
||||
### 6.1 模块结构
|
||||
|
||||
```
|
||||
keybindings/
|
||||
├── defaultBindings.ts # 默认绑定
|
||||
├── KeybindingContext.tsx # 快捷键上下文
|
||||
├── KeybindingProviderSetup.tsx # 提供者设置
|
||||
├── loadUserBindings.ts # 加载用户绑定
|
||||
├── match.ts # 匹配逻辑
|
||||
├── parser.ts # 解析器
|
||||
├── resolver.ts # 解析器
|
||||
├── schema.ts # 模式定义
|
||||
├── useKeybinding.ts # Hook
|
||||
├── validate.ts # 验证
|
||||
└── template.ts # 模板
|
||||
```
|
||||
|
||||
### 6.2 默认绑定 (defaultBindings.ts)
|
||||
|
||||
**文件**: `src/keybindings/defaultBindings.ts` (~12KB)
|
||||
|
||||
定义默认键盘快捷键。
|
||||
|
||||
```typescript
|
||||
export const DEFAULT_BINDINGS: KeyBinding[] = [
|
||||
// 编辑
|
||||
{ key: 'ctrl+c', action: 'copy' },
|
||||
{ key: 'ctrl+v', action: 'paste' },
|
||||
{ key: 'ctrl+z', action: 'undo' },
|
||||
|
||||
// 导航
|
||||
{ key: 'ctrl+p', action: 'previousItem' },
|
||||
{ key: 'ctrl+n', action: 'nextItem' },
|
||||
|
||||
// 特定
|
||||
{ key: 'ctrl+o', action: 'expand' },
|
||||
{ key: 'escape', action: 'dismiss' },
|
||||
]
|
||||
```
|
||||
|
||||
### 6.3 快捷键解析 (parser.ts)
|
||||
|
||||
解析用户定义的快捷键字符串。
|
||||
|
||||
```typescript
|
||||
// 解析 "ctrl+shift+k"
|
||||
parseKeybinding("ctrl+shift+k")
|
||||
// -> {
|
||||
// ctrl: true,
|
||||
// shift: true,
|
||||
// key: 'k'
|
||||
// }
|
||||
```
|
||||
|
||||
### 6.4 快捷键验证 (validate.ts)
|
||||
|
||||
验证快捷键定义的有效性。
|
||||
|
||||
```typescript
|
||||
export function validateBinding(
|
||||
binding: KeyBinding
|
||||
): ValidationResult {
|
||||
// 1. 检查修饰键组合
|
||||
// 2. 检查冲突
|
||||
// 3. 检查保留键
|
||||
}
|
||||
```
|
||||
|
||||
### 6.5 使用 Hook (useKeybinding.ts)
|
||||
|
||||
React Hook 用于在组件中使用快捷键。
|
||||
|
||||
```typescript
|
||||
function useKeybinding(
|
||||
key: string,
|
||||
handler: () => void,
|
||||
options?: {
|
||||
enabled?: boolean
|
||||
scope?: 'global' | 'local'
|
||||
}
|
||||
): void
|
||||
```
|
||||
|
||||
## 7. 权限扩展 UI (moreright/)
|
||||
|
||||
### 7.1 权限扩展组件 (useMoreRight.tsx)
|
||||
|
||||
**文件**: `src/moreright/useMoreRight.tsx`
|
||||
|
||||
提供额外的权限扩展 UI。
|
||||
|
||||
```typescript
|
||||
function useMoreRight(): {
|
||||
// 权限请求
|
||||
requestPermission: (
|
||||
tool: string,
|
||||
args: unknown
|
||||
) => Promise<boolean>
|
||||
|
||||
// 权限状态
|
||||
hasPermission: (tool: string) => boolean
|
||||
|
||||
// 打开权限面板
|
||||
openPermissionPanel: () => void
|
||||
}
|
||||
```
|
||||
|
||||
## 8. 输出样式管理 (outputStyles/)
|
||||
|
||||
### 8.1 样式加载 (loadOutputStylesDir.ts)
|
||||
|
||||
**文件**: `src/outputStyles/loadOutputStylesDir.ts`
|
||||
|
||||
加载输出样式目录中的自定义样式。
|
||||
|
||||
```typescript
|
||||
export function loadOutputStylesDir(
|
||||
dirPath: string
|
||||
): OutputStyle[] {
|
||||
// 1. 扫描目录
|
||||
// 2. 解析样式文件
|
||||
// 3. 验证样式
|
||||
// 4. 返回样式列表
|
||||
}
|
||||
```
|
||||
|
||||
## 9. 查询管道 (query/)
|
||||
|
||||
### 9.1 Token 预算管理 (tokenBudget.ts)
|
||||
|
||||
**文件**: `src/query/tokenBudget.ts`
|
||||
|
||||
管理查询的 Token 预算。
|
||||
|
||||
```typescript
|
||||
export interface TokenBudget {
|
||||
total: number // 总预算
|
||||
used: number // 已使用
|
||||
reserved: number // 预留
|
||||
remaining: number // 剩余
|
||||
}
|
||||
|
||||
// 预算检查
|
||||
export function checkBudget(budget: TokenBudget): boolean {
|
||||
return budget.remaining > 0
|
||||
}
|
||||
|
||||
// 预算分配
|
||||
export function allocateBudget(
|
||||
budget: TokenBudget,
|
||||
amount: number
|
||||
): TokenBudget {
|
||||
return {
|
||||
...budget,
|
||||
used: budget.used + amount,
|
||||
remaining: budget.total - budget.used - amount
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 9.2 停止钩子 (stopHooks.ts)
|
||||
|
||||
**文件**: `src/query/stopHooks.ts` (~17KB)
|
||||
|
||||
定义查询停止时的回调钩子。
|
||||
|
||||
```typescript
|
||||
export type StopHook = {
|
||||
id: string
|
||||
name: string
|
||||
priority: number
|
||||
execute: (context: StopContext) => Promise<void>
|
||||
}
|
||||
|
||||
export interface StopContext {
|
||||
queryId: string
|
||||
reason: 'complete' | 'error' | 'user_cancel'
|
||||
tokensUsed: number
|
||||
duration: number
|
||||
}
|
||||
|
||||
// 注册钩子
|
||||
export function registerStopHook(hook: StopHook): void
|
||||
|
||||
// 执行钩子
|
||||
export async function executeStopHooks(
|
||||
context: StopContext
|
||||
): Promise<void> {
|
||||
const hooks = getHooks()
|
||||
.sort((a, b) => b.priority - a.priority)
|
||||
|
||||
for (const hook of hooks) {
|
||||
await hook.execute(context)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 9.3 查询配置 (config.ts)
|
||||
|
||||
**文件**: `src/query/config.ts`
|
||||
|
||||
```typescript
|
||||
export interface QueryConfig {
|
||||
// 模型
|
||||
model: string
|
||||
maxTokens: number
|
||||
|
||||
// 预算
|
||||
tokenBudget: number
|
||||
|
||||
// 停止条件
|
||||
stopHooks: string[]
|
||||
|
||||
// 工具配置
|
||||
tools: ToolConfig[]
|
||||
|
||||
// 上下文
|
||||
systemPrompt?: string
|
||||
contextFiles?: string[]
|
||||
}
|
||||
```
|
||||
|
||||
## 10. 总结
|
||||
|
||||
这些模块提供了 Claude Code 的重要辅助功能:
|
||||
|
||||
| 模块 | 核心功能 |
|
||||
|------|----------|
|
||||
| bootstrap | 应用启动和状态管理 |
|
||||
| memdir | 持久化记忆系统 |
|
||||
| native-ts | 性能关键原生工具 |
|
||||
| voice | 语音输入支持 |
|
||||
| vim | Vim 模式编辑 |
|
||||
| keybindings | 快捷键系统 |
|
||||
| moreright | 权限扩展 |
|
||||
| outputStyles | 输出样式 |
|
||||
| query | 查询管道 |
|
||||
Reference in New Issue
Block a user