重构仓库目录为统一的 runtime 分层并清理历史 openclaw 残留。

本次迁移将网关/通道/工具/技能/脚本与协议资源集中到新结构,统一路径常量与脚本转发机制,减少顶层噪音并保证运行与测试行为一致。

Made-with: Cursor
This commit is contained in:
oliver 2026-04-25 01:24:23 +08:00
parent ba3836f00f
commit 4a23b715a2
498 changed files with 2760 additions and 2200 deletions

View file

@ -0,0 +1,32 @@
# 架构总览(当前真相)
本文件用于描述当前仓库分层与目录职责,避免迁移后“认知滞后”。
## 顶层目录职责
- `runtime/`:运行时主域(agent、gateway 执行流、skills/hooks/extensions、operations)。
- `interfaces/`:对外接口层(HTTP、WS、Admin、Gateway method bridge)。
- `platform/`:通用平台能力(配置、存储、LLM transport、文件层)。
- `prompts/`:统一提示词体系(含 runtime 相关提示模板)。
- `tests/`:测试代码(按你的要求保持顶层)。
- `docs/`:设计文档、运维说明、迁移记录。
## runtime 内部建议边界
- `runtime/core/`:可复用执行内核(如 agent 执行管线聚合入口)。
- `runtime/app/`:应用侧入口组织(面向外部流程的 runtime 编排)。
- `runtime/agents|chat|orchestration|workers`:领域能力模块。
- `runtime/skills|hooks|extensions`:可扩展能力载体。
- `runtime/operations/scripts`:运维脚本与生成器。
## 路径规范
- 运行时资源路径统一通过 `platform/config/runtime_paths.py` 获取。
- 禁止新增硬编码目录字符串(如直接拼 `oclaw/runtime/...`)。
## 依赖方向(原则)
- `interfaces -> runtime -> platform`(尽量单向)。
- `runtime` 不反向依赖 `interfaces`(必要时通过协议/回调解耦)。
- `docs/tests` 可依赖任意层,但不应反向影响运行时代码设计。

View file

@ -29,7 +29,7 @@ npm run pack:win
这个命令会自动做两件事:
1. 执行 `prepare:icon`,从 `oclaw/admin/static/oliver.svg` 生成 `desktop/assets/oclaw.ico`
1. 执行 `prepare:icon`,从 `oclaw/interfaces/admin/static/oliver.svg` 生成 `desktop/assets/oclaw.ico`
2. 调用 `electron-builder` 生成 NSIS 安装包
## 4) 打包产物位置

View file

