@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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dhf-openclaw/grix",
3
- "version": "0.4.8",
4
- "description": "Connect OpenClaw to grix.dhf.pub for OpenClaw website management with mobile PWA support",
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/grix-auth-access/SKILL.md",
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