随缘式管控
你这就是典型的没使用iflow-cli的症状,用iflow-cli从来没遇到这些事情哈哈哈哈哈
是说呢
![]()
花里胡哨的,上个牛马班跟打网游一样哈哈哈哈哈,好玩的很
1 个赞
炫酷滴狠
1 个赞
你这个为啥不行。
好像有bug,浏览器自动登录的小米token plan,它显示用的我claude的模型配置,还给我计费 ![]()
蹬了一下,觉得交付质量还不错,除了requests too much卡住了几次,给它的指令理解很好且一次交付成功。
不是compose吧
goal 是什么
结论是:/goal 功能深度耦合在 OpenCode 核心逻辑中,无法通过现有插件系统实现。
详细信息:以下由AI生成
/goal 指令实现逻辑分析
核心架构
/goal 功能由三个核心模块协作实现:
1. 命令注册 (packages/opencode/src/command/index.ts)
commands[Default.GOAL] = {
name: "goal",
description: "set a stop-condition goal; runs until a judge says it's met",
source: "command",
subtask: false,
get template() {
return "$ARGUMENTS" // 用户输入直接作为 prompt
},
}
2. Goal 状态管理 (packages/opencode/src/session/goal.ts)
- 存储:使用 InstanceState 按 sessionID 存储 goal 状态
- 数据结构:{ condition: string, react: number }
- 核心方法:
- set(sessionID, condition) - 设置 goal
- clear(sessionID) - 清除 goal
- get(sessionID) - 获取当前 goal
- bumpReact(sessionID) - 增加 judge 评估次数
- evaluate(input) - 调用独立 judge 模型评估 goal 是否完成
3. Goal Gate (packages/opencode/src/session/prompt.ts)
在 runLoop 中,当 agent 想要停止时,goalGate 会:
const goalGate = Effect.fn("SessionPrompt.goalGate")(function* (lastUser) {
// 1. 只在主 agent 上生效
if ((agentID ?? "main") !== "main") return false
// 2. 检查是否有活跃的 goal
const active = yield* goal.get(sessionID)
if (!active) return false
// 3. 使用独立 judge 模型评估(不信任 agent 自我报告)
const verdict = yield* goal.evaluate({
condition: active.condition,
msgs: transcriptMsgs,
model: lastUser.model,
})
// 4. 如果 goal 满足或不可能完成,允许停止
if (verdict.ok || verdict.impossible) {
yield* goal.clear(sessionID)
return false // 允许停止
}
// 5. 否则注入 judge 的原因作为 synthetic user message,继续执行
const count = yield* goal.bumpReact(sessionID)
// ... 注入 reentry message
return true // 继续执行
})
4. Judge 评估逻辑
Judge 使用独立的模型调用,评估标准:
- ok: 对话记录中有明确证据表明 condition 已满足
- impossible: condition 本身矛盾、依赖不可用资源、或 agent 已明确表示无法完成
- not ok: 证据不足,需要继续工作
能否通过 OpenCode 插件实现?
插件系统能力(packages/plugin/src/index.ts)
Hook 能力 限制
actor.preStop 控制 subagent 停止 ❌ 只对 subagent 生效,不适用于主 agent
actor.postStop actor 停止后处理 ❌ 同上
chat.message 消息到达时处理 ❌ 无法控制停止逻辑
chat.params 修改 LLM 参数 ❌ 无关
experimental.chat.system.transform 修改系统提示词 ❌ 无法强制阻止 agent 停止
结论:无法通过插件完整实现
原因:
1. goalGate 是内部逻辑:goal 评估发生在 prompt.ts 的 runLoop 中,插件无法介入这个流程
2. actor.preStop 只对 subagent 生效:
// prompt.ts 中 goalGate 的检查
if ((agentID ?? "main") !== "main") return false // 主 agent 直接跳过
3. 无法访问 InstanceState:goal 状态存储在 InstanceState 中,插件没有对应的访问接口
4. 需要独立 judge 模型调用:goal 评估需要调用独立的模型,插件系统没有提供这个能力
如果要实现类似功能,需要的修改
要在插件层面实现类似 goal 的功能,需要:
1. 在 prompt.ts 的 runLoop 中添加插件钩子:
// 在 goalGate 位置添加
if (yield* plugin.trigger("session.stopGate", { sessionID, lastUser }, { shouldStop: true })) {
continue // 插件决定继续执行
}
2. 在 plugin Hooks 接口中添加新 hook:
"session.stopGate"?: (
input: { sessionID: string; lastUser: UserMessage },
output: { shouldStop: boolean },
) => Promise<void>
3. 提供 goal 状态访问接口给插件
总结
方面 状态
命令注册 ✅ 可通过插件自定义命令
Goal 状态管理 ❌ 需要修改 InstanceState 访问
Goal Gate(停止控制) ❌ 需要修改 prompt.ts 核心逻辑
Judge 评估 ❌ 需要独立模型调用能力
结论:/goal 功能深度耦合在 OpenCode 核心逻辑中,无法通过插件系统实现。如需此功能,需要向 OpenCode 贡献新的插件钩子或修改核心代码。
所以我说小米做都做了能不能合到oc主线去 ![]()
1 个赞

