
Security News
PHP Patches Critical RCE Vulnerabilities, Organizations Urged to Take Unpatched Sites Offline
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.
dsh-ezcommit-plugin
Advanced tools
DSH(DeepSeek Harness)「一键 Commit」动态插件:在会话标题栏提供 一键 Commit 按钮,由当前会话模型按业务颗粒度把工作区 git 改动拆分为多个提交(Conventional Commits),经用户审查后分批执行;当模型判定改动为「环境噪音」时只提示、不执行任何 git 写操作。
English | 简体中文
DSH-EZ Commit 是一个 DSH 动态插件:
dsh plugin --profile <name> add dsh-ezcommit-plugin 即可安装/升级(dsh.bundle 规范,见 docs/INSTALL.md);启动时静态锚点行打印安装公告与自检结果。src/host.js 与 src/client.js 即 cordis_define 的 code.host / code.client「函数体」,可直接求值;仓库内源码与线上运行的 Package 保持逐字节一致。| # | 需求 | 实现 |
|---|---|---|
| 1 | 非 git 仓库 → 按钮置灰 | Host shell 执行 git rev-parse --is-inside-work-tree |
| 2 | 按钮左侧展示分支名 | git symbolic-ref --short HEAD(detached 退化为短 hash) |
| 3 | 点击弹二次确认框 | Client shell.overlay 插槽自绘 modal |
| 4 | 模型按业务颗粒度拆分 commit | Host llm.stream() 分析改动事实,输出 JSON 计划 |
| 5 | 无改动 → 置灰 | git status --porcelain 计数为 0 时禁用 |
| 6 | 模型判定「环境噪音」→ 提示不 commit | 裁决 verdict: "noise",Host 零 git 写操作 |
安装用 DSH 官方 CLI 完成分发与版本管理(完整规范见 docs/INSTALL.md,English):
# 从 npm 安装(发布后)——登记为 profile bundle 层,由 pnpm 管理版本
dsh plugin --profile web add dsh-ezcommit-plugin
# 或从 git 仓库 / 本地 checkout 安装
dsh plugin --profile web add git+https://github.com/PenguinAndy/dsh-ezcommit-plugin.git
dsh plugin --profile web add link:/path/to/dsh-ezcommit-plugin
本插件是动态会话插件:安装完成分发后,功能在会话内通过 Cordis 工具链加载(过程内生效,不写任何仓库文件):
cordis_define:plugin.kind = 'new',idPrefix 建议 gcmt;code.host / code.client 分别填入安装包内 src/host.js / src/client.js 的完整内容。cordis_run:首次运行 Client 半会触发一次授权提示(单勾 = 授权当前 Package,双勾 = 授权后续版本),属正常流程。[分支名] [一键 Commit],工作区非 git 仓库或无改动时按钮置灰。status / diff / 未跟踪采样(敏感路径自动过滤,不采样、不进入提示词),调用当前会话已路由的模型裁决:
noise → 黄色提示框展示原因,不执行任何 git 写操作;commit → 计划审查框展示拆分批次(顺序、message、文件清单)、被过滤的敏感文件与未覆盖文件告警。git add --pathspec-from-file=- --(文件清单经 stdin,天然规避空格/特殊字符路径)+ git commit -m title [-m body],返回每批短 hash。一个 Plugin,双平面(Host + Client),通过包私有 RPC 通信。一次完整操作的时序如下:
sequenceDiagram
participant C as Client(浏览器)
participant H as Host(Node 进程)
participant M as 当前会话模型
Note over C: timer:每 5s 轮询
C->>H: git.state(sessionId)
H-->>C: { inRepo, branch, hasChanges, changedCount }
Note over C: 非 git 仓库 / 无改动 → 按钮置灰
C->>C: 点击「一键 Commit」→ 二次确认框
C->>H: commit.analyze(sessionId)
H->>H: 采集 status / diff / 未跟踪采样<br/>截断上限 + 敏感路径过滤
H->>M: llm.stream(改动事实 + 系统提示词)
M-->>H: JSON 计划 { verdict, commits }
alt verdict = "noise"
H-->>C: 环境噪音 → 提示弹窗(零 git 写操作)
else verdict = "commit"
H-->>C: 拆分批次 + 文件清单(用户审查)
C->>H: commit.execute(sessionId, commits)
H->>H: 逐批 git add + git commit<br/>任一批失败即停止(不回滚)
H-->>C: { results: [{ title, hash }], leftoverCount }
end
Host 半对外提供三个包私有 RPC(harness.handle / host.call,参数与返回值仅无损 JSON):
| 方法 | 入参 | 出参要点 |
|---|---|---|
git.state | {sessionId} | {ok, inRepo, branch, hasChanges, changedCount, untrackedCount} |
commit.analyze | {sessionId} | {ok, verdict:'noise'|'commit', reason, commits:[{title,body,files}], unplanned, problems, sensitive:[path], diffTruncated, target} |
commit.execute | {sessionId, commits} | {ok, results:[{title,hash}], leftoverCount} |
失败统一返回 {ok:false, error:{message, code}}。
系统提示词要求模型仅输出如下 JSON(响应解析时自动剥离 markdown 代码围栏,解析失败自动重试一次):
{
"verdict": "noise",
"reason": "一句话说明(noise 时必填)",
"commits": [
{ "title": "feat(scope): ...", "body": "可选多行说明", "files": ["相对路径..."] }
]
}
files 必须逐字取自改动清单;不存在/重复的文件归入 unplanned 并在 UI 告警。session.requestHeader().config)→ agent.options → 默认模型(agentDefaultModel.currentSelection())。git add/commit 之前完成,noise 路径零 git 写操作。.env*、.npmrc、.pypirc、.netrc、.git-credentials、*.pem、*.key、id_rsa*、.ssh/、.aws/、.kube/、credentials*.json 等文件的路径与内容不会发送给模型,也不会进入计划或被执行提交;计划/噪音弹窗会列出被过滤文件(仅本地展示)。status、diff 与未跟踪文本采样(每文件前 8KB、最多 32 个)会发送给当前会话模型服务商;敏感路径除外。请仅对允许发送给模型服务商的工作区使用。commit.execute 执行前用当前 porcelain 重建已知文件集合,陈旧/发明路径一律无效。git push、不 --force、不修改历史;多批次中某批失败 → 停止、不回滚、如实报告。.
├── .github/workflows/
│ └── release.yml tag 触发:校验 → verify → pack → GitHub Release + npm 发布
├── docs/
│ ├── README.en.md 英文版 README
│ ├── INSTALL.md 插件安装规范(中文)
│ ├── INSTALL.en.md 插件安装规范(English)
│ ├── dsh-ez-commit-design.md 设计文档(需求→契约映射、决策点、风险)
│ └── VERIFICATION.md 真机验证走查(六条需求)
├── src/
│ ├── host.js Host 半:3 个 RPC + git/模型逻辑(函数体)
│ ├── client.js Client 半:按钮 + 弹窗 + 样式(函数体)
│ └── index.js 静态 bundle 入口:安装公告 + 启动自检
├── scripts/
│ ├── verify.mjs 离线冒烟校验(不依赖 DSH 运行时)
│ └── stage-fixture.mjs 场景制备:demo | noise | clean
├── cordis.patch.yml profile bundle 层补丁(ezcommit 安装锚点行)
├── package.json 版本与 dsh.bundle 契约;零运行时依赖
├── pnpm-lock.yaml
└── LICENSE MIT
src/host.js与src/client.js的内容即cordis_define的code.host/code.client「函数体」,可直接求值:new Function(body)()得到 Plugin 对象。仓库内源码与 线上运行的 Package 保持逐字节一致。
pnpm verify # 或 npm run verify:离线求值 + 形状/注册冒烟校验
运行时验证:在 DSH 会话中 cordis_define + cordis_run 后,按 docs/VERIFICATION.md 的走查矩阵逐项验证六条需求(配 node scripts/stage-fixture.mjs demo|noise|clean 场景制备工具);模型裁决路径可用包含 .DS_Store、锁文件等「噪音」的工作区验证。
版本遵循 SemVer,当前 0.0.1;package.json.version 是唯一版本源。发布流程:推送 v<x.y.z> 标签 → GitHub Action(.github/workflows/release.yml)校验版本一致 → pnpm verify → npm pack → 创建 GitHub Release 并附 tarball → 配置了 NPM_TOKEN 时同步发布 npm。详见 docs/INSTALL.md §6。
欢迎 Issue 与 PR。提交 PR 时请:
src/ 后运行 pnpm verify 确保离线冒烟校验通过;docs/ 文档。FAQs
DSH「一键 Commit」静态双面插件:由当前会话模型按业务颗粒度拆分 git 改动并分批提交
The npm package dsh-ezcommit-plugin receives a total of 10 weekly downloads. As such, dsh-ezcommit-plugin popularity was classified as not popular.
We found that dsh-ezcommit-plugin demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.

Threat Research
/Security News
A supply chain attack compromised LiteLLM 1.107.0 on PyPI and Docker, spreading malware that steals cloud credentials, developer secrets, and AI provider keys.

Security News
vlt 1.5.0 links skills from JavaScript dependencies to coding agents, with lockfile versioning and Socket data to filter out known malicious packages.