claudecode/crates/compat-harness/README.md
fengmengqi 4a04faf926 feat: 添加 Web 前端及服务端 SSE 流式支持,扩展多模型兼容
后端:
  - server: 实现完整的 HTTP 会话管理(CRUD)+ SSE 事件流推送,
    支持双通道架构(POST 发消息 + GET SSE 接收流式响应)
  - runtime: ContentBlock 新增 Thinking / RedactedThinking 变体,
    支持思考过程和已编辑思考的序列化/反序列化
  - api: 注册 GLM 系列模型(glm-4/5 等)到模型注册表,
    扩展 XAI/OpenAI 兼容提供商的请求构建逻辑

  前端:
  - 基于 Ant Design X 构建完整聊天界面:Bubble.List 消息列表、
    Sender 输入框、Conversations 会话管理、Think 思考过程折叠、
    ThoughtChain 工具调用链展示
  - XMarkdown 集成:代码高亮、Mermaid 图表、LaTeX 公式、
    自定义脚注、流式渲染(incomplete 占位符)
  - SSE Hook 对接服务端事件流,手动管理 AssistantBuffer 累积 delta
  - 深色/浅色主题切换,会话侧边栏(新建/切换/删除)
2026-04-10 16:29:27 +08:00

49 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 兼容性测试套件模块 (compat-harness)
本模块提供了一套工具,专门用于分析和提取上游引用实现(如原始的 `claude-code` TypeScript 源码)中的元数据,以确保 Rust 版本的实现与其保持功能兼容。
## 概览
`compat-harness` 的主要职责是:
- 定位上游仓库的源码路径。
- 从 TypeScript 源码文件中提取命令 (`commands`)、工具 (`tools`) 和启动阶段 (`bootstrap phases`) 的定义。
- 自动生成功能清单 (`ExtractedManifest`),供运行时或测试使用,以验证 Rust 版本的覆盖率。
## 关键特性
- **上游路径解析 (UpstreamPaths)**:能够自动识别多种常见的上游仓库目录结构,并支持通过环境变量 `CLAUDE_CODE_UPSTREAM` 进行覆盖。
- **静态代码分析**:通过解析 TypeScript 源码,识别特定的代码模式(如 `export const INTERNAL_ONLY_COMMANDS` 或基于 `feature()` 的功能开关)。
- **清单提取 (Manifest Extraction)**
- **命令提取**:识别内置命令、仅限内部使用的命令以及受功能开关控制的命令。
- **工具提取**:识别基础工具和条件加载的工具。
- **启动计划提取**:分析 CLI 入口文件,重建启动时的各个阶段(如 `FastPathVersion`, `MainRuntime` 等)。
## 实现逻辑
### 核心模块
- **`lib.rs`**: 包含了核心的提取逻辑。
- **`UpstreamPaths` 结构体**: 封装了寻找 `commands.ts`、`tools.ts` 和 `cli.tsx` 的逻辑。
- **`extract_commands` & `extract_tools`**: 使用字符串解析技术,识别 TypeScript 的 `import` 和赋值操作,提取符号名称。
- **`extract_bootstrap_plan`**: 搜索特定的标志性字符串(如 `--version``daemon-worker`),从而推断出上游程序的启动流程。
### 工作流程
1. 模块根据预设路径或环境变量寻找上游 `claude-code` 仓库。
2. 读取关键的 `.ts``.tsx` 文件内容。
3. 执行正则表达式风格的行解析,提取出所有定义的命令和工具名称。
4. 将提取结果组织成 `ExtractedManifest` 对象。
## 使用示例 (内部测试)
```rust
use compat_harness::{UpstreamPaths, extract_manifest};
// 指定工作区目录,自动寻找上游路径
let paths = UpstreamPaths::from_workspace_dir("path/to/workspace");
// 提取功能清单
if let Ok(manifest) = extract_manifest(&paths) {
println!("上游发现 {} 个工具", manifest.tools.entries().len());
}
```