在会话里触发并跟踪项目 CI/CD 流水线
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yinfoyuan/dsh-cicd该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · dev
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 9 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 40 处,展示前 37 条)
- 读取本地文件src/branch-broker.ts:175
const raw: unknown = JSON.parse(readFileSync(this.#storePath, 'utf8')) - 写入本地文件src/branch-broker.ts:200
mkdirSync(dirname(this.#storePath), { recursive: true }) - 写入本地文件src/branch-broker.ts:201
writeFileSync(this.#storePath, JSON.stringify({ notices: this.#notices }), 'utf8') - 读取本地文件src/config-service.ts:293
const raw = JSON.parse(readFileSync(file, 'utf8')) as Record<string, unknown> - 写入本地文件src/config-service.ts:304
writeFileSync(tmp, `${JSON.stringify(raw, null, 2)}\n`, 'utf8') - 写入本地文件src/config-service.ts:307
renameSync(tmp, file) - 写入本地文件src/config-service.ts:311
writeFileSync(tmp, '') - 读取本地文件src/config.ts:129
st = statSync(abs) - 读取本地文件src/config.ts:145
raw = JSON.parse(readFileSync(abs, 'utf8')) - 发起网络请求src/pet.ts:87
const res = await fetch(`${base}/config`, { signal: AbortSignal.timeout(1_500) }) - 发起网络请求src/pet.ts:110
const res = await fetch(`${base}/state`, { signal: AbortSignal.timeout(1_500) }) - 发起网络请求src/pet.ts:167
const res = await fetch(`${base(port)}${path}`, { - 发起网络请求src/providers.ts:155
res = await fetch(url, { ...options, signal: AbortSignal.timeout(timeoutMs) }) - 执行外部命令固定命令src/runner.ts:232
spawnSync('taskkill', ['/pid', String(child.pid), '/t', '/f'], { windowsHide: true }) - 读取本地文件src/runner.ts:402
if (!existsSync(cwd)) { - 写入本地文件src/runner.ts:408
const log = createWriteStream(file, { flags: 'a' }) - 执行外部命令来自配置/变量src/runner.ts:417
const child = spawn(commandFile, commandArgs, { - 读取本地文件src/secrets.ts:54
return readFileSync(path, 'utf8') - 读取本地文件src/secrets.ts:64
const st = statSync(file) - 读取本地文件src/settings-store.ts:45
return JSON.parse(readFileSync(file, 'utf8')) as T - 写入本地文件src/settings-store.ts:54
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件src/settings-store.ts:55
writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8') - 写入本地文件src/settings-store.ts:56
renameSync(tmp, file) - 读取本地文件src/settings-store.ts:120
.filter(root => existsSync(root)) - 读取本地文件src/settings-store.ts:127
if (!root || !existsSync(root)) - 写入本地文件src/state.ts:28
mkdirSync(dir, { recursive: true }) - 写入本地文件src/state.ts:60
writeFileSync(tmp, `${JSON.stringify(record, null, 2)}\n`, 'utf8') - 写入本地文件src/state.ts:61
renameSync(tmp, target) - 读取本地文件src/state.ts:66
if (!existsSync(file)) - 读取本地文件src/state.ts:69
return JSON.parse(readFileSync(file, 'utf8')) as RunRecord - 读取本地文件src/state.ts:78
if (!existsSync(dir)) - 读取本地文件src/state.ts:81
for (const file of readdirSync(dir)) { - 读取本地文件src/state.ts:89
mtime = statSync(join(dir, file)).mtimeMs - 删除本地文件src/state.ts:111
unlinkSync(file) - 读取本地文件src/state.ts:131
if (!existsSync(file)) - 写入本地文件src/state.ts:209
mkdirSync(join(root, '.dsh'), { recursive: true }) - 写入本地文件src/state.ts:210
writeFileSync(file, `${JSON.stringify(all, null, 2)}\n`, 'utf8')
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 插件:把每个项目自己的 CI/CD 流水线接进会话——列流水线、触发、跟踪、读日志、取消、看合并冲突。当前支持阿里云云效 Flow。
README
由 DeepSeek 最新模型翻译生成dsh-cicd
把项目自己的 CI/CD 流水线接进 DeepSeek Harness(DSH)会话:列流水线、触发、跟踪、读日志、取消、查看合并冲突。
本项目是一个由真实需求驱动、在 DSH 中完成的项目:从需求澄清、实现、联调到文档,都在 DSH 会话里推进。
当前内置平台适配器:阿里云云效 Flow;配置与工具面按多平台设计,后续可接 GitLab / Jenkins 等。
能做什么
- 在项目会话里直接问「列一下流水线」「跑一下部署」,不用切到平台页面;
- 触发后后台跟踪,阶段变化/结束弹 toast,可选手桌宠气泡;
- 多分支流水线触发时弹窗选分支;
- 失败时直接读日志;合并冲突暂停时可以只读查看冲突文件/分支;
- 设置页统一管理平台 Token、组织、流水线展示名/环境/是否确认。
安装
本地仓库
dsh plugin --profile desktop add link:<本仓库路径>
发布到 npm 后
dsh plugin --profile desktop add dsh-cicd
装完重启 DSH。Web 版把 desktop 换成 web。
展开完整文档(README 剩余 1 节)
dsh-cicd
把项目自己的 CI/CD 流水线接进 DeepSeek Harness(DSH)会话:列流水线、触发、跟踪、读日志、取消、查看合并冲突。
本项目是一个由真实需求驱动、在 DSH 中完成的项目:从需求澄清、实现、联调到文档,都在 DSH 会话里推进。
当前内置平台适配器:阿里云云效 Flow;配置与工具面按多平台设计,后续可接 GitLab / Jenkins 等。
能做什么
- 在项目会话里直接问「列一下流水线」「跑一下部署」,不用切到平台页面;
- 触发后后台跟踪,阶段变化/结束弹 toast,可选手桌宠气泡;
- 多分支流水线触发时弹窗选分支;
- 失败时直接读日志;合并冲突暂停时可以只读查看冲突文件/分支;
- 设置页统一管理平台 Token、组织、流水线展示名/环境/是否确认。
安装
本地仓库
dsh plugin --profile desktop add link:<本仓库路径>
发布到 npm 后
dsh plugin --profile desktop add dsh-cicd
装完重启 DSH。Web 版把 desktop 换成 web。
5 分钟接入
1. 准备云效 Token
云效 → 个人设置 → 个人访问令牌,创建 pt- 开头的 token,权限至少包含:
- 流水线运行实例:读写
- 运行任务:只读
推荐在 设置 → 流水线配置 → 设置 Token 里粘贴,token 会写入 DSH 凭据存储,保存后不回显。
CI / 无界面场景可用进程环境变量;插件不再读取项目里的 .env / .dsh/.env。
2. 用 skill 接入(推荐)
在项目会话里直接把云效流水线链接发出来:
把这条云效流水线接进来:https://devops.aliyun.com/organizations/<organizationId>/flow/pipeline/<pipelineId>
或者:
帮我把云效流水线 123456 接到这个项目,环境是 test,需要确认
模型会自动加载内置的 cicd-config skill,按步骤确认:
- 流水线属于哪个组织;
- 配置里的 key / 展示名;
- 环境(开发/测试/预发/生产);
- 是否需要 confirm: true。
确认后 skill 会写入或更新 .dsh/cicd.json,最后用 cicd_list 验证。也可以显式调用:
skill cicd-config
3. 手动配置(可选)
如果不想用 skill,在项目根创建 .dsh/cicd.json:
{
"pipelines": {
"deploy-test": {
"type": "yunxiao",
"title": "部署测试环境", "organizationId": "5ebbc0228123212b59xxxxx", "pipelineId": "123456", "environment": "test", "confirm": true } } }
- organizationId:从带 /organizations/<organizationId>/ 的链接里取;中心版必填;
- pipelineId:纯数字,例如 123456;
- 链接里没有组织时,skill / 手动配置都需要先确认组织。
4. 验证
在项目会话里:
列一下流水线
或直接调用 cicd_list。能看到刚接入的流水线和最近一次运行状态,就接好了。
配置字段
| 字段 | 必填 | 说明 |
| type | 是 | 固定 yunxiao(也接受 devops / flow) |
| title | 是 | 展示名,出现在列表、通知里 |
| organizationId | 中心版必填 | 云效组织 ID |
| pipelineId | 是 | 云效流水线数字 ID |
| environment | 否 | 环境标签:development / test / staging / production,界面显示中文 |
| confirm | 否 | true 时模型必须显式带 confirm:true 才能触发;部署类建议开启 |
| branchMode | 否 | 多分支默认策略:append / replace / off |
| params | 否 | 云效运行参数,按 JSON 对象传入 |
tokenEnv 可省略,默认 YUNXIAO_TOKEN。token 不会写进 cicd.json。
日常使用
| 说法 | 实际工具 |
| 列一下流水线 | cicd_list |
| 跑 deploy-test | cicd_run |
| 现在到哪一步了 | cicd_status |
| 看下失败日志 | cicd_logs |
| 取消这次运行 | cicd_cancel |
| 冲突在哪、哪些文件 | cicd_conflict(只读) |
触发类流水线(confirm: true)需要用户同意后,模型才会带 confirm: true 执行。
触发后不用一直等,也不该等:
- cicd_run 立即返回 runId,触发完成本轮就结束;
- 后台跟踪阶段变化和结束,主动弹 toast;
- 模型不要用 Start-Sleep / 循环 cicd_status 等结果;用户之后要查进度时再用 cicd_status(只查一次,不阻塞);
- 如果用户在触发之外还有后续诉求(结束后继续处理、关注冲突/异常):触发时带 followUp: true,终态或检测到冲突时会自动唤醒模型继续处理(默认关闭,只发 toast);
- 用户主动取消后仍会有一条「已取消」toast,但不会再唤醒模型;
- 错过了通知,点会话头部右上角的消息图标看历史。
设置页
设置 → 流水线配置 管理本地数据,不会修改云效上的流水线:
- 全局配置:云效 Token(绿点表示已配置)、桌宠/Toast 开关、多宠物时的通知宠物;
- 组织:添加/重命名/删除;组织 ID 创建后不可改;
- 流水线:按组织展示云效流水线,可改显示名称 / 环境 / 是否确认,或删除;
- 新增流水线先在云效创建,再通过配置文件或 cicd-config 技能加入。
运行记录
每次运行会在项目里写:
.dsh/cicd-runs/
<runId>.json # 运行状态、平台 runId、耗时等;status/cancel/conflict/最近运行会读它 <runId>.log # 仅本地 shell 流水线;云效日志实时从平台拉取,不落本地
它让 cicd_status / cicd_cancel / cicd_conflict 和设置页「最近运行」在 DSH 重启后仍能找到记录。
这些是本地缓存,插件不会写或修改任何 .gitignore——要不要忽略由你自己决定。
想让它们不进 git,在项目根或 .dsh/ 下自己加:
.dsh/cicd-runs/
.dsh/cicd-branches.json
.dsh/cicd.json 不受影响,仍应正常提交。删除旧记录只影响历史查询,不会影响云效上的流水线。
多分支流水线
云效开启分支模式的流水线,cicd_run 默认弹窗选分支:
- 默认集合 = 云效上次运行的分支 ∪ 本地保留的分支 − 本地明确移除的分支;
- 勾选 = 保留,取消 = 本次移除;
- 本地记忆在 <项目>/.dsh/cicd-branches.json;
- 只有显式传 branches,或用户明确要求复用上次运行的分支集合时才跳过弹窗;
- 弹窗不可用会直接报错,不会静默按旧分支触发。
通知
- 阶段变化:⏳ [test] 标题 · 阶段…
- 结束:✅ 成功 / ❌ 失败 / ⛔ 已取消
- 合并冲突暂停:提示去云效解决后点「Conflict Resolved」
装了 dsh-pet 时,同一文案也会投喂到桌宠气泡。
多宠物默认发 main / 第一只,可在设置里指定;失败静默,不影响流水线工具。
token 与安全
- token 只写入 DSH 凭据存储,或用进程环境变量;不读取项目 .env / .dsh/.env;
- 插件只调用配置里声明过的云效流水线;
- confirm: true 是部署类流水线的第二道门;
- 不在日志、通知里输出 token。
数据流向
插件完全在本机运行,没有中转服务、没有遥测。它碰到的数据只有这几类:
| 数据 | 存在哪 | 会不会离开本机 |
| 流水线配置(组织 ID、流水线 ID、展示名、环境、tokenEnv 名称) | 项目根 .dsh/cicd.json | 否(除非你自己提交进 git) |
| 访问令牌(pt-…) | DSH 凭据存储 / ~/.dsh/.credentials.yaml / 进程环境变量 | 只发给云效 OpenAPI(HTTPS,请求头 x-yunxiao-token);不写进配置、不回显、不进运行记录 |
| 往返的请求 | — | 只发组织 ID、流水线 ID、触发参数、分支列表 |
| 运行状态 / 阶段进度 | 从云效读回,写 <项目>/.dsh/cicd-runs/.json | 平台 → 本机,单向读 |
| 构建日志 | cicd_logs 实时从云效拉取,不落盘(本地 shell 流水线除外) | 会:日志尾部作为工具返回进入会话上下文,发给会话所用的模型服务商 |
| 通知(toast / 桌宠) | 本机 /dsh-cicd/、127.0.0.1 回环 | 否 |
几点说明:
- 没有统计上报,插件不向作者或任何第三方发送数据;
- 日志是最需要小心的一环:cicd_logs 只取尾部(默认 120 行 / 20000 字符),但日志里可能有密钥、连接串、个人信息。别在不信任的会话里读生产日志,必要时先在云效侧脱敏;
- token 每次请求时从凭据存储读出,不落到项目目录、不进 .dsh/cicd-runs/、不出现在任何工具返回里。
排错
| 现象 | 查什么 |
| 没有 cicd_ 工具 | 插件装没装、装完有没有重启 DSH |
| 无法确定当前会话的项目目录 | 在有工作目录的项目会话里使用 |
| 找不到流水线配置 | 项目根有没有 .dsh/cicd.json |
| 401 / 403 | token 是否过期、权限是否够 |
| 404 | organizationId / pipelineId 是否对得上 |
| 配置报错 | 错误会指出哪条流水线、哪个字段;JSON 不能有注释 |
| 桌宠没气泡 | 设置里 Token/桌宠开关、dsh-pet 是否安装、宠物是否可见 |
更多参数与行为见 docs/tools.md,规格见 docs/spec/spec.md。
当前限制
- 只支持云效 Flow,其他平台后续按需求再加;
- 本地 shell 流水线仅作为内部测试/辅助能力,不在设置页展示;
- 设置页不能新建云效流水线,只能编辑已有流水线的展示元数据;
- 合并冲突只读查看,不会自动合并或恢复运行。
发布
版本和 CHANGELOG 由 release-it 管理,npm 发布由 GitHub Actions 完成:
pnpm release:dry
pnpm release patch # 或 minor / major
release-it 会跑 pnpm check、生成 CHANGELOG、更新版本、提交并推送 v tag;tag 推送后 Actions 通过 npm Trusted Publishing(OIDC) 发布,不需要 NPM_TOKEN。
首次发布需要先手动 publish 一次,再在 npm 包设置里配置 Trusted Publisher;完整步骤见 docs/releasing.md。
提交信息使用 Conventional Commits,详细步骤见 docs/releasing.md。
开发
pnpm install
pnpm build
pnpm lint # ESLint(@antfu/eslint-config)
pnpm test # vitest run(直接跑 src)
pnpm check # lint + typecheck + tests + 文档检查
工程结构、约定和提交清单见 AGENTS.md。
免责声明
- 本项目是个人开源项目,不是阿里云或 DeepSeek 的官方产品,与二者无隶属、合作或背书关系;
- 「云效」「Yunxiao」「Alibaba Cloud DevOps」等名称是阿里云的商标,此处仅用于描述所对接的服务;
- 插件通过公开的云效 OpenAPI 操作你自己账号有权限的流水线,触发构建、部署产生的后果由使用者承担;confirm: true 只是给模型的一道提示门,不是权限控制;
- 请确认使用方式符合你所在组织的信息安全制度与阿里云服务条款;生产环境建议用专用机器人账号的 token,而不是个人访问令牌;
- 软件按 MIT 许可「按现状」提供,不附带任何明示或暗示的担保。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
yinfoyuan/dsh-cicd
在会话里触发并跟踪项目 CI/CD 流水线
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9