Void Stack
[](https://github.com/Mague/void-stack/actions/workflows/ci.yml)
[](https://github.com/Mague/void-stack/actions/workflows/release.yml)
[](https://github.com/Mague/void-stack/releases/latest)
[](LICENSE)
[](https://www.rust-lang.org/)
[]()
[]()
**手头有 10 个包含后端、前端、Worker 和数据库的项目,却记不清该怎么启动它们?**
Void Stack 解决了这个问题。只需一条命令即可启动你的整个开发技术栈——后端、前端、数据库、Worker——无论在 Windows、WSL 还是 Docker 环境中。无需死记端口号,无需打开 5 个终端窗口,无需翻阅过时的 README。
```
void add my-app F:\projects\my-app # Auto-detects services
void start my-app # Starts everything
```
就这么简单。Void Stack 会扫描你的项目,检测你正在使用的框架(FastAPI, Vite, Express, Django...),生成正确的命令并运行它们。如果存在 Python venv,它会自动找到。如果缺少 `node_modules`,它会提示你。
**[Leer en español](README.es.md)** | **[void-stack.dev](https://void-stack.dev)**
## 自产自销:Void Stack 分析自身
Void Stack 使用自身的分析和审计工具来维护其代码库的质量。以下是在项目自身运行 `void analyze void-stack --compare` 和 `void audit void-stack` 所发现的问题——以及我们如何利用这些发现来改进代码:
### 安全审计
```
void audit void-stack
# 风险评分:2/100
# 2 个低危发现(innerHTML 使用 — 已通过 DOMPurify 缓解)
```
初始审计发现了 6 个问题(风险评分 25/100),但其中 4 个是误报——检测代码中的正则表达式模式和模板被标记为“密钥”。这促使我们添加了智能误报过滤(自引用文件白名单、正则表达式元字符检测、模板行过滤),将误报率从 83% 降至 0%。
### 代码分析
```
void analyze void-stack --compare
# 模式:Layered(80% 置信度)
# 214 个模块,32,453 LOC,37 个外部依赖
# 最大复杂度:152(i18n en/es — 数据表,非逻辑)
# 反模式:26 个(4 个中等 God Class,13 个 Fat Controller,8 个 Excessive Coupling)
```
驱动重构的发现:
| 发现 | 采取的行动 |
|---------|-------------|
| God Class: `cli/main.rs` (1202 LOC, 25 fn) | 拆分为 6 个命令模块(主模块约 250 LOC) |
| God Class: `mcp/server.rs` (1197 LOC, 35 fn) | 拆分为 10 个工具模块(服务器约 340 LOC) |
| God Class: `manager.rs` (30 fn) | 拆分为 4 个子模块(process, state, logs, url) |
| God Class + Fat Controller: `vuln_patterns.rs` (789 LOC) | 拆分为 5 个类别模块 |
| God Class: `db_models.rs` (1065 LOC) | 按 DB 格式拆分为 7 个子模块 |
| God Class: `generate_dockerfile.rs` (821 LOC) | 按语言拆分为 6 个子模块 |
| God Class: `api_routes.rs` (747 LOC) | 按协议拆分为 5 个子模块 |
| God Class: `architecture.rs` (788 LOC) | 拆分为 4 个子模块 |
| God Class: `classifier.rs` (759 LOC, 44 fn) | 拆分为 3 个子模块 |
| Fat Controller: `cli/analysis.rs` (580 LOC) | 拆分为 4 个子模块 |
| CC=42: `analyze_best_practices` | 表驱动 linter 注册表 (CC ~15) |
| CC=41: `cmd_analyze` | 提取了 11 个辅助函数 (CC ~10) |
### 技术债务追踪
```
void analyze void-stack --compare --label v0.23.6
# 模式:Layered(80% 置信度)
# 覆盖率:80.5%(最新 lcov 快照)
# 显式技术债务:34 个标记(TODO: 11, TEMP: 10, OPTIMIZE: 6, BUG: 3, XXX: 2, FIXME: 1, HACK: 1)
# 960 个测试通过(936 个核心 + 21 个 analyzer + 3 个 mcp)
```
v0.22.0 新增:现在会从源代码注释中扫描显式的债务标记,并显示在 CLI 输出、Markdown 报告和桌面端的 Debt 标签页中。复杂函数(CC≥10)会与覆盖率数据进行交叉对比——未覆盖的关键函数在 CLI 中会收到 `[!]` 警告,在 Markdown 中会显示 🔴 指示器。
## 混合上下文引擎 — 语义 + 结构
大多数 AI 工具迫使你做出选择:语义搜索(查找相关概念)或结构化图(追踪调用链)。Void Stack 将两者结合。向量嵌入寻找*概念上相关的内容*。Tree-sitter 图显示*结构上会受影响而崩溃的部分*。结果是:精准的上下文,这是任何单一方法的工具都无法比拟的。
| 方法 | 查询 | 结果 |
|---|---|---|
| **仅语义** | "auth middleware flow" | 概念相关的代码块 |
| **仅结构** | "callers of validateToken" | 直接调用链 |
| **混合** | 两者同时进行 | 相关代码块 + 影响范围 |
Void Stack 使用 BAAI/bge-small-en-v1.5 嵌入在本地为你的代码库建立索引,并构建 Tree-sitter 调用图——因此你的 AI 助手只需阅读关键内容,而无需扫描每一个文件。
### 工作原理
```
# 索引一次(在后台运行,250 个文件约 30 秒)
void index my-project
# 按概念搜索,而非按文件名
void search my-project "authentication middleware flow"
# 返回 3-5 个最相关的代码块 — 而非整个文件
# 由 git 驱动的增量重新索引,而非时间戳
void index my-project --git-base HEAD~1 # only files changed since last commit
void index my-project --force # full rebuild
# 从 Claude Desktop / Claude Code 通过 MCP:
# build_structural_graph my-project (Tree-sitter,10 种语言)
# get_impact_radius my-project (blast radius BFS)
# query_graph my-project callers (谁调用了此函数)
# watch_project my-project (保存时自动重新索引)
# install_index_hook my-project (post-commit 重新索引)
```
### 基准测试(在 void-stack 自身上测量)
| 操作 | 无索引 | 使用 void-stack | 减少量 |
|-----------|-------------:|----------------:|----------:|
| `semantic_search` (avg) | ~170 行 / 文件 | ~4 行 / 结果 | **97.5 %** |
| 理解一个模块 | 5-10 次文件读取 | 1 次搜索查询 | **~10x** |
| 更改的影响范围 | 手动,数小时 | `get_impact_radius` | **即时** |
*97.5 % 的数据由 `void stats --days 90` 在 135 次 `semantic_search` 操作中报告——有 23,868 行源代码从未进入 LLM 上下文。*
### 支持的语言
- **语义索引** (embeddings): `CODE_EXTENSIONS` 中的所有源文件扩展名——Rust, Python, JS/TS, Go, Dart, Java, PHP, C/C++, Ruby, Swift, Kotlin, Lua, Zig, Elixir, Vue, Svelte, Astro,以及 `md`/`proto`/`sql`/`dockerfile`。
- **结构化图** (Tree-sitter): Rust, Python, JavaScript, TypeScript (+ TSX), Go, Dart, Java, PHP, C, C++。
结构分析灵感来自 [code-review-graph](https://github.com/tirth8205/code-review-graph) (MIT)——AST 节点映射和 BFS 查询逻辑已使用 Rust 原生重新实现。
## 接口
Void Stack 具有 **4 个接口**——你可以根据自己的偏好使用:
| 接口 | 描述 |
|-----------|-------------|
| **CLI** (`void`) | 终端中的快速命令 |
| **TUI** (`void-stack-tui`) | 交互式终端仪表盘:服务、分析、安全审计、债务、空间 |
| **Desktop** (`void-stack-desktop`) | 带有 GUI 的桌面应用 (Tauri + React)——Windows (.msi), macOS (.dmg), Linux (.deb) |
| **MCP Server** (`void-stack-mcp`) | 与 Claude Desktop / Claude Code 集成 |
## 端到端示例:30 秒搞定 FastAPI + React
假设你有一个包含 FastAPI 后端和 React 前端的项目:
```
my-app/
├── backend/ # FastAPI with venv
│ ├── main.py # from fastapi import FastAPI
│ └── .venv/
├── frontend/ # React with Vite
│ ├── package.json
│ └── src/
└── .env
```
```
# 1. 注册项目(扫描并检测服务)
void add my-app F:\projects\my-app
# Void Stack 检测到:
# ✓ backend → uvicorn main:app --host 0.0.0.0 --port 8000
# ✓ frontend → npm run dev
# ✓ .venv → 自动将 python 解析到 virtualenv
# 2. 检查依赖项
void check my-app
# ✅ Python 3.11(检测到 venv)
# ✅ Node 20.x(node_modules 是最新的)
# ✅ .env 与 .env.example 保持一致
# 3. 启动所有服务
void start my-app
# [backend] → http://localhost:8000
# [frontend] → http://localhost:5173
# 4. 或打开交互式仪表板
void-tui my-app
```
## 安装
### 二进制文件(推荐)
从 [Releases](https://github.com/mague/void-stack/releases) 页面下载预构建的二进制文件——无需安装 Rust。
| 平台 | 文件 |
|----------|------|
| Windows | `.msi` / `.exe` (NSIS) |
| macOS | `.dmg` |
| Linux | `.deb` / `.AppImage` |
### 从源码构建
```
# 核心 CLI(主工具)
cargo install --git https://github.com/mague/void-stack void-stack-cli
# TUI 仪表板
cargo install --git https://github.com/mague/void-stack void-stack-tui
# MCP Server(用于与 Claude Desktop / Claude Code 的 AI 集成)
cargo install --git https://github.com/mague/void-stack void-stack-mcp
# gRPC Daemon(可选,用于持久化管理)
cargo install --git https://github.com/mague/void-stack void-stack-daemon
```
**前置条件:** [Rust](https://rustup.rs) + Protobuf 编译器(在 Windows 上使用 `winget install Google.Protobuf`)
### 从源码构建
```
git clone https://github.com/mague/void-stack.git
cd void-stack
# 使用 vector search(推荐):
cargo build --release --features vector
# 最小构建(无 ONNX 依赖):
cargo build --release
# 二进制文件位于 target/release/
# void — CLI
# void-stack-tui — 终端仪表板
# void-stack-daemon — gRPC daemon
# void-stack-mcp — 用于 AI 的 MCP server(始终包含 vector search)
```
### 桌面应用
```
cd crates/void-stack-desktop
cargo tauri build
# 在 target/release/bundle/ 中生成安装程序
```
## 从分析中排除文件
在项目根目录创建 `.voidignore` 以从 `void analyze` 中排除路径:
```
# 生成的代码
internal/pb/
vendor/
**/*.pb.go
**/*.pb.gw.go
# 模拟数据
**/mocks/
**/*_mock.go
```
语法与 `.gitignore` 相同(已简化)。支持前缀路径、`**/` glob 后缀和目录名称。
## 功能特性
- **多服务** — 同时或单独启动/停止所有服务
- **跨平台** — Windows (`cmd`), macOS, WSL (`bash`), Docker 容器, SSH (未来支持)
- **自动检测** — 扫描目录并识别 Python, Node, Rust, Go, Flutter, Docker
- **智能命令** — 检测 FastAPI, Flask, Django, Vite, Next.js, Express, Air (Go 热重载) 并生成正确的命令
- **启动前钩子** — 在启动前自动为每个服务创建 venv、安装依赖(`pip install`, `npm install`, `go mod download`)。开箱即用,无需配置
- **依赖检查** — 验证 Python, Node, CUDA, Ollama, Docker, Rust, `.env`
- **实时日志** — 所有服务的标准输出/错误输出,并自动检测 URL
- **图表** — 使用统一扫描器从项目结构生成 Mermaid 和 Draw.io 图表(架构、带有 Swagger/OpenAPI 丰富的 API 路由、内部/外部 API 分离、gRPC/Protobuf 服务、具有 FK 邻近布局的 DB 模型——Prisma, Sequelize, GORM, Django, SQLAlchemy, Drift)
- **代码分析** — 依赖图、反模式、圈复杂度、覆盖率
- **最佳实践** — 原生 linter(react-doctor, ruff, clippy, golangci-lint, dart analyze)与统一评分
- **技术债务** — 带有趋势比较的指标快照
- **AI 集成** — 为 Claude Desktop / Claude Code 提供 43 个工具的 MCP 服务器;通过 Ollama(本地 LLM)提供 AI 驱动的重构建议,并带有优雅降级。当存在语义索引时,使用复杂度热点和 God Class 中的实际代码片段丰富提示词
- **语义代码搜索** — 使用 BAAI/bge-small-en-v1.5 嵌入在本地索引任何项目(100% 离线,约 130 MB 一次性下载)。`void search` 和 `semantic_search` MCP 工具仅返回相关的代码块——比直接读取文件减少 97.5% 的 token(在 void-stack 自身代码库上通过 135 次查询测量)。
- **结构化调用图** — 由 Tree-sitter 驱动的函数级分析,支持 Rust, Python, JS, TS, Go, Dart, Java, PHP, C 和 C++。持久化到 `.void-stack/structural.db`。影响范围 BFS(`get_impact_radius`)在你修改代码之前回答“如果我更改此文件会影响什么?”。
- **增量索引** — Git diff + SHA-256 哈希:`--git-base HEAD~1` 仅重新索引自上次提交以来实际更改的文件。`watch_project` (MCP) 在保存时以 500 毫秒的防抖自动重新索引;`install_index_hook` (MCP) 连接一个 post-commit 钩子,以便每次提交都保持索引最新。
- **磁盘空间扫描器** — 扫描并清理项目依赖(node_modules, venv, target)和全局缓存(npm, pip, Cargo, Ollama, HuggingFace, LM Studio)
- **桌面 GUI** — 带有赛博朋克任务控制美学的 Tauri 应用,视觉层次结构(KPI 卡片、发光效果、严重性梯度),服务、日志、依赖、图表、分析、文档、安全、债务和磁盘空间
- **Daemon** — 用于持久管理的可选 gRPC 守护进程
- **安全审计** — 依赖漏洞、硬编码密钥、不安全配置、代码漏洞模式(SQL 注入、命令注入、路径遍历、XSS、SSRF 等),带有智能误报过滤(通过大括号深度跟踪跳过自引用检测模式、正则表达式定义、模板、JSX 元素、Git 历史重构提交和测试模块)
- **Docker Runner** — `target = "docker"` 的服务在 Docker 容器内运行。四种模式:原始 Docker 命令、镜像引用(`postgres:16` → 自动 `docker run`)、Compose 自动检测和 Dockerfile 构建。Compose 作为一个单一的 `docker compose up` 服务导入,同时启动所有容器。`docker:` 前缀将 Docker 服务与本地服务分开。支持每个服务的端口、卷和额外参数配置。进程退出监视器检测故障并自动更新状态
- **Docker 智能分析** — 解析 Dockerfile 和 docker-compose.yml,按框架自动生成 Dockerfile(Python,, Rust, Go, Flutter),生成带有自动检测基础设施的 docker-compose.yml
- **基础设施智能分析** — 检测 Terraform 资源(AWS RDS, ElastiCache, S3, Lambda, SQS, GCP Cloud SQL, Azure PostgreSQL)、Kubernetes 清单以及带有依赖关系的 Helm charts——所有这些都会集成到架构图中
- **安全性** — 绝不读取 `.env` 的值;集中的敏感文件保护
## CLI
| 命令 | 描述 |
|---------|-------------|
| `void add
` | 注册项目(自动检测服务) |
| `void add-service -d ` | 手动添加服务 |
| `void remove ` | 取消注册项目 |
| `void list` | 列出项目和服务 |
| `void scan ` | 预览检测而无需注册 |
| `void start [-s service]` | 启动所有或单个服务 |
| `void stop [-s service]` | 停止所有或单个服务 |
| `void status ` | 实时状态:PID, URL, 运行时间 |
| `void check ` | 验证依赖 |
| `void diagram [-f mermaid\|drawio] [--print-content]` | 生成图表 |
| `void audit [-o file]` | 安全审计 |
| `void analyze [--compare] [--cross-project] [--best-practices]` | 代码分析 |
| `void docker [--generate-dockerfile] [--generate-compose] [--save]` | Docker 智能分析 |
| `void suggest [--model ] [--service ] [--raw]` | AI 重构建议 |
| `void read-file ` | 读取任何项目文件(阻止 .env, 凭证) |
| `void logs [-n lines] [--compact] [--raw]` | 显示过滤后的服务日志 |
| `void index [--force] [--generate-voidignore] [--git-base []` | 索引代码库以进行语义搜索(`--git-base HEAD~1` 使用 git diff) |
| `void search "" [-t top_k]` | 语义代码搜索 |
| `void stats [--project ]] [--days ] [--json]` | Token 节省统计 |
| `void claudeignore [--dry-run] [--force]` | 生成针对技术栈优化的 `.claudeignore` |
**标志:** `--wsl` (WSL 路径), `--daemon` (连接到守护进程), `--compare` (比较快照), `--cross-project` (跨项目依赖), `--label ` (标记快照)
### 仅限 MCP 的工具 (Claude Desktop / Claude Code / OpenCode)
这些不是 CLI 命令——它们由 `void-stack-mcp` 暴露:
| 工具 | 描述 |
|------|-------------|
| `watch_project` / `unwatch_project` | 文件更改时自动重新索引(约 500 毫秒防抖) |
| `install_index_hook` | 安装一个 `post-commit` 钩子以重新索引更改的文件 |
| `build_structural_graph` | 跨 10 种语言的 Tree-sitter 调用图——Rust, Python, JS, TS, Go, Dart, Java, PHP, C, C++ (`--features structural`) |
| `get_impact_radius` | 影响范围 BFS——谁/什么会受到文件更改的影响 |
| `query_graph` | 结构化图上的调用者 / 被调用者 / 测试 / 模糊搜索 |
| `full_analysis` | 一份报告中的组合审计 + 架构 + 语义热点 (quick/standard/deep) |
| `manage_suppressions` | 列出/添加/移除审计抑制规则,而无需手动编辑文件 |
| `setup_project` | 一键上手:注册 + 生成 ignores + 索引 + 审计 + 分析 |
## TUI 仪表盘
```
void-tui # All projects
void-tui my-project # Specific project
void-tui --daemon # Via daemon
```
| 按键 | 操作 |
|-----|--------|
| `a` | 启动所有服务 |
| `s` | 启动选中的服务 |
| `k` | 停止选中的服务 |
| `K` | 停止所有 |
| `1`-`5` | 切换标签页 (Services/Analysis/Security/Debt/Space) |
| `R` | 在当前标签页运行操作 (analyze, audit, scan) |
| `j`/`↓` | 向下导航 |
| `l` | 切换日志面板 |
| `Tab` | 切换面板 |
| `r` | 刷新状态 |
| `L` | 切换语言 (ES/EN) |
| `?` | 帮助 |
| `q` | 退出 (停止服务) |
**i18n:** 西班牙语(默认)和英语。按 `L` 进行切换。
**标签页:** Services(管理/监控),Analysis(架构模式、层级、反模式、复杂度 + 覆盖率交叉对比),Security(风险评分、漏洞发现),Debt (TODO/FIXME/HACK 标记),Space(项目 + 全局磁盘使用情况)
## 桌面端
带有深色 GUI 的桌面应用:
- **服务**:带有状态的卡片,自动检测平台,两步删除服务
- **日志**:带有服务选择器和自动滚动的实时日志查看器
- **依赖**:带有状态、版本、修复建议的检查表
- **图表**:Mermaid 渲染 + 原生 Draw.io XML 渲染,用于架构、API 路由、DB 模型
- **分析**:架构模式、反模式、圈复杂度、覆盖率可视化
- **文档**:使用 Markdown 样式渲染项目 README 和文档文件
- **磁盘空间**:扫描项目 + 全局缓存,查看大小,删除以释放空间
- **安全**:风险评分、漏洞发现、密钥检测、配置审计
- **技术债务**:带有趋势比较的指标快照,可展开的详细信息
- **Docker**:解析和分析现有 Docker 产物,生成 Dockerfile 和 docker-compose.yml,保存到项目,检测 Terraform/Kubernetes/Helm 基础设施
- **侧边栏**:项目导航,添加/删除项目,WSL 发行版浏览器
- **用户体验**:结果上的复制按钮,教育性工具提示,图表缩放控件,Material Design 3 排版
## MCP 服务器(AI 集成)
让 Claude Desktop, Claude Code 或 OpenCode 直接管理你的项目。
**Windows** — 添加到 `%APPDATA%\Claude\claude_desktop_config.json`:
```
{
"mcpServers": {
"void-stack": {
"command": "void-stack-mcp.exe"
}
}
}
```
**macOS** — 添加到 `~/Library/Application Support/Claude/claude_desktop_config.json`:
```
{
"mcpServers": {
"void-stack": {
"command": "/Users/YOUR_USERNAME/.cargo/bin/void-stack-mcp"
}
}
}
```
**Linux** — 添加到 `~/.config/Claude/claude_desktop_config.json`:
```
{
"mcpServers": {
"void-stack": {
"command": "void-stack-mcp"
}
}
}
```
**OpenCode**(免费模型——无需 API 密钥)— 添加到 `~/.config/opencode/opencode.json`:
```
{
"mcp": {
"void-stack": {
"type": "local",
"command": ["void-stack-mcp"],
"enabled": true
}
}
}
```
**可用工具 (42):** `list_projects`, `project_status`, `start_project`, `stop_project`, `start_service`, `stop_service`, `get_logs`, `add_project`, `remove_project`, `check_dependencies`, `read_project_docs`, `read_all_docs`, `read_project_file`, `list_project_files`, `generate_diagram`, `analyze_project`, `audit_project`, `scan_directory`, `add_service`, `save_debt_snapshot`, `list_debt_snapshots`, `compare_debt`, `analyze_cross_project`, `scan_project_space`, `scan_global_space`, `docker_analyze`, `docker_generate`, `suggest_refactoring`, `generate_claudeignore`, `generate_voidignore`, `get_token_stats`, `index_project_codebase`, `semantic_search`, `get_index_stats`, `watch_project`, `unwatch_project`, `install_index_hook`, `build_structural_graph`, `get_impact_radius`, `query_graph`, `full_analysis`, `manage_suppressions`
## 依赖检测
| 检测器 | 检查项 |
|----------|--------|
| Python | 二进制文件、版本、venv、`pip check` |
| Node | 二进制文件、`node_modules` 新鲜度 |
| CUDA | `nvidia-smi`、驱动、GPU、VRAM、PyTorch |
| Ollama | 二进制文件、API 健康、已下载的模型 |
| Docker | 二进制文件、守护进程状态、compose |
| Rust | `rustc` 和 `cargo` 版本 |
| Go | `go version`、`go.mod` 存在 |
| Flutter | `flutter --version`、`dart --version`、`pubspec.yaml` |
| .env | 比较 `.env` 与 `.env.example` |
## 代码分析
```
void analyze my-app -o analysis.md
void analyze my-app --compare --label v2.0
void analyze my-app --cross-project
void analyze my-app --best-practices
void analyze my-app --bp-only # Only linters, skip architecture
```
- **模式** — MVC、Layered、Clean/Hexagonal 及其置信度
- **反模式** — God Class、Circular Dependencies、Fat Controllers、Excessive Coupling
- **圈复杂度** — 按函数划分
- **覆盖率** — LCOV, Cobertura, Istanbul, Go 覆盖率配置文件
- **图** — 模块关系的 Mermaid 图
- **趋势** — 带有比较的历史快照
## 图表
```
void diagram my-app # Draw.io (default)
void diagram my-app -f mermaid # Mermaid markdown
```
检测:服务架构、外部服务(通过源代码和 .env 中的 URL 提取)、内部服务到服务调用(通过端口的本地主机交叉引用)、带有 Swagger/OpenAPI 丰富的 API 路由、内部与公共 API 分离、DB 模型、Rust crate 关系。
## 架构
```
void-stack/
├── crates/
│ ├── void-stack-core/ # Core library: models, config, runners, detectors, analyzers
│ ├── void-stack-proto/ # Protobuf definitions + gRPC client
│ ├── void-stack-daemon/ # Daemon with gRPC server (tonic)
│ ├── void-stack-tui/ # Terminal dashboard (ratatui)
│ ├── void-stack-mcp/ # MCP server for AI assistants
│ ├── void-stack-desktop/ # Tauri v2 app (React + TypeScript)
│ └── void-stack-cli/ # CLI interface (clap)
├── example-void-stack.toml
└── CHANGELOG.md
```
## 配置
### `void-stack.toml`(每个项目)
```
name = "my-fullstack-app"
description = "Full stack app"
project_type = "node"
[hooks]
install_deps = true
[[services]]
name = "backend-api"
command = "npm run dev"
target = "wsl"
working_dir = "./backend"
[[services]]
name = "web-frontend"
command = "npm run dev"
target = "windows"
working_dir = "./frontend"
[[services]]
name = "database"
command = "docker compose up postgres redis"
target = "docker"
[[services]]
name = "cache"
command = "redis:7-alpine"
target = "docker"
[services.docker]
ports = ["6379:6379"]
```
### 全局配置
所有项目都存储在特定于平台的位置:
- **Windows:** `%LOCALAPPDATA%\void-stack\config.toml`
- **macOS:** `~/Library/Application Support/void-stack/config.toml`
- **Linux:** `~/.config/void-stack/config.toml`
每个服务都有一个绝对的 `working_dir`,支持 monorepo 和分布式布局。
## 安全
- 读取 `.env` **仅用于获取变量名**——值从不被存储或显示
- 敏感文件(`.env`、`credentials.json`、私钥、`secrets.*`)在分析和 MCP 中被阻止访问
- `security.rs` 中的集中拒绝列表涵盖了所有文件读取路径
## 许可证
本项目基于 [Apache License 2.0](LICENSE) 授权。详情请参见 LICENSE 文件。