10 篇文章带有标签 “source-code-analysis”

Claude Code 源代码分析

创建 CLAUDE.md

这样它会将项目的规范、构建命令和架构要点记录下来,后续对话中它会自动参考这个文件,不再需要你重复解释背景。有利于后续的代码分析、调试和功能开发。

运行 /init 命令

/init - 自动分析该项目并生成 CLAUDE.md
我已为该仓库成功创建了CLAUDE.md文件。以下是文件包含的内容:

### CLAUDE.md 内容概要
1. **概述** - 包含项目统计信息(约1884个文件、51.2万行代码、40+工具、80+命令)的项目说明,以及法律免责声明。

2. **命令** - 构建与开发相关命令:
    - `npm run prepare-src` - 准备源码
    - `npm run build` - 使用esbuild构建
    - `npm run check` - 执行类型检查
    - `npm start` - 运行编译后的命令行工具

3. **高层架构**:
    - src/query.ts中的核心智能体循环模式
    - 核心目录(入口点、命令行、命令、工具、组件、服务、状态、工具函数)
    - 关键文件及其用途
// ...

CLAUDE.md

本文件用于指导 Claude Code(claude.ai/code)处理此代码仓库中的代码。

概述

本仓库包含 Claude Code v2.1.

OpenClaw 源代码分析

当用户在whatsapp, discord 等消息软件中发送了消息后,网关是如何获得的,再到回复,整个流程是如何运转的?

OpenClaw 消息处理完整流程

1. 消息接入2. 路由决策3. AI 处理4. 回复发送

核心文件位置

