内容
<p align="center">
<img src="frontend/public/favicon.svg" alt="Collabhost" width="80" />
</p>
<h1 align="center">Collabhost</h1>
<p align="center">
一个用于工作站的自主控制平面 — 通过仪表板操作,或由代理通过内置的 MCP 服务器驱动。<br/>
在 Windows 和 Linux 上提供本地进程监督。 在 macOS 上运行,并带有备用运行器。
</p>
<p align="center">
<a href="https://github.com/MrBildo/collabhost/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/MrBildo/collabhost/actions/workflows/ci.yml/badge.svg?branch=main" /></a>
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" /></a>
<a href="https://dot.net/download"><img alt=".NET 10" src="https://img.shields.io/badge/.NET-10-512BD4?style=flat-square" /></a>
<a href="https://nodejs.org/"><img alt="Node 22+" src="https://img.shields.io/badge/node-22%2B-339933?style=flat-square" /></a>
</p>
---
## 什么是 Collabhost?
Collabhost 为您提供了一个单一的控制平面来管理机器上运行的所有内容 — .NET 服务、Node.js 应用程序、静态网站、MCP 服务器和任意可执行文件。注册一个应用程序,指向一个目录,Collabhost 处理进程监督、反向代理路由、日志聚合和崩溃恢复。无需容器,无需 YAML,无需云账户。
**两个主要受众群体。** 操作员从 War Machine 仪表板运行 Collabhost — 表格、日志流、内联操作。代理通过内置的 MCP 服务器运行 Collabhost — 相同的界面,以 Streamable HTTP 的形式暴露为工具。 从 UI 或 Claude Code 注册应用程序。启动、停止、跟踪日志、更新设置。人类和代理共享一个平台、一个身份验证模型和一个事实来源。
如果您正在构建一个需要管理本地基础设施的 AI 托管、代理框架或多代理系统,Collabhost 是位于其下的层。有关 MCP 配置,请参见[为代理](#为代理)。
它在 **Windows** 和 **Linux** 上原生运行,具有平台特定的进程管理 — Windows 上无需 WSL,Linux 上无需仿真层。macOS 运行相同的控制平面,但具有减少的遏制功能的备用进程运行器 — 请参见[平台支持](#平台支持)以了解有何不同。可以将其视为一个轻量级、自主托管的 Heroku,用于您的工作站 — 一个控制平面,在出现问题时才会介入。
<p align="center">
<img src="docs/screenshots/dashboard.png" alt="Collabhost 仪表板 — 统计信息、应用程序表和活动馈送" width="900" />
</p>
<p align="center"><sub>仪表板。进程监督、路由和实时活动馈送在一个屏幕上。</sub></p>
## 安装
一行命令。它下载最新的发布存档,根据发布时的 `checksums.txt` 验证其 SHA-256,解压到 `~/.collabhost/bin`(Linux/macOS)或 `%USERPROFILE%\.collabhost\bin`(Windows),并将目录添加到您的 `PATH` 中。
**Linux / macOS:**
```bash
curl -fsSL https://mrbildo.github.io/collabhost/install.sh | bash
```
或者,如果您想先检查脚本:
```bash
curl -fsSL https://mrbildo.github.io/collabhost/install.sh -o install.sh
bash install.sh
```
**Windows (PowerShell):**
```powershell
iwr -useb https://mrbildo.github.io/collabhost/install.ps1 | iex
```
或者下载后执行:
```powershell
iwr https://mrbildo.github.io/collabhost/install.ps1 -OutFile install.ps1
.\install.ps1
```
然后启动它:
```bash
collabhost
```
在首次运行时,Collabhost 会创建一个管理员账户,并将 API 密钥作为关键日志记录行一次性发出:
```
crit: Collabhost.Api.Authorization.UserSeedService[0]
Collabhost 管理员密钥:01JRSB8XH7D4Z2K9N0MFQPTVCW
```
复制该密钥,打开 `http://localhost:58400` 处的仪表板,并将其粘贴到 API 密钥提示中。您就此完成了。
重新运行安装程序是安全的:您的 `appsettings.json` 和 `data/` 目录在版本之间得到保留。有关完整的运算符文档 — 重新安装、升级、卸载、配置、故障排除 — 请参见发行存档中附带的 `INSTALL.md`(或在首次运行时安装目录中的 `INSTALL.md`)。
### 生产/服务器安装
上述一键安装程序将 Collabhost 安装到您的主目录中,并在您的登录会话下运行 Collabhost — 这是工作站的合适形式。对于**无头服务器或多运算符盒**,请改为**系统范围**安装:专用服务帐户、规范的系统布局(Linux 上的 `/opt` + `/etc` + `/var/lib`,Windows 上的 `%ProgramFiles%` + `%ProgramData%`),以及在注销和重启后存活的服务。
**Linux:**
```bash
curl -fsSL https://mrbildo.github.io/collabhost/install-system.sh | sudo bash
```
**Windows(提升的 PowerShell):**
```powershell
iwr -useb https://mrbildo.github.io/collabhost/install-system.ps1 | iex
```
有关完整的系统范围的演练 — 安装程序的布局、验证和自定义服务 — 请参见 INSTALL.md §5.5.2(Linux)和 §5.5.4(Windows)。
### Caddy 已捆绑
安装程序将 Caddy 与 Collabhost 二进制文件一起提供,并在首次安装时在 `appsettings.json` 中将 `Proxy:BinaryPath` 设为指向它。无需单独的安装步骤。在首次启动时,Collabhost 将捆绑的 Caddy 作为受监督的进程启动,每个注册的应用程序都将自动获得一个 `{slug}.collab.internal` 子域名路由。
如果您更愿意使用系统安装的 Caddy,请通过在启动前将 `COLLABHOST_PROXY_BINARY_PATH` 设置为绝对路径(环境变量优先)或直接编辑 `appsettings.json` 中的 `Proxy:BinaryPath` 来让 Collabhost 指向它。运算符对该密钥的编辑在重新安装期间保留 — 安装程序仅在密钥不存在或为空时才会播种该值。请参见 INSTALL.md §5.4 了解解析链。`BaseDomain` 默认值为 `collab.internal` — 更改它以使用您控制的任何域。
如果未配置 Caddy 二进制文件,其他所有功能仍然有效(应用程序管理、进程监督、日志、仪表板)— 应用程序只是没有自动的子域名路由,并且 `/api/v1/status` 上的 `proxyState` 报告为 `disabled`。
### 注册您的第一个应用程序
**从仪表板:** 打开 `http://localhost:58400` 并点击 **注册应用程序**。选择一种应用程序类型,将其指向一个目录,然后点击创建。Collabhost 自动发现启动命令并分配一个端口。点击 **启动** 并在日志流中查看。
**从代理:** 请参见下面的[为代理](#为代理)。代理调用 `list_app_types`、`browse_filesystem`、`detect_strategy`、`register_app` 和 `start_app` — 相同的流程,脚本化。
## 功能
**内置 MCP 服务器** — `/mcp` 处的模型上下文协议端点将运算符界面作为工具公开。18 种工具涵盖发现、生命周期、配置、注册和活动。代理注册应用程序、启动和停止进程、跟踪日志、更新设置和浏览主机文件系统 — 以编程方式,通过 Streamable HTTP。基于角色:管理员可以看到所有内容,代理可以看到 18 种工具中的 17 种(除了 `delete_app`)。有关设置,请参见[为代理](#为代理)。
**运算符仪表板** — 实时统计信息、应用程序表,带有内联操作,实时活动馈送和流式日志查看器。运算符需要的所有功能都在一个屏幕上。 War Machine 设计系统 — 黑色、等宽字体、工业风格 — 专为密度和快速操作而设计。
**进程监督** — 启动、停止、重启和管理进程,适用于 Windows 和 Linux 的平台原生实现。对 Windows:进程通过 `CreateProcess` 启动,具有专用的进程组和 Win32 作业对象的孤儿保护,确保即使 Collabhost 崩溃也能清理子进程;停止是一个立即的硬杀死(目前没有温和关闭通道)。对 Linux:具有 `SIGTERM` 和 `SIGKILL` 生命周期(尊重每个应用程序的关闭超时)和基于 cgroup 的遏制的进程组。崩溃检测和自动重启,具有可配置的指数退火。标准输出/标准错误捕获到内存环缓冲区中。
**反向代理** — 每个应用程序都自动配置一个子域名路由,通过 [Caddy](https://caddyserver.com/)。通过 Caddy 的内部 CA 提供 HTTPS。路由在进程状态更改时同步 — 无需手动代理配置。基本域名可在 `appsettings.json` 中配置。
**基于模式的配置** — 应用程序设置由功能模式定义。新功能在 UI 和通过 MCP 中显示,无需前端或工具更改。覆盖默认设置,每个应用程序,查看已自定义与继承的内容。
**多运行时支持** — 7 种内置应用程序类型开箱即用:
| 类型 | 它运行的内容 |
|------|-------------|
| `dotnet-app` | .NET 应用程序(自动发现项目文件) |
| `nodejs-app` | Node.js 应用程序(读取 package.json 脚本) |
| `static-site` | 静态文件目录(通过 Caddy 的 file_server 提供服务) |
| `executable` | 任意二进制文件和脚本 |
| `system-service` | 由 Collabhost 自身管理的平台服务 |
| `external-route` | 到 Collabhost 未运行的服务的路由 — Docker 容器、LAN 主机、Tailscale 节点,您指向它的任何上游。 Collabhost 为其提供 TLS 和健康检查;无需监督进程。 |
| `internal-service` | 受监督的非 HTTP 进程 — 数据库、消息代理、自定义协议服务。 Collabhost 运行并监视它,但不生成反向代理路由。 |
`system-service` 是第七种内置类型,但它是内部的 — 它是 Proxy 的自身类型,由 Collabhost 在启动时播种,不可注册为运算符。注册选择器显示上述六种类型。
**用户管理** — 基于标头的身份验证,具有管理员和代理角色。创建时一次性 API 密钥显示。相同的密钥身份验证仪表板、REST API 和 MCP 服务器 — 铸造一个代理密钥,它可以操作平台。
**技术探测** — 应用程序的运行时、框架和依赖项的自动检测。无需手动标记。在仪表板和 `get_app` MCP 响应中显示。
## 平台支持
进程监督是 Collabhost 中因平台而异的部分。控制平面本身 — API、仪表板、MCP 服务器、SQLite、Caddy 集成 — 在 .NET 10 可以运行的每个地方都相同。进程遏制并不相同。
| 平台 | 进程监督方式 |
|---|---|
| **Windows** | 使用专用的进程组和 Win32 作业对象的 `CreateProcess` P/Invoke,具有孤儿保护。通过立即硬杀死停止 — 目前没有温和的关闭通道,因此仅限于 Linux 的每个应用程序关闭超时。 |
| **Linux** | 使用 `SIGTERM` / `SIGKILL` 生命周期和 cgroup v2 遏制的 `setsid` 进程组。防孤儿。 |
| **macOS** | `FallbackProcessRunner`。进程启动和停止,标准输出/标准错误捕获有效,硬杀死可用。没有温和的关闭(没有 `SIGTERM` 等效的信号处理),没有作业对象等效的隔离,没有孤儿保护 — 如果 Collabhost 崩溃,子进程可能会比它活得更长。 |
Windows 和 Linux 是推荐的部署目标。macOS 运行平台,但具有上述差距 — 它最适合本地开发,而不是长期生产工作负载。
## 游览
<p align="center">
<img src="docs/screenshots/apps.png" alt="应用程序列表,带有筛选芯片和搜索" width="900" />
</p>
<p align="center"><sub>应用程序列表。按状态筛选,搜索,一键启动和停止。</sub></p>
<br/>
<p align="center">
<img src="docs/screenshots/app-detail.png" alt="应用程序详情,带有日志查看器和路由信息" width="900" />
</p>
<p align="center"><sub>应用程序详情。PID、端口、正常运行时间、路由目标和实时日志流。</sub></p>
<br/>
<p align="center">
<img src="docs/screenshots/app-detail-tech.png" alt="技术选项卡,带有运行时和依赖项检测" width="900" />
</p>
<p align="center"><sub>技术探测。Collabhost 自动检测运行时、框架和值得注意的依赖项。</sub></p>
<br/>
<p align="center">
<img src="docs/screenshots/settings.png" alt="基于模式的应用程序设置" width="900" />
</p>
<p align="center"><sub>基于模式的设置。每种功能都显示在这里,无需前端更改。</sub></p>
<br/>
<table>
<tr>
<td width="50%" align="center">
<img src="docs/screenshots/register-type-picker.png" alt="应用程序类型选择器" />
<br/>
<sub>注册,步骤 1. 选择类型。</sub>
</td>
<td width="50%" align="center">
<img src="docs/screenshots/register-form.png" alt="基于模式的注册表单" />
<br/>
<sub>注册,步骤 2. 配置。</sub>
</td>
</tr>
</table>
<br/>
<p align="center">
<img src="docs/screenshots/routes.png" alt="显示 Caddy 代理配置的路由表" width="900" />
</p>
<p align="center"><sub>路由。每个应用程序都自动获得一个 <code>{slug}.collab.internal</code> 子域名,带有 HTTPS(基本域名可配置)。</sub></p>
## 为代理
Collabhost 公开了一个 MCP(模型上下文协议)服务器,以便代理可以直接操作平台 — 无需自定义 HTTP 客户端,无需 REST 适配器。如果您的代理会说 MCP,那么它就会说 Collabhost。
### 端点
| | |
|---|---|
| URL | `http://localhost:58400/mcp` |
| 传输 | Streamable HTTP(无状态) |
| 身份验证 | `X-User-Key` 头部,包含用户的 ULID 密钥 |
| 服务器名称 | `collabhost` |
API 端口默认为 `58400`。如果主机上已有其他内容占用该端口,请通过 `appsettings.json` 中的 `Hosting:ListenPort` 或 `COLLABHOST_HOSTING_LISTEN_PORT` 环境变量覆盖它。
### 配置代理客户端
Claude Code 和任何读取项目特定 `.mcp.json` 的客户端都使用此配置连接:
```json
{
"mcpServers": {
"collabhost": {
"type": "http",
"url": "http://localhost:58400/mcp",
"headers": {
"X-User-Key": "<your-agent-key>"
}
}
}
}
```
将此配置放入项目的 `.mcp.json`(或客户端的等效文件)中,您的代理就拥有 Collabhost 作为工具表面。其他支持 MCP 的客户端通常接受相同的三个信息:传输类型(`http`)、端点 URL 和 `X-User-Key` 头部。
### 铸造代理密钥
1. 以管理员身份登录仪表板。
2. 从顶栏打开 **用户**。
3. 点击 **创建用户**,选择 **代理** 角色,输入名称并创建。
4. 密钥仅在创建时显示一次。将它复制到您的 MCP 配置中。如果丢失,请停用用户并铸造一个新的。
### 角色
| 角色 | 访问权限 |
|------|--------|
| 管理员 | 完整的工具表面(18种工具)+ 通过 REST API 进行用户管理。 |
| 代理 | 17种工具。除了 `delete_app` 之外的所有工具(删除仅限管理员)。 |
### 工具表面
18 种工具,按工作流程分组:
- **发现(4)** — `get_system_status`、`list_apps`、`get_app`、`list_app_types`。 代理的起点:平台上有什么,运行什么,可以注册什么。
- **生命周期(5)** — `start_app`、`stop_app`、`restart_app`、`kill_app`、`get_logs`。 完全的进程控制。`get_logs` 按 LLM 上下文预算计费。
- **配置(4)** — `get_settings`、`update_settings`、`list_routes`、`reload_proxy`。 读取和更改基于模式的设置,检查 Caddy 路由。
- **注册(4)** — `register_app`、`delete_app`、`browse_filesystem`、`detect_strategy`。 端到端应用设置。`browse_filesystem` 允许代理迭代定位安装目录;`detect_strategy` 报告 Collabhost 可以为给定路径和应用类型自动发现的内容。
- **活动(1)** — `list_events`。 最近的状态更改和操作员操作,按应用、事件类型或类别筛选。
每种工具都有完整的描述、参数模式和只读/破坏性/幂等注释。MCP 服务器还提供 `ServerInstructions`,描述常见的工作流程(注册、生命周期、诊断),以便新连接的代理在不阅读源代码的情况下具有可用的思维模型。
应用程序在整个过程中由 **slug** 标识(例如 `my-api-server`),而不是由 ULID 标识。 代理使用操作员在 URL 栏中看到的相同标识符。
## 技术栈
| 层 | 技术 |
|-------|-----------|
| 后端 | .NET 10,C# Minimal API,EF Core,SQLite |
| 前端 | React 19,TypeScript,Vite |
| 设计系统 | *War Machine*(自定义 — 黑色,等宽字体,工业风格) |
| 反向代理 | Caddy(通过 JSON 管理 API) |
| 协调 | .NET Aspire 13.3(预览版),OpenTelemetry |
| 测试 | xUnit + Shouldly(后端),Vitest(前端) |
| 校验 | Roslyn 分析器(后端),Biome(前端) |
## 架构
Collabhost 有四个层:
- **Caddy** 是前门 — 边缘反向代理,TLS 终止,路由。
- **ASP.NET Core** 是控制塔 — 应用程序注册表,进程监督,身份验证和 MCP 端点。
- **React 仪表板** 是操作员控制台 — *War Machine* 设计系统。
- **MCP 服务器** 是代理控制台 — 相同的操作员界面,以 `/mcp` 处的工具形式公开。
应用程序通过 slug 注册,从文件系统发现,并作为托管进程监督。Caddy 路由在进程状态更改时自动同步。SQLite 处理零配置的持久性。REST API 和 MCP 端点是相同共享服务的并行表示表面 — 操作员可以通过仪表板执行的操作,代理可以通过 MCP 客户端执行。
## 贡献
欢迎贡献。如果您想从源代码构建,运行开发环境或提交拉取请求,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 以获取先决条件,设置,编码约定和 PR 流程。
## 安全和捆绑二进制维护
Collabhost 在其发布存档中提供了 Caddy 二进制文件,这意味着 Collabhost 拥有最终用户的 CVE 响应窗口。请参阅 [docs/release-process.md](docs/release-process.md) 以获取上游监控源,响应时间 SLA,发布检查清单和版本固定机制。
## 致谢
Collabhost 由一个人类-AI 协作团队构建。 机器人是自主的 AI 代理,在 Collabot 平台上 — 它们设计,编写代码,审查彼此的工作,并与人类团队成员一起发布功能。
**比尔·惠洛克** — 概念,设计和技术领导 — [mrbildo@mrbildo.net](mailto:mrbildo@mrbildo.net)
**机器人诺兰** — 项目协调 — [nolan@collabot.dev](mailto:nolan@collabot.dev)
**机器人达娜** — 前端负责人;徽标和 *War Machine* 设计系统 — [dana@collabot.dev](mailto:dana@collabot.dev)
**机器人爱丽丝** — 前端审查;JavaScript 和 TypeScript — [iris@collabot.dev](mailto:iris@collabot.dev)
**机器人雷米** — 后端负责人;架构和 C# — [remy@collabot.dev](mailto:remy@collabot.dev)
**机器人马库斯** — 后端架构和领域建模 — [marcus@collabot.dev](mailto:marcus@collabot.dev)
**机器人凯** — 代码审查和简化 — [kai@collabot.dev](mailto:kai@collabot.dev)
**机器人西奥** — IT 经理 — [theo@collabot.dev](mailto:theo@collabot.dev)
## 许可
[MIT](LICENSE)
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器