🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

多角色工作室 mjw0531/dsh-ai-studio

DeepSeek Harness
mjw05313 天前有提交已提供中文文档扫描:含敏感能力

把聊天窗口变成带派单验收与合并治理的 AI 工作室

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add mjw0531/dsh-ai-studio
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 3 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 142 处,展示前 69 条)
  • 读取本地文件
    packages/dsh-studio/lib/index.js:77
    const manifest = JSON.parse(await readFile(candidate, "utf8"));
  • 读取本地文件
    packages/dsh-studio/lib/index.js:5095
    if (existsSync(this.file)) {
  • 写入本地文件
    packages/dsh-studio/lib/index.js:5096
    await copyFile(this.file, backup);
  • 写入本地文件
    packages/dsh-studio/lib/index.js:5398
    await mkdir(this.dataDir, { recursive: true });
  • 读取本地文件
    packages/dsh-studio/lib/index.js:5399
    if (!existsSync(this.file)) {
  • 读取本地文件
    packages/dsh-studio/lib/index.js:5404
    const raw = await readFile2(this.file, "utf8");
  • 写入本地文件
    packages/dsh-studio/lib/index.js:5410
    await rename(this.file, backup).catch(() => void 0);
  • 写入本地文件
    packages/dsh-studio/lib/index.js:5432
    await rename(this.file, backup).catch(() => void 0);
  • 写入本地文件
    packages/dsh-studio/lib/index.js:5444
    await writeFile(temp, serialized, "utf8");
  • 写入本地文件
    packages/dsh-studio/lib/index.js:5446
    await rename(temp, this.file);
  • 删除本地文件
    packages/dsh-studio/lib/index.js:5448
    await rm(this.file, { force: true });
  • 读取本地文件
    packages/dsh-studio/lib/index.js:5517
    const files = await readdir(dir);
  • 读取本地文件
    packages/dsh-studio/lib/index.js:5643
    await readFile3(path4.join(temp, "project.json"))
  • 删除本地文件递归
    packages/dsh-studio/lib/index.js:5689
    await rm2(temp, { recursive: true, force: true }).catch(() => void 0);
  • 删除本地文件
    packages/dsh-studio/lib/index.js:5690
    await rm2(archive, { force: true }).catch(() => void 0);
  • 删除本地文件递归
    packages/dsh-studio/lib/index.js:5805
    await rm2(temp, { recursive: true, force: true }).catch(() => void 0);
  • 执行外部命令固定命令
    packages/dsh-studio/lib/index.js:5831
    return execFileSync("git", args, {
  • 执行外部命令来自配置/变量
    packages/dsh-studio/lib/index.js:6079
    const child = spawn(shell, args, {
  • 删除本地文件递归
    packages/dsh-studio/lib/index.js:6146
    await rm3(temp, { recursive: true, force: true }).catch(() => void 0);
  • 执行外部命令固定命令
    packages/dsh-studio/lib/index.js:6575
    execFile2(
  • 发起网络请求
    packages/dsh-studio/lib/client.js:179
    const response = await transport.fetch("/studio-api/boot", {
  • 发起网络请求
    packages/dsh-studio/lib/client.js:203
    const response = await fetch(url, {
  • 发起网络请求
    packages/dsh-studio/lib/client.js:237
    return this.request(`/bootstrap${query}`);
  • 发起网络请求
    packages/dsh-studio/lib/client.js:240
    return this.request("/export");
  • 发起网络请求
    packages/dsh-studio/lib/client.js:243
    const data = await this.request("/settings", {
  • 发起网络请求
    packages/dsh-studio/lib/client.js:250
    const response = await fetch(
  • 写入本地文件
    packages/dsh-studio/lib/adr.js:43
    await mkdir(dir, { recursive: true });
  • 读取本地文件
    packages/dsh-studio/lib/adr.js:44
    const files = await readdir(dir);
  • 写入本地文件
    packages/dsh-studio/lib/adr.js:54
    await writeFile(path.join(dir, name), decision.adrDraft, "utf8");
  • 写入本地文件
    packages/dsh-studio/lib/bundle.js:106
    await writeFile(
  • 读取本地文件
    packages/dsh-studio/lib/bundle.js:129
    await readFile(path.join(temp, "project.json"))
  • 读取本地文件
    packages/dsh-studio/lib/bundle.js:131
    "project.bundle": checksum(await readFile(bundlePath))
  • 写入本地文件
    packages/dsh-studio/lib/bundle.js:134
    await writeFile(
  • 写入本地文件
    packages/dsh-studio/lib/bundle.js:140
    await writeFile(
  • 读取本地文件
    packages/dsh-studio/lib/bundle.js:161
    const bytes = await readFile(archive);
  • 删除本地文件递归
    packages/dsh-studio/lib/bundle.js:175
    await rm(temp, { recursive: true, force: true }).catch(() => void 0);
  • 删除本地文件
    packages/dsh-studio/lib/bundle.js:176
    await rm(archive, { force: true }).catch(() => void 0);
  • 读取本地文件
    packages/dsh-studio/lib/bundle.js:187
    const archiveInfo = await stat(archivePath).catch(() => null);
  • 读取本地文件
    packages/dsh-studio/lib/bundle.js:195
    const targetInfo = await stat(targetPath).catch(() => null);
  • 读取本地文件
    packages/dsh-studio/lib/bundle.js:204
    const entries = await readdir(targetPath);
  • 删除本地文件递归
    packages/dsh-studio/lib/bundle.js:291
    await rm(temp, { recursive: true, force: true }).catch(() => void 0);
  • 读取本地文件
    packages/dsh-studio/lib/compat.js:26
    const manifest = JSON.parse(await readFile(candidate, "utf8"));
  • 执行外部命令固定命令
    packages/dsh-studio/lib/dispatcher.js:22
    return execFileSync("git", args, {
  • 读取本地文件
    packages/dsh-studio/lib/dispatcher.js:47
    if (!existsSync(resolved)) {
  • 写入本地文件
    packages/dsh-studio/lib/dispatcher.js:65
    await mkdir(worktreeRoot, { recursive: true });
  • 读取本地文件
    packages/dsh-studio/lib/dispatcher.js:66
    if (existsSync(worktreePath)) {
  • 读取本地文件
    packages/dsh-studio/lib/dispatcher.js:98
    if (!existsSync(worktreePath)) return null;
  • 读取本地文件
    packages/dsh-studio/lib/dispatcher.js:114
    if (!existsSync(worktreePath)) return "";
  • 执行外部命令来自配置/变量
    packages/dsh-studio/lib/dispatcher.js:270
    const child = spawn(shell, args, {
  • 读取本地文件
    packages/dsh-studio/lib/dispatcher.js:332
    output = (await readFile(messageFile, "utf8")).trim() || output;
  • 删除本地文件递归
    packages/dsh-studio/lib/dispatcher.js:337
    await rm(temp, { recursive: true, force: true }).catch(() => void 0);
  • 读取本地文件
    packages/dsh-studio/lib/docs.js:43
    const buffer = await readFile(resolved);
  • 执行外部命令固定命令
    packages/dsh-studio/lib/merge.js:41
    execFile(
  • 读取本地文件
    packages/dsh-studio/lib/store.js:4984
    if (existsSync(this.file)) {
  • 写入本地文件
    packages/dsh-studio/lib/store.js:4985
    await copyFile(this.file, backup);
  • 写入本地文件
    packages/dsh-studio/lib/store.js:5287
    await mkdir(this.dataDir, { recursive: true });
  • 读取本地文件
    packages/dsh-studio/lib/store.js:5288
    if (!existsSync(this.file)) {
  • 读取本地文件
    packages/dsh-studio/lib/store.js:5293
    const raw = await readFile(this.file, "utf8");
  • 写入本地文件
    packages/dsh-studio/lib/store.js:5299
    await rename(this.file, backup).catch(() => void 0);
  • 写入本地文件
    packages/dsh-studio/lib/store.js:5321
    await rename(this.file, backup).catch(() => void 0);
  • 写入本地文件
    packages/dsh-studio/lib/store.js:5333
    await writeFile(temp, serialized, "utf8");
  • 写入本地文件
    packages/dsh-studio/lib/store.js:5335
    await rename(temp, this.file);
  • 删除本地文件
    packages/dsh-studio/lib/store.js:5337
    await rm(this.file, { force: true });
  • 执行外部命令固定命令
    packages/dsh-studio/lib/workspace.js:15
    return execFileSync("git", args, {
  • 读取本地文件
    packages/dsh-studio/lib/workspace.js:40
    if (!existsSync(resolved)) {
  • 写入本地文件
    packages/dsh-studio/lib/workspace.js:58
    await mkdir(worktreeRoot, { recursive: true });
  • 读取本地文件
    packages/dsh-studio/lib/workspace.js:59
    if (existsSync(worktreePath)) {
  • 读取本地文件
    packages/dsh-studio/lib/workspace.js:91
    if (!existsSync(worktreePath)) return null;
  • 读取本地文件
    packages/dsh-studio/lib/workspace.js:107
    if (!existsSync(worktreePath)) return "";
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

安装并使用 DeepSeek Harness 的 AI Studio:工作区仪表盘、角色、任务、验证、决策台、合并治理,以及可移植的项目包。

README

由 DeepSeek 最新模型翻译生成
dsh-ai-studio 一套多角色 AI Studio,构建在 DeepSeek Harness(DSH) 之上:把「一个聊天窗口」变成一间工作室,里面有工作室仪表盘、智能体派单、token 预算、决策台、支线/契约冲突、worktree 代码执行、项目、角色、任务、验收、合并治理。 当前状态:v3.2.1 可运行。已完成工作室级 Owner Dashboard、智能体派单与结构化回执、角色模型/token 预算、DSH token 计量、决策台、支线/契约冲突自动升级、git worktree 代码执行与自动提交、Host 独立验证、独立 AI 评审、自动集成分期、文档同步与不可逆决策门禁、ADR 草稿与落盘、人工触发 Git merge 与合并后回归、合并失败升级与回滚、改修票诊断/计划门禁、失败 2 次自动升级与重拆、合并前验证门禁、项目知识/模块契约、契约越界护栏、集成/playtest ticket、Claude Code / Codex CLI 执行器、项目包导出、数据导出/导入恢复、项目/角色/任务/验收/证据持久化、合并治理,并在 DSH 0.2.1-rc.2 和真实外部仓库上完成派单→验证→评审→merge→回归的 dogfood。
展开完整文档(README 剩余 1 节)
dsh-ai-studio

一套多角色 AI Studio,构建在 DeepSeek Harness(DSH) 之上:把「一个聊天窗口」变成一间工作室,里面有工作室仪表盘、智能体派单、token 预算、决策台、支线/契约冲突、worktree 代码执行、项目、角色、任务、验收、合并治理。

当前状态:v3.2.1 可运行。已完成工作室级 Owner Dashboard、智能体派单与结构化回执、角色模型/token 预算、DSH token 计量、决策台、支线/契约冲突自动升级、git worktree 代码执行与自动提交、Host 独立验证、独立 AI 评审、自动集成分期、文档同步与不可逆决策门禁、ADR 草稿与落盘、人工触发 Git merge 与合并后回归、合并失败升级与回滚、改修票诊断/计划门禁、失败 2 次自动升级与重拆、合并前验证门禁、项目知识/模块契约、契约越界护栏、集成/playtest ticket、Claude Code / Codex CLI 执行器、项目包导出、数据导出/导入恢复、项目/角色/任务/验收/证据持久化、合并治理,并在 DSH 0.2.1-rc.2 和真实外部仓库上完成派单→验证→评审→merge→回归的 dogfood。

现在能做什么

- 公司仪表盘:跨项目组合、老板收件箱、角色负载、风险雷达、交付流和 token 消耗;金额成本等报价接入后再显示。
- 决策台:智能体的项目级决策自动进入待裁决;Owner 批准/拒绝并记录结论与理由,智能体不能替 Owner 拍板。
- 支线/契约冲突:派单自动登记支线;两条支线改同一契约且内容不同时,自动升级为待裁决决策。
- worktree 代码执行:项目绑定 git 仓库后,每个任务自动创建独立 worktree 和分支;智能体在里面改代码,Run 记录 diff,主工作区不被直接修改。
- Host 独立验证:Task Room 的验证命令由 Host 在 worktree 内执行,记录退出码/输出并写 evidence;不依赖智能体会话,也不会自动通过验收。
- 工作流护栏:Task 记录模块/契约/票类型;连续失败 2 次自动 blocked 并升级决策;代码项目没有通过的验证不能提交合并提案。
- 知识层:PRD/INVARIANTS/MODULES 只读查看;Module 契约卡记录职责、接口摘要、允许/禁止路径和依赖,派单时进入智能体上下文。
- 契约护栏:代码 Run 改动契约文件、禁止路径或越出允许的 src//test/ 路径时,任务自动 blocked 并生成决策。
- 闭环 ticket:集成/playtest ticket 标记;连续失败 2 次自动生成 Architect 重拆 ticket(backlog),不只是留一个决策。
- 独立 AI 评审:验收人角色另开智能体会话,只读 diff/Host 验证输出,给出 pass/fail 与 findings;代码任务没有通过评审不能 done。
- 自动集成分期:每完成 3 个任务自动生成一张 backlog 集成/playtest ticket,不自动派单。
- 文档同步门禁:项目绑定 PRD/INVARIANTS/MODULES 时,任务 done 前必须勾选“文档已同步”。
- 不可逆决策:Decision 可标记不可逆;批准时必须写结论和理由。
- ADR 草稿:不可逆决策批准后自动生成 Markdown ADR 草稿,保存在决策记录,不自动写文件。
- 评审同族提示:评审模型与实现模型相同时,Task Room 警告共享盲点。
- 人工触发 Git merge:已批准提案可在 Task Room 执行真实 git merge --no-ff;要求当前在 base、工作区干净、分支存在;冲突自动 abort,不自动 push。
- 合并后回归:merge 成功后自动在 repo 执行任务验证命令,记录 pass/fail 和输出;失败不会自动回滚。
- 合并失败升级:回归失败自动生成决策台决策,附 merge commit、回滚命令和修复选项。
- ADR 落盘:人工确认后写入 docs/adr/,自动编号,幂等。
- 合并回滚:回归失败的 merge 可人工触发 git revert,记录 rollback commit;不 reset/push。
- 改修票工序:kind=fix 必须有诊断和修改计划才能派单;UI 有字段和校验。
- 1.9.1 修复:回滚用 git revert -m 1 处理 merge commit,并补真实 merge 失败 → 回滚 E2E 测试。
- 2.0 自动提交:智能体成功后 Host 自动提交 worktree 改动(含未跟踪文件)到任务分支。
- 2.0 Git 身份预检:merge 前检查 repo 的 user.name/email,缺失时明确报错。
- 2.0 真实 dogfood:在外部真实仓库完成一次派单、Host 验证 5/5、独立评审 pass、merge 和 post-merge 回归 5/5。
- 2.2 数据导入:页面「导入」恢复备份;Host 先备份原文件,校验 schema 后替换。
- 2.4 外部执行器:角色可选择 DSH Agent / Claude Code / Codex CLI;外部工具需先在本机登录。
- 2.5 项目包:设置页导出/导入 tar.gz(状态 + git bundle + manifest + SHA-256 + 迁移说明)。
- 2.5.1 导航保持:切到 DSH 对话再回 Studio,保留页签和当前任务。
- 2.6 阶段门禁:项目支持 discovery → architecture → prototype → development;Owner 确认检查项/产物后推进,代码项目未进入持续开发不能派单;任务可登记需求引用。
- 2.7 触发收件箱:外部事件先进入 Trigger Inbox;同一 threadKey 归入 Thread,后续事件可关联到已有任务;由人确认转任务,不自动派单或合并。
- 2.8 研讨会:记录各角色的独立意见、反对、风险和推荐;2.8.1 增加 AI 独立评审,形成汇总与 Owner 决策;不自动合并。
- 2.9 原型 Demo 门禁:从原型验证进入持续开发前,必须登记 demo 产物(路径、URL 或 playtest 记录),或写 Owner 豁免理由。
- 2.10 服务商配置档:角色可以绑定命名执行配置(DSH / Claude Code / Codex + 服务商 + 模型),派单、独立评审和 Workshop 共用同一套解析。
- 2.11 服务商健康度:按配置档聚合成功/失败、token、最近错误;运行失败会把状态标为 degraded,不自动切换。
- 2.12 服务商诊断:显示失败率、失败原因分布、最近 5 次运行;对 degraded 配置档给出备用建议,不自动切换。
- 2.13 人工备用切换:确认后把绑定降级配置档的角色改绑到建议配置档;不自动 failover,改绑留审计事件。
- 2.14 Run 执行快照:每次 Run 记录 providerProfileId / executor / provider / model;后续改绑不会改变历史归属。
- 2.15 服务商实时探测:检查 DSH 服务商/模型是否存在、外部 CLI 是否可执行;结果只展示,不自动切换。
- 2.16 触发 Webhook:GitHub/CI/IM 通过 HMAC 签名进入收件箱;repo/label/author/mention 规则过滤,人工确认转任务。
- 2.17 手动 Demo 记录:记录入口、启动命令、验证步骤、结果、截图和备注;不执行命令,不自动截图。
- 2.18 Workshop AI 汇总草稿:生成共识、分歧、未决问题、候选方案;不覆盖原始意见,不写 Owner 决策。
- 2.19 入门引导与项目模板:新手清单;Web / 游戏 / CLI 工具模板自动创建角色和首批任务;PWA 暂缓。
- 3.0 公司级组合治理:组合预算、跨项目优先级、角色覆盖聚合;只从项目状态派生,不引入第二份事实来源。
- 3.0.1 客户端拆分(一):抽出 lib/format、components/ui、views/Company|Boardroom|Knowledge|Team。
- 3.0.2 客户端拆分(二):抽出 views/MissionView、components/TaskPanels、components/Forms、components/RecentEvents;StudioPage 降到 2,186 行。
- 3.0.3 Store 拆分(一):抽出 store/read-model、store/validation、store/migration;store.ts 降到 4,797 行。
- 3.0.4 Store 拆分(二):抽出 store/inputs、store/seed、store/errors;同时拆出 Tasks/Merge/Settings/States;store.ts 4,272 行,StudioPage 1,528 行。
- 3.0.5 Store 拆分(三):抽出 store/templates、store/lookups;store.ts 降到 3,993 行。
- 3.0.6 有状态域拆分(一):服务商配置档域抽成 service;store.ts 降到 3,878 行。
- 3.0.7 有状态域拆分(二):Merge 域抽成 service;store.ts 降到 3,598 行。
- 3.0.8 有状态域拆分(三):Trigger / Webhook / Thread 域抽成 service;store.ts 降到 3,277 行。
- 3.0.9 有状态域拆分(四):Task 域抽成 service;store.ts 降到 2,969 行。
- 3.1.0 质量门禁拆分:评审与 Host 验证抽成 service;store.ts 降到 2,815 行。
- 3.1.1 Run 生命周期拆分:Run / 失败升级 / 契约护栏抽成 service;store.ts 降到 2,112 行。
- 3.1.2 Workshop / Prototype Demo 拆分:Workshop 与手动 Demo 抽成 service;store.ts 降到 1,817 行。
- 3.1.3 微型文件收敛:context / errors / ids 合并为 store/core.ts;Store 文件数 18 → 16。
- 3.1.4 Mission 视图拆分:Trigger / Stage / Workshop / Demo 独立;MissionView 1,740 → 568 行。
- 3.1.5 任务组件拆分:TaskPanels 拆成 Board / Drawer / RunPanels / MergePanel。
- 3.1.6 表单拆分:Forms 拆成 Task / Role / Project / Decision 和 ModalShell。
- 3.1.7 决策域拆分:Decision / ADR / 合并后决策抽成 service;store.ts 降到 1,577 行。
- 3.1.8 项目/阶段/目录域拆分:Project、Stage Gate、Role、Module 抽成 service;store.ts 降到 1,017 行。
- 3.2.0 客户端动作拆分:52 个 API handler 抽成 studio-actions.ts;StudioPage 降到 888 行。
- 3.2.1 收尾整理:RecentEvents 并入 Mission;新增《项目介绍(当前版)》;拆分收尾完成。
- Agent 分析派单:Task Room 把任务派给负责人角色,Agent 返回结构化回执;回执缺 summary/evidence 时任务退回可开始,不能进入验收。
- 薪资与预算:角色配置模型、单任务/每日 token 预算;项目配置总 token 预算。
- 独立工作台页面:DSH 侧栏点击「工作台」,进入公司仪表盘,不占用聊天会话。
- 项目:创建/切换项目,任务和角色归属项目。
- 角色:使命、职位、职责、决策权、模型与预算。
- 任务:目标、负责人、验收人、优先级、分支、验收标准、证据。
- 验收门禁:任务完成前必须勾完所有验收项,并至少记录一条证据;完成后锁定。
- 合并治理:验收通过后可提交合并提案,记录摘要、风险、回滚、评审备注和合并提交;批准、打回、合并都有审计事件。
- 本地持久化:$DSH_HOME/studio/studio.json,重启不丢;首次运行自动生成演示项目。
- 版本适配:engines.dsh >= 0.2.1-rc.2;只依赖 Web Server 路由、client slots 和 React,不依赖私有 Remote 生成器。

合并治理

分支不会自己汇入主干。合并提案必须带摘要、风险、回滚和评审记录;批准后由人或 Integrator 执行 Git,Studio 记录状态与审计事件。

快速开始

插件在 packages/dsh-studio。

桌面端:Plugins → Add plugin → 本地目录填 D:\dsh-ai-studio\packages\dsh-studio → Enable now → 刷新页面。

Web 配置档:

dsh plugin --profile web add "D:\dsh-ai-studio\packages\dsh-studio"
dsh --profile web

详细安装、打包分发、安全说明见 插件 README;想先理解整体工作流、角色和开发术语,读 项目介绍与开发指南;对 Super-agent / Router / Thread 的架构启发见 Super-agent 启发;后续版本安排见 迭代计划;完整操作步骤见 使用说明书;兼容性、升级、备份见 兼容性与安装。

DSH 生态发现:GitHub topic 为 dsh-plugin,npm keywords 包含 dsh-plugin / deepseek-harness / dsh,包内提供 dsh.bundle.patch 与 dsh.client.platform。

为什么不是「酒馆套壳」

酒馆的成熟之处是内容与运行时分离:世界书、角色卡、预设、正则、群聊。Studio 借这套经验,但把映射拆开:

- 世界书 → Project Book(检索层),不是项目本身;Canon 留在仓库里。
- 角色卡 → 角色契约的一部分;员工还需要职责、权限、交付和预算。
- 预设 → 运行时配置;权限/验收/合并门禁属于 Policy。
- 正则 → 确定性 Hook;控制面是状态机 + 验收 + 合并队列。
- 群聊 → 多独立会话 + 结构化消息 + 共享产物,不是同一个上下文里的轮转。

完整论证见 设计蓝图。

架构

DSH Web/Desktop
├─ 独立页面(client plugin) │ Owner Dashboard / Decision Boardroom / Mission Control / Task Room / Merge Queue / Team / Settings └─ Host plugin ├─ /studio-api(同源、Bearer token、JSON) ├─ 文件存储($DSH_HOME/studio/studio.json) ├─ 版本适配(app-boot → 安装包清单 → env) ├─ DSH Agent 派单(agents.create + agentPresets.mount + tokenMeter) └─ 状态机 / 验收门禁 / 合并治理 / 公司聚合

- Host 半是普通 Cordis 插件,依赖 ctx.webServer 与 ctx.connection.admit() 的认证边界。
- Client 半注册一个 main 面板和一个 sidebar.panellist 入口。
- 不依赖 DSH 私有 Remote 代码生成;API 是一层很薄的同源 HTTP JSON。
- 领域逻辑在 src/shared 和 src/host/store.ts,未来替换传输层不影响数据模型。

项目结构

packages/dsh-studio/ # 可安装的 DSH 插件 src/host/ # Cordis 插件、HTTP API、存储、兼容层 src/client/ # React 页面 src/shared/ # 跨端类型与状态机 tests/ # 存储层单测 docs/ 00-设计蓝图.md # 产品/工作流/领域模型 04-兼容性与安装.md # 安装、升级、备份、兼容性矩阵 05-使用说明书.md # 工作流、门禁、数据与迁移 adr/ # 架构决策记录 adr/ # 架构决策 CONTEXT.md # 术语表 tools/ # CDP 端到端验证脚本

决策记录

- ADR-0001:自建编排层
- ADR-0002:同源 HTTP + token
- ADR-0003:合并治理只记录状态
- ADR-0004:公司仪表盘是派生投影
- ADR-0005:Agent 派单先做只读分析
- ADR-0006:项目级决策进入决策台
- ADR-0007:支线自动登记与契约冲突升级
- ADR-0008:代码执行放在每 Task 的 worktree
- ADR-0009:Host 独立验证
- ADR-0010:项目知识与模块契约
- ADR-0011:契约越界护栏
- ADR-0012:重拆票与集成票
- ADR-0013:独立 AI 评审
- ADR-0014:自动集成分期
- ADR-0015:文档同步与不可逆决策
- ADR-0016:人工触发 Git merge
- ADR-0017:ADR 草稿保存于决策记录
- ADR-0018:合并后回归
- ADR-0019:合并失败升级
- ADR-0020:ADR 落盘与合并回滚
- ADR-0021:改修票诊断/计划门禁
- ADR-0022:Host 自动提交 worktree 改动
- ADR-0023:外部执行器
- ADR-0024:项目包

开发

pnpm install
pnpm typecheck
pnpm build
pnpm test

端到端验证使用本机 DSH Web 配置档 + Chrome CDP:

1. 启动测试 profile(不要占用当前 GUI)
dsh --profile web --no-open --port 0
2. 用 tools/cdp-check.mjs 打开打印出的 URL

(tools/ 是开发验证脚本,不随插件发布。)

路线

- v0.1:项目/角色/任务/验收/证据;独立页面;本地持久化;版本适配。
- v0.2:合并提案、批准、打回、合并记录;schema v1→v2 迁移。
- v0.3:Owner Dashboard;公司级项目组合、老板收件箱、角色负载、风险雷达、交付流。
- v0.4:Agent 分析派单与结构化回执;角色模型/token 预算;项目预算;DSH token 计量。
- v0.5:决策台;Agent 项目级决策进入待裁决;Owner 批准/拒绝与结论记录。
- v0.5.1:支线持久化、契约变更记录、跨支线同契约冲突自动升级。
- v0.6:项目绑定 git 仓库、每 Task worktree/branch、Agent 代码编辑与 diff 记录。
- v0.6.1:Host 独立验证、验证 evidence、Merge Proposal 的 diff/变更文件/验证结果。
- v0.7:Task 模块/契约/票类型、失败 2 次自动升级、代码项目合并前验证门禁。
- v0.8:PRD/INVARIANTS/MODULES 知识层、Module 契约卡、派单加载模块契约。
- v0.9:契约越界护栏、契约/禁止路径改动自动 blocked + 决策。
- v1.0:集成/playtest ticket、连续失败自动生成 Architect 重拆 ticket。
- v1.1:独立 AI 评审、代码任务 done 前评审门禁。
- v1.2:每 3 个完成任务自动生成 backlog 集成/playtest ticket。
- v1.3:文档同步门禁、不可逆决策批准必须写理由。
- v1.4:人工触发真实 Git merge,冲突自动 abort。
- v1.5:不可逆决策生成 ADR 草稿、评审同族风险提示。
- v1.6:merge 后自动回归并记录结果。
- v1.7:合并后回归失败自动生成决策台决策,附回滚建议。
- v1.8:ADR 落盘 + 人工触发合并回滚。
- v1.9:改修票诊断/计划门禁。
- v2.0(当前):真实项目 dogfood(首个任务闭环)、Agent 改动自动提交、Git 身份预检。
- v2.1:可分发稳定版、数据导出备份、兼容性/安装/升级文档。
- v2.2:数据导入恢复、导入前自动备份。
- v2.3:工作室名称可改、决策台改名、dsh-ai-studio 仓库清理、去项目化。
- v2.5:Claude Code / Codex 执行器、项目包导出/导入、工作流说明书。
- v2.5.1:切换 DSH 页面后保持 Studio 导航位置。
- v2.5.2:发布包名改为无 scope 的 dsh-ai-studio,修复 DSH 侧栏入口。
- v2.5.3:仓库根目录补 dsh 清单,可直接从 GitHub 根目录安装并被 dsh-plugin 生态发现。
- v2.6.0:阶段门禁、Definition of Ready 清单、产物登记、Owner 豁免、任务需求引用。
- v2.7.0:Trigger Inbox / Thread,外部事件先进入收件箱,由人决定转为任务;同 Thread 事件关联到已有任务,不自动派单/合并。
- v2.8.0:Workshop Room,记录各角色独立意见、汇总和 Owner 决策。
- v2.8.1:Workshop AI 独立评审,每个参与角色独立调用 DSH Agent;汇总和 Owner 决策仍由人确认,不自动合并。
- v2.9.0:原型 Demo 门禁;从原型验证进入持续开发前,必须登记 demo 产物,或写 Owner 豁免理由。
- v2.10.0:Provider Profiles;角色可以绑定命名执行配置(executor/provider/model),派单与 Workshop 共用同一解析。
- v2.11.0:Provider 健康度;按绑定的 Profile 聚合运行次数、成功/失败、token、最近错误和健康状态。
- v2.12.0:Provider 诊断补全;失败率、失败原因分布、最近运行、备用 Profile 建议。
- v2.13.0:人工备用切换;把绑定降级 Profile 的角色改绑到建议的 Profile,需确认,不自动 failover。
- v2.14.0:Run 级执行快照;Run 记录 providerProfileId / executor / provider / model,健康度按快照聚合。
- v2.15.0:Provider 实时探测;检查 DSH provider/model 是否存在,外部 CLI 是否可执行,不自动切换。
- v2.16.0:Trigger Webhook;HMAC 签名、来源白名单、repo/label/author/mention 确定性过滤,人工确认后才转任务。
- v2.17.0:Prototype 手动 Demo 记录;记录入口、启动命令、步骤、结果、截图和备注,通过记录可作为 Demo 门禁证据。
- v2.18.0:Workshop AI 汇总草稿;生成共识/分歧/未决问题/候选方案,不覆盖原始意见,不写 Owner 决策。
- v2.19.0:入门引导 + 项目模板(Web / 游戏 / CLI 工具);独立窗口/PWA 暂缓。
- v3.0.0:公司级组合治理;预算、跨项目优先级、角色覆盖聚合,全部从项目状态派生。
- v3.0.1:客户端拆分(一);纯函数/UI 原子、Company/Boardroom/Knowledge/Team。
- v3.0.2:客户端拆分(二);Mission、TaskPanels、Forms、RecentEvents 独立,StudioPage 2,186 行。
- v3.0.3:Store 拆分(一);read-model / validation / migration,store.ts 4,797 行。
- v3.0.4:Store 拆分(二)+ 客户端收尾;inputs / seed / errors + Tasks/Merge/Settings/States;store.ts 4,272,StudioPage 1,528。
- v3.0.5:Store 拆分(三);项目模板与 lookup 独立,store.ts 3,993 行。
- v3.0.6:Provider Profile 域抽成 service,引入 StoreContext;store.ts 3,878 行。
- v3.0.7:Merge 域抽成 service;store.ts 3,598 行。
- v3.0.8:Trigger / Webhook / Thread 域抽成 service;store.ts 3,277 行。
- v3.0.9:Task 域抽成 service;store.ts 2,969 行。
- v3.1.0:评审与 Host 验证抽成 service;store.ts 2,815 行。
- v3.1.1:Run 生命周期、失败升级、契约护栏抽成 service;store.ts 2,112 行。
- v3.1.2:Workshop / Prototype Demo 抽成 service;store.ts 1,817 行。
- v3.1.3:微型文件收敛;Store 文件数 18 → 16。
- v3.1.4:Mission 视图拆分;MissionView 1,740 → 568。
- v3.1.5:任务组件拆分;Board / Drawer / RunPanels / MergePanel。
- v3.1.6:表单拆分;Task / Role / Project / Decision + ModalShell。
- v3.1.7:决策域拆分;store.ts 1,577 行。
- v3.1.8:项目 / 阶段 / 目录域拆分;store.ts 1,017 行。
- v3.2.0:客户端动作拆分;52 个 handler 独立,StudioPage 888 行。
- v3.2.1(当前):收尾整理;RecentEvents 合并,项目介绍文档完成。
- 下一步:功能迭代。
- v1.0:用工作台完成一个完整垂直切片,再抽象为可复用插件。

升级、备份与兼容性见 兼容性与安装。

核心原则

1. LLM 提议,系统裁决:智能体不能自己把任务标记为完成。
2. 产物优先,会话可弃:状态和知识落在文件里。
3. 一个产物一个写入者:跨角色只发请求,不直接改对方记忆。
4. 短分支,频繁合并:分支是隔离手段,不是长期分叉。
5. 人类持有最终决策权:方向、预算、不可逆选择、安全与权限。
6. 先狗粮,后抽象:每个功能都要被真实任务使用过。

许可

MIT
预览分享卡片长什么样 ↓mjw0531/dsh-ai-studio
分享 · DeepSeek Harness Hub
mjw0531/dsh-ai-studio

把聊天窗口变成带派单验收与合并治理的 AI 工作室

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部