{"_id":"@ag-dsh/dsh-gen-commit-msg-zh","_rev":"3-68cb92cc4b9fb7d4c9dabe1a9161e3b1","name":"@ag-dsh/dsh-gen-commit-msg-zh","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@ag-dsh/dsh-gen-commit-msg-zh","version":"1.0.0","keywords":["dsh","deepseek-harness","cordis","plugin","agent","git","commit-message","commit"],"license":"MIT","_id":"@ag-dsh/dsh-gen-commit-msg-zh@1.0.0","maintainers":[{"name":"alphagodzilla","email":"AlphaGodzilla@protonmail.com"}],"homepage":"https://github.com/AlphaGodzilla/ag-dsh-coding-plugins#readme","bugs":{"url":"https://github.com/AlphaGodzilla/ag-dsh-coding-plugins/issues"},"dist":{"shasum":"076a696cf338c62fda2a9b1fe337176f29263164","tarball":"https://registry.npmjs.org/@ag-dsh/dsh-gen-commit-msg-zh/-/dsh-gen-commit-msg-zh-1.0.0.tgz","fileCount":15,"integrity":"sha512-tDeTcXgmCJmLJXJRrTqdN6yuQN4OcMUp0DCBz018cGqqFc/qWFGHDS1It6XVdBG1QRWyjdVHbfYv0YsGkT0lfg==","signatures":[{"sig":"MEUCIFdydG6hbMDHuS62OelDiRSzAD2JiWhA9hS+P5JJcYRqAiEAmTkANqQxSdkpRxBb9zZNXHVy4sxdh8sN29gKWIRCnYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58294},"main":"lib/index.js","type":"module","_from":"file:ag-dsh-dsh-gen-commit-msg-zh-1.0.0.tgz","types":"lib/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./package.json":"./package.json"},"scripts":{"build":"tsc -b"},"_npmUser":{"name":"alphagodzilla","email":"AlphaGodzilla@protonmail.com"},"_resolved":"/tmp/ef63dfa3eac528a93f0beb524354fe9c/ag-dsh-dsh-gen-commit-msg-zh-1.0.0.tgz","_integrity":"sha512-tDeTcXgmCJmLJXJRrTqdN6yuQN4OcMUp0DCBz018cGqqFc/qWFGHDS1It6XVdBG1QRWyjdVHbfYv0YsGkT0lfg==","repository":{"url":"git+https://github.com/AlphaGodzilla/ag-dsh-coding-plugins.git","type":"git","directory":"packages/gen-commit-msg-zh"},"_npmVersion":"10.9.8","description":"DeepSeek Harness (DSH) plugin: generate a Chinese git commit message and commit interactively (slash command + skill)","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.0-rc.6","@deepseek-ai/dsh-agent":"^0.1.0-rc.6","@deepseek-ai/dsh-skill":"^0.1.0-rc.6","@deepseek-ai/dsh-commands":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.0-rc.6","@deepseek-ai/dsh-agent":"^0.1.0-rc.6","@deepseek-ai/dsh-skill":"^0.1.0-rc.6","@deepseek-ai/dsh-commands":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-gen-commit-msg-zh_1.0.0_1786767178604_0.3114072282982947","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ag-dsh/dsh-gen-commit-msg-zh","version":"1.1.0","keywords":["dsh","deepseek-harness","cordis","plugin","agent","git","commit-message","commit"],"license":"MIT","_id":"@ag-dsh/dsh-gen-commit-msg-zh@1.1.0","maintainers":[{"name":"alphagodzilla","email":"AlphaGodzilla@protonmail.com"}],"homepage":"https://github.com/AlphaGodzilla/ag-dsh-coding-plugins#readme","bugs":{"url":"https://github.com/AlphaGodzilla/ag-dsh-coding-plugins/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"459880d02e62487e74d4f637c323f9a69177b1c2","tarball":"https://registry.npmjs.org/@ag-dsh/dsh-gen-commit-msg-zh/-/dsh-gen-commit-msg-zh-1.1.0.tgz","fileCount":16,"integrity":"sha512-Av41wANHtN6fazcBHEnaHVedeAcKc8FQY+RYHgkh/iE0D8qXsaTcIIUXZIzIg4ZcgSFfw3iDSW4FwmhuA2xgnA==","signatures":[{"sig":"MEUCIQCTBkGVWuaBo2AAS8zjMwy6xvEE04g5Z0/fY6Lc7lnWpQIgIb5p918WbWJX0w2Z9+wLS309Ctuy5Br+JELl6+4Nis4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60073},"main":"lib/index.js","type":"module","_from":"file:ag-dsh-dsh-gen-commit-msg-zh-1.1.0.tgz","types":"lib/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"build":"tsc -b"},"_npmUser":{"name":"alphagodzilla","email":"AlphaGodzilla@protonmail.com"},"_resolved":"/tmp/238789c3368a3bb2744167a174487a1f/ag-dsh-dsh-gen-commit-msg-zh-1.1.0.tgz","_integrity":"sha512-Av41wANHtN6fazcBHEnaHVedeAcKc8FQY+RYHgkh/iE0D8qXsaTcIIUXZIzIg4ZcgSFfw3iDSW4FwmhuA2xgnA==","repository":{"url":"git+https://github.com/AlphaGodzilla/ag-dsh-coding-plugins.git","type":"git","directory":"packages/gen-commit-msg-zh"},"_npmVersion":"10.9.8","description":"DeepSeek Harness (DSH) plugin: generate a Chinese git commit message and commit interactively (slash command + skill)","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.0-rc.6","@deepseek-ai/dsh-agent":"^0.1.0-rc.6","@deepseek-ai/dsh-skill":"^0.1.0-rc.6","@deepseek-ai/dsh-commands":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.0-rc.6","@deepseek-ai/dsh-agent":"^0.1.0-rc.6","@deepseek-ai/dsh-skill":"^0.1.0-rc.6","@deepseek-ai/dsh-commands":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-gen-commit-msg-zh_1.1.0_1786769255498_0.9839519067102929","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@ag-dsh/dsh-gen-commit-msg-zh","description":"DeepSeek Harness (DSH) plugin: generate a Chinese git commit message and commit interactively (slash command + skill)","keywords":["dsh","deepseek-harness","cordis","plugin","agent","git","commit-message","commit"],"version":"1.1.1","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/AlphaGodzilla/ag-dsh-coding-plugins.git","directory":"packages/gen-commit-msg-zh"},"type":"module","main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./cordis.patch.yml":"./cordis.patch.yml","./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"license":"MIT","engines":{"node":">=22"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-agent":"^0.1.0-rc.6","@deepseek-ai/dsh-commands":"^0.1.0-rc.6","@deepseek-ai/dsh-llm":"^0.1.0-rc.6","@deepseek-ai/dsh-skill":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6"},"devDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-agent":"^0.1.0-rc.6","@deepseek-ai/dsh-commands":"^0.1.0-rc.6","@deepseek-ai/dsh-llm":"^0.1.0-rc.6","@deepseek-ai/dsh-skill":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6","typescript":"^5.9.0","vitest":"^4.1.0"},"scripts":{"build":"tsc -b"},"_id":"@ag-dsh/dsh-gen-commit-msg-zh@1.1.1","bugs":{"url":"https://github.com/AlphaGodzilla/ag-dsh-coding-plugins/issues"},"homepage":"https://github.com/AlphaGodzilla/ag-dsh-coding-plugins#readme","_integrity":"sha512-QY6snqVUD1fP7ILii8dWItbla8x06GLAffaxwWo5EkgfsjpeGBudv/ZttUzgX7NskFpbCsdKEhmVdKTGX4/zCg==","_resolved":"/tmp/8b495ff982dfe854a6e4b015321a6aad/ag-dsh-dsh-gen-commit-msg-zh-1.1.1.tgz","_from":"file:ag-dsh-dsh-gen-commit-msg-zh-1.1.1.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-QY6snqVUD1fP7ILii8dWItbla8x06GLAffaxwWo5EkgfsjpeGBudv/ZttUzgX7NskFpbCsdKEhmVdKTGX4/zCg==","shasum":"9e30e0adb63d398a4808a783cea37a66f7980c8f","tarball":"https://registry.npmjs.org/@ag-dsh/dsh-gen-commit-msg-zh/-/dsh-gen-commit-msg-zh-1.1.1.tgz","fileCount":16,"unpackedSize":61390,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC4LfK3rgFSQZ2CL8uCZjWToA6jerocAkMDDp770JHyvwIhAPQlJpIMmXrTrMXBdrkLk8kFEvwZq4MKIfzxY+V2LnXo"}]},"_npmUser":{"name":"alphagodzilla","email":"AlphaGodzilla@protonmail.com"},"directories":{},"maintainers":[{"name":"alphagodzilla","email":"AlphaGodzilla@protonmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-gen-commit-msg-zh_1.1.1_1786770706391_0.23201195289266385"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-15T04:12:58.478Z","modified":"2026-08-15T05:11:46.730Z","1.0.0":"2026-08-15T04:12:58.772Z","1.1.0":"2026-08-15T04:47:35.650Z","1.1.1":"2026-08-15T05:11:46.544Z"},"bugs":{"url":"https://github.com/AlphaGodzilla/ag-dsh-coding-plugins/issues"},"license":"MIT","homepage":"https://github.com/AlphaGodzilla/ag-dsh-coding-plugins#readme","keywords":["dsh","deepseek-harness","cordis","plugin","agent","git","commit-message","commit"],"repository":{"type":"git","url":"git+https://github.com/AlphaGodzilla/ag-dsh-coding-plugins.git","directory":"packages/gen-commit-msg-zh"},"description":"DeepSeek Harness (DSH) plugin: generate a Chinese git commit message and commit interactively (slash command + skill)","maintainers":[{"name":"alphagodzilla","email":"AlphaGodzilla@protonmail.com"}],"readme":"[中文](README.md) | [English](README.en.md)\n\n# @ag-dsh/dsh-gen-commit-msg-zh\n\nDSH 插件: 生成中文 git commit message 并交互提交。迁移自 Pi Coding Agent 扩展\n`pi/agent/extensions/gen-commit-msg-zh`，命令名保持 `/gen-commit-msg-zh`，支持携带附加提示词运行。\n\n## Installation\n\n包自 1.1.0 起携带官方 `dsh.bundle` 清单（`dsh.bundle.patch` → `cordis.patch.yml`），\n`dsh plugin add` 会把它注册为 profile 配置层（追加进 `dsh.profile.bundles`）。\n以最常用的 web profile 为例：\n\n```sh\n# 安装（新装，或已装旧版时用 update 升级）\ndsh plugin --profile web add @ag-dsh/dsh-gen-commit-msg-zh\ndsh plugin --profile web update @ag-dsh/dsh-gen-commit-msg-zh\n\n# ⚠️ 安装/更新后必须重启 dsh 才会加载：先退出当前 dsh 进程，再重新启动\ndsh --profile web\n```\n\n> 为什么需要重启：`dsh plugin add` 只负责安装包并把它登记进 `dsh.profile.bundles`\n> （profile 的 `package.json`）。运行中的进程在**启动时**才一次性组合配置树，且热更新\n> 只监视 `cordis.patch.yml`、不监视 bundles 列表，所以新层要等下次启动才生效。\n\n> 安装时出现的 `missing peer @deepseek-ai/...` 警告可忽略：profile 默认\n> `autoInstallPeers: false`，这些 peer 由 dsh 安装自身的模块闭包\n> （`$DSH_HOME/profiles/node_modules`）在运行时提供。\n\n也可以不经过 bundle 机制，直接把插件行写入 profile 的 `cordis.yml` / `cordis.patch.yml`\n（此方式由 HMR 热应用，**无需重启**）：\n\n```yaml\n- id: gen-commit-msg-zh\n  name: '@ag-dsh/dsh-gen-commit-msg-zh'\n```\n\n依赖的宿主服务：\n\n| 服务 | 依赖方式 | 说明 |\n|---|---|---|\n| `commands` | inject（硬依赖） | 注册 `/gen-commit-msg-zh` 命令 |\n| `skills` | `ctx.inject`（可选） | 注册 `git-commit-zh` 技能（非交互直接提交）；缺失时命令部分不受影响 |\n| `userQuestions` | `ctx.get`（可选） | 三选 / 调整输入对话框；缺失时命令仍可用，但不会弹菜单（需要带 UI 的部署，如 `@deepseek-ai/dsh-tool-ask-user` + 客户端 UI） |\n\n## Usage\n\n### 交互式命令\n\n```\n/gen-commit-msg-zh [附加要求]\n```\n\n交互流程：\n\n1. **生成轮** —— 插件把生成提示词（模板 + 可选附加要求）作为消息发给模型并触发一轮。\n   模型自行运行 git 只读命令（`git status` / `git diff --staged` / `git branch --show-current` /\n   `git log --oneline -10`）获取上下文，生成并展示中文 commit message。\n   **本轮不做任何 git 写操作。**\n2. **三选** —— 生成回合结束后弹出原生对话框：\n   - **A) 提交** —— 插件跟进提交指令：模型先判断是否已有暂存改动，无则 `git add -A` 后提交，\n     有则直接提交（`git commit` 用多个 `-m`：首个为标题，其余为正文）。\n   - **B) 调整消息** —— 输入新的提示词，重新生成并再次三选（可循环）。\n   - **C) 放弃** —— 不做任何提交。\n3. **收尾** —— 提交轮结束后复位状态，不再次弹交互；结果可见于转录。\n\ncommit 由模型经 bash 执行，插件只负责编排（发提示词 / 交互 / followup），不解析消息、不执行 git。\n因此需要部署允许模型调用 bash 工具并具备 git 写权限。\n\n### 非交互技能 `git-commit-zh`\n\n插件同时注册一个模型可调用的技能（名称与命令 `gen-commit-msg-zh` 刻意不同）：\n在**非用户交互**场景（自主执行、无 UI / 无头部署、子代理、脚本化流程）下，模型可加载该技能，\n直接为当前 git 改动生成推荐的中文 commit message 并提交，**无需用户确认**。\n技能对模型与用户均开放（`modelInvocable: true, userInvocable: true`），且只在宿主已挂载\n`skills` 服务时注册（`ctx.inject`，缺失自动跳过）。\n\n## 命令与技能\n\n| 名称 | 类型 | 说明 |\n|---|---|---|\n| `/gen-commit-msg-zh` | 命令 | 生成中文 commit message 并交互提交（需用户三选确认） |\n| `git-commit-zh` | 技能 | 非交互直接提交当前改动（按推荐消息，无需用户确认） |\n\n## Config\n\n无（该插件不接受配置）。\n\n## 模型可见文本\n\n以下提示词是稳定契约，**源文件**为包内 `prompts/generate.md`、`prompts/commit.md` 与\n`prompts/skill-commit.md`（运行时由 `src/prompts.ts` 读取，缺失时回退到极简 fallback）。\n改动提示词时需同步更新本 README 与测试。\n\n### 生成轮提示词（`prompts/generate.md` → `GENERATE_PROMPT`）\n\n```\n## Your task\n\n你的任务是帮助用户生成一条 git 提交信息（commit message）。\n\n**本轮只做只读探查与生成消息，不要执行任何 git 写命令（不要 `git add`，不要 `git commit`）。**\n生成并展示 commit message 后就停下，等待用户从对话框中选择下一步。\n\n### 获取上下文\n\n请你自行运行以下只读 git 命令了解当前状态，不要臆测：\n\n- `git status` —— 查看工作区与暂存区状态\n- `git diff --staged` —— 查看已暂存的改动（若没有暂存改动，可再看 `git diff` 了解未暂存改动）\n- `git branch --show-current` —— 当前分支\n- `git log --oneline -10` —— 近期提交风格参考\n\n### Guidelines\n\n- 不要添加任何广告尾注，例如 \"Generated with [Claude Code](https://claude.ai/code)\"\n- 优先针对已暂存（staged）的改动生成消息；若当前没有任何暂存改动，则针对工作区的全部改动生成消息\n- 本轮不要用 `git add` 暂存任何文件，是否暂存由用户稍后决定\n- 遵循下方 Format 与 Rules 生成 commit message\n- 先列出修改的文件，简明总结改动，再清晰地展示生成的 commit message，然后停下等待用户选择\n\n### Format\n\n```\n<type>:<space><message title in Chinese>\n\n<bullet points in Chinese summarizing what was updated>\n```\n\n### Example Titles\n\n```\nfeat(auth): 添加 JWT 登录流程\nfix(ui): 修复侧边栏空指针问题\nrefactor(api): 拆分用户控制器逻辑\ndocs(readme): 添加使用说明章节\n```\n\n### Example with Title and Body\n\n```\nfeat(auth): 添加 JWT 登录流程\n\n- 实现了 JWT 令牌验证逻辑\n- 为验证组件添加了文档说明\n```\n\n### Rules\n\n* title is lowercase, no period at the end.\n* Title should be a clear summary, max 50 Chinese characters.\n* Use the body (optional) to explain *why*, not just *what*.\n* Bullet points should be concise and high-level.\n\nAvoid\n\n* Vague titles like: \"update\", \"fix stuff\"\n* Overly long or unfocused titles\n* Excessive detail in bullet points\n\n### Allowed Types\n\n| Type     | Description                           |\n| -------- | ------------------------------------- |\n| feat     | New feature                           |\n| fix      | Bug fix                               |\n| chore    | Maintenance (e.g., tooling, deps)     |\n| docs     | Documentation changes                 |\n| refactor | Code restructure (no behavior change) |\n| test     | Adding or refactoring tests           |\n| style    | Code formatting (no logic change)     |\n| perf     | Performance improvements              |\n```\n\n有附加要求时，在模板后追加：\n\n```\n### 用户附加要求\n\n<附加要求原文>\n```\n\n### 提交轮提示词（`prompts/commit.md` → `COMMIT_PROMPT`）\n\n```\n用户已选择提交。请先运行 `git status`（或 `git diff --staged --stat`）判断是否已有暂存改动:\n- 若**无**已暂存改动: 执行 `git add -A`（若我在上文附加要求中指定了提交范围, 则按该范围 add）后再提交;\n- 若**已有**暂存改动: 不要再 add, 直接对已暂存内容提交。\n用你上面生成的 commit message 执行 `git commit`; sandbox 环境用多个 `-m`（首个为标题, 其余为正文）, 不要加任何广告尾注。\n```\n\n### 非交互提交技能正文（`prompts/skill-commit.md` → `GIT_COMMIT_SKILL`）\n\n```\n## Task\n\n把当前 git 工作区的改动提交为一条中文 commit message。这是**非交互执行**: 直接按下方规则生成推荐消息并提交, **不要向用户确认提交信息**, 也不要等待用户选择。\n\n## Steps\n\n1. 先运行只读 git 命令了解当前状态, 不要臆测:\n   - `git status` —— 查看工作区与暂存区状态\n   - `git diff --staged` —— 查看已暂存的改动（若没有暂存改动, 可再看 `git diff` 了解未暂存改动）\n   - `git branch --show-current` —— 当前分支\n   - `git log --oneline -10` —— 近期提交风格参考\n2. 生成一条中文 commit message, 遵守下方 Format / Rules / Allowed Types。\n3. 直接提交, 不询问用户:\n   - 若**无**已暂存改动: 执行 `git add -A`（若任务中指定了提交范围, 按该范围 add）后再提交;\n   - 若**已有**已暂存改动: 不要再 add, 直接对已暂存内容提交。\n   - 用生成的 message 执行 `git commit`; sandbox 环境用多个 `-m`（首个为标题, 其余为正文）, 不要加任何广告尾注。\n\n## Format\n\n```\n<type>:<space><message title in Chinese>\n\n<bullet points in Chinese summarizing what was updated>\n```\n\n### Example Titles\n\n```\nfeat(auth): 添加 JWT 登录流程\nfix(ui): 修复侧边栏空指针问题\nrefactor(api): 拆分用户控制器逻辑\ndocs(readme): 添加使用说明章节\n```\n\n### Example with Title and Body\n\n```\nfeat(auth): 添加 JWT 登录流程\n\n- 实现了 JWT 令牌验证逻辑\n- 为验证组件添加了文档说明\n```\n\n## Rules\n\n* title is lowercase, no period at the end.\n* Title should be a clear summary, max 50 Chinese characters.\n* Use the body (optional) to explain *why*, not just *what*.\n* Bullet points should be concise and high-level.\n\nAvoid\n\n* Vague titles like: \"update\", \"fix stuff\"\n* Overly long or unfocused titles\n* Excessive detail in bullet points\n\n## Allowed Types\n\n| Type     | Description                           |\n| -------- | ------------------------------------- |\n| feat     | New feature                           |\n| fix      | Bug fix                               |\n| chore    | Maintenance (e.g., tooling, deps)     |\n| docs     | Documentation changes                 |\n| refactor | Code restructure (no behavior change) |\n| test     | Adding or refactoring tests           |\n| style    | Code formatting (no logic change)     |\n| perf     | Performance improvements              |\n```\n\n## Behavior\n\n- 阶段状态机（`idle` / `generate` / `commit`）按会话 id 保存在**进程内**：`generate` 回合结束后弹三选；\n  `commit` 回合结束后仅复位；`idle` 不干预普通对话。同一生成回合只弹一次三选（防抖）。\n- 对话框被取消、agent 已失效、或部署无 `userQuestions` provider 时，流程安全回到 `idle`，不做任何提交。\n- 插件消息以 `form: 'notice'` 形态写入转录（单行摘要），完整提示词作为消息正文。\n- `git-commit-zh` 技能仅在宿主挂载 `skills` 服务时注册（`ctx.inject`），对模型与用户均开放\n  （`modelInvocable: true, userInvocable: true`）；技能正文来自 `prompts/skill-commit.md`。\n\n## Known Limitations and Deferred Work\n\n- **阶段状态不跨进程持久化**：DSH 主机插件与进程同生命周期，阶段存于内存；完整重启后复位为\n  `idle`。若在生成回合与三选之间重启，重跑一次 `/gen-commit-msg-zh` 即可。\n- **交互菜单需要 UI 部署**：`userQuestions` 为可选服务，无 provider 时命令只触发生成轮、不弹菜单。\n- **技能需要 `skills` 服务**：宿主未挂载 `dsh-skill` 时 `git-commit-zh` 不注册（命令不受影响）。\n- **依赖模型与 bash 工具**：提交由模型执行，需要部署允许 bash 且具备 git 写权限。\n- 未迁移 Pi 版的 `ctx.ui.notify` 通知（DSH 无对等 API）；进度通过命令结果文本与转录呈现。\n","readmeFilename":"README.md"}