返回顶部
o

opencode-acp-controlOpenCode ACP控制

Control OpenCode directly via the Agent Client Protocol (ACP). Start sessions, send prompts, resume conversations, and manage OpenCode updates. Includes automatic recovery, stuck detection, and session management.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 2.2.1
安全检测
已通过
328
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

opencode-acp-control

OpenCode ACP 技能 v2.0

通过自动恢复卡死检测,直接经由代理客户端协议(ACP)控制 OpenCode。

🆕 v2.0 新特性

特性描述
自动重试失败时自动重试(最多 3 次)
卡死检测
检测 OpenCode 无响应的情况 | | 锁清理 | 自动移除过期的锁文件 | | 自适应轮询 | 启动时轮询更快,稳定时轮询更慢 | | 健康检查 | 定期检查 OpenCode 是否存活 | | 可配置超时 | 较短的超时时间,并带有升级机制 | | 会话恢复 | 可在任务中途从崩溃中恢复 |

快速参考

操作方法
启动 OpenCodeexec(command: opencode acp --cwd /path, background: true)
发送消息
process.write(sessionId, data: \n) | | 读取响应 | process.poll(sessionId) - 自适应轮询 | | 健康检查 | process.poll(sessionId, timeout: 5000) - 仅在无输出超过 60 秒时 | | 停止 OpenCode | process.kill(sessionId) + 清理锁 | | 清理锁 | exec(command: rm -f ~/.openclaw/agents//sessions/.lock) | | 列出会话 | exec(command: opencode session list, workdir: ...) | | 恢复会话 | 列出会话 → session/load |

🚀 快速入门(简单版)

对于大多数用例,请使用此简单工作流:

  1. 1. exec(command: opencode acp --cwd /path/to/project, background: true)
-> sessionId: bg_42
  1. 2. process.write(sessionId: bg42, data: initializejson + \n)
process.poll(sessionId: bg_42, timeout: 10000)
  1. 3. process.write(sessionId: bg42, data: sessionnew_json + \n)
process.poll(sessionId: bg_42, timeout: 10000) -> opencodeSessionId: sess_xyz
  1. 4. process.write(sessionId: bg42, data: promptjson + \n)
adaptivePoll(sessionId: bg_42, maxWaitMs: 120000)
  1. 5. 完成后:process.kill(sessionId: bg_42)
cleanupLocks()

📁 技能文件

文件用途
SKILL.md本文件 - 主要文档
config.default.json
默认配置(复制为 config.json 以自定义) | | templates.md | 常见任务的提示模板 |

⚙️ 配置

选项 1:使用默认值

所有默认值均已内置。无需配置文件。

选项 2:自定义

将 config.default.json 复制到同一文件夹中的 config.json 并进行修改:

bash
cp config.default.json config.json

使用您的偏好编辑 config.json

配置结构:
json
{
timeouts: { initialize: 10000, prompt: {...} },
retry: { maxAttempts: 3, initialDelay: 2000 },
polling: { initial: 1000, active: 2000 },
healthCheck: { noOutputThreshold: 60000 },
recovery: { autoRecover: true },
mcpServers: { default: [], supabase: [supabase] }
}



超时时间(可配置)


操作默认值最大值何时增加
初始化10秒30秒机器速度慢
新建会话
10秒 | 30秒 | 大型项目 |
| 提示(简单) | 60秒 | 120秒 | 复杂查询 |
| 提示(复杂) | 120秒 | 300秒 | 重构、代码生成 |
| 健康检查 | 5秒 | 10秒 | 网络问题 |

重试配置

设置默认值描述
最大重试次数3失败时重试的次数
重试延迟
2秒 | 重试之间的初始延迟 | | 退避乘数 | 2 | 每次重试延迟加倍 | | 最大重试延迟 | 10秒 | 重试之间的最大延迟 |

自适应轮询

阶段间隔持续时间
初始1秒前10秒
活跃
2秒 | 10秒 - 60秒 | | 稳定 | 3秒 | 60秒 - 120秒 | | 缓慢 | 5秒 | 120秒以上 |

🔄 自动恢复

卡死检测

当出现以下情况时,OpenCode 被视为卡死:

  • - 在 2倍预期超时时间 后无响应
  • 健康检查连续失败 3 次
  • 进程仍在运行但未响应轮询

恢复步骤

检测到卡死时:

  1. 1. 取消当前操作:session/cancel
  2. 等待 2 秒
  3. 如果仍然卡死:process.kill
  4. 清理锁
  5. 重启 OpenCode
  6. 从最后一个已知会话恢复(如果可用)

锁清理

当 OpenCode 崩溃时,锁文件可能会变得过时。始终清理:

bash

在启动新会话之前


exec(command: find ~/.openclaw/agents -name *.lock -mmin +30 -delete)

在杀死卡死进程后

exec(command: rm -f ~/.openclaw/agents//sessions/.lock)

📋 分步工作流

步骤 1:预检

在开始之前,验证环境:

bash

检查 OpenCode 是否已安装


exec(command: opencode --version)

清理过时的锁(超过 30 分钟)

exec(command: find ~/.openclaw/agents -name *.lock -mmin +30 -delete)

步骤 2:启动 OpenCode

bash
exec(
command: opencode acp --cwd /path/to/project,
background: true,
workdir: /path/to/project
)

保存 sessionId 以供所有后续操作使用

步骤 3:初始化(带重试)

json
// 发送初始化
{jsonrpc:2.0,id:0,method:initialize,params:{protocolVersion:1,clientCapabilities:{fs:{readTextFile:true,writeTextFile:true},terminal:true},clientInfo:{name:clawdbot,title:Clawdbot,version:2.0.0}}}

重试逻辑:

for attempt in 1..3:
process.write(sessionId, initialize_json + \n)
response = process.poll(sessionId, timeout: 10000)

if response contains protocolVersion:
break # 成功

if attempt < 3:
sleep(2 * attempt) # 退避:2秒,4秒
else:
# 恢复模式
process.kill(sessionId)
cleanupLocks()
restart from Step 2

步骤 4:创建会话(带重试)

json
{jsonrpc:2.0,id:1,method:session/new,params:{cwd:/path/to/project,mcpServers:[]}}

与初始化相同的重试逻辑。

步骤 5:发送提示(带自适应轮询)

json
{jsonrpc:2.0,id:2,method:session/prompt,params:{sessionId:sess_xyz,prompt:[{type:text,text:您的问题在这里}]}}

自适应轮询:

elapsed = 0
interval = 1000 # 从 1 秒开始
maxWait = 120000 # 复杂任务 2 分钟

while elapsed < maxWait:
response = process.poll(sessionId, timeout: interval)

if response contains stopReason:
return response # 完成

if response contains error:
handle_error(response)
break

# 自适应间隔
elapsed += interval
if elapsed < 10000:
interval = 1000 # 前 10

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 opencode-acp-control-v2-1776205515 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 opencode-acp-control-v2-1776205515 技能

通过命令行安装

skillhub install opencode-acp-control-v2-1776205515

下载

⬇ 下载 opencode-acp-control v2.2.1(免费)

文件大小: 13.05 KB | 发布时间: 2026-4-15 10:52

v2.2.1 最新 2026-4-15 10:52
v2.2.1: Added opencode-session.sh helper script with auto-retry, adaptive polling

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部