@ -18,83 +18,83 @@
- `AIA_ASSISTANT_MODE`
- 默认:空(代码内决定默认模式)
- 作用:助手模式选择
- 生效:`oclaw/platform/llm/chat_models.py`, `oclaw/agents/factory.py`
- 生效:`oclaw/platform/llm/chat_models.py`, `oclaw/runtime/agents/factory.py`
- `AIA_MANAGER_DECISION_MODE`
- 默认:空
- 作用:**Legacy(已断开)**:旧 manager 决策模式(如 `rule`)
- 说明:oclaw runtime 默认不再走 `CompositeOpsAgent` 的 manager 决策;该变量仅保留以便后续接回 legacy
- 生效:`oclaw/agents/manager_agent.py`(仅 legacy 链路)
- 生效:`oclaw/runtime/agents/manager_agent.py`(仅 legacy 链路)
- `AIA_TURN_MAX_TOOL_WORKERS`
- 默认:`8`
- 作用:单轮工具并发上限
- 生效:`oclaw/openclaw_runtime/gateway.py`, `oclaw/openclaw_runtime/direct_loop.py`
- 生效:`oclaw/oclaw_runtime/gateway.py`, `oclaw/oclaw_runtime/direct_loop.py`
- `AIA_TURN_MAX_TOOL_ROUNDS`
- 默认:`8`
- 作用:工具循环轮次上限
- 生效:`oclaw/openclaw_runtime/gateway.py`, `oclaw/openclaw_runtime/direct_loop.py`
- 生效:`oclaw/oclaw_runtime/gateway.py`, `oclaw/oclaw_runtime/direct_loop.py`
- `AIA_TURN_MAX_CONTEXT_MESSAGES`
- 默认:`80`
- 作用:上下文消息上限
- 生效:`oclaw/openclaw_runtime/gateway.py`, `oclaw/openclaw_runtime/direct_loop.py`
- 生效:`oclaw/oclaw_runtime/gateway.py`, `oclaw/oclaw_runtime/direct_loop.py`
- oclaw async queue/worker(`router -> openclaw_task -> worker`)
- oclaw async queue/worker(`router -> oclaw_task -> worker`)
- 当前版本无独立环境变量;复用以上 `AIA_TURN_MAX_*` 配置控制 direct loop 执行上限
- 生效:`oclaw/openclaw_runtime/gateway.py`, `oclaw/openclaw_runtime/worker.py`
- 生效:`oclaw/oclaw_runtime/gateway.py`, `oclaw/oclaw_runtime/worker.py`
- `AIA_PROMPT_FRONTMATTER_STRICT`
- 默认:`0`
- 作用:`1` 时 `SKILL.md` / `oclaw/prompts/*.md` 的 frontmatter 必须为可解析 YAML;解析失败直接报错(不回落旧版行解析)
- 生效:`oclaw/prompts/frontmatter.py`, `oclaw/prompts/loader.py`, `oclaw/openclaw_runtime/skills.py`
- 生效:`oclaw/prompts/frontmatter.py`, `oclaw/prompts/loader.py`, `oclaw/oclaw_runtime/skills.py`
- `AIA_SKILLS_PROMPT_IN_SYSTEM`
- 默认:`1`(开启;仅当技能运行时启用)
- 作用:是否在 system prompt 末尾附加 oclaw 风格的 `<available_skills>` 目录块(与原生 `tools` 并存)
- 说明:设为 `0` 可关闭以降低 token;Admin `AIA_SKILL_RUNTIME_ENABLED` 关闭时本块不生成
- 生效:`oclaw/openclaw_runtime/skills_prompt.py`, `oclaw/openclaw_runtime/direct_loop.py`
- 生效:`oclaw/oclaw_runtime/skills_prompt.py`, `oclaw/oclaw_runtime/direct_loop.py`
- `AIA_SKILLS_PROMPT_MAX_CHARS`
- 默认:`18000`
- 作用:技能目录 XML 块最大字符数(超出则从列表尾部丢弃条目)
- 生效:`oclaw/openclaw_runtime/skills_prompt.py`
- 生效:`oclaw/oclaw_runtime/skills_prompt.py`
- `AIA_SKILL_DISABLED_NAMES`
- 默认:空数组(`[]`)
- 作用:按技能名禁用模型可见/可执行技能(JSON 数组字符串,例如 `["skill_a","skill_b"]`)
- 说明:禁用后同时影响 manifest/prompt 渲染与 direct loop 工具暴露
- 生效:`oclaw/openclaw_runtime/skills.py`, `oclaw/openclaw_runtime/skills_prompt.py`, `oclaw/openclaw_runtime/skill_installer.py`
- 生效:`oclaw/oclaw_runtime/skills.py`, `oclaw/oclaw_runtime/skills_prompt.py`, `oclaw/oclaw_runtime/skill_installer.py`
- `AIA_SKILL_AUTO_INSTALL_ENABLED`
- 默认:`1`
- 作用:是否允许自动安装 skill(admin auto-install / retry-install(auto))
- 说明:关闭后返回 `auto_install_disabled`,并标记为不可重试
- 生效:`oclaw/openclaw_runtime/skill_installer.py`, `oclaw/admin/skills_api.py`
- 生效:`oclaw/oclaw_runtime/skill_installer.py`, `oclaw/interfaces/admin/skills_api.py`
- `AIA_OPENCLAW_RETRYABLE_ERROR_CODES`
- `AIA_OCLAW_RETRYABLE_ERROR_CODES`
- 默认:`provider_timeout,provider_rate_limited,provider_temporary_error,provider_unavailable,context_overflow,tool_execution_failed`
- 作用:Agent Core run 外环的错误重试白名单(逗号分隔)
- 说明:仅当 attempt 返回 `status=retry` 且 `error_code` 命中该白名单时才进入下一次 attempt;未知 code 默认在 Admin 保存时会被过滤并告警
- 补充:`relay_envelope_invalid`、`relay_envelope_unsupported_version` 属于输入契约错误,运行时固定按 non-retryable 处理(即使被误加入白名单也不会进入重试链)
- 生效:`oclaw/openclaw_runtime/agent_core_run.py`
- 生效:`oclaw/oclaw_runtime/agent_core_run.py`
- `AIA_OPENCLAW_ROUTER_MODE`
- `AIA_OCLAW_ROUTER_MODE`
- 默认:`rule`
- 取值:`rule`(启发式)或 `llm_json`(由当前 executor 的 `model.chat` 产出 `{mode,reason}` JSON;解析失败则回落 `rule`)
- 说明:亦可通过同名环境变量覆盖;提示词见 `oclaw/prompts_openclaw/router/decide_route.md`
- 生效:`oclaw/openclaw_runtime/router.py`, `oclaw/openclaw_runtime/gateway.py`
- 说明:亦可通过同名环境变量覆盖;提示词见 `oclaw/prompts_runtime/router/decide_route.md`
- 生效:`oclaw/oclaw_runtime/router.py`, `oclaw/oclaw_runtime/gateway.py`
- oclaw trace 字段与 `event_type` ↔ `oc_stage` 对照见 `oclaw/docs/openclaw-trace-taxonomy.md`
- Skill 安装错误码与重试建议、trace 排障路径见 `oclaw/docs/openclaw-skill-troubleshooting.md`
- Relay 文件指针(含 ACP 父子 run)错误码与排障见 `oclaw/docs/openclaw-skill-troubleshooting.md` 的“Relay 文件指针排障”
- oclaw trace 字段与 `event_type` ↔ `oc_stage` 对照见 `oclaw/docs/oclaw-trace-taxonomy.md`
- Skill 安装错误码与重试建议、trace 排障路径见 `oclaw/docs/oclaw-skill-troubleshooting.md`
- Relay 文件指针(含 ACP 父子 run)错误码与排障见 `oclaw/docs/oclaw-skill-troubleshooting.md` 的“Relay 文件指针排障”
- `AIA_OPENCLAW_RETRY_CODES_STRICT_MODE`
- `AIA_OCLAW_RETRY_CODES_STRICT_MODE`
- 默认:`0`
- 作用:控制 Admin 保存 `AIA_OPENCLAW_RETRYABLE_ERROR_CODES` 时的未知 code 行为
- 作用:控制 Admin 保存 `AIA_OCLAW_RETRYABLE_ERROR_CODES` 时的未知 code 行为
- 说明:`0`=过滤并告警;`1`=直接拒绝保存(HTTP 400)
- 生效:`oclaw/admin/routes.py`, `oclaw/admin/static/app.js`
- 生效:`oclaw/interfaces/admin/routes.py`, `oclaw/interfaces/admin/static/app.js`
- `AIA_TOOL_ENFORCED_RETRY_MODE`
- 默认:`first_round_only`
@ -111,11 +111,11 @@
- 作用:**Legacy(已断开)**:同签名工具调用预算
- 生效:仅 legacy 链路(保留占位,暂不影响 oclaw)
- `AIA_OPENCLAW_ALLOW_LEGACY_FALLBACK`
- `AIA_OCLAW_ALLOW_LEGACY_FALLBACK`
- 默认:`0`(关闭)
- 作用:oclaw 执行失败时,是否允许回退到 legacy `executor.run_turn(...)`
- 说明:默认 fail-closed(不回退),避免无意中触发旧 manager/runner
- 生效:`oclaw/openclaw_runtime/gateway.py`, `oclaw/agents/specialist_agent.py`
- 生效:`oclaw/oclaw_runtime/gateway.py`, `oclaw/runtime/agents/specialist_agent.py`
## LLM 传输与 replay(OpenAI 兼容)
@ -173,7 +173,7 @@
- 默认:`0`(不限制)
- 作用:工具结果写回 LLM 的消息长度上限
- 说明:`0` 表示不做限制(不推荐,可能触发部分网关的单条消息上限 400)
- 生效:`oclaw/chat/tool_runtime.py`
- 生效:`oclaw/runtime/chat/tool_runtime.py`
- 观测:管理端聊天流 `tool_use_result` 事件会携带 `llm_wire.{truncated_for_llm,max_chars,result_bytes,result_for_llm_bytes,truncate_ms}`
- `AIA_TOOL_LOG_MAX_CHARS`
@ -191,7 +191,7 @@
- `AIA_MCP_ENV_ALLOWLIST`
- 默认:内置 allowlist(Brave/Google/GitHub/Context7)
- 作用:MCP 子进程可透传环境变量白名单
- 生效:`oclaw/ops/mcp_env.py`
- 生效:`oclaw/runtime/operations/mcp_env.py`
- `AIA_MCP_FILESYSTEM_EXTRA_ROOTS`
- 默认:空
@ -270,7 +270,7 @@
- `AIA_IMAGE_MODEL`
- 默认:空(走 profile/模型默认)
- 作用:图像模型
- 生效:`oclaw/platform/llm/image_message_client.py`, `oclaw/agents/specialist_agent.py`
- 生效:`oclaw/platform/llm/image_message_client.py`, `oclaw/runtime/agents/specialist_agent.py`
- `AIA_IMAGE_BASE_URL`
- 默认:`https://api.openai.com/v1`
@ -329,7 +329,7 @@
- `AIA_WORKSPACE_ROOT`
- 默认:项目根
- 作用:工作区主根路径
- 生效:`oclaw/tools/experts/workspace/workspace_base.py`, `oclaw/indexing/workspace_indexer.py`
- 生效:`oclaw/tools/experts/workspace/workspace_base.py`, `oclaw/tools/workspace_indexer.py`
- `AIA_WORKSPACE_EXTRA_ROOTS`
- 默认:空
@ -346,46 +346,46 @@
- `AIA_ASSISTANT_GATEWAY_HOST`
- 默认:`0.0.0.0`
- 作用:网关监听地址
- 生效:`oclaw/app_server/fastapi_main.py`, `oclaw/ops/main.py`
- 生效:`oclaw/app_server/fastapi_main.py`, `oclaw/runtime/operations/main.py`
- `AIA_ASSISTANT_GATEWAY_PORT`
- 默认:`8787`
- 作用:网关监听端口
- 生效:`oclaw/app_server/fastapi_main.py`, `oclaw/ops/main.py`
- 生效:`oclaw/app_server/fastapi_main.py`, `oclaw/runtime/operations/main.py`
- `AIA_RUNTIME_LOG_DIR`
- 默认:空(使用内部默认目录)
- 作用:运行日志目录
- 生效:`oclaw/ops/runtime.py`
- 生效:`oclaw/runtime/operations/runtime.py`
- `AIA_SSE_QUEUE_MAXSIZE`
- 默认:`2000`
- 作用:SSE 事件队列上限
- 生效:`oclaw/admin/chat_api.py`
- 生效:`oclaw/interfaces/admin/chat_api.py`
## WeCom 长连接
- `AIA_WECOM_LONGCONN_WORKERS`
- 默认:`2`
- 作用:入站处理 worker 数
- 生效:`oclaw/channels/wecom/longconn_runner.py`
- 生效:`oclaw/interfaces/channels/wecom/longconn_runner.py`
- `AIA_WECOM_LONGCONN_INBOUND_QUEUE_MAXSIZE`
- 默认:`200`
- 作用:入站队列长度上限
- 生效:`oclaw/channels/wecom/longconn_runner.py`
- 生效:`oclaw/interfaces/channels/wecom/longconn_runner.py`
## 安全与密钥
- `AIA_ASSISTANT_PASSWORD`
- 默认:空(必须配置)
- 作用:管理台管理员密码(bootstrap/login)
- 生效:`oclaw/platform/config/passwords.py`, `oclaw/admin/routes.py`
- 生效:`oclaw/platform/config/passwords.py`, `oclaw/interfaces/admin/routes.py`
- `AIA_ASSISTANT_MASTER_KEY`
- 默认:空
- 作用:密钥加密(Fernet)主密钥
- 生效:`oclaw/platform/persistence/sqlite_store.py`, `oclaw/admin/routes.py`
- 生效:`oclaw/platform/persistence/sqlite_store.py`, `oclaw/interfaces/admin/routes.py`
## 存储与迁移

