Procházet zdrojové kódy

chore(task): P2 OpenCode 适配规划推进——S0 改为 kimi 宿主内实测硬前置

作者指定:kimi 宿主即 OpenCode,S0 能力核验由 kimi 实测(零成本、证据最真)。
- research/opencode-capability-checklist.md:A-F 六组核验清单(探测/skills/
  agents+permission/plugins 注入/配置合并/版本线),每条要求实测结果+证据原文;
  关键裁决点=C2 permission 实形、D4 hasHooks 诚实结论。
- implement.md:S0(kimi 实测)→复核 gate→claude 按实测定稿 design→S1-S6;
  plugin 翻车回退 AGENTS.md 兜底+hasHooks:false 不算失败算诚实收口。
- prd Notes 同步;assignee=kimi。
lingfengQAQ před 2 měsíci
rodič
revize
91419ef528

+ 15 - 0
.trellis/tasks/07-29-p2-opencode-adapter/implement.md

@@ -0,0 +1,15 @@
+# 实施计划:OpenCode 宿主适配(F7)
+
+前置:v7 分支 4c13f6c 之后;704 测试绿基线。分工沿用:kimi 实施 / claude 检查;**S0 由 kimi 执行**(宿主即 OpenCode,实测零成本——作者指定)。
+
+- [ ] **S0 OpenCode 能力实测核验(kimi,硬前置)**:按 `research/opencode-capability-checklist.md` 逐条实测填「实测结果」+ 证据原文。关键裁决点:C2 permission 实形(两审只读能否宿主硬约束)、D4 hasHooks 结论(plugin 注入可靠性,诚实优先)。产出交 claude 复核(review gate 1),复核通过后 claude 按实测定稿 design.md。
+- [ ] **S1 registry 条目**:`adapters/registry.json` 加 opencode(tier 1 / agentCapable / hasHooks 按 S0 结论 / detect_bin / install_dir / smoke deferred-beta 同口径);registry 相关测试与报告断言同步。
+- [ ] **S2 壳渲染**:`host-shells/generate.js` 加 opencode 目标——SKILL 条件块按 S0 的 hasHooks/agentCapable 定值渲染;两审 agents markdown frontmatter 按 C1/C2 实测 schema(mode + permission 实形);drift check 纳入 opencode 壳。
+- [ ] **S3 installer 落位**:detect(A1 实测的探测方式,含 Windows shim 形态)→ 壳文件进 `.opencode/`(E2 清单)→ 会话注入按 D4 结论(plugin 写入 或 AGENTS.md 块兜底)→ manifest 三态 + 幂等合并(E1)。失败路径 fail-open:注入脚本坏不阻塞会话。
+- [ ] **S4 `adapters/opencode/support.md`**:参照 codex/support.md 形状;逐能力写「验证于 vX.Y.Z + 证据」(F1);smoke 推迟 beta 如实标注。
+- [ ] **S5 测试**:registry/generate/installer 单测 + install-e2e 增加 opencode 目标(双平台);渲染产物断言含 mode/permission 字段。
+- [ ] **S6 全量回归 + drift 绿 + spec 回填**(multi-agent spec §7 registry 示例/宿主清单同步升版;story-repo 如涉决策补条目)+ 提交(分层:实现+测试一 commit、任务工件一 commit)。
+
+Review gates:S0 清单复核(claude);S6 前 install-e2e 输出贴任务目录。
+
+回滚点:每步独立;S3 installer 若 plugin 路线实测翻车,按 PRD Notes 回退 AGENTS.md 兜底 + registry hasHooks 改 false(不算失败,算诚实收口)。

+ 2 - 2
.trellis/tasks/07-29-p2-opencode-adapter/prd.md

@@ -33,6 +33,6 @@
 
 ## Notes
 
-- 实施前需用本机 `opencode`(1.18.4 已装)核对 agents frontmatter 的 permission 字段实际 schema——kimi 的对照表基于其宿主经验,落地时以官方文档/实测为准,写进 support.md。
+- **S0 硬前置(作者指定,2026-07-30)**:kimi 的宿主就是 OpenCode,由 kimi 先按 `research/opencode-capability-checklist.md` 逐条实测(A 探测 / B skills / C agents+permission / D plugins 注入 / E 配置合并 / F 版本线),填实测结果 + 证据原文;claude 复核后按实测定稿 design.md,再进 S1。registry/壳/installer 每个字段都必须指到清单里的一条实测证据。
 - plugin 注入若实测有坑,回退方案:AGENTS.md 标记块承载静态指引 + 启动时 SKILL 引导手动 `session-context`(即 `hasHooks:false` 降级),registry 相应改 false——诚实标注优于虚标。
-- 工作量参照 codex adapter;中等复杂度,design 细节可在实施首步以 spike 形式验证 plugin 机制后再定稿(PRD+本 Notes 即启动依据,design.md 可实施期补)。
+- 工作量参照 codex adapter;分工沿用 kimi 实施 / claude 检查。

+ 60 - 0
.trellis/tasks/07-29-p2-opencode-adapter/research/opencode-capability-checklist.md

