diff --git a/openclaw.json b/openclaw.json index acceae0..151d874 100644 --- a/openclaw.json +++ b/openclaw.json @@ -183,8 +183,8 @@ "agentDir": "/home/yangxuan/.openclaw/agents/resume/agent", "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -198,8 +198,8 @@ "agentDir": "/home/yangxuan/.openclaw/agents/travel/agent", "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -213,8 +213,8 @@ "agentDir": "/home/yangxuan/.openclaw/agents/fitness/agent", "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -228,8 +228,8 @@ "agentDir": "/home/yangxuan/.openclaw/agents/finances/agent", "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -243,8 +243,8 @@ "agentDir": "/home/yangxuan/.openclaw/agents/juaner/agent", "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -270,8 +270,8 @@ "agentDir": "/home/yangxuan/.openclaw/agents/note/agent", "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -283,10 +283,10 @@ "name": "PBS备份", "workspace": "/home/yangxuan/.openclaw/workspace-pbs", "agentDir": "/home/yangxuan/.openclaw/agents/pbs/agent", - "model": { + "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -300,8 +300,8 @@ "agentDir": "/home/yangxuan/.openclaw/agents/wellness/agent", "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -313,10 +313,10 @@ "name": "导航页", "workspace": "/home/yangxuan/.openclaw/workspace-tab", "agentDir": "/home/yangxuan/.openclaw/agents/tab/agent", - "model": { + "model": { "primary": "deepseek/deepseek-flash" - }, - "models": { + }, + "models": { "deepseek/deepseek-flash": {} }, "identity": { @@ -410,7 +410,10 @@ "commands": { "native": "auto", "nativeSkills": "auto", - "restart": true + "restart": true, + "ownerAllowFrom": [ + "feishu:ou_28124d6721134f0e31d6122d30088418" + ] }, "session": { "dmScope": "per-channel-peer" @@ -623,7 +626,8 @@ "searxng", "openclaw-weixin", "dingtalk-connector", - "openclaw-lark" + "openclaw-lark", + "feishu" ], "entries": { "ollama": { @@ -654,10 +658,10 @@ "enabled": false }, "feishu": { - "enabled": false + "enabled": true }, "openclaw-lark": { - "enabled": true + "enabled": false } } }, @@ -672,28 +676,25 @@ }, "feishu": { "enabled": true, - "appId": "cli_aa2a59f378b8c19b", + "appId": "cli_aa2274de26b8c0db", "appSecret": { - "source": "file", - "provider": "lark-secrets", - "id": "/lark/appSecret" + "source": "store", + "provider": "default", + "id": "FEISHU_APP_SECRET" }, "domain": "feishu", "connectionMode": "websocket", "requireMention": true, "dmPolicy": "allowlist", - "allowFrom": [ - "ou_d6f8d891fe1898d6da683542e7e76a81" - ], - "groupAllowFrom": [ - "ou_d6f8d891fe1898d6da683542e7e76a81" - ], "groupPolicy": "allowlist", "groups": { "*": { "enabled": true } - } + }, + "allowFrom": [ + "ou_28124d6721134f0e31d6122d30088418" + ] } }, "bindings": [ @@ -712,7 +713,7 @@ } }, { - "agentId": "fitness", + "agentId": "main", "match": { "channel": "feishu" } diff --git a/plugin-skills/feishu-bitable b/plugin-skills/feishu-bitable deleted file mode 120000 index 94fdb10..0000000 --- a/plugin-skills/feishu-bitable +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-bitable \ No newline at end of file diff --git a/plugin-skills/feishu-calendar b/plugin-skills/feishu-calendar deleted file mode 120000 index e8e72a0..0000000 --- a/plugin-skills/feishu-calendar +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-calendar \ No newline at end of file diff --git a/plugin-skills/feishu-channel-rules b/plugin-skills/feishu-channel-rules deleted file mode 120000 index 225e6f3..0000000 --- a/plugin-skills/feishu-channel-rules +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-channel-rules \ No newline at end of file diff --git a/plugin-skills/feishu-create-doc b/plugin-skills/feishu-create-doc deleted file mode 120000 index a5f3e8d..0000000 --- a/plugin-skills/feishu-create-doc +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-create-doc \ No newline at end of file diff --git a/plugin-skills/feishu-doc b/plugin-skills/feishu-doc new file mode 120000 index 0000000..b637772 --- /dev/null +++ b/plugin-skills/feishu-doc @@ -0,0 +1 @@ +/home/yangxuan/.openclaw/npm/projects/openclaw-feishu-dc69f44688/node_modules/@openclaw/feishu/skills/feishu-doc \ No newline at end of file diff --git a/plugin-skills/feishu-drive b/plugin-skills/feishu-drive new file mode 120000 index 0000000..fb1b269 --- /dev/null +++ b/plugin-skills/feishu-drive @@ -0,0 +1 @@ +/home/yangxuan/.openclaw/npm/projects/openclaw-feishu-dc69f44688/node_modules/@openclaw/feishu/skills/feishu-drive \ No newline at end of file diff --git a/plugin-skills/feishu-fetch-doc b/plugin-skills/feishu-fetch-doc deleted file mode 120000 index 98a468d..0000000 --- a/plugin-skills/feishu-fetch-doc +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-fetch-doc \ No newline at end of file diff --git a/plugin-skills/feishu-im-read b/plugin-skills/feishu-im-read deleted file mode 120000 index 04f2679..0000000 --- a/plugin-skills/feishu-im-read +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-im-read \ No newline at end of file diff --git a/plugin-skills/feishu-perm b/plugin-skills/feishu-perm new file mode 120000 index 0000000..f30d0c8 --- /dev/null +++ b/plugin-skills/feishu-perm @@ -0,0 +1 @@ +/home/yangxuan/.openclaw/npm/projects/openclaw-feishu-dc69f44688/node_modules/@openclaw/feishu/skills/feishu-perm \ No newline at end of file diff --git a/plugin-skills/feishu-task b/plugin-skills/feishu-task deleted file mode 120000 index 08065b5..0000000 --- a/plugin-skills/feishu-task +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-task \ No newline at end of file diff --git a/plugin-skills/feishu-troubleshoot b/plugin-skills/feishu-troubleshoot deleted file mode 120000 index 02934f5..0000000 --- a/plugin-skills/feishu-troubleshoot +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-troubleshoot \ No newline at end of file diff --git a/plugin-skills/feishu-update-doc b/plugin-skills/feishu-update-doc deleted file mode 120000 index 17f31ea..0000000 --- a/plugin-skills/feishu-update-doc +++ /dev/null @@ -1 +0,0 @@ -/home/yangxuan/.openclaw/extensions/openclaw-lark/skills/feishu-update-doc \ No newline at end of file diff --git a/plugin-skills/feishu-wiki b/plugin-skills/feishu-wiki new file mode 120000 index 0000000..b172502 --- /dev/null +++ b/plugin-skills/feishu-wiki @@ -0,0 +1 @@ +/home/yangxuan/.openclaw/npm/projects/openclaw-feishu-dc69f44688/node_modules/@openclaw/feishu/skills/feishu-wiki \ No newline at end of file diff --git a/skill-workshop/proposals/cross-agent-chat-20260915-323f300617/generations/0c30a333-78da-490f-943d-88e5278f6067/PROPOSAL.md b/skill-workshop/proposals/cross-agent-chat-20260915-323f300617/generations/0c30a333-78da-490f-943d-88e5278f6067/PROPOSAL.md new file mode 100644 index 0000000..9e478fa --- /dev/null +++ b/skill-workshop/proposals/cross-agent-chat-20260915-323f300617/generations/0c30a333-78da-490f-943d-88e5278f6067/PROPOSAL.md @@ -0,0 +1,27 @@ +--- +name: "cross-agent-chat" +description: "怎么和其他 agent 聊天、消息没到某 agent:查 bindings 路由,openclaw agent --agent 一问一答,Control UI 切换,sessions_send 委派。" +status: proposal +version: "v1" +date: "2026-09-15T05:09:03.194Z" +--- + +# Cross-agent chat + +用于回答「怎么和其他 agent 聊天」「让某 agent 处理」「消息为什么到不了某 agent」,并把消息实际送到同级 agent。 + +## 事实基础 +- 入站渠道消息由 `bindings` 决定落到哪个 agent:`gateway(config.get, path="bindings")`。 +- CLI 无需渠道即可给同级 agent 发一轮对话:`openclaw agent --agent --message "<文本>"`,经 Gateway 运行并打印回复。已实测:`openclaw agent --agent travel --message "..."` 直接返回 travel 的回复。 +- Control UI 侧边栏顶部身份行 → agent 切换器,只改变 Chat 归属 agent(多 agent 环境才有)。 +- agent 侧转达/委派:`sessions_send(agentId=...)` / `sessions_spawn(agentId=...)`,受 `tools.agentToAgent`(本机 enabled + allow 列表)与 `tools.sessions.visibility` 控制。 + +## 步骤 +1. 列 agent:`agents_list`,或 `openclaw agents list --bindings`。 +2. 回答「某渠道能不能到某 agent」前,先读 `bindings`(feishu 当前只绑 main,飞书 DM 到不了其他 agent);不要凭猜测断言。 +3. 要把消息真的发给同级 agent:`openclaw agent --agent --message "..."`;复用既有会话用 `--session-key`。 +4. 在本轮内委派:`sessions_send(agentId=...)`;需要独立可回访会话时 `sessions_spawn(agentId=..., visible=true)`。 +5. 告知用户自助入口:Control UI 切换器,或上述 CLI 命令。 + +## 参考 +- `docs/tools/agent-send.md`、`docs/cli/agent.md`、`docs/concepts/multi-agent.md`、`docs/web/control-ui.md`(相对 `/docs`)。 diff --git a/skill-workshop/proposals/session-lifecycle-triage-20260915-9c558bb281/generations/ed7d2367-8cf9-4ffe-b014-547f0c274c25/PROPOSAL.md b/skill-workshop/proposals/session-lifecycle-triage-20260915-9c558bb281/generations/ed7d2367-8cf9-4ffe-b014-547f0c274c25/PROPOSAL.md new file mode 100644 index 0000000..84d46a2 --- /dev/null +++ b/skill-workshop/proposals/session-lifecycle-triage-20260915-9c558bb281/generations/ed7d2367-8cf9-4ffe-b014-547f0c274c25/PROPOSAL.md @@ -0,0 +1,27 @@ +--- +name: "session-lifecycle-triage" +description: "删除/归档会话失败(did not finish stopping)时,只读定位 placement 键不匹配并走受支持修复路径。" +status: proposal +version: "v1" +date: "2026-09-15T05:29:00.623Z" +--- + +# 会话删除/归档失败排查(session lifecycle triage) + +用于「删除会话」「归档会话」失败时,只读定位原因并走受支持路径,绝不绕过守卫。 + +## 事实基础(OpenClaw 2026.8.1 实测) +- 守卫比对 placement 记录的 `sessionId + sessionKey + agentId`;不一致即报 `... cloud worker placement identity changed`,delete/archive 一律失败。 +- cron 会话的 placement `session_key` 形如 `agent::cron::run:`,而会话注册 key 是 `agent::cron:`。二者后缀不同 → 守卫拒绝 stop。 +- placement `state=local` 且无 turn claim,说明没有正在跑的工作,此时「等它跑完再删」不会生效。 +- 外部 `sqlite3` 无法打开活动状态目录下的库(报 `external sqlite3 cannot open databases under the active OpenClaw state directory`)。 +- 拥有该会话的一次性 cron 作业运行后已自删时,这条 stale placement 行不会被后续 reconcile 自动清理。 + +## 步骤 +1. 先执行 `openclaw sessions delete "" --agent --yes --json`。若报 `did not finish stopping` 或 `cloud worker placement identity changed`,进入下一步。 +2. 只读查 placement 行:把 `state/openclaw.sqlite`、`openclaw.sqlite-wal`、`openclaw.sqlite-shm` 复制到临时目录(如 `/tmp/olstate-inspect/`),再执行 + `sqlite3 -readonly <临时副本> "select session_id,agent_id,session_key,state,transition_generation,environment_id,turn_claim_owner from worker_session_placements where session_id='';"` + 查完立即删除临时副本。**绝不**让 sqlite3 指向活动状态目录。 +3. 对比 placement 的 `session_key` 与会话注册 key。若为上述 `:run:` 后缀差异,即守卫拒绝原因;同时确认 `state` 与 `turn_claim_owner` 判断有无活跃工作。 +4. 走受支持修复路径之一:稍后重试;退出 OpenClaw 后在 shell 跑 `openclaw doctor`(受支持修复入口);仍失败则用 `openclaw logs` 加完整报错上报缺陷。**禁止**直接改 `state/openclaw.sqlite` 来绕守卫。 +5. 若仍删不掉,向用户说明:会话仍可见、不影响其他功能,并列出上面三条路径请其选择,不擅自绕过。