View file

@ -66,7 +66,7 @@
- 依赖:`PyYAML`(`requirements.txt`)。
### Changed
- `oclaw/prompts/loader.py` 与 `oclaw/openclaw_runtime/skills.py` 统一使用 YAML 解析 frontmatter(失败时默认回落旧行解析,除非开启 STRICT)。
- `oclaw/prompts/loader.py` 与 `oclaw/oclaw_runtime/skills.py` 统一使用 YAML 解析 frontmatter(失败时默认回落旧行解析,除非开启 STRICT)。
---
@ -80,7 +80,7 @@
- `AIA_REPLAY_REPAIR_TOOL_PAIRING`(默认 `1`)
- `AIA_TOOL_CALL_ID_MAX_LEN`(默认 `40`)
- `AIA_PROMPT_TOOL_FALLBACK`(默认 `1`)
- `oclaw/platform/llm/OPENCLAW_MIT_LICENSE.txt`(oclaw 启发实现之 MIT 署名)
- `oclaw/platform/llm/OCLAW_MIT_LICENSE.txt`(oclaw 启发实现之 MIT 署名)
### Changed
- 变量前缀统一为 `AIA_*`,项目内不再使用 `OPS_*` / `AI_OPS_*`。
@ -105,15 +105,15 @@
## 2026-04-20 / Unreleased
### Added
- `AIA_OPENCLAW_ALLOW_LEGACY_FALLBACK`
- `AIA_OCLAW_ALLOW_LEGACY_FALLBACK`
- 默认值:`0`
- 用途:oclaw runtime 失败时是否允许回退到 legacy `run_turn`
- 影响模块:`oclaw/openclaw_runtime/gateway.py`, `oclaw/agents/specialist_agent.py`
- 影响模块:`oclaw/oclaw_runtime/gateway.py`, `oclaw/runtime/agents/specialist_agent.py`
### Changed
- `AIA_TURN_MAX_*`(tool workers/rounds/context)
- 变更前:由 legacy turn runner 读取(历史文件名可能为 `agent_core.py`)
- 变更后:由 oclaw runtime 读取并生效(`oclaw/openclaw_runtime/gateway.py`)
- 变更后:由 oclaw runtime 读取并生效(`oclaw/oclaw_runtime/gateway.py`)
- 是否需要重启:是(读取自 settings/db/env 的时机取决于运行方式)
### Deprecated
@ -135,7 +135,7 @@
### Changed
- 无新增环境变量;oclaw runtime 在现有变量下补齐了 memory stage、router sync/async 分流、sqlite task queue、worker 执行链路。
- 影响模块:`oclaw/openclaw_runtime/gateway.py`, `oclaw/openclaw_runtime/direct_loop.py`, `oclaw/openclaw_runtime/router.py`, `oclaw/openclaw_runtime/worker.py`, `oclaw/platform/persistence/sqlite_store.py`
- 影响模块:`oclaw/oclaw_runtime/gateway.py`, `oclaw/oclaw_runtime/direct_loop.py`, `oclaw/oclaw_runtime/router.py`, `oclaw/oclaw_runtime/worker.py`, `oclaw/platform/persistence/sqlite_store.py`
- 是否需要重启:是(升级代码后建议重启进程以启动 worker 与新路由逻辑)
### Migration Checklist
@ -150,10 +150,10 @@
## 2026-04-20 / Unreleased (AgentCore Retry Matrix)
### Added
- `AIA_OPENCLAW_RETRYABLE_ERROR_CODES`
- `AIA_OCLAW_RETRYABLE_ERROR_CODES`
- 默认值:`provider_timeout,provider_rate_limited,provider_temporary_error,provider_unavailable,context_overflow,tool_execution_failed`
- 用途:控制 Agent Core run 外环可重试错误白名单
- 影响模块:`oclaw/openclaw_runtime/agent_core_run.py`, `oclaw/admin/routes.py`, `oclaw/admin/static/app.js`
- 影响模块:`oclaw/oclaw_runtime/agent_core_run.py`, `oclaw/interfaces/admin/routes.py`, `oclaw/interfaces/admin/static/app.js`
### Changed
- Agent Core 重试策略从“status=retry 即重试”升级为“retry + error_code 命中白名单才重试”。
@ -167,15 +167,15 @@
- [x] 已执行编译/测试回归
### Changed
- `AIA_OPENCLAW_RETRYABLE_ERROR_CODES` 已接入 Admin「Tool Policy」页读写链路。
- 影响模块:`oclaw/admin/routes.py`, `oclaw/admin/static/app.js`
- `AIA_OPENCLAW_RETRYABLE_ERROR_CODES` 保存时增加未知 code 过滤与告警返回(`unknown_retryable_error_codes`)。
- 影响模块:`oclaw/admin/routes.py`, `oclaw/admin/static/app.js`, `oclaw/openclaw_runtime/agent_core_run.py`
- `AIA_OPENCLAW_RETRYABLE_ERROR_CODES` 新增严格模式:可配置为未知 code 直接拒绝保存(400)。
- 影响模块:`oclaw/admin/routes.py`, `oclaw/admin/static/app.js`
- `AIA_OCLAW_RETRYABLE_ERROR_CODES` 已接入 Admin「Tool Policy」页读写链路。
- 影响模块:`oclaw/interfaces/admin/routes.py`, `oclaw/interfaces/admin/static/app.js`
- `AIA_OCLAW_RETRYABLE_ERROR_CODES` 保存时增加未知 code 过滤与告警返回(`unknown_retryable_error_codes`)。
- 影响模块:`oclaw/interfaces/admin/routes.py`, `oclaw/interfaces/admin/static/app.js`, `oclaw/oclaw_runtime/agent_core_run.py`
- `AIA_OCLAW_RETRYABLE_ERROR_CODES` 新增严格模式:可配置为未知 code 直接拒绝保存(400)。
- 影响模块:`oclaw/interfaces/admin/routes.py`, `oclaw/interfaces/admin/static/app.js`
### Added
- `AIA_OPENCLAW_RETRY_CODES_STRICT_MODE`
- `AIA_OCLAW_RETRY_CODES_STRICT_MODE`
- 默认值:`0`
- 用途:控制 Admin 保存 retry code 时对未知值的处理(过滤告警 / 拒绝)
- 影响模块:`oclaw/admin/routes.py`, `oclaw/admin/static/app.js`
- 影响模块:`oclaw/interfaces/admin/routes.py`, `oclaw/interfaces/admin/static/app.js`

