内容
# 聚孔
智能桌面IDE。语言无关,操作系统无关。每个表面都是一个可停靠的面板:分割,重新排序,关闭不需要的。内置面板涵盖了大多数工作流程。如果不够,SDK就在那里。
> Tauri 2 · React 18 · Dockview · Monaco · MIT · 无遥测
---
## 演示
https://github.com/user-attachments/assets/a3961bf3-46cd-4168-8e12-9acfcb2bf6b7
---
## 安装
从 [最新版本](https://github.com/evanklem/polypore/releases/latest) 下载适用于您平台的构建版本。聚孔会在首次安装后自行更新。
| 平台 | 文件 |
|---|---|
| Linux | `.AppImage`(任何发行版),`.deb`(Debian/Ubuntu),`.rpm`(Fedora/RHEL) |
| macOS | `.dmg`(Apple Silicon 或 Intel) |
| Windows | `_x64_en-US.msi` 或 `_x64-setup.exe` |
在 Linux 上,AppImage 需要 FUSE(Arch 上的 `fuse2`)。将其标记为可执行并运行:
```sh
chmod +x Polypore_*_amd64.AppImage
./Polypore_*_amd64.AppImage
```
如果要从源代码构建,请参见下面的 [Getting started](#getting-started)。
---
## 理念
智能工具领域发展迅速。正确模型、CLI 和编排模式的转变速度超过了典型 IDE 的发布周期。聚孔的结构设计旨在跟上这一变化。每个表面都是一个沙盒面板,背后有一个共享的契约。IDE 的任何部分都可以被替换、扩展或删除,而无需触及核心。
这不是一个带有智能面板的代码编辑器。布局、内存系统、调试工具和 MCP 服务器都是围绕智能体作为主要参与者而设计的。
---
## 面板
从 `+` 标签按钮可访问八个面板:
| 面板 | 功能 |
|---|---|
| claude | 带有斜杠命令快速启动的 Claude CLI 终端 |
| codex | 带有斜杠命令快速启动的 Codex CLI 终端 |
| preview | 实时运行时输出:浏览器、CLI 或任何开发服务器 |
| editor | 带有每项目诊断的 Monaco 编辑器 |
| diff-stack | 侧边对比和可滚动历史记录 |
| terminal | 独立的 pty 终端 |
| debug | 验证运行和诊断 |
| memory | 具有 `[[wikilinks]]` 和上下文库存的项目知识库 |
| agent | 形成画布、技能、MCP 管理和秘密 |
---
## SDK 和插件
第三方面板是使用与内置面板相同的 `HostRpcServer` 契约的沙盒 iframe。在任何框架中编写插件,将其放入 `.polypore/plugins/<id>/`,它就会出现在面板条中。智能体可以通过 MCP 服务器驱动它,就像驱动内置面板一样。
---
## polypore-ide MCP 服务器
一个 Node MCP 边车随聚孔一起提供。Claude Code 从 `.mcp.json` 自动拾取它。通过 22+ 工具为智能体提供直接的 IDE 控制:
| 命名空间 | 智能体可以执行的操作 |
|---|---|
| `polypore.debug.*` | 启动会话、设置断点、步进、捕获控制台/DOM/网络 |
| `polypore.memory.*` | 读取/写入知识库、链接条目、编写交接文档 |
| `polypore.verify.*` | 声明和运行验证套件 |
| `polypore.tasks.*` | 创建和更新任务,实时在 IDE 中可见 |
| `polypore.phase.*` | 将工作流阶段报告给实时 UI |
| `polypore.secrets.*` | 发出调解的 HTTP 请求,而不查看机密值 |
| `polypore.skills.*` | 读取活动技能库 |
| `polypore.format.*` | 在编辑器中触发格式化程序 |
---
## 机密代理
机密存储在操作系统密钥环中。当聚孔启动智能体时,它会剥离每个注册的机密,并用 `POLYPORE_SECRET_HANDLE_<KEY>` 哨兵替换。智能体使用 HTTP 请求调用 `polypore.secrets.use`;聚孔注入该值,并在返回途中将其掩盖。模型永远不会看到明文。
---
## Polyflow 技能
`packages/polyflow/` 中有 15 个斜杠命令,涵盖了整个开发循环:
`/polyflow` `/polyflow-go` `/polyflow-brainstorming` `/polyflow-writing-plans` `/polyflow-executing-plans` `/polyflow-tdd` `/polyflow-iterate` `/polyflow-debug` `/polyflow-review` `/polyflow-design-interface` `/polyflow-prd` `/polyflow-improve-architecture` `/polyflow-qa` `/polyflow-glossary` `/polyflow-compact`
---
## 技术栈
| | |
|---|---|
| Shell | Tauri 2, Rust |
| Renderer | React 18, Vite, TypeScript |
| 面板 | Dockview |
| 编辑器 | Monaco |
| 终端 | xterm.js, portable-pty |
| MCP 边车 | Node, JSON-RPC |
| 持久性 | SQLite via rusqlite |
| 机密 | OS 密钥环 via `keyring` crate |
| 文件监视 | `notify` |
| 契约 | JSON Schema, codegen'd into `packages/sdk/` |
---
## 入门指南
**先决条件:** Node 20+, Rust stable ([rustup](https://rustup.rs))。Linux 还需要 `libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev`。
```sh
npm ci
cd src-tauri && cargo build && cd ..
npm run app
```
适用于仅限渲染器开发(无 Tauri 桥):
```sh
npm run dev
```
---
## 脚本
| 命令 | |
|---|---|
| `npm run app` | 通过 Tauri 的桌面应用程序 |
| `npm run app:build` | 生产环境打包 |
| `npm run dev` | 在 `127.0.0.1:1420` 上的 Vite 渲染器 |
| `npm run typecheck` | 代码生成 + `tsc --noEmit` |
| `npm test` | vitest 渲染器套件 |
| `npm run mcp` | 针对 cwd 的 MCP 边车 |
| `npm run mcp:smoke` | JSON-RPC 工具/列表冒烟测试 |
| `npm run mcp:pipeline-smoke` | 端到端插件 + 技能 + 机密 |
| `cd src-tauri && cargo test` | Rust 测试 |
| `cargo clippy --no-deps -- -D warnings` | Rust 警告 |
---
## 架构
```
┌────────────────────────────────────────────────────────────────────┐
│ Tauri shell (Rust, src-tauri/) │
│ ├─ host_broker (HTTP) → 发出 Tauri 事件到渲染器 │
│ ├─ secret_broker (HTTP) → OS 密钥环,永不返回明文 │
│ ├─ 智能体运行时 → 每 CLI 的 stdio 适配器;ACP 选择加入 │
│ ├─ pty (portable-pty) ├─ 持久性 (rusqlite) │
│ ├─ snapshotter ├─ fs_watch (notify) │
│ └─ plugin:// 协议 → 提供 .polypore/plugins/<id>/<asset> │
├────────────────────────────────────────────────────────────────────┤
│ 渲染器 (React + Dockview) │
│ ├─ HostRpcServer (packages/host) 所有插件的共享契约 │
│ ├─ PolyporeHost 回环 内置插件使用此 │
│ ├─ PluginLoader 第三方 iframe 使用此 │
│ └─ 内置面板 (plugins/) │
├────────────────────────────────────────────────────────────────────┤
│ polypore-ide MCP 边车 (Node, packages/mcp-server/) │
│ ├─ 22+ 工具 → host_broker 实现实时状态更改 │
│ └─ secrets.* → secret_broker, 智能体从不返回值 │
└────────────────────────────────────────────────────────────────────┘
```
契约位于 `schemas/`,并生成到 `packages/sdk/src/types.gen.ts` 和 `packages/sdk/src/validators.gen.ts`。编辑架构后运行 `npm run codegen`。
---
## 环境变量
| | |
|---|---|
| `POLYPORE_PROJECT_ROOT` | 覆盖 cwd 作为工作区根目录 |
| `POLYPORE_ENABLE_ACP=1` | 选择加入 ACP 适配器 |
| `POLYPORE_CONFIG_DIR` | 机密元数据位置(默认 `~/.config/polypore`) |
| `POLYPORE_UPDATE_ENDPOINT` | 覆盖自动更新端点 |
---
## 贡献
参见 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
[MIT](LICENSE)