内容
# AgentDock
AgentDock 是一个用于构建、治理、预览和监控跨模型提供商和 MCP 工具的多智能体流程的原型控制平面。
该产品故意分为两种模式:
- **构建:** 描述结果,生成或加载流程,检查其代理、工具、内存、批准和预算,保存它,并运行您正在编写的流程的预览(`/api/workflow-runs/simulate`)。
- **控制:** 一个您实际受控运行的 calm 板。每个运行都是一个卡片;打开一个卡片以查看其 **输出**(交付成果)与 **过程**(可折叠的步骤日志),解决批准,检查策略决策,并监控支出。控制仅显示实际运行 - 没有模拟预览或演示数据。
AgentDock 具有实际的身份和策略数据平面。它可以持久化用户、流程、代理、工具授权、内存授权、模型规划成本、预览运行、批准和活动。它还具有早期实际运行路径:已登录的用户可以存储加密的 BYO Anthropic/OpenAI 密钥,通过实际模型调用运行保存的流程代理,使用旧版只读搜索工具,并通过受控的 MCP 客户端路由注册的 MCP 工具。第一个连接的 MCP 服务器是第一方 Gmail 服务器;`create_draft` 可以创建实际的草稿,而 `send_email` 在发送任何出站邮件之前始终需要批准。
## 项目状态
AgentDock 已经过了静态演示阶段。现在,它是控制平面数据路径的工作原型,具有故意狭窄的实际执行表面。
| 区域 | 状态 | 备注 |
|---|---|---|
| 身份验证 + 租户 | 原型完成 | Google/Auth.js 会话,用户拥有的行,所有权检查。 |
| 流程构建器 | 大部分完成 | 模型支持的规划,权限夹,保存/加载,持久化图 hydration。 |
| 流程真相 | 原型完成 | 保存协调代理/工具/内存,以便删除的授权不会留下。 |
| 实际运行引擎 | 原型完成 | 顺序代理,BYO 模型调用,有界成本/步骤/工具,终止开关。 |
| A2A 交接 | 内部 v1 完成 | 代理输出作为上限不受信任的上下文;不是外部 A2A 协议。 |
| A2UI / 控制 | 原型完成 | 实际运行板,输出/过程拆分,批准收件箱,运行事件。 |
| MCP 目录 | 原型完成 | 官方注册表元数据 + 精选条目,搜索/筛选/分页。 |
| 受控 MCP 执行 | 早期 v1 | 官方 SDK 客户端,注册服务器仅限,第一方 Gmail 服务器连接。 |
| 内存防火墙 | 原型完成 | 区域,授权,日志,运行时读取绑定;无语义检索。 |
| 访问网关 | 早期 v1 | 加密 BYO 模型密钥和加密 Google OAuth token 包。不支持 KMS/Vault。 |
| 可持续执行 + 工作线程 | **Chunk 11 完成** | Postgres 支持的作业队列,独立工作线程,崩溃恢复,幂等外部操作,步骤游标恢复,SSE 事件流,用户并发绑定,显式沙盒缝。 |
| 沙盒/隔离 | 未构建 | 沙盒边界在代码中定义(`callMcpTool` 缝);实际容器/VM 隔离尚未实现。 |
| 计费/付款 | 未构建 | 无提供商转售,Stripe,组织计费或支出协调。 |
| 外部代理 / NANDA | 未构建 | 无第三方代理运行时,发现信任网络或跨组织代理身份。 |
**Chunk 11(可持续执行)已发布。** 现实运行现在通过 Postgres 支持的作业队列排队,并由具有崩溃恢复,幂等外部操作,步骤游标恢复和事件流的独立工作线程执行 - 有关完整设计,请参见 [docs/durable-execution.md](docs/durable-execution.md)。
## 当前产品界面
主要导航是:
- **构建:** 模型支持的流程规划,模板,可编辑权限,图可视化,保存和运行预览。
- **商店:** 代理,官方 MCP 注册表目录,精选工具,搜索,筛选,分页和流程附件。
- **流程:** 保存的流程,其代理,附加工具,图详情和范围访问控制。
- **控制:** 真实运行卡片的面板(流程名称,状态,成本,步骤/工具计数,输出预览)。打开运行将输出(交付成果)与折叠的过程日志(每个代理的步骤)分开;重型有效载荷位于每步骤的“显示详情”后面。此外,还有一个批准收件箱和仅从真实运行计算的支出。
- **个人资料:** 身份,策略默认值,预算默认值和内存区域。
界面使用深色控制塔设计。等宽文本标记机器派生的值,如令牌,成本,时间戳,ID 和决策。风险和决策颜色在图表,目录和时间线中保持一致。
## 什么是真实的
- 通过 Auth.js 和数据库会话的 Google 身份验证。
- Postgres 中用户范围的代理,流程,内存,授权,运行,批准和时间线条目。
- 登录后基于用户的工作区引导的幂等性。
- 当配置提供商密钥时,通过 Anthropic 或 OpenAI 进行自然语言流程规划。
- 模型输出和所有可变 API 输入的 Zod 验证。
- 在生成的计划到达 UI 之前,服务器端解析和权限夹紧。
- 保存确切的生成或手动组装的流程,包括代理,工具,内存附件,权限选择和序列化布局。
- 基于保存的流程的通用数据库支持的运行预览。
- 使用加密的 BYO 提供商密钥进行真实的受控运行。
- 通过 DuckDuckGo Instant Answer 进行真实的只读搜索 MCP 执行。
- 批准恢复语义:批准不会绕过当前的策略。
- 解析批准为 **编辑** 清洁地停止暂停的运行(它不会执行待处理的操作也不会无声地恢复);重新运行流程以应用更新的策略。
- 具有 `revokedAt` 终止开关语义的 MCP 吊销。
- 通过 Postgres 支持的作业队列进行可持续运行执行,具有崩溃恢复。
- 具有租约/心跳的独立工作线程(npm run worker)。
- 幂等外部操作 - 重试的步骤永远不会对现实世界的效果进行双重触发。
- 步骤游标恢复 - 重新获得的作业从上一个完成的代理恢复。
- `GET /api/runs/:id/stream` 处的 SSE 事件流(除了轮询)。
- 用户并发绑定(安全上限,不是吞吐量功能)。
- `callMcpTool` 缝处的显式沙盒边界。
- 内存批准所需的授权被跳过并记录,而不是无声注入。
- 具有持久审计事件的批准解决。
- 内存授权编辑和吊销。
- 官方 MCP 注册表元数据摄入以及 AgentDock 精选条目。
- 工具目录搜索,验证/风险筛选,分页,流程附件,权限编辑和吊销。
- 针对单独的 Postgres 测试数据库的自动化集成和管道测试。
## 什么是仍然模拟或禁用
- 外部/第三方代理执行。
- 任意第三方 MCP 服务器安装/执行。
- 除 legacy 搜索工具和注册的第一方 Gmail MCP 服务器外的 MCP 工具调用。
- 日历,驱动器,GitHub,Stripe 或任意帐户连接。
- 日历,驱动器,GitHub,Stripe 或其他具有写入权限的工具执行超出 Gmail 草稿/发送在 AgentDock 批准策略下的范围。
- 运行时容器或沙盒托管。
- 真实凭证铸造和提供商密钥代理。
- 计费和付款收集。
- 嵌入生成和语义内存检索。
`POST /api/flows/plan` 是模型支持的规划表面。 `/api/runs` 是具有用户 BYO 提供商密钥的保存流程的真实受控运行表面。
## 架构
```text
用户 / A2UI 控制
|
v
流程构建器 + 协调器
|
v
策略解析 + 权限夹紧
|
+--> 内存防火墙
+--> 范围工具授权
+--> 预算 / 批准门
|
v
Postgres 中的保存流程
|
v
POST /api/runs → 工作流运行 + 运行作业(排队)→ HTTP 201(立即)
|
v
┌───────────────────────────────┐
│ Postgres 队列(run_jobs) │
│ SELECT … FOR UPDATE SKIP │
│ LOCKED, 每用户并发性 │
└──────────────┬────────────────┘
│
┌──────────────┴────────────────┐
│ 工作线程(npm run worker) │
│ - 声明 → 心跳 → 执行 │
│ - 崩溃恢复 │
│ - 幂等外部操作 │
│ - 步骤游标恢复 │
└──────────────┬────────────────┘
│
┌──────────────┴────────────────┐
│ 运行引擎(驱动) │
│ - 策略门 │
│ - 能力强制 │
│ - 终止开关 │
│ - 内存防火墙 │
└──────────────┬────────────────┘
│
┌──────────────┴────────────────┐
│ 沙盒缝(callMcpTool) │
│ - MCP 工具执行 │
│ - (未来:隔离执行器) │
└───────────────────────────────┘
|
v
运行事件 + 批准 + 活动日志
|
v
SSE 流(GET /api/runs/:id/stream)→ 实时控制面板
```
预期的生产架构通过访问网关,运行时/沙盒,代理路由器,MCP 网关和真实工具/模型执行对此进行扩展。
## 堆栈
- Next.js 16 应用路由器
- React 19
- TypeScript
- Auth.js / NextAuth 与 Google OAuth
- Prisma 7
- PostgreSQL 16
- pgvector 扩展
- Zod
- Vitest
- 通过服务器端 `fetch` 的 Anthropic 和 OpenAI REST API
## 仓库结构
```text
app/
api/ 身份验证,引导,规划,流程,运行,批准,
内存,活动和 MCP 目录/授权路由
page.tsx 薄应用程序壳和共享的本地演示状态
tokens.css 设计令牌
base.css 全局重置和基本规则
elevation.css 表面/海拔规则
components/
a2ui/ 统一事件卡语法
build/ 构建器,流程图,序列化,图布局
control/ 控制面板和批准操作
flows/ 保存的流程库
layout/ 壳,导航,身份验证菜单,命令调色板,吐司
profile/ 个人资料和内存区域
store/ 代理/工具/模板目录
lib/
api/ 类型客户端包装器
catalog/ 启动器代理和流程模板
llm/ Anthropic/OpenAI 适配器和定价
orchestrator/ 模式,提示,快照,解析,夹紧,转换
registry/ 官方 MCP 注册表获取和规范化
validation/ Zod 请求模式和解析帮助程序
prisma/
schema.prisma 产品和 Auth.js 数据模型
migrations/ 数据库迁移
seed.js 演示种子
tests/ API,隔离,验证,注册表,LLM 和
协调器测试
```
## 本地设置
### 1. 安装依赖项
```bash
npm install
```
### 2. 创建环境文件
```bash
cp .env.example .env
```
至少配置:
```bash
DATABASE_URL="postgresql://agentdock:agentdock@localhost:5432/agentdock?schema=public"
AUTH_SECRET=""
AUTH_URL="http://localhost:3000"
GOOGLE_CLIENT_ID=""
GOOGLE_CLIENT_SECRET=""
```
使用以下命令生成 Auth 机密:
```bash
openssl rand -base64 32
```
### 3. 启动 Postgres
包含的 Docker Compose 服务使用 PostgreSQL 16 和 pgvector:
```bash
docker compose up -d
```
### 4. 应用迁移并播种
```bash
npx prisma migrate deploy
npx prisma generate
npm run db:seed
```
### 5. 启动 AgentDock
```bash
# 终端 1:Next.js 开发服务器(UI + API)
npm run dev
# 终端 2:工作线程(声明和执行排队的作业)
npm run worker
```
打开 [http://localhost:3000](http://localhost:3000)。
工作线程是一个独立进程 - 无 Next.js 依赖。它循环:声明一个排队的作业 → 连续心跳 → 通过运行引擎执行 → 释放。它尊重每用户并发上限(默认值:1),因此单个用户永远不会淹没队列。可通过环境变量配置:
- `WORKER_POLL_MS` - 空闲时的轮询间隔(默认值:2000)
- `WORKER_LEASE_MS` - 作业租赁时长(默认值:60000)
- `WORKER_PER_USER_CONCURRENCY` - 每用户最大并发运行数(默认值:1)
一致使用 `localhost` 作为浏览器、`AUTH_URL`、Google 授权来源和 Google 回调地址。混合 `localhost` 和 `127.0.0.1` 可能会破坏 OAuth cookie 和回调验证。
## Google OAuth
默认情况下,AgentDock 请求身份范围:
```text
openid email profile
```
在 Google Cloud 中,配置:
- 授权 JavaScript 源:`http://localhost:3000`
- 授权重定向 URI:`http://localhost:3000/api/auth/callback/google`
AgentDock 不请求 Gmail,日历,驱动器或其他工作区范围。
对于可选的第一方 Gmail MCP 演示,创始人可以添加:
```text
https://www.googleapis.com/auth/gmail.compose
https://www.googleapis.com/auth/gmail.send
```
这些范围不用于一般登录。它们仅在您想要在本地运行第一方 Gmail MCP 服务器时需要。加密的 Google token 包存储在服务器端,仅注入到 Gmail MCP 进程环境中。
## 可选的模型支持的规划
提供一个提供商密钥以启用 **计划流程**:
```bash
ANTHROPIC_API_KEY=""
OPENAI_API_KEY=""
```
提供商选择:
```bash
# "anthropic" 或 "openai";为空则选择可用提供商并优先选择 Anthropic
ORCHESTRATOR_PROVIDER=""
# 可选覆盖
ANTHROPIC_MODEL=""
OPENAI_MODEL=""
```
默认值:
- Anthropic 模型:`claude-sonnet-4-6`
- OpenAI 模型:`gpt-4.1`
- 最大输出:4,000 个令牌
- 每次跳过模式重试的最大成本:10 美分
- 每用户每日规划上限:100 美分
- 提供商超时:60 秒
可选治理变量:
```bash
ORCHESTRATOR_MAX_OUTPUT_TOKENS=4000
ORCHESTRATOR_MAX_COST_CENTS_PER_CALL=10
ORCHESTRATOR_DAILY_USER_COST_CAP_CENTS=100
ORCHESTRATOR_TIMEOUT_MS=60000
```
如果未配置提供商密钥,则规划返回 `503`,且应用程序其余部分保持可用。
### 规划安全
模型接收有界的目录快照:
- 所有已验证的精选工具。
- 最多 30 个相关的外部注册服务器。
- 已登录用户的代理。
- 已登录用户的内存区域。
- 安全的默认策略规则。
模型输出必须与 FlowPlan Zod 模式匹配。不存在的引用在目录中被删除,代理顺序被规范化,服务器端权限被夹紧。
权限严格程度:
```text
read_only < draft_only < approval_required < blocked
```
最终权限永远不会比以下宽松:
- 工具的推荐权限。
- 未验证的外部服务器的 `approval_required`。
- 限制风险工具的 `blocked`。
目标和原始模型输出不写入日志。时间线仅存储提供商/模型元数据,令牌使用,持续时间,重试状态和计算成本。
参见 [docs/orchestrator.md](docs/orchestrator.md) 以获取详细合同和故障模式。
## MCP 工具目录
已登录用户可以手动同步来自以下地址的元数据:
```text
https://registry.modelcontextprotocol.io
```
同步:
- 获取最多 5 页 100 个最新服务器。
- 跳过格式不正确或不活动的记录。
- 将 AgentDock 精选工具与官方注册表元数据合并。
- 保留与相同软件包或存储库匹配的精选判断。
- 仅存储元数据。
外部注册表条目默认为拒绝:
- 验证:`unverified`
- 风险:`medium`
- 推荐权限:`approval_required`
- 工具执行:禁用
目录 API 支持:
- 文本搜索
- 类别筛选
- 风险筛选
- 验证筛选
- 注册表源筛选
- 游标分页
## 受控 MCP 客户端(任意合规服务器,通过网关)
AgentDock 从一开始就采用了 MCP 的数据模型;现在它也有了一个真正的 MCP **执行** 客户端(`lib/execution/mcp-client.ts`,基于官方的`@modelcontextprotocol/sdk`)。它讲的是真正的线协议 - `initialize` → `tools/list` → `tools/call` - 因此添加功能变成了“连接服务器 + 授权 + 网关”,而不是“为每个工具编写执行器”。
每个 MCP `tools/call` 都通过与所有其他功能相同的确定性策略网关路由:拒绝默认值,操作分类,致命三重奏防护,成本计量,批准,终止开关和不受信任的输出框架。新发现的工具在明确授权之前被 **阻止**。代理发出一个结构化的 `arguments` 对象,匹配工具的输入模式;旧的 `search-mcp` 字符串路径保持不变。
### 一方 Gmail 服务器
第一个连接的服务器是一方 Gmail MCP 服务器(`servers/gmail/`),暴露了两个工具:
- `create_draft` — 只写入您自己的草稿。安全、可逆,无外部副作用;无需审批即可执行。
- `send_email` — 真正的 outbound 发送。被归类为外部写入,因此**始终需要审批,绝不会自动发送** — 在任何授予配置下,都不会自动允许发送。注入到不可信内容中的指令不会触发静默发送;它们仍会在审批处停止。
用户的 Google OAuth token(范围 `gmail.compose` + `gmail.send`)被**加密**存储,并**仅在服务器端读取** — 它被注入到 Gmail 服务器的进程环境中,绝不会返回给客户端或代理。创始人执行一次实时的 Google 同意(见下文)。
**不允许连接任意第三方 MCP 服务器** — 只有允许的 first-party 服务器可以连接。不可信服务器的审查是单独的信任块。
### 在本地启用 Gmail(创始人步骤)
1. 在 Google Cloud 中,将 `gmail.compose` + `gmail.send` 添加到 OAuth 同意屏幕范围,然后退出并重新登录以重新同意。
2. 构建流程,授予 Gmail 工具,并为代理人提供需要电子邮件的目标。`send_email` 将在审批卡处暂停,显示确切的收件人/主题/正文;审批后发送。`create_draft` 保留草稿,无需审批。代理人绝不会收到您的 token。
## 流程持久性和运行预览
保存流程会保留:
- 名称和目标
- 有序代理人和角色
- 每周和每次运行的预算
- 审批模式
- 附加工具
- 工具权限授予
- 内存附件
- 序列化图/布局元数据
**流程真相(您构建的就是您运行的)**。保存是完全协调的,而不仅仅是添加:当工具从已编排的流程中删除时,其 `workflowMcp` 行和 `mcpAccessGrant` 会在同一事务中删除,因此已删除的权限绝不会继续存在并在运行时被执行(删除过时的授予比宽容的删除更严格)。内存范围以相同的方式协调 — 从流程中删除的分区会被取消范围。协调只会在明确带有集合的负载中运行:省略的 `tools`/`memory` 键会保留现有的行不变(画布保存通过单独的端点附加工具),而明确的空数组会协调为无。`McpAccessGrant` 上的 `@@unique(userId, workflowId, mcpServerId)` 约束使得授予写入成为单个确定的 `upsert`,因此重复项绝不会累积,策略解析是明确的。重新打开已保存的流程会从**已保存**的行(代理人、工具、授予、范围内存)中恢复画布 — 绝不会是过时的布局 blob — 因此执行的集合等于存储的集合等于已编排的集合。
运行预览存在于 **Build**(运行您正在编排的流程的预览);控制保留用于实际运行。运行预览是通用的:它按路由顺序遍历已保存的代理人,并评估每个附加工具授予:
- 无能力:`blocked`
- 审批门:`approval_required`
- 否则:`allowed`
预览创建:
- `WorkflowRun`
- `WorkflowRunEvent`
- 需要时 `ApprovalRequest`
- `ActivityLog` 条目
在运行预览期间,不会执行任何代理人、模型或工具。
## 内存防火墙
内存被划分为用户拥有的内存区域,具有:
- 流程或域范围
- 敏感性级别
- 默认访问策略
- 内存项
- 每个代理人/流程授予
- 读取、写入、编辑、删除、共享和审批标志
- 访问历史
编辑或撤销内存授予会写入特定的内存日志和统一的时间线条目。
可为空的 `vector(1536)` 字段是未来的 pgvector 占位符。AgentDock 尚未生成嵌入。
## 工作区引导
用户登录后,`BootstrapGate` 调用幂等的:
```text
POST /api/bootstrap
```
它创建缺失的起始代理人、求职流程、内存区域、起始内存项和授予。重复调用不会复制工作区。
诸如 `GET /api/workflows` 和 `GET /api/memory` 之类的读取路由是纯读取。
## API 概述
| 方法 | 路由 | 目的 |
|---|---|---|
| GET/POST | `/api/auth/[...nextauth]` | Auth.js 会话和 Google 登录 |
| POST | `/api/bootstrap` | 幂等启动工作区 |
| POST | `/api/flows/plan` | 真实的模型支持、策略限制的流程计划 |
| GET/POST | `/api/workflows` | 加载和保存用户流程 |
| GET | `/api/workflow-runs` | 最近的持久化预览 |
| POST | `/api/workflow-runs/simulate` | 通用的元数据运行预览(来自 Build) |
| GET/POST | `/api/runs` | 列出真实运行(带有流程名称 + 输出预览)/ 启动真实运行 |
| GET | `/api/runs/[id]` | 真实运行详情:带有代理人名称 + 流程名称的事件 |
| GET | `/api/runs/[id]/stream` | SSE 事件流 — 实时的运行事件馈送(基于光标,累加到轮询) |
| POST | `/api/runs/[id]/kill` | 终止正在进行的真实运行 |
| POST | `/api/approvals/[id]/resolve` | 批准(在重新检查后恢复)、拒绝(停止)、或编辑(停止;重新运行以应用) |
| GET | `/api/activity` | 统一时间线 |
| GET | `/api/memory` | 内存区域、授予、项和日志 |
| PATCH | `/api/memory/grants/[id]` | 编辑内存访问 |
| POST | `/api/memory/grants/[id]/revoke` | 撤销内存访问 |
| GET | `/api/mcp/servers` | 搜索/过滤/分页工具目录 |
| POST | `/api/mcp/sync-registry` | 同步官方和精选的 MCP 元数据 |
| GET/POST | `/api/workflows/[workflowId]/mcps` | 加载或附加流程工具 |
| PATCH | `/api/mcp/grants/[id]` | 编辑工具访问 |
| POST | `/api/mcp/grants/[id]/revoke` | 撤销工具访问 |
所有用户拥有的变更路由都需要身份验证并验证所有权。
## 数据库模型
Prisma 模式包括:
- 身份验证:`User`、`Account`、`Session`、`VerificationToken`
- 代理人和流程:`Agent`、`Workflow`、`WorkflowAgent`
- 运行预览:`WorkflowRun`、`WorkflowRunEvent`
- 可持续作业队列:`RunJob`
- 审批和审计:`ApprovalRequest`、`ActivityLog`
- 工具:`McpServer`、`McpTool`、`WorkflowMcp`、`McpAccessGrant`
- 内存:`MemoryPartition`、`MemoryItem`、`MemoryAccessGrant`、`MemoryAccessLog`
- 策略/访问元数据:`PolicyProfile`、`ScopedCredential`
UI 使用名称 **Flow** 和 **Tool**。Prisma 目前保留 `Workflow` 和 `Mcp*` 模型名称,以避免高 churn 迁移。
代理人按用户范围划分,拥有唯一 `(userId, name)` 键。这可以防止一个用户的引导或保存操作修改另一个用户的代理人。
## 测试
测试使用单独的 `agentdock_test` Postgres 数据库。全局设置除非 `DATABASE_URL` 包含 `agentdock_test`,否则拒绝运行。
创建 `.env.test`:
```bash
DATABASE_URL="postgresql://agentdock:agentdock@localhost:5432/agentdock_test?schema=public"
AUTH_SECRET="test-secret"
AUTH_URL="http://localhost:3000"
```
如有需要,请创建数据库:
```bash
createdb agentdock_test
```
套件的全局设置在测试前会自动运行 `prisma migrate deploy`。如果它报告 `P3009`(目标数据库中存在先前的失败迁移),请从头开始重新创建测试数据库,然后重新运行 — 迁移在空数据库上可以干净地应用:
```bash
dropdb agentdock_test && createdb agentdock_test
```
运行:
```bash
npm test
```
> 将 `.env.test` 指向**本地** Postgres 数据库,而不是远程数据库。集成套件在测试之间 `TRUNCATE` 表,其冷的、每个测试的动态 `import()` 会带来 TypeScript 转换成本 — 对于远程数据库,每个事务的往返会超过它们的超时,套件会因纯环境原因而变红。本地情况下,整个套件在几分钟内是绿色的。
该套件涵盖:
- 身份验证和所有权要求
- 用户隔离
- 引导幂等性
- 纯 GET 行为
- 通用流程保存和预览
- Zod API 验证
- 审批解决
- MCP 注册表规范化和同步
- 目录搜索/过滤/分页
- 工具授予安全
- Anthropic/OpenAI 响应解析和成本计算
- 调度器模式、引用解析、权限限制、重试、超时、预算上限、超大响应处理和注入姿势
- 耐用工作器/队列:崩溃恢复、租赁回收、步骤光标恢复
- 重试期间的幂等外部操作(无双重触发)
- 异步安全:终止队列中、来自工作器的上限、运行中撤销、每个用户的并发
- 通过 ReadableStream 进行 SSE 事件流
提供者调用在测试中被模拟;不需要 API 密钥。
## 验证命令
```bash
npx prisma validate
npx prisma generate
npm test
npm run build
```
## 安全边界
- `.env` 和 `.env.test` 被 gitignore。
- 自带提供者密钥在 `ScopedCredential` 中加密存储,并在服务器端解密,仅用于真实运行。
- 用于可选的一方 Gmail MCP 路径的 Google OAuth token 包在存储时加密,并仅注入到 Gmail MCP 服务器进程环境中。
- 提供者密钥、Google token 和用户目标不会被记录或返回给客户端。运行事件存储有限的模型/工具输出以进行可观察性。
- 真实的机密应该最终从加密的 Postgres 行移动到 Vault/KMS。
- 外部 MCP 注册表条目绝不会自动成为受信任的。
- 工具附件会创建权限授予,但不会安装任意的第三方服务器。只有已注册/允许的 MCP 服务器才能执行。
- 运行预览绝不会执行代理人或工具。
## 演示流程
1. 使用 Google 登录。
2. 如果您想要真实运行,请在 **Profile** 中添加自带的 Anthropic/OpenAI 密钥。
3. 打开 **Build** 并描述结果。
4. 点击 **Plan flow**。
5. 查看提供者、模型、token、成本、持续时间、警告和流程图。
6. 如有需要,可以收紧工具权限。
7. 保存流程。
8. 打开 **Flows** 以检查持久化的图和附加工具。
9. 在您想要进行元数据运行预览时,从 **Build** 运行预览。
10. 打开 **Control** 并点击 **Run for real** 以使用自带模型密钥和受管工具执行保存的代理人。
11. 检查输出与流程,解决审批或撤销工具/内存访问。
可选的 Gmail 路径:在添加 Gmail OAuth 范围并重新同意后,附加已注册的 Gmail 工具。草稿创建可以作为可逆的邮箱写入;发送请求在发送前暂停审批和重新验证。
## 最终目标
AgentDock 旨在成为用户、代理人、模型、工具、内存、凭证和运行时之间的受信任的治理和执行层。
未来的生产循环是:
1. 描述结果。
2. 生成策略限制的流程。
3. 查看代理人、工具、内存、审批、运行时和预算。
4. 发布临时最小权限访问。
5. 通过受控运行时和工具网关执行。
6. 在实时情况下流式传输结构化 A2UI 事件。
7. 暂停、批准、拒绝、编辑或撤销任何操作。
8. 保留完整的审计和成本轨迹。
AgentDock 不打算成为另一个聊天机器人、代理人市场或原始 GPU 云。它是控制平面,让用户在代理人生态系统中保持控制。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器