View file

@ -5,7 +5,7 @@ This document describes the Python gateway method `image.generate`.
## Method
- Name: `image.generate`
- Handler: `oclaw/gateway/server_methods/image.py`
- Handler: `oclaw/interfaces/gateway/server_methods/image.py`
## Input Params

View file

@ -10,7 +10,7 @@ Normalization is applied in these handlers:
- `chat.send`
- `sessions.send`
The shared implementation lives in `oclaw/gateway/server_methods/telegram_send_normalize.py`.
The shared implementation lives in `oclaw/interfaces/gateway/server_methods/telegram_send_normalize.py`.
## Input fields

View file

@ -1,6 +1,6 @@
# LLM provider/transport capability matrix (oclaw)
This project follows an **OpenClaw-style explicit provider/transport selection**:
This project follows an **Oclaw-style explicit provider/transport selection**:
- You select the transport via **LLM profile `mode`** (not by inferring from `base_url`).
- `base_url` can be the same unified gateway URL for all providers; the `mode` determines the wire protocol.
@ -12,7 +12,7 @@ This project follows an **OpenClaw-style explicit provider/transport selection**
- **`base_url`**: gateway host URL (may be shared across providers)
- **`api_key`** (profile secret): primary credential source (reused across modes)
Transport selection happens in `oclaw/agents/factory.py`.
Transport selection happens in `oclaw/runtime/agents/factory.py`.
## Modes and transports
@ -73,7 +73,7 @@ All transports stream assistant output through the same internal callback:
For additional providers, follow this pattern:
1. Add a new transport class under `oclaw/platform/llm/transports/`
2. Extend `mode` selection in `oclaw/agents/factory.py`
2. Extend `mode` selection in `oclaw/runtime/agents/factory.py`
3. Add an **offline stream parser test** under `tests/`
4. Add/verify WS contract tests (delta + final + session.tool)