模块 文件位置 功能
渠道实现 extensions/*/src/channel.ts WhatsApp/Discord/Telegram 等渠道插件
渠道监听 extensions/discord/src/monitor/listeners.ts 监听渠道消息事件
消息分发 src/auto-reply/dispatch.ts 协调预处理、路由、回复
路由解析 src/routing/resolve-route.ts 根据 bindings 配置决定由哪个 agent 处理
网关服务 src/gateway/server.impl.ts 网关服务器主实现
Agent 执行 src/agents/pi-embedded-runner/ 运行 AI agent
消息发送 src/infra/outbound/deliver.ts 统一发送逻辑

详细流程示例(以 Discord 为例)

vscode-extension-samples/chat-sample 源码分析

运行 Chat Sample

克隆仓库

git clone https://github.com/microsoft/vscode-extension-samples

安装依赖

cd vscode-extension-samples/chat-sample
npm install

调试

在 Debug View 中运行 Run Extension

Chat Sample 源码分析

扩展入口

文件:src/extension.ts

export function activate(context: vscode.ExtensionContext) {
    registerSimpleParticipant(context);
    registerToolUserChatParticipant(context);
    registerChatLibChatParticipant(context);

    registerChatTools(context);
}

注册参与者

文件:src/simple.ts

export function registerSimpleParticipant(context: vscode.ExtensionContext) {

}

Continue 源码分析 - 向量数据库存储位置

向量数据库存储位置

生成规则

LanceDB 存储位置:~/.continue/index/lancedb

  • UsersjunjianGitHubcontinuedevcontinue-0.9.191-vscodeextensionsvscodeNONEvectordb_OpenAIEmbeddingsProviderbge-base-zh-v1.5.lance
  • UsersjunjianGitHubcontinuedevcontinue-0.9.191-vscodeextensionsvscodeNONEvectordb_TransformersJsEmbeddingsProviderall-MiniLM-L6-v2.lance
  • UsersjunjianGitHubcontinuedevcontinue-0.9.191-vscodeextensionsvscodeNONEvectordb_TransformersJsEmbeddingsProviderbge-small-zh-v1.5.lance

向量数据库存储目录名字的组成部分: IndexTag.directory: /Users/junjian/GitHub/continuedev/continue-0.9.191-vscode/extensions/vscode IndexTag.branch: NONE IndexTag.

Continue 源码分析 - 键盘快捷键

聊天窗口

输入框(TipTapEditor)

Enter ()

  • 不使用 Codebase

Cmd-Enter ( )

  • 使用 Codebase

Alt-Enter ( )

  • 使用 ActiveFile(打开且激活的文件)

Cmd-Backspace ( )

  • 放弃响应

Shift-Enter ( )

  • 换行

源代码:gui/src/components/mainInput/TipTapEditor.tsx

function TipTapEditor(props: TipTapEditorProps) {
  //...
  const editor: Editor = useEditor({
    extensions: [
      Document,
      History,
      Image,
      Placeholder.configure({
        placeholder: () =>
          historyLengthRef.current === 0
            ? "提出任何问题,'/' 斜杠命令,'@' 添加上下文"
            : "提出后续问题",
      }),
      Paragraph.extend({
        addKeyboardShortcuts() {
// ...

新会话 ( L)

源代码:gui/src/pages/gui.tsx

Continue 源码分析 - SQLite 数据库设计

SQLite 数据库设计

CREATE TABLE tag_catalog (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    dir STRING NOT NULL,
    branch STRING NOT NULL,
    artifactId STRING NOT NULL,
    path STRING NOT NULL,
    cacheKey STRING NOT NULL,
    lastUpdated INTEGER NOT NULL
)

CREATE TABLE sqlite_sequence(name,seq)

CREATE TABLE global_cache (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cacheKey STRING NOT NULL,
    dir STRING NOT NULL,
    branch STRING NOT NULL,
    artifactId STRING NOT NULL
)

CREATE TABLE chunks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cacheKey TEXT NOT NULL,
    path TEXT NOT NULL,
    idx INTEGER NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL,
    content TEXT NOT NULL
)

CREATE TABLE chunk_tags (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    tag TEXT NOT NULL,
    chunkId INTEGER NOT NULL,
    FOREIGN KEY (chunkId) REFERENCES chunks (id)
)

CREATE TABLE code_snippets (
    id INTEGER PRIMARY KEY,
    path TEXT NOT NULL,
    cacheKey TEXT NOT NULL,
    content TEXT NOT NULL,
    title TEXT NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL
)

CREATE TABLE code_snippets_tags (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    tag TEXT NOT NULL,
    snippetId INTEGER NOT NULL,
    FOREIGN KEY (snippetId) REFERENCES code_snippets (id)
)

CREATE TABLE lance_db_cache (
    uuid TEXT PRIMARY KEY,
    cacheKey TEXT NOT NULL,
    path TEXT NOT NULL,
    artifact_id TEXT NOT NULL,
    vector TEXT NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL,
    contents TEXT NOT NULL
)

CREATE TABLE fts_metadata (
    id INTEGER PRIMARY KEY,
    path TEXT NOT NULL,
    cacheKey TEXT NOT NULL,
    chunkId INTEGER NOT NULL,
    FOREIGN KEY (chunkId) REFERENCES chunks (id),
    FOREIGN KEY (id) REFERENCES fts (rowid)
)

CREATE VIRTUAL TABLE fts USING fts5(
    path,
    content,
    tokenize = 'trigram'
)

CREATE TABLE 'fts_data'(id INTEGER PRIMARY KEY, block BLOB)
CREATE TABLE 'fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID
CREATE TABLE 'fts_content'(id INTEGER PRIMARY KEY, c0, c1)
CREATE TABLE 'fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB)
CREATE TABLE 'fts_config'(k PRIMARY KEY, v) WITHOUT ROWID

CREATE UNIQUE INDEX idx_tag_catalog_unique 
     ON tag_catalog(dir, branch, artifactId, path, cacheKey)
CREATE UNIQUE INDEX idx_global_cache_unique 
     ON global_cache(cacheKey, dir, branch, artifactId)

Continue 源码分析

Continue

VS Code Extension

通过配置创建新的 Extension,用于区别于 Continue 。

{
  "name": "continue",
  "icon": "media/icon.png",
  "version": "0.9.218",
  "displayName": "LNSoft Continue",
  "description": "The leading open-source AI code assistant",
  "publisher": "LNSoft Continue"
}

入口

VS Code 扩展的起点是 activate.tsactivateExtension 这里的函数将注册所有命令,并将 Continue GUI 作为 webview 加载到 IDE 的侧边栏中。

配置

目录:extensions/vscode

package.json

package.json 由开发者手动创建和维护,主要用于定义项目的配置信息。