mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 12:30:44 +08:00
重构仓库目录为统一的 runtime 分层并清理历史 openclaw 残留。
本次迁移将网关/通道/工具/技能/脚本与协议资源集中到新结构,统一路径常量与脚本转发机制,减少顶层噪音并保证运行与测试行为一致。 Made-with: Cursor
This commit is contained in:
parent
ba3836f00f
commit
4a23b715a2
498 changed files with 2760 additions and 2200 deletions
32
docs/ARCHITECTURE_OVERVIEW.md
Normal file
32
docs/ARCHITECTURE_OVERVIEW.md
Normal 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` 可依赖任意层,但不应反向影响运行时代码设计。
|
||||
|
||||
|
|
@ -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) 打包产物位置
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
||||
## 存储与迁移
|
||||
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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`)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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`)
|
||||
|
||||
|
|
|
|||
|
|
@ -11,5 +11,5 @@
|
|||
如需查看完整细粒度字段定义,请在仓库中搜索:
|
||||
|
||||
- `pipeline`
|
||||
- `openclaw_task_id`
|
||||
- `openclaw_worker_id`
|
||||
- `oclaw_task_id`
|
||||
- `oclaw_worker_id`
|
||||
|
|
|
|||
|
|
@ -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) 典型故障定位
|
||||
|
||||
|
|
@ -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` |
|
||||
| --- | --- |
|
||||
Loading…
Add table
Add a link
Reference in a new issue