View file

@ -505,7 +505,7 @@ Keep responses deterministic and JSON-serializable.
- **作用**:按库名/版本拉取较新的官方文档片段,减少「API 记错版本」类幻觉。
- **安装**:`python scripts/install_mcp_context7.py`,或管理台 `POST /admin/api/mcp/install` 使用 [`examples/mcp_install_context7.json`](../examples/mcp_install_context7.json) 中的 `payload`。
- **密钥**:在 **`oclaw/_local/mcp_local.env`**(推荐)或 `data/mcp_local.env`(兼容)设置 `CONTEXT7_API_KEY`(见 [context7.com/dashboard](https://context7.com/dashboard))。两处都存在时**同键以 `oclaw/_local/mcp_local.env` 为准**(覆盖 `data` 中的同键)。未自定义 `OPS_MCP_ENV_ALLOWLIST` 时,网关默认 allowlist 已包含 `CONTEXT7_API_KEY`(见 `oclaw/ops/mcp_env.py`);若你自定义了 allowlist,请手动追加该键。
- **密钥**:在 **`oclaw/_local/mcp_local.env`**(推荐)或 `data/mcp_local.env`(兼容)设置 `CONTEXT7_API_KEY`(见 [context7.com/dashboard](https://context7.com/dashboard))。两处都存在时**同键以 `oclaw/_local/mcp_local.env` 为准**(覆盖 `data` 中的同键)。未自定义 `OPS_MCP_ENV_ALLOWLIST` 时,网关默认 allowlist 已包含 `CONTEXT7_API_KEY`(见 `oclaw/runtime/operations/mcp_env.py`);若你自定义了 allowlist,请手动追加该键。
- **装完后**:`Health` → `Sync Tools` → 将 `mcp-context7` 加入通识 specialist 的 MCP 绑定(若脚本已成功 Sync,会自动追加)。
### 通识侧终端能力(`run_command`)

View file

@ -17,10 +17,10 @@ Use this checklist to verify readiness and post-delete safety for `oclaw/app_ser
- [x] Plugin bootstrap still loads expected extension set.
## Prompt/skill checks
- [x] Runtime role context still loads from `oclaw/agent/*`.
- [x] Runtime role context still loads from `oclaw/runtime/assets/agent_workspaces/*`.
- [x] Skill root priority still effective:
- [x] `AIA_SKILLS_ROOT`
- [x] `oclaw/skills`
- [x] `oclaw/runtime/skills`
- [x] `skills/` fallback
## Extension policy checks

View file

@ -1,4 +1,4 @@
# OpenClaw Migration Guide
# Oclaw Migration Guide
This repository is migrating from legacy `oclaw/` runtime wiring to the new `oclaw/` architecture root.
@ -17,7 +17,7 @@ This repository is migrating from legacy `oclaw/` runtime wiring to the new `ocl
## Runtime notes
- Gateway HTTP method adapter: `POST /gateway/method`
- WS dispatch first resolves method handlers from shared dispatcher.
- Inbound payload use-case entrypoint: `oclaw.application.gateway.process_inbound_payload_usecase`
- Inbound payload use-case entrypoint: `oclaw.runtime.application.gateway.process_inbound_payload_usecase`
- HTTP app entrypoint moved to: `oclaw.interfaces.http.fastapi_app`
- WS entrypoint moved to: `oclaw.interfaces.ws.entrypoint`
- WS runtime bridge path: `oclaw.interfaces.ws.runtime`
@ -62,9 +62,9 @@ This repository is migrating from legacy `oclaw/` runtime wiring to the new `ocl
- Legacy root `extensions/` has been merged into `oclaw/extensions/` and removed.
## Prompt and skills policy
- Role context is loaded from `oclaw/agent/*`.
- Role context is loaded from `oclaw/runtime/assets/agent_workspaces/*`.
- Skills root priority:
1. `AIA_SKILLS_ROOT`
2. `oclaw/skills`
2. `oclaw/runtime/skills`
3. `skills/` (legacy fallback)

View file

@ -4,14 +4,14 @@
关联文档:
- trace 字段与阶段对照:`docs/openclaw-trace-taxonomy.md`
- skill 安装/执行排障:`docs/openclaw-skill-troubleshooting.md`
- trace 字段与阶段对照:`docs/oclaw-trace-taxonomy.md`
- skill 安装/执行排障:`docs/oclaw-skill-troubleshooting.md`
---
## 1. 统一入口(只保留最新)
所有运维命令统一通过 `scripts/`,不要再使用 `python -m oclaw.ops ...` 或历史 `.bat` 方式。
所有运维命令统一通过 `scripts/`,不要再使用 `python -m oclaw.runtime.operations ...` 或历史 `.bat` 方式。
补充:工具脚本也统一放在 `scripts/`(例如 `seed_mcp_registry.py`、`ws_probe.py`)。
@ -272,7 +272,7 @@ powershell -ExecutionPolicy Bypass -File .\scripts\weixin_install.ps1
安装目录:
- `data/channel_sidecar/openclaw-weixin/`
- `data/channel_sidecar/oclaw-weixin/`
### 11.2 扫码登录(获取 bot token)
@ -282,8 +282,8 @@ powershell -ExecutionPolicy Bypass -File .\scripts\weixin_login.ps1
登录态写入:
- `data/channel_sidecar/openclaw-weixin/state/openclaw-weixin/accounts/*.json`
- `data/channel_sidecar/openclaw-weixin/state/openclaw-weixin/accounts.json`
- `data/channel_sidecar/oclaw-weixin/state/oclaw-weixin/accounts/*.json`
- `data/channel_sidecar/oclaw-weixin/state/oclaw-weixin/accounts.json`
### 11.3 启动微信 sidecar
@ -305,8 +305,8 @@ powershell -ExecutionPolicy Bypass -File .\scripts\weixin_stop.ps1
日志文件:
- `data/channel_sidecar/openclaw-weixin/logs/weixin_sidecar.log`
- `data/channel_sidecar/openclaw-weixin/logs/weixin_sidecar.err.log`
- `data/channel_sidecar/oclaw-weixin/logs/weixin_sidecar.log`
- `data/channel_sidecar/oclaw-weixin/logs/weixin_sidecar.err.log`
### 11.4 当前行为说明
@ -440,7 +440,7 @@ python .\scripts\wiki_auto_smoke_test.py
该脚本会:
- 投递一条 `wiki_capture` 任务到 `openclaw_task`
- 投递一条 `wiki_capture` 任务到 `oclaw_task`
- 轮询任务状态直到 `done/failed/timeout`
- 输出当前写入产物状态(`merged-turns.md`、`topic-index.json`、`index.json`、`LINT_REPORT.md`)

View file

@ -11,5 +11,5 @@
如需查看完整细粒度字段定义,请在仓库中搜索:
- `pipeline`
- `openclaw_task_id`
- `openclaw_worker_id`
- `oclaw_task_id`
- `oclaw_worker_id`

View file

@ -27,19 +27,19 @@
推荐按下列顺序查询同一个 `trace_id`:
1. `openclaw_gateway`
1. `oclaw_gateway`
- `skill_manifest`
- `router_decision`
2. `openclaw_agent_core`
2. `oclaw_agent_core`
- `run_started`
- `attempt_started`
3. `openclaw_direct_loop`
3. `oclaw_direct_loop`
- `tool_wire_filter`
- `tool_result_context_guard`
4. `openclaw_skill_executor`
4. `oclaw_skill_executor`
- `skill_selected`
- `skill_executed`
5. `openclaw_agent_core`
5. `oclaw_agent_core`
- `after_turn_memory`
- `attempt_finished`
- `run_finished`
@ -52,7 +52,7 @@
- `AIA_SKILLS_PROMPT_IN_SYSTEM` 是否开启
- `AIA_SKILL_DISABLED_NAMES` 是否误禁用了目标 skill
- `AIA_SKILL_AUTO_INSTALL_ENABLED` 是否关闭
- 目标 skill 的 `SKILL.md` 是否包含合法 frontmatter(尤其 `metadata.openclaw.install`)
- 目标 skill 的 `SKILL.md` 是否包含合法 frontmatter(尤其 `metadata.oclaw.install`)
## 5) 典型故障定位

View file

@ -7,15 +7,15 @@ Trace events share a common `payload` shape across components. Prefer joining on
| Key | Meaning |
| --- | --- |
| `trace_id` | Correlates all events for one gateway turn |
| `pipeline` | Which subsystem emitted the event (`openclaw_gateway`, `openclaw_agent_core`, `openclaw_direct_loop`, `openclaw_skill_executor`) |
| `pipeline` | Which subsystem emitted the event (`oclaw_gateway`, `oclaw_agent_core`, `oclaw_direct_loop`, `oclaw_skill_executor`) |
| `oc_stage` | Normalized lifecycle stage (see tables below) |
| `lang` | Request language when known |
| `run_id` | Agent core run UUID (retry container) |
| `attempt_no` | 1-based attempt index inside `run_id` |
| `openclaw_task_id` | Async worker task id when present |
| `openclaw_worker_id` | Worker thread id when present |
| `oclaw_task_id` | Async worker task id when present |
| `oclaw_worker_id` | Worker thread id when present |
## Gateway (`pipeline=openclaw_gateway`)
## Gateway (`pipeline=oclaw_gateway`)
| `event_type` | `oc_stage` |
| --- | --- |
@ -35,7 +35,7 @@ Trace events share a common `payload` shape across components. Prefer joining on
- `relay_envelope_present`: whether `metadata.relay_share_envelope` exists
- `relay_envelope_pointer_count`: pointer count inside envelope manifest
## Agent core (`pipeline=openclaw_agent_core`)
## Agent core (`pipeline=oclaw_agent_core`)
| `event_type` | `oc_stage` |
| --- | --- |
@ -46,7 +46,7 @@ Trace events share a common `payload` shape across components. Prefer joining on
| `run_compact` | `compact` |
| `run_retry` | `retry` |
## Direct loop (`pipeline=openclaw_direct_loop`)
## Direct loop (`pipeline=oclaw_direct_loop`)
| `event_type` | `oc_stage` |
| --- | --- |
@ -55,7 +55,7 @@ Trace events share a common `payload` shape across components. Prefer joining on
Both include `trace_id` and, when provided by the parent attempt, `run_id` and `attempt_no`.
## Skill executor (`pipeline=openclaw_skill_executor`)
## Skill executor (`pipeline=oclaw_skill_executor`)
| `event_type` | `oc_stage` |
| --- | --- |
@ -64,7 +64,7 @@ Both include `trace_id` and, when provided by the parent attempt, `run_id` and `
The payload includes `run_id` and `attempt_no` when available, so skill execution can be joined back to `run_started/attempt_started`.
## Attempt memory hook (`pipeline=openclaw_agent_core`)
## Attempt memory hook (`pipeline=oclaw_agent_core`)
| `event_type` | `oc_stage` |
| --- | --- |