网关方法、存储和限制
网关方法¶
| 方法 | 范围 |
|---|---|
skills.proposals.list |
operator.read |
skills.workshop.read |
operator.read |
skills.proposals.inspect |
operator.read |
skills.proposals.historyStatus |
operator.read |
skills.proposals.historyScan |
operator.admin |
skills.proposals.create |
operator.admin |
skills.proposals.update |
operator.admin |
skills.proposals.revise |
operator.admin |
skills.proposals.requestRevision |
operator.admin |
skills.proposals.apply |
operator.admin |
skills.proposals.reject |
operator.admin |
skills.proposals.quarantine |
operator.admin |
skills.curator.status |
operator.read |
skills.curator.pin |
operator.admin |
skills.curator.unpin |
operator.admin |
skills.curator.restore |
operator.admin |
skills.proposals.list 包含 installedSkills,即所选代理的当前 Workshop 清单。每个条目包含 name、skillKey 和 description。独立的 proposals 数组仍然是提案历史和待处理队列。
skills.workshop.read 接受 name 和可选的 agentId。它返回当前已安装技能的 name、skillKey、description 以及完整的 content。未知代理或位于该代理 Workshop 清单之外的技能会返回错误。它绝不会读取保留的提案来替代缺失的技能。
Workshop 清单与使用情况¶
skills.curator.status 报告实时技能使用情况,这些数据记录自受信任的 skill.used 事件、保留的 cron 前集合审查记录以及按工作区划分的经验审查结果。当前集合审查使用自动化运行历史。没有技能会因时间过长而被归档或过期。每个技能都报告为 active。
声明 skill-curator-live-inventory 连接能力的客户端会收到 inventory: "live-workshop"。此视图会发现在每个已配置代理的 Workshop 根目录中的当前技能,包括自定义代理目录以及没有提案历史的直接创建技能。已禁用的技能和从代理提示词中过滤掉的技能仍然是清单成员。发现过程保留现有加载器的文件大小、按来源计数和链接限制。无效技能会被排除;读取失败是错误,而不是空清单。
成员资格和名称来自当前文件。使用情况通过规范绝对文件路径进行关联,而不是技能名称。在同一路径上重命名元数据会保留使用情况;移动文件不会转移其历史。已移除的根目录、代理和文件不会通过保留的提案返回。已应用的创建提案仅提供最早已知的创建日期。如果没有该历史,createdAtMs 和 stateChangedAtMs 为 null;文件系统日期不能替代。
useCount 为零或 lastUsedAtMs 为 null 表示未记录使用情况,而不是该技能从未被使用。跟踪包括通过已注册到 Codex 动态工具桥的 OpenClaw 工具成功读取的已知技能,以及显式工具调度的技能命令。它不会推断原生 Codex 技能激活,也不会推断在 OpenClaw 工具边界之外进行的读取。没有历史回填。
在升级期间,不具备该能力的客户端会收到未更改的旧版响应格式:没有标记、数值创建日期,以及仅日期已知的当前条目。计数描述的是返回的子集。新客户端也接受旧版网关的无标记响应。旧版视图覆盖范围有限,不得将其视为完整清单,也不得用于推断不活跃。
skills.curator.pin、skills.curator.unpin 和 skills.curator.restore 仍为现有客户端注册,但始终返回错误,说明每周集合审查管理技能集合。
修订与历史方法¶
requestRevision 仅限网关(没有 CLI 或代理工具等效项):它将自由文本修订指令转发到所属代理的聊天会话,而不是直接替换 PROPOSAL.md,适用于要求代理进行修订而不是提交字面新内容的 UI。
historyStatus 和 historyScan 仍为现有客户端注册,但返回错误,说明历史批量扫描已退役。它们不会启动运行或更改技能。
在 Workshop 中,从过去的对话中学习 通过 sessions.create 创建并打开一个普通代理会话。其开场消息要求代理检查现有技能、选择有用的对话,并遵循当前学习模式。聊天会显示工作及其结果;没有单独的扫描进度存储。有关模型使用和隐私,请参阅 自学习。
存储¶
<state-dir>/
state/openclaw.sqlite
agents/<agentId>/
agent/workshop-skills/<skill-name>/
SKILL.md
assets/
examples/
references/
scripts/
templates/
skill-workshop/proposals/<proposal-id>/
generations/<generation-id>/
PROPOSAL.md
assets/
examples/
references/
scripts/
templates/
除非被覆盖,否则 <state-dir> 为 ~/.openclaw。
state/openclaw.sqlite:规范提案记录和溯源信息、活动世代引用、提案状态、记录的技能使用情况、集合与经验审查结果,以及应用回滚元数据。- 每个世代包含一个
PROPOSAL.md和该修订的所有支持文件。修订发布绝不会就地覆盖活动世代。 - 世代文件在发布前刷新。完整捆绑包重命名到位后,在平台支持目录刷新的情况下,OpenClaw 会在提交 SQLite 状态之前同步
generations/父目录。报告目录同步不受支持的平台保留原子重命名和进程中断安全性,但不声称该目录条目具有断电持久性。 - 支持文件保留在其所属世代的
PROPOSAL.md旁边,以便操作员可以将所提议的技能作为普通目录进行审查。
旧版本创建的提案仍可能引用更早的根级 PROPOSAL.md 布局。存储的记录直接标识该包;下一次成功修订会将提案迁移到代际布局,并退役之前的包。
启动和 openclaw doctor --fix 使用相同的 Workshop 迁移。它会先验证每个提案,然后将之前的 proposals.json、proposal.json 和 rollback.json 元数据导入 SQLite,再删除已迁移的 JSON 文件。它会将已应用的旧版 Workshop 创建移动到 workshop-skills,重新定位符合条件的待处理创建,并在正常使用前将外部更新标记为过期。待处理更新会在同一数据库提交中跟随其已迁移的技能。仅所有权移动会保留提案现有的编辑时间。中断的移动会恢复,而不会丢弃这些待处理更新。如果仍保留旧的工作区设置文件,请运行 openclaw doctor --fix。启动会推迟受影响的技能移动和备份转换,直到 Doctor 已导入该工作区状态。
迁移会根据其行、来源元数据或唯一的工作区所有者推断每个旧版提案的所有者。所有权不明确,或所有者已不在代理名册中时,提案保持原位置并变为过期。
旧版集合备份会连同其清理后快照一起移动到所有者代理的备份根目录下。当已保存的审查和创建提案能够证明其所有者、原始路径和备份时,已移除的技能仍可恢复。所有权证据不足的备份仅保留为历史记录;其旧版文件保持原位置,恢复操作会报告无法使用它们的原因。已完成的历史归档不会阻止剩余备份的迁移。
如果清理在发布可恢复备份后停止,下一次迁移会在删除旧副本之前验证已保存的清单和所有已复制文件。如果没有已配置的代理使用旧版备份所记录的工作区,Doctor 会将其清理后结果哈希与每个已配置代理的 Workshop 技能进行比对。即使旧工作区已不存在,恰好一个完整匹配也能识别所有者。空匹配、部分匹配、已更改匹配或模糊匹配会保持保留;Doctor 会列出所考虑的代理及其验证结果。请按照手动备份恢复流程操作,不要更改当前工作区或重写备份清单。成功修复后,请重启 Gateway 以清除其启动警告。
通过符号链接放入工作区的技能会作为工作区技能保留在原位置;迁移会将它们的提案标记为过期,而不是移动它们。
Doctor 还会检查已保存的自动化命令参数、工作目录、条件脚本和代理消息中是否包含对已迁移 Workshop 技能的直接引用。在 Doctor 修复期间以及后续检查中,它会列出每个受影响的自动化和字段。保留的应用历史必须能够确定原始技能目录;当该历史不可用时,Doctor 不会根据当前工作区或技能名称猜测它。
在更新自动化之前,请审查每个报告的字段。只有当映射目标存在于已迁移技能内部时,Doctor 才会为完整的参数或工作目录路径提供替换。对于嵌入脚本或消息中的路径,它会单独报告目录迁移,并将完整目标保留为未解决,以便人工审查。缺失或模糊的目标也保持未解决。Doctor 不会重写自动化内容、更改调度或运行自动化以检查它。
如果移动技能后工作区变为空,迁移仅当保存的移动前事实证明同一目录只包含这些技能且每个已移动文件都完整时,才会退役过期的工作区存续证据。缺失或已替换的工作区、普通项目文件以及较新的工作区证明会保留其保护。
如果提案草稿缺失,Suggestions 会将其标记为不可用。你可以拒绝它,但无法应用、评估或修订已不存在的内容。运行 openclaw doctor --fix 可将这些提案标记为过期,并将其从可操作的 Suggestions 中移除。Doctor 会保留它们的元数据和剩余文件。如果提案有未完成的应用恢复,Reject 和 Quarantine 会拒绝将其关闭。Doctor 会将其保留为待处理,并要求你在重试前恢复草稿;它不会丢弃回滚证据或更改已安装的技能。
限制¶
| 限制 | 值 |
|---|---|
| 描述 | 160 字节 |
| 提案正文 | skills.workshop.maxSkillBytes(默认 40,000;硬上限 200,000 字节) |
自主提案 SKILL.md |
10,000 个字符,或当已超出上限时严格更短 |
| 支持文件 | 每个提案 64 个 |
| 支持文件大小 | 每个 256 KiB,总计 2 MiB |
| 待处理 + 隔离提案 | 每个代理 skills.workshop.maxPending(默认 50) |
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw