cocoindex-io/cocoindex-code

GitHub: cocoindex-io/cocoindex-code

一款基于 AST 的轻量级语义代码搜索 CLI 工具,专为编程 Agent 设计,可大幅节省 token 并提升代码检索效率。

Stars: 2118 | Forks: 167

cocoindex code

基于 AST 的语义化代码搜索,即开即用

![效果](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2c0e6b9942202408.gif) 一款专为你的代码库设计的轻量级、高效的**(基于 AST)**语义化代码搜索工具。基于 [CocoIndex](https://github.com/cocoindex-io/cocoindex) —— 一个基于 Rust 构建的超高性能数据转换引擎。你可以通过 CLI 使用它,或者通过 [Skill](#skill-recommended) 或 [MCP](#mcp-server) 与 Claude、Codex、Cursor 等任何编程 Agent 集成。 - 立即节省 70% 的 token。 - **1 分钟设置** —— 安装即用,零配置!
[![Discord](https://img.shields.io/discord/1314801574169673738?logo=discord&color=5B5BD6&logoColor=white)](https://discord.com/invite/zpA9S2DR7s) [![GitHub](https://img.shields.io/github/stars/cocoindex-io/cocoindex?color=5B5BD6)](https://github.com/cocoindex-io/cocoindex) [![文档](https://img.shields.io/badge/Documentation-394e79?logo=readthedocs&logoColor=00B9FF)](https://cocoindex.io/docs/getting_started/quickstart) [![许可证](https://img.shields.io/badge/license-Apache%202.0-5B5BD6?logoColor=white)](https://opensource.org/licenses/Apache-2.0) [![PyPI 下载量](https://static.pepy.tech/badge/cocoindex/month)](https://pepy.tech/projects/cocoindex) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/efef7ed7ab202541.svg)](https://github.com/cocoindex-io/cocoindex/actions/workflows/CI.yml) [![发布](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d3175cfa81202543.svg)](https://github.com/cocoindex-io/cocoindex/actions/workflows/release.yml) [Deutsch](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=de) | [English](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=en) | [Español](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=es) | [français](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=fr) | [日本語](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=ja) | [한국어](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=ko) | [Português](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=pt) | [Русский](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=ru) | [中文](https://readme-i18n.com/cocoindex-io/cocoindex-code?lang=zh)
## 开始使用 —— 零配置,立即出发! ### 安装 使用 [pipx](https://pipx.pypa.io/stable/installation/): ``` pipx install 'cocoindex-code[full]' # batteries included (local embeddings) pipx upgrade cocoindex-code # upgrade ``` 使用 [uv](https://docs.astral.sh/uv/getting-started/installation/): ``` uv tool install --upgrade 'cocoindex-code[full]' ``` 两种安装选项 —— 它们对应同名的 Docker 镜像版本: - `cocoindex-code[full]` —— 一应俱全。引入 `sentence-transformers`,使本地 embedding(无需 API key)开箱即用。`ccc init` 交互式提示默认使用 [Snowflake/snowflake-arctic-embed-xs](https://huggingface.co/Snowflake/snowflake-arctic-embed-xs)。 - `cocoindex-code` (slim) —— 仅支持 LiteLLM;需要云 embedding 提供商和 API key。当你不需要本地 embedding 依赖(约 1 GB 的 torch + transformers)时使用。 接下来,设置你的[编程 Agent 集成](#coding-agent-integration) —— 或者如果你更喜欢直接控制,可以跳转到[手动 CLI 使用](#manual-cli-usage)。 ## 编程 Agent 集成 ### Skill(推荐) 安装 `ccc` skill,让你的编程 Agent 在需要时自动使用语义搜索: ``` npx skills add cocoindex-io/cocoindex-code ``` 就是这样 —— 不需要执行 `ccc init` 或 `ccc index`。该 skill 会教 Agent 自行处理初始化、索引和搜索。在你工作时,它会自动保持索引最新。 Agent 在有帮助时会自动使用语义搜索。你也可以明确引导它 —— 只需让它搜索代码库,例如*“查找用户会话是如何管理的”*,或者输入 `/ccc` 直接调用该 skill。 适用于 [Claude Code](https://docs.anthropic.com/en/docs/claude-code) 及其他兼容 skill 的 Agent。 #### Claude Code 插件市场 对于 Claude Code 用户,此仓库也是一个[插件市场](https://code.claude.com/docs/en/plugin-marketplaces)。在 Claude Code 中使用以下命令安装该 skill: ``` /plugin marketplace add Roxabi/cocoindex-code /plugin install cocoindex-code@cocoindex-code ``` 这捆绑了相同的 `ccc` skill,支持版本固定以及通过 `/plugin marketplace update` 进行更新。 ### MCP 服务器 或者,使用 `ccc mcp` 作为 MCP 服务器运行:
Claude Code ``` claude mcp add cocoindex-code -- ccc mcp ```
Codex ``` codex mcp add cocoindex-code -- ccc mcp ```
OpenCode ``` opencode mcp add ``` 输入 MCP 服务器名称:`cocoindex-code` 选择 MCP 服务器类型:`local` 输入运行命令:`ccc mcp` 或者使用 opencode.json: ``` { "$schema": "https://opencode.ai/config.json", "mcp": { "cocoindex-code": { "type": "local", "command": [ "ccc", "mcp" ] } } } ```
配置完成后,Agent 会自动判断何时使用语义代码搜索是有帮助的 —— 例如根据描述查找代码、探索不熟悉的代码库、模糊/概念匹配,或者在不知道确切名称的情况下定位实现。
MCP 工具参考 当作为 MCP 服务器(`ccc mcp`)运行时,会暴露以下工具: **`search`** —— 使用语义相似度搜索代码库。 ``` search( query: str, # Natural language query or code snippet limit: int = 5, # Maximum results (1-100) offset: int = 0, # Pagination offset refresh_index: bool = True, # Refresh index before querying languages: list[str] | None = None, # Filter by language (e.g. ["python", "typescript"]) paths: list[str] | None = None, # Filter by path glob (e.g. ["src/utils/*"]) ) ``` 返回匹配的代码块,包含文件路径、语言、代码内容、行号和相似度得分。
## 手动 CLI 使用 你也可以直接使用 CLI —— 适用于手动控制、在更改设置后运行索引、检查状态或在 Agent 外部进行搜索。 ``` ccc init # initialize project (creates settings) ccc index # build the index ccc search "authentication logic" # search! ``` 后台 daemon 会在首次使用时自动启动。 ### CLI 参考 | 命令 | 描述 | |---------|-------------| | `ccc init` | 初始化项目 —— 创建设置文件,将 `.cocoindex_code/` 添加到 `.gitignore` | | `ccc index` | 构建或更新索引(如有需要会自动初始化)。显示流式进度。 | | `ccc search ` | 跨代码库的语义搜索 | | `ccc status` | 显示索引统计信息(代码块数、文件数、语言细分) | | `ccc mcp` | 在 stdio 模式下作为 MCP 服务器运行 | | `ccc doctor` | 运行诊断 —— 检查设置、daemon、模型、文件匹配和索引健康状况 | | `ccc reset` | 删除索引数据库。`--all` 同时移除设置。`-f` 跳过确认。 | | `ccc daemon status` | 显示 daemon 版本、运行时间和已加载的项目 | | `ccc daemon restart` | 重启后台 daemon | | `ccc daemon stop` | 停止 daemon | ### 搜索选项 ``` ccc search database schema # basic search ccc search --lang python --lang markdown schema # filter by language ccc search --path 'src/utils/*' query handler # filter by path ccc search --offset 10 --limit 5 database schema # pagination ccc search --refresh database schema # update index first, then search ``` 默认情况下,`ccc search` 会将结果范围限制在你当前的工作目录(相对于项目根目录)。使用 `--path` 可进行覆盖。 ## Docker 我们为希望获得可重现、无依赖设置的团队提供了 Docker 镜像 —— 宿主机上不需要 Python、`uv` 或任何系统依赖。 推荐的方法是使用**持久化容器**:启动一次,然后使用 `docker exec` 运行 CLI 命令或将 MCP 会话连接到它。内部的 daemon 在跨会话期间保持热状态,因此 embedding 模型只需加载一次。 ### 选择镜像 每次发布都会发布两个版本: | 标签 | 大小 | Embedding 后端 | 适用场景 | |---|---|---|---| | `cocoindex/cocoindex-code:latest` (slim,默认) | ~450 MB | LiteLLM(云端:OpenAI、Voyage、Gemini、Ollama 等) | 大多数用户。基于云端的 embedding,镜像更小,拉取速度快。 | | `cocoindex/cocoindex-code:full` | ~5 GB | sentence-transformers (本地) + LiteLLM | 当你希望在没有 API key 的情况下进行本地 embedding,或者需要一个可离线运行的容器时。由于包含 torch + transformers,体积较大。 | 本节的其余部分使用 `:latest` —— 如果你想要完整版,请在 `image:` / `docker run` 命令中替换为 `:full`。 ### 快速开始 —— `docker compose up -d` 一行命令即可启动 —— 无需克隆仓库(bash / zsh): ``` # macOS / Windows docker compose -f <(curl -L https://raw.githubusercontent.com/cocoindex-io/cocoindex-code/refs/heads/main/docker/docker-compose.yml) up -d # Linux (将 bind-mounted paths 上的文件所有权与您的主机用户对齐) PUID=$(id -u) PGID=$(id -g) docker compose -f <(curl -L https://raw.githubusercontent.com/cocoindex-io/cocoindex-code/refs/heads/main/docker/docker-compose.yml) up -d ``` 或者下载 [`docker/docker-compose.yml`](./docker/docker-compose.yml) 并在其目录下运行 `docker compose up -d`(适用于任何 shell,包括 Windows cmd / PowerShell)。 默认情况下,你的主目录会被挂载到容器中(设置 `COCOINDEX_HOST_WORKSPACE` 可将其缩小到特定的代码文件夹)。索引数据和 embedding 模型缓存会在重启后持久化保存在 Docker volume 中。位于 `$HOME/.cocoindex_code/global_settings.yml` 的全局设置文件在宿主机上可见且可编辑;修改将在你下一次执行 `ccc` 命令时生效。 ### 或者:`docker run`
Docker Desktop (macOS / Windows) ``` docker run -d --name cocoindex-code \ --volume "$HOME:/workspace" \ --volume cocoindex-data:/var/cocoindex \ -e COCOINDEX_CODE_HOST_PATH_MAPPING="/workspace=$HOME" \ cocoindex/cocoindex-code:latest ```
Linux (包含 PUID/PGID) ``` docker run -d --name cocoindex-code \ -e PUID=$(id -u) -e PGID=$(id -g) \ --volume "$HOME:/workspace" \ --volume cocoindex-data:/var/cocoindex \ -e COCOINDEX_CODE_HOST_PATH_MAPPING="/workspace=$HOME" \ cocoindex/cocoindex-code:latest ```
### 用于 `ccc` 命令的 Shell 包装器 将此粘贴到 `~/.bashrc` / `~/.zshrc` 中,以便 `ccc` 在宿主机上感觉像原生的一样,并根据你当前的目录选取正确的项目: ``` ccc() { docker exec -it -e COCOINDEX_CODE_HOST_CWD="$PWD" cocoindex-code ccc "$@" } ``` 现在 `cd` 进入工作区下的任何项目并运行 `ccc init`、`ccc index`、`ccc search ...`、`ccc status` 等命令 —— 一切就绪。 ### 连接你的编程 Agent
Claude Code 在目标项目内部注册 MCP,以便 `$PWD` 指向该项目: ``` claude mcp add cocoindex-code -- docker exec -i \ -e COCOINDEX_CODE_HOST_CWD="$PWD" cocoindex-code ccc mcp ``` 或者通过 `.mcp.json`: ``` { "mcpServers": { "cocoindex-code": { "type": "stdio", "command": "docker", "args": [ "exec", "-i", "-e", "COCOINDEX_CODE_HOST_CWD=${PWD}", "cocoindex-code", "ccc", "mcp" ] } } } ```
Codex ``` codex mcp add cocoindex-code -- docker exec -i \ -e COCOINDEX_CODE_HOST_CWD="$PWD" cocoindex-code ccc mcp ```
### 从旧版镜像升级 早期版本使用单独的 `cocoindex-db` 和 `cocoindex-model-cache` volume;当前镜像将它们整合到了一个 `cocoindex-data` volume 中。在拉取新镜像之前,删除旧的容器和 volume —— 索引将在你下一次执行 `ccc index` 时重建,而 embedding 模型会在首次启动时自动重新填充: ``` docker rm -f cocoindex-code docker volume rm cocoindex-db cocoindex-model-cache ``` ### 通过环境变量进行配置 使用 `-e` 将配置传递给 `docker run` / compose: ``` # 额外扩展 (例如 Typesafe Config, SBT build files) -e COCOINDEX_CODE_EXTRA_EXTENSIONS="conf,sbt" # 排除 build artefacts (Scala/SBT 示例) -e COCOINDEX_CODE_EXCLUDE_PATTERNS='["**/target/**","**/.bloop/**","**/.metals/**"]' # 设置 API key -e VOYAGE_API_KEY=your-key ``` ### 在本地构建镜像 ``` docker build -t cocoindex-code:local -f docker/Dockerfile . ``` ## 功能 - **语义代码搜索**:当 grep 不太好用时,使用自然语言查询查找相关代码,并立即节省 token。 - **超高性能**:⚡ 基于超高性能的 [Rust 索引引擎](https://github.com/cocoindex-io/cocoindex) 构建。仅重新索引已更改的文件,以实现快速更新。 - **多语言支持**:Python、JavaScript/TypeScript、Rust、Go、Java、C/C++、C#、SQL、Shell 等。 - **嵌入式**:便携且开箱即用,无需设置数据库! - **灵活的 Embedding**:通过 `[full]` 额外依赖包使用本地 SentenceTransformers(免费,无需 API key!),或通过 LiteLLM 使用 100 多个云提供商。 ## 配置 有关选择和配置 embedding 模型的详细指南,请参阅 [EMBEDDINGS.md](EMBEDDINGS.md)。 配置存在于两个 YAML 文件中,均由 `ccc init` 自动创建。 ### 用户设置 (`~/.cocoindex_code/global_settings.yml`) 在所有项目之间共享。控制 embedding 模型和 daemon 的环境变量。 ``` embedding: provider: sentence-transformers # or "litellm" model: Snowflake/snowflake-arctic-embed-xs device: mps # optional: cpu, cuda, mps (auto-detected if omitted) min_interval_ms: 300 # optional: pace LiteLLM embedding requests to reduce 429s; defaults to 5 for LiteLLM # Optional extra kwargs passed to the embedder, separately for indexing vs query. # `ccc init` auto-populates these for known models (e.g. Cohere, Voyage, Nvidia NIM, # nomic-ai code-retrieval models, Snowflake arctic-embed). # indexing_params: # input_type: search_document # litellm: input_type # query_params: # input_type: search_query # sentence-transformers: prompt_name envs: # extra environment variables for the daemon OPENAI_API_KEY: your-key # only needed if not already in your shell environment ``` #### `indexing_params` / `query_params` 某些 embedding 模型为文档和查询暴露不同的模式(非对称检索)。例如,Cohere 的 v3 模型在 embedding 语料库内容时需要 `input_type: search_document`,在 embedding 用户查询时需要 `input_type: search_query`;一些 SentenceTransformers 模型处于相同目的使用 `prompt_name: passage` / `prompt_name: query`。这些旋钮位于 `indexing_params` 和 `query_params` 下: ``` embedding: provider: litellm model: cohere/embed-english-v3.0 indexing_params: input_type: search_document query_params: input_type: search_query ``` `ccc init` 会为它识别的模型自动填充这些内容 —— 包括所有 Cohere v3、Voyage、Nvidia NIM、Gemini embedding(`gemini/gemini-embedding-*`、`gemini/text-embedding-*`、`gemini/embedding-*` —— LiteLLM 自动将 `input_type` 映射为 Gemini 的 `task_type`)、`nomic-ai/CodeRankEmbed`、`nomic-ai/nomic-embed-code`、`nomic-ai/nomic-embed-text-v1`/`v1.5`、`mixedbread-ai/mxbai-embed-large-v1` 以及 `Snowflake/snowflake-arctic-embed-*` 系列 —— 并打印出所选的默认值。对于其他模型,它会在 `embedding:` 下留下一个被注释掉的模板,以便你手动填写。 OpenAI embedding(`text-embedding-3-*`、`text-embedding-ada-002`)有意不在列表中:它们是对称的,没有等效的旋钮。 **接受的键:** `prompt_name` (sentence-transformers) 和 `input_type` (litellm)。其他键会在 daemon 启动时被拒绝并给出明确的错误。注意:`dimensions` 在此处不暴露 —— 输出维度对于索引和查询必须相同,因此它是一个全局模型设置,而不是按端设置的旋钮。 **Doctor 会检查两端。** `ccc doctor` 会分别使用 `indexing_params` 和 `query_params` 测试模型,分别报告为单独的 `Model Check (indexing)` / `Model Check (query)` 条目 —— 这样一侧的配置错误就可以被独立诊断出来,而不会被另一侧掩盖。 **旧版兼容警告:** 如果你从较早的版本升级,并且你的 `global_settings.yml` 使用了 `nomic-ai/CodeRankEmbed` 或 `nomic-ai/nomic-embed-code` 而没有 `indexing_params` / `query_params`,daemon 将继续应用以前的行为(在查询时使用 `prompt_name: query`),并打印一次性警告,要求你明确设置。你可以通过添加一个空块(例如 `query_params: {}`)来消除该警告。 ### 项目设置 (`/.cocoindex_code/settings.yml`) 针对特定项目。控制要索引哪些文件。 ``` include_patterns: - "**/*.py" - "**/*.js" - "**/*.ts" - "**/*.rs" - "**/*.go" # ... (sensible defaults for 28+ file types) exclude_patterns: - "**/.*" # hidden directories - "**/__pycache__" - "**/node_modules" - "**/dist" # ... language_overrides: - ext: inc # treat .inc files as PHP lang: php chunkers: - ext: toml # use a custom chunker for .toml files module: example_toml_chunker:toml_chunker ``` 当你想要在索引之前控制如何将文件类型拆分为代码块时,请使用 `chunkers`。 `module: example_toml_chunker:toml_chunker` 表示: - `example_toml_chunker` 是一个本地 Python 模块 - `toml_chunker` 是该模块内的函数 在实践中,这通常意味着: - 你在你的项目中创建了一个 Python 文件,例如 `example_toml_chunker.py` - 你在该文件中添加了一个函数 - 你使用 `module.path:function_name` 让 `settings.yml` 指向它 该函数应使用此签名: ``` from pathlib import Path from cocoindex_code.chunking import Chunk def my_chunker(path: Path, content: str) -> tuple[str | None, list[Chunk]]: ... ``` - `path` 是正在被索引的文件 - `content` 是该文件的完整文本 - 如果你想覆盖语言检测,请返回作为字符串的 `language_override`,例如 `"toml"` - 如果你想保留检测到的语言,请返回 `None` 作为 `language_override` - 返回一个包含你想存储在索引中的代码块的 `list[Chunk]` 有关公共类型请参阅 [`src/cocoindex_code/chunking.py`](./src/cocoindex_code/chunking.py),完整示例请参阅 [`tests/example_toml_chunker.py`](./tests/example_toml_chunker.py)。 ## Embedding 模型 安装了 `[full]` 额外依赖包后,`ccc init` 默认使用本地 SentenceTransformers 模型([Snowflake/snowflake-arctic-embed-xs](https://huggingface.co/Snowflake/snowflake-arctic-embed-xs)) —— 无需 API key。要使用不同的模型,请编辑 `~/.cocoindex_code/global_settings.yml`。
Ollama (本地) ``` embedding: model: ollama/nomic-embed-text ``` 如果你的 Ollama 服务器不在 `http://localhost:11434`,请在 `envs:` 下设置 `OLLAMA_API_BASE`。
OpenAI ``` embedding: model: text-embedding-3-small min_interval_ms: 300 # optional: override the 5ms LiteLLM default envs: OPENAI_API_KEY: your-api-key ```
OpenAI 兼容 (自定义 endpoint) 许多提供商(vLLM、LM Studio、LocalAI、Together、Fireworks、DeepInfra 等)都暴露了兼容 OpenAI 的 embedding API。使用 `openai/` 前缀并将 `OPENAI_BASE_URL` 指向你的 endpoint: ``` embedding: model: openai/your-model-name envs: OPENAI_BASE_URL: https://your-endpoint/v1 OPENAI_API_KEY: your-api-key ``` 不要在 base URL 后追加 `/embeddings` —— LiteLLM 会自动处理。
Azure OpenAI ``` embedding: model: azure/your-deployment-name envs: AZURE_API_KEY: your-api-key AZURE_API_BASE: https://your-resource.openai.azure.com AZURE_API_VERSION: "2024-06-01" ```
Gemini ``` embedding: model: gemini/gemini-embedding-001 envs: GEMINI_API_KEY: your-api-key ```
Mistral ``` embedding: model: mistral/mistral-embed envs: MISTRAL_API_KEY: your-api-key ```
Voyage (针对代码优化) ``` embedding: model: voyage/voyage-code-3 envs: VOYAGE_API_KEY: your-api-key ```
Cohere ``` embedding: model: cohere/embed-v4.0 envs: COHERE_API_KEY: your-api-key ```
AWS Bedrock ``` embedding: model: bedrock/amazon.titan-embed-text-v2:0 envs: AWS_ACCESS_KEY_ID: your-access-key AWS_SECRET_ACCESS_KEY: your-secret-key AWS_REGION_NAME: us-east-1 ```
Nebius ``` embedding: model: nebius/BAAI/bge-en-icl envs: NEBIUS_API_KEY: your-api-key ```
任何 [LiteLLM 支持的模型](https://docs.litellm.ai/docs/embedding/supported_embedding)均可使用。使用 LiteLLM 模型时,请设置 `provider: litellm`(或忽略 `provider` —— 对于非 `sentence-transformers` 模型,LiteLLM 是默认值)。有关每个提供商读取的完整环境变量列表(API key、base URL、区域等),请参阅 LiteLLM 的[设置 API Keys](https://docs.litellm.ai/docs/set_keys)。 ### 本地 SentenceTransformers 模型 设置 `provider: sentence-transformers` 并使用任何 [SentenceTransformers](https://www.sbert.net/) 模型(无需 API key)。 **示例 —— 通用文本模型:** ``` embedding: provider: sentence-transformers model: nomic-ai/nomic-embed-text-v1.5 ``` **GPU 优化的代码检索:** [`nomic-ai/CodeRankEmbed`](https://huggingface.co/nomic-ai/CodeRankEmbed) 提供了比默认模型显著更好的代码检索效果。它具有 1.37 亿参数,需要约 1 GB 的 VRAM,并具有 8192 token 的上下文窗口。 ``` embedding: provider: sentence-transformers model: nomic-ai/CodeRankEmbed ``` **注意:** 切换模型需要重新索引你的代码库(`ccc reset && ccc index`),因为向量维度不同。 ## 支持的语言 | 语言 | 别名 | 文件扩展名 | |----------|---------|-----------------| | c | | `.c` | | cpp | c++ | `.cpp`, `.cc`, `.cxx`, `.h`, `.hpp` | | csharp | csharp, cs | `.cs` | | css | | `.css`, `.scss` | | dtd | | `.dtd` | | fortran | f, f90, f95, f03 | `.f`, `.f90`, `.f95`, `.f03` | | go | golang | `.go` | | html | | `.html`, `.htm` | | java | | `.java` | | javascript | js | `.js` | | json | | `.json` | | kotlin | | `.kt`, `.kts` | | lua | | `.lua` | | markdown | md | `.md`, `.mdx` | | pascal | pas, dpr, delphi | `.pas`, `.dpr` | | php | | `.php` | | python | | `.py` | | r | | `.r` | | ruby | | `.rb` | | rust | rs | `.rs` | | scala | | `.scala` | | solidity | | `.sol` | | sql | | `.sql` | | svelte | | `.svelte` | | swift | | `.swift` | | toml | | `.toml` | | tsx | | `.tsx` | | typescript | ts | `.ts` | | vue | | `.vue` | | xml | | `.xml` | | yaml | | `.yaml`, `.yml` | ### 自定义数据库位置 默认情况下,索引数据库(`cocoindex.db` 和 `target_sqlite.db`)与设置文件一起存放在 `/.cocoindex_code/` 中。在 Docker 中运行时,出于性能考虑(LMDB 在挂载的卷上运行不佳),你可能希望将数据库放置在容器的原生文件系统上,同时将源代码和设置保留在挂载的卷上。 设置 `COCOINDEX_CODE_DB_PATH_MAPPING` 可通过路径前缀重新映射数据库位置: ``` COCOINDEX_CODE_DB_PATH_MAPPING=/workspace=/db-files ``` 使用此映射,位于 `/workspace/myrepo` 的项目会将其数据库存储在 `/db-files/myrepo/` 中,而不是 `/workspace/myrepo/.cocoindex_code/`。设置文件将保留在原始位置。 多个映射以逗号分隔并按顺序解析(匹配优先者生效): ``` COCOINDEX_CODE_DB_PATH_MAPPING=/workspace=/db-files,/workspace2=/db-files2 ``` 源路径和目标路径都必须是绝对路径。如果没有匹配的映射,则使用默认位置。 ## 故障排除 运行 `ccc doctor` 来诊断常见问题。它会检查你的设置、daemon 健康状况、embedding 模型、文件匹配和索引状态 —— 所有操作只需一条命令。 ### `sqlite3.Connection object has no attribute enable_load_extension` 某些 Python 安装(例如 macOS 上预装的版本)附带的 SQLite 库未启用扩展功能。 **macOS 修复:** 通过 [Homebrew](https://brew.sh/) 安装 Python: ``` brew install python3 ``` 然后重新安装 cocoindex-code(安装选项请参阅[开始使用](#get-started--zero-config-lets-go)): 使用 pipx: ``` pipx install cocoindex-code # first install pipx upgrade cocoindex-code # upgrade ``` 使用 uv(安装或升级): ``` uv tool install --upgrade cocoindex-code ``` ### `MDB_MAP_FULL: Environment mapsize limit reached` 索引存储在 LMDB 数据库中,其最大空间在 daemon 启动时已固定。默认上限为 **4 GiB**,这对大多数项目来说已经足够,但对于非常庞大的代码库(数以万计的文件),特别是使用像 `nomic-ai/CodeRankEmbed` 这样的高维度 embedding 模型时,可能会耗尽空间。 使用 `COCOINDEX_LMDB_MAP_SIZE` 环境变量(值以**字节**为单位)提高上限。LMDB 仅在写入数据时才会增加文件大小,因此设置一个较高的上限并不会预分配磁盘空间 —— 你可以放心地设置得宽裕一些: ``` # ~/.cocoindex_code/global_settings.yml envs: COCOINDEX_LMDB_MAP_SIZE: "34359738368" # 32 GiB (= 32 * 1024^3) ``` 或者,如果你更喜欢在 shell 环境中设置它(daemon 会继承它): ``` export COCOINDEX_LMDB_MAP_SIZE=$((32 * 1024 * 1024 * 1024)) # 32 GiB ``` map size 是在 daemon 启动时读取的,因此重启它以使更改生效,然后重新索引: ``` ccc daemon restart ccc index ``` ## 旧版:环境变量 如果你之前是通过环境变量配置 `cocoindex-code` 的,`cocoindex-code` 的 MCP 命令仍然会读取它们,并在首次运行时自动迁移到 YAML 设置。对于新的设置,我们建议切换到 YAML 配置。 | 环境变量 | YAML 等效项 | |---------------------|-----------------| | `COCOINDEX_CODE_EMBEDDING_MODEL` | `global_settings.yml` 中的 `embedding.model` | | `COCOINDEX_CODE_DEVICE` | `global_settings.yml` 中的 `embedding.device` | | `COCOINDEX_CODE_ROOT_PATH` | 改为在你的项目根目录中运行 `ccc init` | | `COCOINDEX_CODE_EXCLUDED_PATTERNS` | 项目 `settings.yml` 中的 `exclude_patterns` | | `COCOINDEX_CODE_EXTRA_EXTENSIONS` | 项目 `settings.yml` 中的 `include_patterns` + `language_overrides` | ## 遥测 `cocoindex-code` 通过 CocoIndex 发送匿名的使用遥测数据,以便我们了解该工具的总体使用情况并优先考虑改进方向。这些事件会标明自己为 `application: cocoindex-code`。 我们**绝不会**收集你的源代码、文件路径、查询、搜索结果、embedding、设置或来自你代码库或环境的任何其他内容。 要选择退出,请设置: ``` export COCOINDEX_DISABLE_USAGE_TRACKING=1 ``` ## 大型代码库 / 企业版 [CocoIndex](https://github.com/cocoindex-io/cocoindex) 是一款极其高效的索引引擎,对于企业的大型代码库,它也能实现规模化运作。在企业场景中,当存在大型或众多代码仓库时,与团队成员共享索引会高效得多。我们还有诸如分支去重等专为企业用户设计的高级功能。 如果你在远程设置方面需要帮助,请发送电子邮件给我们的维护者 linghua@cocoindex.io,很乐意为你提供帮助! ## 贡献 我们欢迎各种形式的贡献!该项目使用 [uv](https://docs.astral.sh/uv/getting-started/installation/) 进行开发,并且每个 PR 都必须通过 CI 中相同的 lint、格式化、类型检查和测试套件。**请在打开 PR 之前在本地运行这些检查** —— pre-commit 检查失败是传入 PR 出现 CI 报错的最常见原因。 ### 1. 安装开发依赖 安装 [uv](https://docs.astral.sh/uv/getting-started/installation/) 后,同步项目。这将安装检查所需的所有内容 —— 包括 [prek](https://github.com/j178/prek)(一个快速的 pre-commit 运行器),以及 Ruff、mypy 和 pytest: ``` uv sync ``` ### 2. 在每次 PR 之前运行所有检查 对所有文件运行完整的 hook 套件 —— 这正是 CI 运行的内容: ``` uv run prek run --all-files ``` 它会运行行尾空格/文件末尾修复、Ruff lint (`--fix`) 和格式化、`uv.lock` 验证、mypy 类型检查以及 pytest 测试套件。修复它报告的任何问题(Ruff 会为你自动修复大多数 lint/格式问题),重新运行直到通过,然后再进行 push。 ### 3. (可选)在每次提交时自动运行 要在每次 `git commit` 时运行相同的检查,请安装一次 git hook: ``` uv run prek install ``` 有关更多详细信息,请参阅我们的[贡献指南](https://cocoindex.io/docs/contributing/guide)。 ## 许可证 Apache-2.0
标签:AI编程助手, CLI, MCP, Rust, SOC Prime, WiFi技术, 代码搜索, 可视化界面, 开发工具, 网络流量审计, 请求拦截, 逆向工具