OpenCode 插件 @gopowerteam/opencode-commit:提供 /commit 命令和一组 git 工具,按约定式提交规范生成中文提交信息(含 emoji)。单包仓库,TypeScript ESM,Bun 工具链。
bun install— 用 bun 管理依赖(bun.lock 是唯一 lockfile;package.json 的packageManager字段写的 yarn 是无效残留,不要用 yarn/npm)bun dev— 通过OPENCODE_CONFIG_CONTENT直接以src/index.ts源码加载插件启动 OpenCode(scripts/dev.ts),调试无需先 buildbun typecheck—tsc --noEmit(含 src 和 scripts)bun test— 运行单元测试(bun:test,覆盖 config 校验与工具层)bun run build— scripts/build.ts 两步:Bun.build 打包dist/index.js(minified ESM,target bun),再bunx tsc -p tsconfig.build.json只生成.d.tsbun run release— bumpp 发布:提交chore: release v%s→ push → 执行bun run build && npm publish
验证 = bun typecheck + bun test + bun run build。
- bumpp v11 只读
bump.config.ts;package.json 里的"bumpp"字段是旧残留、不生效。两处配置矛盾(bump.config.ts的tag: falsevs package.json 的tag: "v%s"),以 bump.config.ts 为准:发布不打 git tag - 只有
dist/会发布(files: ["dist"]+ .npmignore 排除 src、scripts、schema 等),发布前必须 build
src/index.ts— 插件入口,V2 形态export default Plugin.define({ id: 'opencode-commit', setup })。setup 中加载配置后经ctx.command.transform注册/commit、经ctx.tool.transform注册 9 个工具src/command.ts—/commit命令,程序化编排:execute内本地收集上下文(collectGitContext)→ctx.generate.text单次生成 → 本地校验失败自动重试一次(generateValidMessage)→ctx.session.prompt发入确认提示词。parseCommitArgs解析附加文本标志流:-y/--yes(快速模式:本地直接 commitAndReport +ctx.session.synthetic报告结果,跳过确认交互)与--push(提交后 runPush 自动推送,无上游自动 set-upstream;确认模式经 buildConfirmPrompt 注入 push 步骤)可任意组合,余下 token 聚合为额外要求。模型解析 resolveModel:会话模型 → 宿主默认模型,不做任何 options 配置。生成/校验/重试的核心逻辑支持依赖注入,已被单测覆盖;失败兜底路径才交回会话内模型src/context.ts— 本地 git 上下文收集(status/diff/log、待提交变更(含 untracked)自动git add -A、git log 显式 UTF-8 输出防 locale 转义;diff ≤200 行全量,超长降级为--stat摘要 + 150 行片段)src/prompt.ts— 提示词构建纯函数:buildGeneratePrompt(指南+上下文+只输出指令)与buildConfirmPrompt(question 确认 → confirm 提交 → push 询问,含防摇摆指令:声明"用户已通过 /commit 授权提交"、限定工具白名单、禁止重复询问——真机验证模型回复后 5s 内完成提交)。改生成/确认阶段的提示词 = 改这里。V2 插件上下文无自建表单通道(无 client 域、SessionDomain 无 form、permission 不能主动发起),确认交互只能走会话内 question 工具src/tools.ts— 9 个工具工厂(V2 工具定义:JSON Schema 参数、返回{ content }、context.progress({ title })设展示标题):commit-message-generate、commit-message-validate、commit-message-confirm、git-amend、git-diff(有未暂存变更时自动git add -A)、git-log、git-push、git-status、git-undo。所有 commit/amend 走commitAndReport,提交前强制 validate;推送逻辑抽为共享runPush(directory)(createPushTool 与 /commit --push 共用,无上游自动 set-upstream 重试一次);git 命令用import { $ } from 'bun'直接执行并经 inDir 绑定项目根目录。工具保留供会话内使用,/commit命令的 happy path 已不依赖它们(仅 confirm/push 仍在确认阶段使用)src/config.ts— 读取用户项目根目录的opencode-commit.json(types / scopes / maxLength;默认 9 类型、maxLength 72),schema 见仓库根opencode-commit.schema.jsonsrc/guide.ts— 内置格式指南COMMIT_GUIDE(精简版 ~9 行:<type>: <emoji> <subject>、9 类型 emoji 表、subject ≤20 字、默认无 body;控制生成 prompt 的输入 token)。MAX_DIFF_LINES = 500截断 diff(git-diff 工具层)。generate 工具优先读用户项目根目录的COMMITS.md作为自定义指南src/parser.ts/src/validator.ts— 解析与校验<type>[(<scope>)]: <emoji> <subject>,失败抛CommitError(src/errors.ts,携带 suggestions 修正建议)src/safe.ts—safe/safeAsync返回Result类型,全仓库用它代替 try/catch,新代码保持一致.opencode/是 OpenCode 自动生成的插件安装目录(含 node_modules),不是源码,不要改
- 代码注释、README、工具返回文案全部使用简体中文
- 本仓库自己的提交也遵守插件自身格式:
type: emoji subject(emoji 开头),如feat: ✨ 添加 git push 工具及 commit 后推送询问 - 校验类错误信息必须附带可操作的修正建议(
CommitError.suggestions) - 插件要点:git 命令直接
import { $ } from 'bun';工具参数 schema 用 JSON Schema;工具内用context.progress({ title })与返回值metadata设置展示标题;仅支持 OpenCode V2(peerDep@opencode/plugin >=2.0.0)