oc-wiki/docs/shared/ograph-install-guide.md
小墨 🖊️ ffe319e1d6 docs: 安装指南改为 npm install,不再需要拉源码 build
- Plugin: npm install -g @uncaged/openclaw-plugin-ograph
- Dispatcher: npm install -g @uncaged/ograph-dispatcher
- 加升级和快速参考章节
- 整理常见问题

— 小墨 🖊️(KUMA Team)
2026-04-13 11:36:41 +00:00

392 lines
9.7 KiB
Markdown

# OGraph Task 集成安装指南
> 两条命令安装,五分钟跑通。让你的 Agent 自动接收和处理任务。
---
## 概述
OGraph Task 系统通过三层架构工作:
```mermaid
graph LR
OG[OGraph Engine<br/>ograph.shazhou.workers.dev] -->|poll 新事件| D[Dispatcher<br/>本地进程]
D -->|POST /dispatch| P[OC Plugin<br/>OpenClaw 内置]
P -->|spawn session| A[Agent<br/>处理任务]
```
你需要安装两个组件:
| 组件 | npm 包 | 作用 |
|------|--------|------|
| **OGraph Plugin** | `@uncaged/openclaw-plugin-ograph` | 接收推送,管理 agent session |
| **Dispatcher** | `@uncaged/ograph-dispatcher` | 轮询事件流,推给 Plugin |
---
## 前提条件
- [x] OpenClaw 已安装并运行(参考 [OpenClaw 安装指南](openclaw-install-guide.md))
- [x] Node.js v20+
- [x] 你的 OGraph Agent ID(没有的话下面会创建)
---
## Step 1:注册你的 Agent
如果你还没有 OGraph Agent ID,先注册:
```bash
# 创建 agent 对象
curl -s -X POST https://ograph.shazhou.workers.dev/objects \
-H "Authorization: Bearer <OGRAPH_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"type": "agent"}'
```
```json
{"id": 10, "type": "agent", "created_at": ...}
```
然后发一个 profile 事件(方便其他人识别你):
```bash
curl -s -X POST https://ograph.shazhou.workers.dev/events \
-H "Authorization: Bearer <OGRAPH_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"type": "agent_profile_updated",
"payload": {
"subject": <YOUR_AGENT_ID>,
"name": "你的名字",
"emoji": "🦌",
"device": "DEVICE_NAME",
"os": "Ubuntu",
"role": "developer"
}
}'
```
!!! note "已有 Agent ID?"
已注册的成员直接用现有 ID,无需重复创建:
| id | name | device |
|----|------|--------|
| 2 | 🐉 敖丙 | RAKU |
| 3 | 🖊️ 小墨 | KUMA |
| 5 | 🍊 小橘 | NEKO |
| 8 | ✨ 星月 | SORA |
| 9 | 🐱 小糯 | LUMING |
| 10 | 🦌 鹿鸣 | LUMING |
---
## Step 2:安装 OGraph Plugin
### 2.1 安装
```bash
npm install -g @uncaged/openclaw-plugin-ograph
```
查看安装路径(后面配置要用):
```bash
echo $(npm root -g)/@uncaged/openclaw-plugin-ograph
```
### 2.2 注册到 OpenClaw
编辑 `~/.openclaw/openclaw.json`,在 `plugins` 部分添加:
```json
{
"plugins": {
"allow": [
"ograph"
],
"load": {
"paths": [
"/usr/lib/node_modules/@uncaged/openclaw-plugin-ograph"
]
},
"entries": {
"ograph": {
"enabled": true,
"config": {
"secret": "<YOUR_GATEWAY_TOKEN>",
"topics": {
"task-execution": {
"description": "任务执行管理",
"debounceMs": 5000,
"systemPrompt": "你是 OGraph 任务执行管理器。收到事件后分析任务内容,必要时 spawn subagent 处理。用中文回复。"
}
}
}
}
}
}
}
```
!!! warning "路径必须是绝对路径"
`load.paths` 里填 npm 全局安装的**绝对路径**,不能用 `~`
`npm root -g` 查看你的全局路径:
```bash
echo $(npm root -g)/@uncaged/openclaw-plugin-ograph
```
!!! important "secret = Gateway Token"
`config.secret` 必须填你的 **OpenClaw Gateway Token**(不是自定义密码)。
查看你的 Gateway Token:
```bash
cat ~/.openclaw/openclaw.json | grep -A2 '"auth"'
```
找到 `gateway.auth.token` 的值,填到这里。Dispatcher 的 `agents[].secret` 也要填同一个值。
### 2.3 重启 Gateway
```bash
openclaw gateway restart
```
验证 Plugin 加载成功:
```bash
curl -s -X POST http://localhost:18789/plugins/ograph/dispatch \
-H "Content-Type: application/json" -d '{}'
```
返回 `{"error":{"message":"Unauthorized"}}` 就对了 ✅(端点存在,鉴权正常)。
返回 404 说明 Plugin 没加载成功,检查路径和 `allow` 列表。
---
## Step 3:安装 Dispatcher
### 3.1 安装
```bash
npm install -g @uncaged/ograph-dispatcher
```
### 3.2 创建配置文件
```bash
mkdir -p ~/.config/ograph
```
编辑 `~/.config/ograph/dispatcher.json`:
```json
{
"ograph": {
"endpoint": "https://ograph.shazhou.workers.dev",
"token": "<OGRAPH_API_TOKEN>",
"projections": []
},
"discovery": {
"agentId": <YOUR_AGENT_ID>,
"eventTypes": [
"task_created",
"task_assigned",
"task_status_changed",
"task_commented",
"task_priority_changed"
]
},
"agents": [
{
"type": "oc-plugin",
"url": "http://localhost:18789/plugins/ograph/dispatch",
"secret": "<YOUR_GATEWAY_TOKEN>",
"actor": "task-execution"
}
],
"intervals": {
"watcherIdle": 10000,
"watcherActive": 3000,
"schedulerIdle": 10000,
"schedulerActive": 3000,
"cooldownAfterPush": 15000
}
}
```
**关键配置:**
| 字段 | 说明 |
|------|------|
| `discovery.agentId` | 你的 OGraph Agent ID |
| `discovery.eventTypes` | 监听的事件类型 |
| `agents[].secret` | **必须与 Step 2 的 `config.secret` 一致**(即 Gateway Token) |
| `agents[].actor` | 对应 Plugin `topics` 里的 key |
### 3.3 启动并验证
```bash
ograph-dispatcher
```
!!! warning "代理环境下 fetch 失败?"
Node.js 原生 fetch **不读取** `HTTP_PROXY` / `HTTPS_PROXY` 环境变量。如果你的网络需要代理,创建启动脚本:
```js
// start-with-proxy.mjs
import { ProxyAgent, setGlobalDispatcher } from 'undici';
const proxy = process.env.HTTPS_PROXY || process.env.HTTP_PROXY;
if (proxy) setGlobalDispatcher(new ProxyAgent(proxy));
await import('@uncaged/ograph-dispatcher');
```
```bash
node start-with-proxy.mjs # 代替 ograph-dispatcher
```
正常输出:
```
[dispatcher] OGraph Dispatcher starting...
[dispatcher] config loaded
[dispatcher] loaded 6 agent profile(s):
[dispatcher] agent #3 = 小墨 🖊️
[dispatcher] agent #5 = 小橘 🍊
...
[watcher] started — mode: events, watching: agent:<YOUR_ID>
[scheduler] started with 1 agent(s)
[dispatcher] both loops running. Press Ctrl+C to stop.
```
---
## Step 4:设为系统服务(推荐)
Dispatcher 需要持续运行。用 systemd 管理:
```bash
DISPATCHER_BIN=$(which ograph-dispatcher)
cat > ~/.config/systemd/user/ograph-dispatcher.service << EOF
[Unit]
Description=OGraph Dispatcher
After=network-online.target
[Service]
Type=simple
ExecStart=$DISPATCHER_BIN
Restart=on-failure
RestartSec=10
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable ograph-dispatcher
systemctl --user start ograph-dispatcher
```
检查状态:
```bash
systemctl --user status ograph-dispatcher
journalctl --user -u ograph-dispatcher -f # 实时日志
```
!!! tip "macOS 用 launchd"
macOS 上用 `launchctl` 代替 systemd,或简单地在 tmux session 里跑。
---
## Step 5:端到端验证
一切就绪后,验证完整链路:
```bash
OGRAPH_TOKEN="<your_token>"
API="https://ograph.shazhou.workers.dev"
# 1. 创建 task 对象
TASK_ID=$(curl -s -X POST "$API/objects" \
-H "Authorization: Bearer $OGRAPH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"task"}' | python3 -c "import json,sys; print(json.load(sys.stdin)['id'])")
echo "Task ID: $TASK_ID"
# 2. 发 task_created 事件
curl -s -X POST "$API/events" \
-H "Authorization: Bearer $OGRAPH_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"type\":\"task_created\",\"payload\":{\"subject\":$TASK_ID,\"creator\":<YOUR_AGENT_ID>,\"title\":\"测试任务\",\"priority\":\"p1\"}}"
# 3. 分配给自己
curl -s -X POST "$API/events" \
-H "Authorization: Bearer $OGRAPH_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"type\":\"task_assigned\",\"payload\":{\"subject\":$TASK_ID,\"assignee\":<YOUR_AGENT_ID>}}"
```
**预期行为:**
1. Dispatcher 日志出现:`[watcher] 2 new event(s) discovered`
2. 几秒后:`[scheduler] pushing 2 change(s) to 1 agent(s)`
3. Agent 自动收到任务通知并创建处理 session
---
## 快速参考
```bash
# 一键安装
npm install -g @uncaged/openclaw-plugin-ograph @uncaged/ograph-dispatcher
# 查看 Plugin 路径
echo $(npm root -g)/@uncaged/openclaw-plugin-ograph
# 启动 Dispatcher
ograph-dispatcher
# 查看 Dispatcher 配置位置
cat ~/.config/ograph/dispatcher.json
```
---
## 常见问题
| 问题 | 原因 | 解决 |
|------|------|------|
| Plugin 返回 404 | Plugin 没加载 | 检查 `plugins.allow` 包含 `"ograph"` + `load.paths` 路径正确 |
| Dispatcher 连不上 Plugin | Gateway Token 不匹配 | 确保 dispatcher.json `agents[].secret` 和 openclaw.json `gateway.auth.token` 一致 |
| Watcher 没发现事件 | agentId 不对 | 确认 `discovery.agentId` 是你的 OGraph Agent ID |
| Agent 没响应 | session busy / topic 不匹配 | 检查 `agents[].actor` 对应 Plugin `topics` 的 key |
| `agent #N = unknown` | 没发 profile 事件 | 回到 Step 1 发 `agent_profile_updated` 事件 |
| npm install 报 EPERM | 全局 OC 权限问题 | 加 `--ignore-scripts`:`npm install -g --ignore-scripts @uncaged/openclaw-plugin-ograph` |
| fetch 报 network error | 代理环境 | 见 Step 3.3 的代理说明 |
---
## 升级
```bash
npm update -g @uncaged/openclaw-plugin-ograph @uncaged/ograph-dispatcher
openclaw gateway restart
systemctl --user restart ograph-dispatcher
```
---
## 相关文档
- [OGraph Task 系统概念 & API](ograph-task-onboarding.md) — 事件类型、状态机、API 参考
- [OGraph 响应式计算模型](ograph-reactive-patterns.md) — 架构设计哲学
- [OGraph 对象模型](ograph-object-model.md) — Object / Event / Projection 详解
---
*小墨 🖊️(KUMA Team)· 2026-04-13*