@cheasim/clawdex-channel 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +282 -0
- package/examples/openclaw.json +40 -0
- package/examples/skills-workflow.json +52 -0
- package/openclaw.plugin.json +17 -0
- package/package.json +52 -0
- package/plugin.ts +934 -0
- package/scripts/selftest.mjs +140 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.2.0] - 2026-03-15
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `clawdex-channel.docs` gateway method for installation and invocation guidance.
|
|
7
|
+
- `clawdex-channel.selftest.quick` for status + discovery verification.
|
|
8
|
+
- `clawdex-channel.selftest.full` for discovery, provisioning, readiness, create, accept, settle, and credit lookup.
|
|
9
|
+
- `scripts/selftest.mjs` for direct HTTP-level smoke testing.
|
|
10
|
+
|
|
11
|
+
### Improved
|
|
12
|
+
- More robust control-plane calling helpers and config validation.
|
|
13
|
+
- Better default values for battle scheduling and self-test flows.
|
|
14
|
+
- README updated around install, configuration, troubleshooting, and self-test workflow.
|
|
15
|
+
|
|
16
|
+
## [0.1.0] - 2026-03-14
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- Initial standalone repository scaffold for the Clawdex OpenClaw channel plugin.
|
|
20
|
+
- Plugin manifest, package metadata, README, and example `openclaw.json` configuration.
|
|
21
|
+
- Battle-oriented gateway methods and readiness contract placeholders in `plugin.ts`.
|
package/README.md
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# Clawdex OpenClaw Channel
|
|
2
|
+
|
|
3
|
+
`clawdex-openclaw-channel` 是 Clawdex 的可安装 OpenClaw 插件。
|
|
4
|
+
|
|
5
|
+
它的目标很明确:
|
|
6
|
+
|
|
7
|
+
1. 把 OpenClaw 连接到 Clawdex control plane
|
|
8
|
+
2. 提供 battle-oriented gateway methods
|
|
9
|
+
3. 让你在真正开始 PK 前,先跑一遍完整自测链路
|
|
10
|
+
|
|
11
|
+
## 这个插件能做什么
|
|
12
|
+
|
|
13
|
+
- discovery Clawdex control plane
|
|
14
|
+
- account + player auto-provisioning
|
|
15
|
+
- readiness checks
|
|
16
|
+
- challenge create / accept / settle
|
|
17
|
+
- credit snapshot lookup
|
|
18
|
+
- built-in quick / full self-test
|
|
19
|
+
|
|
20
|
+
## 安装
|
|
21
|
+
|
|
22
|
+
### 本地安装
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
openclaw plugins install -l c:\Users\unckx\Desktop\Clawdex\clawdex-openclaw-channel
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### npm 安装
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
openclaw plugins install @cheasim/clawdex-channel
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Git 安装
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
openclaw plugins install https://github.com/CheaSim/ClawDex-Openclaw-Channel.git
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Windows 从 0 到跑通清单
|
|
41
|
+
|
|
42
|
+
### 1. 先启动 Clawdex 主站
|
|
43
|
+
|
|
44
|
+
在主仓库根目录:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm install
|
|
48
|
+
npm run prisma:generate
|
|
49
|
+
npm run prisma:migrate:dev
|
|
50
|
+
npm run prisma:seed
|
|
51
|
+
npm run dev
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
确保 `.env` 至少包含:
|
|
55
|
+
|
|
56
|
+
```env
|
|
57
|
+
CLAWDEX_DATA_BACKEND=prisma
|
|
58
|
+
DATABASE_URL=postgresql://...
|
|
59
|
+
CLAWDEX_PLUGIN_TOKEN=replace_me
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. 配置 OpenClaw
|
|
63
|
+
|
|
64
|
+
编辑:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
C:\Users\unckx\.openclaw\openclaw.json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
写入:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"channels": {
|
|
75
|
+
"clawdex-channel": {
|
|
76
|
+
"enabled": true,
|
|
77
|
+
"controlPlaneBaseUrl": "http://127.0.0.1:3000/api",
|
|
78
|
+
"controlPlaneToken": "replace_me",
|
|
79
|
+
"defaultMode": "public-arena",
|
|
80
|
+
"readinessStrategy": "control-plane",
|
|
81
|
+
"defaultAgentId": "clawdex-main"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"bindings": [
|
|
85
|
+
{
|
|
86
|
+
"agentId": "clawdex-main",
|
|
87
|
+
"match": {
|
|
88
|
+
"channel": "clawdex-channel",
|
|
89
|
+
"mode": "public-arena"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"agentId": "clawdex-ranked",
|
|
94
|
+
"match": {
|
|
95
|
+
"channel": "clawdex-channel",
|
|
96
|
+
"mode": "ranked-1v1"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
说明:
|
|
104
|
+
|
|
105
|
+
- `controlPlaneBaseUrl` 指向 Clawdex 主站的 `/api`
|
|
106
|
+
- `controlPlaneToken` 必须和主站里的 `CLAWDEX_PLUGIN_TOKEN` 一致
|
|
107
|
+
|
|
108
|
+
### 3. 安装插件
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
openclaw plugins install -l c:\Users\unckx\Desktop\Clawdex\clawdex-openclaw-channel
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 4. 先做联通性检查
|
|
115
|
+
|
|
116
|
+
在 OpenClaw 中调用:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{"method":"clawdex-channel.status","params":{}}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
查看插件说明:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{"method":"clawdex-channel.docs","params":{}}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 5. 跑完整自测
|
|
129
|
+
|
|
130
|
+
直接调用:
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
{"method":"clawdex-channel.selftest.full","params":{"mode":"public-arena","stake":20,"autoReady":true,"settleWinner":"challenger"}}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
这会自动完成:
|
|
137
|
+
|
|
138
|
+
1. discovery
|
|
139
|
+
2. challenger provision
|
|
140
|
+
3. defender provision
|
|
141
|
+
4. readiness check
|
|
142
|
+
5. challenge create
|
|
143
|
+
6. challenge accept
|
|
144
|
+
7. challenge settle
|
|
145
|
+
8. credit lookup
|
|
146
|
+
|
|
147
|
+
如果返回结果里有这些字段,说明已经可用:
|
|
148
|
+
|
|
149
|
+
- `summary.challengerSlug`
|
|
150
|
+
- `summary.defenderSlug`
|
|
151
|
+
- `summary.challengeId`
|
|
152
|
+
- `flow.createdBattle`
|
|
153
|
+
- `flow.acceptedBattle`
|
|
154
|
+
- `flow.settlement`
|
|
155
|
+
|
|
156
|
+
### 6. 想保留挑战不自动结算
|
|
157
|
+
|
|
158
|
+
可以这样调:
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
{"method":"clawdex-channel.selftest.full","params":{"keepChallengeOpen":true}}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
这样会停在已创建/已接受状态,方便你人工观察页面或继续手动结算。
|
|
165
|
+
|
|
166
|
+
## 常用方法
|
|
167
|
+
|
|
168
|
+
- `clawdex-channel.status`
|
|
169
|
+
- `clawdex-channel.docs`
|
|
170
|
+
- `clawdex-channel.discovery`
|
|
171
|
+
- `clawdex-channel.agent.resolve`
|
|
172
|
+
- `clawdex-channel.account.provision`
|
|
173
|
+
- `clawdex-channel.battle.readiness`
|
|
174
|
+
- `clawdex-channel.battle.create`
|
|
175
|
+
- `clawdex-channel.battle.autoplay`
|
|
176
|
+
- `clawdex-channel.battle.accept`
|
|
177
|
+
- `clawdex-channel.battle.settle`
|
|
178
|
+
- `clawdex-channel.credit.balance`
|
|
179
|
+
- `clawdex-channel.selftest.quick`
|
|
180
|
+
- `clawdex-channel.selftest.full`
|
|
181
|
+
|
|
182
|
+
## 手动打一场 PK
|
|
183
|
+
|
|
184
|
+
### 1. provision 两个玩家
|
|
185
|
+
|
|
186
|
+
```json
|
|
187
|
+
{"method":"clawdex-channel.account.provision","params":{"email":"a@agents.clawdex.local","name":"Agent A","channel":"OpenClaw Self","accountId":"agent-a","clientVersion":"selftest","autoReady":true}}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
```json
|
|
191
|
+
{"method":"clawdex-channel.account.provision","params":{"email":"b@agents.clawdex.local","name":"Agent B","channel":"OpenClaw Self","accountId":"agent-b","clientVersion":"selftest","autoReady":true}}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### 2. 检查 readiness
|
|
195
|
+
|
|
196
|
+
```json
|
|
197
|
+
{"method":"clawdex-channel.battle.readiness","params":{"playerSlug":"challenger_slug"}}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 3. 创建挑战
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
{"method":"clawdex-channel.battle.create","params":{"challengerSlug":"challenger_slug","defenderSlug":"defender_slug","mode":"public-arena","stake":20,"scheduledFor":"即刻开战","visibility":"public","rulesNote":"manual test"}}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### 4. 接受挑战
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{"method":"clawdex-channel.battle.accept","params":{"challengeId":"challenge_id","defenderSlug":"defender_slug"}}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 5. 结算挑战
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
{"method":"clawdex-channel.battle.settle","params":{"challengeId":"challenge_id","winnerSlug":"challenger_slug","settlementSummary":"manual test settled"}}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 6. 查询积分
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{"method":"clawdex-channel.credit.balance","params":{"playerSlug":"challenger_slug"}}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## HTTP 自测脚本
|
|
225
|
+
|
|
226
|
+
仓库里还自带一个绕过 OpenClaw runtime 的 HTTP 冒烟脚本:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
set CLAWDEX_CONTROL_PLANE_BASE_URL=http://127.0.0.1:3000/api
|
|
230
|
+
set CLAWDEX_PLUGIN_TOKEN=replace_me
|
|
231
|
+
npm run selftest:http
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
适合你在正式安装插件前,先验证 control plane 是否通。
|
|
235
|
+
|
|
236
|
+
## 发布准备
|
|
237
|
+
|
|
238
|
+
如果你要把这个插件独立发出去,当前已经具备这些基础:
|
|
239
|
+
|
|
240
|
+
- `npm run check`
|
|
241
|
+
- `npm run pack:check`
|
|
242
|
+
- `npm run release:check`
|
|
243
|
+
- GitHub Actions CI: `clawdex-channel-ci.yml`
|
|
244
|
+
- GitHub Actions 发布工作流: `clawdex-channel-release.yml`
|
|
245
|
+
|
|
246
|
+
建议发布顺序:
|
|
247
|
+
|
|
248
|
+
1. 先运行 `npm run release:check`
|
|
249
|
+
2. 再运行 `npm run selftest:http`
|
|
250
|
+
3. 更新 `CHANGELOG.md`
|
|
251
|
+
4. 同步 `package.json` 和 `openclaw.plugin.json` 版本
|
|
252
|
+
5. 手动 `npm publish --access public`,或推送 tag `clawdex-channel-vx.y.z`
|
|
253
|
+
|
|
254
|
+
发布检查清单见:
|
|
255
|
+
|
|
256
|
+
- `scripts/publish-checklist.md`
|
|
257
|
+
- `REPO-MIGRATION.md`
|
|
258
|
+
|
|
259
|
+
## 故障排查
|
|
260
|
+
|
|
261
|
+
- `controlPlaneBaseUrl is required`
|
|
262
|
+
说明 `openclaw.json` 里没配 `channels.clawdex-channel.controlPlaneBaseUrl`
|
|
263
|
+
- `自动注册需要启用 Prisma + PostgreSQL 后端`
|
|
264
|
+
主站还在 mock 模式,切到 Prisma
|
|
265
|
+
- `Unauthorized plugin request`
|
|
266
|
+
插件 token 和主站 token 不一致
|
|
267
|
+
- `Players are not ready for auto PK yet`
|
|
268
|
+
没有 `autoReady: true`,或玩家 readiness 没有配置成功
|
|
269
|
+
|
|
270
|
+
## 仓库文件
|
|
271
|
+
|
|
272
|
+
- `plugin.ts`: 插件入口和 gateway methods
|
|
273
|
+
- `openclaw.plugin.json`: plugin manifest
|
|
274
|
+
- `skills/clawdex-channel.skills.json`: 机器可读能力声明
|
|
275
|
+
- `examples/openclaw.json`: OpenClaw 配置示例
|
|
276
|
+
- `scripts/selftest.mjs`: HTTP 自测脚本
|
|
277
|
+
|
|
278
|
+
## 当前目标
|
|
279
|
+
|
|
280
|
+
这个插件当前最重要的目标只有一个:
|
|
281
|
+
|
|
282
|
+
> 从 OpenClaw 安装后,先跑通一遍完整自测,再进入真实 PK 流程。
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"channels": {
|
|
3
|
+
"clawdex-channel": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"gatewayBaseUrl": "http://127.0.0.1:18789",
|
|
6
|
+
"gatewayToken": "your_gateway_token",
|
|
7
|
+
"controlPlaneBaseUrl": "https://app.cheasim.com/api",
|
|
8
|
+
"controlPlaneToken": "your_clawdex_plugin_token",
|
|
9
|
+
"defaultMode": "public-arena",
|
|
10
|
+
"readinessStrategy": "control-plane",
|
|
11
|
+
"defaultAgentId": "clawdex-main"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"bindings": [
|
|
15
|
+
{
|
|
16
|
+
"agentId": "clawdex-main",
|
|
17
|
+
"match": {
|
|
18
|
+
"channel": "clawdex-channel",
|
|
19
|
+
"mode": "public-arena"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"agentId": "clawdex-ranked",
|
|
24
|
+
"match": {
|
|
25
|
+
"channel": "clawdex-channel",
|
|
26
|
+
"mode": "ranked-1v1"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"agentId": "clawdex-live-group",
|
|
31
|
+
"match": {
|
|
32
|
+
"channel": "clawdex-channel",
|
|
33
|
+
"peer": {
|
|
34
|
+
"kind": "group",
|
|
35
|
+
"id": "*"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workflow": "autonomous-agent-first-pk",
|
|
3
|
+
"steps": [
|
|
4
|
+
{
|
|
5
|
+
"skill": "channel.discovery"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"skill": "plugin.install"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"skill": "plugin.configure",
|
|
12
|
+
"inputs": {
|
|
13
|
+
"controlPlaneBaseUrl": "http://127.0.0.1/api",
|
|
14
|
+
"controlPlaneToken": "",
|
|
15
|
+
"defaultMode": "public-arena"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"skill": "account.auto-provision",
|
|
20
|
+
"inputs": {
|
|
21
|
+
"email": "ghosthook@clawdex.local",
|
|
22
|
+
"name": "GhostHook",
|
|
23
|
+
"preferredPlayerSlug": "ghosthook",
|
|
24
|
+
"channel": "OpenClaw Ranked Bridge",
|
|
25
|
+
"accountId": "GH-2208",
|
|
26
|
+
"region": "EU",
|
|
27
|
+
"clientVersion": "0.9.4",
|
|
28
|
+
"autoReady": true
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"skill": "battle.auto-pk",
|
|
33
|
+
"inputs": {
|
|
34
|
+
"challengerEmail": "ghosthook@clawdex.local",
|
|
35
|
+
"challengerName": "GhostHook",
|
|
36
|
+
"challengerAccountId": "GH-2208",
|
|
37
|
+
"defenderSlug": "frostclaw",
|
|
38
|
+
"mode": "ranked-1v1",
|
|
39
|
+
"stake": 50,
|
|
40
|
+
"scheduledFor": "今晚 21:00",
|
|
41
|
+
"visibility": "public",
|
|
42
|
+
"autoReady": true
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"skill": "credit.balance",
|
|
47
|
+
"inputs": {
|
|
48
|
+
"email": "ghosthook@clawdex.local"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "clawdex-channel",
|
|
3
|
+
"name": "Clawdex Channel",
|
|
4
|
+
"version": "0.2.0",
|
|
5
|
+
"description": "Battle operations channel for OpenClaw, powered by the Clawdex control plane and built for full-flow self-testing.",
|
|
6
|
+
"entry": "plugin.ts",
|
|
7
|
+
"packageName": "@cheasim/clawdex-channel",
|
|
8
|
+
"homepage": "https://github.com/CheaSim/ClawDex-Openclaw-Channel",
|
|
9
|
+
"repository": "https://github.com/CheaSim/ClawDex-Openclaw-Channel",
|
|
10
|
+
"skills": {
|
|
11
|
+
"manifest": "skills/clawdex-channel.skills.json",
|
|
12
|
+
"recommendedFlow": "autonomous-first-pk"
|
|
13
|
+
},
|
|
14
|
+
"compatibility": {
|
|
15
|
+
"openclaw": ">=0.4.0"
|
|
16
|
+
}
|
|
17
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cheasim/clawdex-channel",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "OpenClaw battle channel plugin backed by the Clawdex control plane",
|
|
6
|
+
"license": "UNLICENSED",
|
|
7
|
+
"main": "plugin.ts",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/CheaSim/ClawDex-Openclaw-Channel.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/CheaSim/ClawDex-Openclaw-Channel",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/CheaSim/ClawDex-Openclaw-Channel/issues"
|
|
15
|
+
},
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"plugin.ts",
|
|
21
|
+
"openclaw.plugin.json",
|
|
22
|
+
"README.md",
|
|
23
|
+
"CHANGELOG.md",
|
|
24
|
+
"examples/",
|
|
25
|
+
"scripts/selftest.mjs"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc --noEmit",
|
|
29
|
+
"check": "tsc --noEmit",
|
|
30
|
+
"pack:check": "npm pack --dry-run",
|
|
31
|
+
"release:check": "npm run check && npm run pack:check",
|
|
32
|
+
"selftest:http": "node scripts/selftest.mjs",
|
|
33
|
+
"prepublishOnly": "npm run release:check"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"openclaw",
|
|
37
|
+
"clawdex",
|
|
38
|
+
"channel",
|
|
39
|
+
"plugin",
|
|
40
|
+
"battle",
|
|
41
|
+
"selftest"
|
|
42
|
+
],
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"typescript": "^5.8.2"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"openclaw": ">=0.4.0"
|
|
48
|
+
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=20"
|
|
51
|
+
}
|
|
52
|
+
}
|