@@ -0,0 +1,60 @@
+# S0 核验清单:OpenCode 宿主能力实测(kimi 执行)
+
+> 执行人:kimi(宿主即 OpenCode,实测零成本)。产出写回本文件各条「实测结果」,作为 design.md 定稿的唯一依据——**registry/壳/installer 的每个字段都必须能指到本文件的一条实测证据**,不接受经验性描述。
+> 每条附证据方式:命令输出原文 / 配置文件片段 / 官方文档链接(注明版本)。
+
+## A. 基础探测
+
+- [ ] **A1 版本与探测命令**:`opencode --version` 输出原文;`detect_bin` 用 `opencode` 是否在 PATH 稳定可探测(Windows 下是 .ps1/.cmd shim 还是 exe,影响 installer 探测方式)。
+  - 实测结果:
+- [ ] **A2 安装目录约定**:项目级配置根是否确为 `.opencode/`;是否存在全局目录(如 `~/.config/opencode/`)且项目级优先;大小写/命名有无坑。
+  - 实测结果:
+
+## B. Skills(SKILL.md 单入口)
+
+- [ ] **B1 发现规则**:`.opencode/skills/<name>/SKILL.md` 是否为确切约定(目录名=技能名?frontmatter name 优先?);发现是否自动、需否重启会话。
+  - 实测结果:
+- [ ] **B2 frontmatter 兼容**:v7 SKILL.md 的 `name`/`description` frontmatter 与条件块渲染产物(`{{#if agentCapable}}` 已渲染定值)能否原样落位;有无 OpenCode 特有必填字段。
+  - 实测结果:
+
+## C. Agents / 两审 subagent(agentCapable 判定核心)
+
+- [ ] **C1 agents 目录与 frontmatter 确切 schema**:`.opencode/agents/*.md` 是否现行约定;`mode: subagent` 字段名与取值原文;除 name/description/mode 外的必填项。
+  - 实测结果:
+- [ ] **C2 permission 字段实形**:只读约束的确切写法(`permission: { edit: deny }`?`tools:` 白名单?两者关系);对 Bash/网络工具能否 deny;**用一个最小 agent 实测**:给 edit deny 的 subagent 让它尝试写文件,贴拒绝行为原文。
+  - 实测结果:
+- [ ] **C3 独立上下文核验**:task 工具派发的 subagent 是否新鲜上下文(不继承主会话历史)——两审独立性的根据。实测:主会话塞一个标记词,subagent 内询问是否可见。
+  - 实测结果:
+- [ ] **C4 并发派发**:能否一次派两个 subagent 并行(两审同时跑);不能则串行是否可接受(记录,不阻断)。
+  - 实测结果:
+
+## D. 会话启动注入(hasHooks 判定核心)
+
+- [ ] **D1 plugins 加载约定**:`.opencode/plugins/*.js` 是否自动发现;模块格式(ESM/CJS)、导出形状、hook 名称原文(`chat.message`?有无更贴切的 session-start 等价 hook)。
+  - 实测结果:
+- [ ] **D2 注入可行性**:plugin 能否在会话首条消息注入动态内容(书籍状态 = 运行 `webnovel-writer session-context` 的输出)并持久化进历史;注入失败/脚本报错时会话是否仍可用(fail-open 要求)。
+  - 实测结果:
+- [ ] **D3 AGENTS.md 兜底**:OpenCode 对项目根 AGENTS.md 的自动加载行为(Trellis 本仓库即活证据,确认版本行为一致);v7 installer 的 AGENTS.md 标记块机制可否直接复用。
+  - 实测结果:
+- [ ] **D4 hasHooks 结论**:综合 D1-D3 给结论——`hasHooks: true`(plugin 注入可靠)或 `false`(AGENTS.md 静态 + SKILL 引导手动 session-context)。**诚实优先,宁可 false 不虚标**。
+  - 实测结果:
+
+## E. 配置合并与卸载面(installer 需要)
+
+- [ ] **E1 项目级配置文件**:`.opencode/` 下有无 settings/config 类文件需要 installer 幂等合并(对应 claude-code 的 settings.json 合并逻辑);无则记「无需合并」。
+  - 实测结果:
+- [ ] **E2 文件清单**:完整列出 installer 需落位的文件集(skills/agents/plugins/AGENTS.md 块),与 manifest 三态机制的对接点。
+  - 实测结果:
+
+## F. 版本兼容线
+
+- [ ] **F1**:以上各能力的最低可用版本(support.md 需要写「验证于 vX.Y.Z」);OpenCode 近期有无 breaking 变更预告影响上述约定。
+  - 实测结果:
+
+---
+
+## 产出要求
+
+1. 全部条目填「实测结果」+ 证据原文,本文件即 research 留档。
+2. 若 C2 permission 实形与 PRD 预期不符(例如无法 deny 写入),在 D4 同款位置给诚实结论——两审仍可跑(提示词约束),只是「权限硬约束」红利降级,registry 备注如实写。
+3. 完成后交 claude 复核,随后由 claude 按实测结果定稿 design.md,再进 S1 实施。

+ 2 - 2
.trellis/tasks/07-29-p2-opencode-adapter/task.json

@@ -9,7 +9,7 @@
   "package": null,
   "priority": "P2",
   "creator": "codex",
-  "assignee": "codex",
+  "assignee": "kimi",
   "createdAt": "2026-07-29",
   "completedAt": null,
   "branch": null,
@@ -21,6 +21,6 @@
   "children": [],
   "parent": "07-29-v7-review-findings",
   "relatedFiles": [],
-  "notes": "",
+  "notes": "分工(作者裁定 07-30):kimi 实施 / claude 检查。S0 硬前置=kimi 在 OpenCode 宿主内按 research/opencode-capability-checklist.md 逐条实测填证据(重点 C2 permission 实形、D4 hasHooks 诚实结论),claude 复核清单后定稿 design.md 才进 S1。",
   "meta": {}
 }