@dhf-openclaw/grix 0.4.8 → 0.4.10
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/README.md +128 -159
- package/dist/index.js +1279 -1
- package/package.json +4 -11
- package/skills/egg-install/SKILL.md +21 -0
- package/skills/egg-install/references/api-contract.md +38 -0
- package/skills/grix-agent-admin/SKILL.md +85 -0
- package/skills/grix-agent-admin/agents/openai.yaml +4 -0
- package/skills/grix-agent-admin/references/api-contract.md +87 -0
- package/skills/grix-agent-admin/scripts/grix_agent_bind.py +587 -0
- package/skills/grix-group-governance/SKILL.md +144 -0
- package/skills/grix-group-governance/agents/openai.yaml +4 -0
- package/skills/grix-group-governance/references/api-contract.md +73 -0
- package/skills/grix-query/SKILL.md +151 -0
- package/skills/grix-query/agents/openai.yaml +4 -0
- package/skills/grix-auth-access/SKILL.md +0 -173
- package/skills/grix-auth-access/agents/openai.yaml +0 -4
- package/skills/grix-auth-access/references/api-contract.md +0 -56
- package/skills/grix-auth-access/references/grix-concepts.md +0 -30
- package/skills/grix-auth-access/references/openclaw-setup.md +0 -154
- package/skills/grix-auth-access/references/user-replies.md +0 -25
- package/skills/grix-auth-access/scripts/grix_auth.py +0 -1527
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhf-openclaw/grix",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.10",
|
|
4
|
+
"description": "Unified Grix OpenClaw plugin with channel transport, typed admin tools, and operator CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"exports": {
|
|
@@ -28,14 +28,7 @@
|
|
|
28
28
|
"README.md",
|
|
29
29
|
"openclaw.plugin.json",
|
|
30
30
|
"dist/index.js",
|
|
31
|
-
"skills
|
|
32
|
-
"skills/grix-auth-access/agents/openai.yaml",
|
|
33
|
-
"skills/grix-auth-access/references",
|
|
34
|
-
"skills/grix-auth-access/scripts/grix_auth.py",
|
|
35
|
-
"skills/egg-install/SKILL.md",
|
|
36
|
-
"skills/message-send/SKILL.md",
|
|
37
|
-
"skills/message-unsend/SKILL.md",
|
|
38
|
-
"skills/message-unsend/flowchart.mermaid"
|
|
31
|
+
"skills"
|
|
39
32
|
],
|
|
40
33
|
"publishConfig": {
|
|
41
34
|
"access": "public",
|
|
@@ -49,7 +42,7 @@
|
|
|
49
42
|
"publish:npm": "npm run publish:npm:preview",
|
|
50
43
|
"publish:npm:preview": "bash ./scripts/publish_npm.sh",
|
|
51
44
|
"publish:npm:release": "bash ./scripts/publish_npm.sh --publish",
|
|
52
|
-
"test": "node --test src/*.test.ts"
|
|
45
|
+
"test": "node --test src/*.test.ts src/admin/*.test.ts"
|
|
53
46
|
},
|
|
54
47
|
"devDependencies": {
|
|
55
48
|
"esbuild": "0.27.4",
|
|
@@ -33,6 +33,9 @@ description: 在虾塘触发的安装私聊中处理 egg 安装。适用于主 O
|
|
|
33
33
|
- 只在当前私聊里沟通,不要切换到隐藏协议,不要输出机器专用 JSON。
|
|
34
34
|
- 必须按 OpenClaw / Claude 的正规步骤安装,不要直接改后端数据库。
|
|
35
35
|
- 需要创建远端 API agent 时,使用 `grix_agent_admin`。
|
|
36
|
+
- 所有远端 API 通讯都必须走统一工具入口:`grix_query` / `grix_group` / `grix_agent_admin`,禁止在对话里自行发 HTTP 请求。
|
|
37
|
+
- 禁止使用 `curl`、`fetch`、`axios` 或临时脚本直连 `/v1/agent-api`。
|
|
38
|
+
- 单个业务动作只调用一次对应工具,失败后先说明原因,不要静默重试。
|
|
36
39
|
- `persona.zip` 只能面向 OpenClaw 目标。
|
|
37
40
|
- `skill.zip` 只能面向 Claude 目标。
|
|
38
41
|
- 不要自动新建 Claude 目标 agent。
|
|
@@ -65,6 +68,20 @@ server 不会猜自然语言。要让安装单进入"进行中 / 成功 / 失败
|
|
|
65
68
|
4. 这条指令只负责状态收口;如果要跟用户解释原因,另发一条正常文字消息。
|
|
66
69
|
5. `create_new` 成功时,必须尽量带 `target_agent_id`,否则 server 可能无法通过最终校验。
|
|
67
70
|
|
|
71
|
+
## 统一 API 请求机制
|
|
72
|
+
|
|
73
|
+
当安装流程需要访问 Grix 远端能力时,统一按下面路由,不要绕过:
|
|
74
|
+
|
|
75
|
+
1. 查联系人 / 会话 / 消息:调用 `grix_query`
|
|
76
|
+
2. 群治理动作(建群、加人、移人、禁言、解散):调用 `grix_group`
|
|
77
|
+
3. 创建远端 API agent:调用 `grix_agent_admin`
|
|
78
|
+
|
|
79
|
+
规则:
|
|
80
|
+
|
|
81
|
+
1. 不直接拼接 `Authorization` 或手工构造 `/v1/agent-api/*` 请求。
|
|
82
|
+
2. 不写临时通讯脚本,不走隐藏协议。
|
|
83
|
+
3. 优先复用 `accountId`;若上下文有歧义,先确认后再调用工具。
|
|
84
|
+
|
|
68
85
|
## 推荐流程
|
|
69
86
|
|
|
70
87
|
### `persona.zip` -> OpenClaw
|
|
@@ -147,3 +164,7 @@ server 不会猜自然语言。要让安装单进入"进行中 / 成功 / 失败
|
|
|
147
164
|
- 进度回报要短、明确、可执行
|
|
148
165
|
- 失败说明要具体
|
|
149
166
|
- 最终总结必须包含目标 agent 和安装结果
|
|
167
|
+
|
|
168
|
+
## References
|
|
169
|
+
|
|
170
|
+
1. Load [references/api-contract.md](references/api-contract.md).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# API Contract
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Unify remote API communication in `egg-install` with the same typed tool pathway used by other grix-admin skills.
|
|
6
|
+
|
|
7
|
+
## Base Rules
|
|
8
|
+
|
|
9
|
+
1. Base path is `/v1/agent-api`.
|
|
10
|
+
2. Auth is `Authorization: Bearer <agent_api_key>`.
|
|
11
|
+
3. Caller must be `provider_type=3` and `status=active`.
|
|
12
|
+
4. `egg-install` must not send direct HTTP requests to Grix by itself.
|
|
13
|
+
|
|
14
|
+
## Unified Tool Path
|
|
15
|
+
|
|
16
|
+
Use only these entry points for remote communication:
|
|
17
|
+
|
|
18
|
+
| Install intent | Tool | Notes |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| Contact/session/message lookup | `grix_query` | Read-only queries |
|
|
21
|
+
| Group lifecycle and membership ops | `grix_group` | Governance operations |
|
|
22
|
+
| Create remote API agent | `grix_agent_admin` | Returns `id`, `agent_name`, `api_endpoint`, `api_key`, `api_key_hint` |
|
|
23
|
+
|
|
24
|
+
Local binding remains a local operation via bundled script:
|
|
25
|
+
|
|
26
|
+
- `scripts/grix_agent_bind.py configure-local-openclaw ... --apply`
|
|
27
|
+
|
|
28
|
+
## Prohibited Paths
|
|
29
|
+
|
|
30
|
+
1. Do not use `curl`, `fetch`, `axios`, or custom temporary scripts to call `/v1/agent-api/*`.
|
|
31
|
+
2. Do not bypass typed tools with hidden protocol payloads.
|
|
32
|
+
3. Do not auto-retry non-idempotent create actions without explicit confirmation.
|
|
33
|
+
|
|
34
|
+
## Retry Policy
|
|
35
|
+
|
|
36
|
+
1. Scope/auth/parameter errors: no automatic retry.
|
|
37
|
+
2. Transient network failure: at most one retry, and only after explicit confirmation.
|
|
38
|
+
3. Installation status directives (`egg-install-status`) must still be emitted on terminal success/failure.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grix-agent-admin
|
|
3
|
+
description: 通过 Grix Agent API 协议创建 `provider_type=3` 的 API agent,并直接完成本地 OpenClaw agent 与 Grix 渠道绑定配置(默认直接应用并返回结果)。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Grix Agent Admin
|
|
7
|
+
|
|
8
|
+
Create a remote `provider_type=3` API agent, then complete local OpenClaw agent + grix channel binding in one flow.
|
|
9
|
+
|
|
10
|
+
## Security + Auth Path
|
|
11
|
+
|
|
12
|
+
1. This skill does **not** ask the user for website account/password.
|
|
13
|
+
2. Remote create action uses local `channels.grix` credentials and `Authorization: Bearer <agent_api_key>`.
|
|
14
|
+
3. Local OpenClaw config is handled by `scripts/grix_agent_bind.py`.
|
|
15
|
+
|
|
16
|
+
## Required Input
|
|
17
|
+
|
|
18
|
+
1. `agentName` (required): regex `^[a-z][a-z0-9-]{2,31}$`
|
|
19
|
+
2. `describeMessageTool` (required): must contain non-empty `actions`
|
|
20
|
+
3. `accountId` (optional)
|
|
21
|
+
4. `avatarUrl` (optional)
|
|
22
|
+
|
|
23
|
+
## Full Workflow
|
|
24
|
+
|
|
25
|
+
### A. Create Remote API Agent
|
|
26
|
+
|
|
27
|
+
1. Validate `agentName` and `describeMessageTool`.
|
|
28
|
+
2. Call `grix_agent_admin` once.
|
|
29
|
+
3. Read result fields: `id`, `agent_name`, `api_endpoint`, `api_key`, `api_key_hint`.
|
|
30
|
+
|
|
31
|
+
### B. Apply Local OpenClaw Binding Directly
|
|
32
|
+
|
|
33
|
+
Run with `--apply` directly:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
scripts/grix_agent_bind.py configure-local-openclaw \
|
|
37
|
+
--agent-name <agent_name> \
|
|
38
|
+
--agent-id <agent_id> \
|
|
39
|
+
--api-endpoint '<api_endpoint>' \
|
|
40
|
+
--api-key '<api_key>' \
|
|
41
|
+
--apply
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
This applies:
|
|
45
|
+
|
|
46
|
+
1. upsert `agents.list` for `<agent_name>`
|
|
47
|
+
2. upsert `channels.grix.accounts.<agent_name>`
|
|
48
|
+
3. upsert `bindings` route to `channel=grix`, `accountId=<agent_name>`
|
|
49
|
+
4. ensure required tools (`message`, `grix_group`, `grix_agent_admin`)
|
|
50
|
+
5. create workspace defaults under `~/.openclaw/workspace-<agent_name>/`
|
|
51
|
+
6. run `openclaw gateway restart`
|
|
52
|
+
|
|
53
|
+
### C. Optional Verification
|
|
54
|
+
|
|
55
|
+
If you need explicit post-check state, run:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
scripts/grix_agent_bind.py inspect-local-openclaw --agent-name <agent_name>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Guardrails
|
|
62
|
+
|
|
63
|
+
1. Never ask user for website account/password.
|
|
64
|
+
2. Treat remote create as non-idempotent; do not auto-retry without confirmation.
|
|
65
|
+
3. Keep full `api_key` one-time only; do not repeatedly echo it.
|
|
66
|
+
4. Do not claim success before apply command returns success.
|
|
67
|
+
|
|
68
|
+
## Error Handling Rules
|
|
69
|
+
|
|
70
|
+
1. invalid name: ask user for a valid English lowercase name.
|
|
71
|
+
2. `403/20011`: ask owner to grant `agent.api.create` scope.
|
|
72
|
+
3. `401/10001`: verify local `agent_api_key` / grix account config.
|
|
73
|
+
4. `409/20002`: ask for another agent name.
|
|
74
|
+
5. local apply failed: return concrete failed command/result and stop.
|
|
75
|
+
|
|
76
|
+
## Response Style
|
|
77
|
+
|
|
78
|
+
1. Report two stages separately: remote create status + local binding status.
|
|
79
|
+
2. Include created `agent_id`, `agent_name`, `api_endpoint`, `api_key_hint`.
|
|
80
|
+
3. Clearly state local config has been applied (or failed with concrete reason).
|
|
81
|
+
|
|
82
|
+
## References
|
|
83
|
+
|
|
84
|
+
1. Load [references/api-contract.md](references/api-contract.md).
|
|
85
|
+
2. Use [scripts/grix_agent_bind.py](scripts/grix_agent_bind.py) for local binding apply.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Grix Agent Admin"
|
|
3
|
+
short_description: "Create Grix API agents and finish local OpenClaw binding."
|
|
4
|
+
default_prompt: "Use this skill when users ask to create a new Grix API agent and finish OpenClaw binding. Never ask for website account/password. Validate `agentName` and require `describeMessageTool` (`actions` must be non-empty), then call `grix_agent_admin` once. After successful create, directly run `scripts/grix_agent_bind.py configure-local-openclaw ... --apply` and return final local binding result (success or exact failure reason)."
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# API Contract
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Map remote provisioning action to Aibot Agent API HTTP route, then hand over to local OpenClaw binding.
|
|
6
|
+
|
|
7
|
+
## Base Rules
|
|
8
|
+
|
|
9
|
+
1. Base path: `/v1/agent-api`
|
|
10
|
+
2. Auth: `Authorization: Bearer <agent_api_key>`
|
|
11
|
+
3. Caller must be `provider_type=3` and `status=active`.
|
|
12
|
+
4. Route must pass scope middleware before service business checks.
|
|
13
|
+
5. Do not ask users to provide website account/password for this flow.
|
|
14
|
+
|
|
15
|
+
## Action Mapping (v1)
|
|
16
|
+
|
|
17
|
+
| Tool | Method | Route | Required Scope |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| `grix_agent_admin` | `POST` | `/agents/create` | `agent.api.create` |
|
|
20
|
+
|
|
21
|
+
## Payload Template
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"agentName": "ops-assistant",
|
|
26
|
+
"avatarUrl": "https://example.com/avatar.png",
|
|
27
|
+
"describeMessageTool": {
|
|
28
|
+
"actions": ["unsend", "delete"]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`agentName` validation rule for this skill:
|
|
34
|
+
|
|
35
|
+
- regex: `^[a-z][a-z0-9-]{2,31}$`
|
|
36
|
+
- only lowercase English letters, digits, and hyphen
|
|
37
|
+
|
|
38
|
+
`describeMessageTool` is required and must align with OpenClaw SDK discovery shape (`actions` required, optional `capabilities` and `schema`).
|
|
39
|
+
|
|
40
|
+
## Success Payload Highlights
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"code": 0,
|
|
45
|
+
"data": {
|
|
46
|
+
"id": "2029786829095440384",
|
|
47
|
+
"agent_name": "ops-assistant",
|
|
48
|
+
"provider_type": 3,
|
|
49
|
+
"api_endpoint": "ws://host/v1/agent-api/ws?agent_id=2029786829095440384",
|
|
50
|
+
"api_key": "ak_2029786829095440384_xxx",
|
|
51
|
+
"api_key_hint": "xxxxxx12"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Error Matrix
|
|
57
|
+
|
|
58
|
+
| HTTP/BizCode | Meaning | Skill Response |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| `403/20011` | `agent.api.create` scope missing | Ask owner to grant scope |
|
|
61
|
+
| `401/10001` | invalid or missing auth | Check `api_key` and account config |
|
|
62
|
+
| `403/10002` | caller agent inactive / invalid provider | Ask owner to activate caller agent |
|
|
63
|
+
| `409/20002` | duplicate agent name | Ask user for another `agent_name` |
|
|
64
|
+
| `400/20004` | owner quota exceeded | Ask owner to clean up unused agents |
|
|
65
|
+
| `400/10003` | invalid payload | Ask for corrected parameters |
|
|
66
|
+
|
|
67
|
+
## Retry Policy
|
|
68
|
+
|
|
69
|
+
1. Never auto-retry `agent_api_create` unless user explicitly confirms.
|
|
70
|
+
2. Do not retry scope/auth/parameter failures.
|
|
71
|
+
3. Network transient errors can be retried once after explicit confirmation.
|
|
72
|
+
|
|
73
|
+
## Post-Create Handover
|
|
74
|
+
|
|
75
|
+
After `code=0`, continue with local OpenClaw binding via bundled script:
|
|
76
|
+
|
|
77
|
+
1. apply local changes directly:
|
|
78
|
+
- `scripts/grix_agent_bind.py configure-local-openclaw --agent-name <agent_name> --agent-id <agent_id> --api-endpoint '<api_endpoint>' --api-key '<api_key>' --apply`
|
|
79
|
+
2. optionally run inspect after apply when you need state verification:
|
|
80
|
+
- `scripts/grix_agent_bind.py inspect-local-openclaw --agent-name <agent_name>`
|
|
81
|
+
|
|
82
|
+
Local apply writes:
|
|
83
|
+
|
|
84
|
+
1. `agents.list` entry
|
|
85
|
+
2. `channels.grix.accounts.<agent_name>` entry
|
|
86
|
+
3. `bindings` route for `channel=grix`
|
|
87
|
+
4. required tools config and gateway restart
|