Eosphor
Vyane 个性化版参考

HTTP API

Vyane dashboard(Beacon)和 daemon 暴露的 HTTP 端点,含认证规则、写操作入口与工作流远程执行面。

Vyane 除了 CLI 和 MCP,还起了几个 HTTP 服务。它们不是一个统一的大 server,而是三张各管一摊的「脸」:

  • Dashboard / Beacon 服务——最主要的一张脸,跑在 vyane dashboard(默认 127.0.0.1:41521)。所有 /api/* 端点都在这里:看板状态、历史、成本、审查、任务、会话,以及两个关键写入口——看板写和工作流运行。/api/* 全部需要 Bearer token。
  • Daemon webhook 服务——常驻 daemon 起的健康检查 + webhook 接收面,提供 /health
  • A2A HTTP 服务——Agent-to-Agent 协议对外面(vyane a2a-server),提供 /health 和 agent card。

下面按服务分别列端点,以源码为准(src/vyane/dashboard.pysrc/vyane/daemon/webhook.pysrc/vyane/a2a/http_server.py)。

/api/* 一律要 Bearer token

Dashboard 的安全中间件(DashboardApiSecurityMiddleware)拦所有以 /api/ 开头的路径。开启认证时(默认开),请求必须带 Authorization: Bearer <token>,否则返回 401(响应头 WWW-Authenticate: Bearer)。根路径 /(看板 HTML 页面)不算 API 路径,不拦。

Dashboard / Beacon 服务

vyane dashboard --host 127.0.0.1 --port 41521 启动。技术栈是 Starlette。想了解它服务什么、怎么调,看下面。

认证怎么走

安全中间件的判定顺序(src/vyane/dashboard.py):

  1. 路径不以 /api/ 开头 → 直接放行(例如 /)。
  2. 校验请求来源 Origin(跨域白名单),不在白名单返回 403
  3. OPTIONS 预检 → 返回 204 + CORS 头。
  4. Authorization: Bearer <token>,和配置的 token 逐一比对(用 hmac.compare_digest 常量时间比较,防时序侧信道)。
  5. 开了 auth_required(默认开)而没带有效 token → 401

token 从环境变量读,也可以启动时传入:

环境变量作用
VYANE_DASHBOARD_API_TOKEN主 API token(单一共享 token)
VYANE_DASHBOARD_OWNER_TOKENS多 owner 绑定 token(一个 token 对一个 owner 身份)
VYANE_DASHBOARD_API_TOKEN_OWNER主 token 绑定到哪个 owner
VYANE_DASHBOARD_AUTH_REQUIRED是否强制认证,默认 true
VYANE_DASHBOARD_REQUIRE_OWNER是否强制 token 必须绑定 owner,默认 false
VYANE_DASHBOARD_ALLOWED_ORIGINS允许的跨域来源(逗号分隔)
VYANE_DASHBOARD_BOARD_DIR看板写入口的固定目录(写操作用)

调用示例:

# 读看板状态
curl -H "Authorization: Bearer $VYANE_DASHBOARD_API_TOKEN" \
  http://127.0.0.1:41521/api/status

# 提交一次看板写(见下方「看板写」)
curl -X POST http://127.0.0.1:41521/api/board/write \
  -H "Authorization: Bearer $VYANE_DASHBOARD_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action":"log","issue_id":"ISSUE-42","message":"进展说明","mode":"apply"}'

owner 绑定是什么

一个 owner 大致对应「谁在用这个系统」——token 可以绑定到具体 owner 身份,这样写操作和工作流运行会记在那个 owner 名下,避免一个人冒充另一个人提交。开 require_owner 后,没绑 owner 的裸 token 会被 403 拦下。

关键端点

页面 + 两个写入口(最需要知道的):

方法路径作用认证
GET/看板 HTML 页面无(非 API 路径)
POST/api/dispatch远程发起一次 dispatch(异步,返回 task_idBearer
GET/api/dispatch/{task_id}查这次 dispatch 的状态Bearer
POST/api/dispatch/{task_id}/cancel取消(幂等)Bearer
GET/api/dispatch/{task_id}/eventsdispatch 状态级 SSE 流Bearer
POST/api/board/write看板写入口(log / take / done / new 等落到 LedgerService)Bearer
POST/api/workflow/run启动一次 workflow v2 运行,返回 run_id(异步)Bearer
GET/api/workflow/{run_id}查这次运行的状态 + journal 摘要(owner 隔离)Bearer
GET/api/workflow/{run_id}/eventsSSE 进度事件流Bearer

只读数据端点(都走同一套 Bearer 认证,节选):

方法路径作用
GET/api/statusdaemon / kernel / scheduler 总体状态
GET/api/historydispatch 历史
GET/api/stats汇总统计
GET/api/providersprovider 列表与可用性
GET/api/costs成本记账
GET/api/usage/summary用量汇总
GET/api/events事件流
GET/api/reviews · /api/reviews/{run_id}审查运行列表 / 详情
GET/api/tasks · /api/tasks/{task_id}任务列表 / 详情
POST/api/tasks/{task_id}/{action}对任务执行动作
GET/api/sessions · /api/sessions/{session_id}会话列表 / 详情
POST/api/sessions新建会话
GET/api/collaborationsA2A 协作记录
GET/api/approvals审批队列
GET/api/memory/search记忆检索

端点全表以源码为准

以上是一份代表性清单,不是全集。Dashboard 还有一整组给上层前端用的端点(自动化排程、通知、pulse、能力探测、DAG 等)。完整、最新的路由表在 src/vyane/dashboard.pyStarlette(routes=[...]) 定义处;写集成前请对着源码核对,别照文档记路径。

看板写:POST /api/board/write

这是看板三个写入口之一(另两个是 CLI 直读写文件、MCP vyane_board_write),三者最终都经 LedgerService。请求体是 JSON。

  • action——写动作:log / take / done / drop / cancel / new
  • mode——dry_run(默认,只预演不落盘)或 apply(真正写入)。
  • issue_id——目标卡号(如 ISSUE-42);new 时留空。
  • title——新建卡标题(new 用)。
  • 其它可选字段:project / priority / desc / labels / message / next / by(默认 sui)/ codename / evidence 等。

board_dir 由服务端固定

请求体里不能塞 board_dir——写入目录由 dashboard 启动配置(VYANE_DASHBOARD_BOARD_DIR)钉死。传了会被 403 拒绝。这是防止远程调用者把写操作导到任意路径。

出错时返回 API 形态的错误对象(带对应 HTTP 状态码),而不是抛裸异常。

工作流运行:POST /api/workflow/run

启动一次 workflow v2 脚本运行,立即返回 run_id(异步执行)。这是工作流的远程、不可信脚本执行面,护栏比 CLI 更严:

  • 必须带有效 dashboard Bearer token。
  • 运行的 owner 从认证 token 绑定——请求体或 query 里的 owner_user_id 会被忽略,防止一个人以别人身份提交运行。
  • 启动后用 GET /api/workflow/{run_id} 轮询状态,或 GET /api/workflow/{run_id}/events 订阅 SSE 进度流。

这跟 MCP 的 vyane_workflow 和 CLI 的 vyane workflow run <script.js> 是同一套 v2 引擎的三个入口,只是 HTTP 这一路作为公网面加了最严的身份护栏。

Daemon webhook 服务:/health

常驻 daemon(src/vyane/daemon/webhook.py,aiohttp)起一个健康检查面:

方法路径作用认证
GET/healthdaemon 健康快照(含 kernel / scheduler 模式等),JSON

CLI 的 vyane daemon 相关命令会读这个 /health(默认 http://127.0.0.1:<port>/health)来采样 daemon 的实时状态。它返回一个 JSON 对象,健康时 200,异常时可能带非 200 状态码。

A2A HTTP 服务:/health 与 agent card

Agent-to-Agent 协议的对外面(vyane a2a-serversrc/vyane/a2a/http_server.py,Starlette):

方法路径作用认证
GET/health负载均衡用健康检查,返回 {"status":"ok","version":...}
GET/.well-known/agent.jsonA2A agent card(自我描述)

健康检查为什么不设认证

/health 端点(webhook 和 A2A 两处)是给负载均衡器和运维探针用的存活探测,只暴露非敏感的状态信息,所以不挂 Bearer token。真正的数据和写操作都在 dashboard 的 /api/* 后面,那一层才是认证边界。

相关

On this page