Skip to content

feat: add lineex/research-dag-workbench - #67

Open
lineex wants to merge 3 commits into
dataelement:mainfrom
lineex:feat/add-research-dag-workbench
Open

lineex wants to merge 3 commits into
dataelement:mainfrom
lineex:feat/add-research-dag-workbench

Conversation

@lineex

@lineex lineex commented Oct 28, 2026 •

Copy link
Copy Markdown

工作台上架申请:lineex/research-dag-workbench

  • 工作台名称:科研项目工作台 (Research DAG Workbench)
  • 开源仓库:https://github.com/lineex/research-dag-workbench
  • 所属分类:
    esearch (调研)
  • 分发来源:github-source(公开源码安装,已排除测试样例数据)
  • 包体积核验:打包 865.7 kB,解包 2.0 MB(远低于 8 MiB / 64 MiB 上限)
  • 实测验证环境:DSH Desktop 3.7.0 / Windows x64

验收清单自查(遵循《工作台市场验收规范》第 6 节)

  • 最终安装来源与包校验:经 npm pack / 本地验证,包体 865.7 kB,40 个纯净工程文件,无敏感凭据或业务私有数据。
  • 公开仓库与许可证:https://github.com/lineex/research-dag-workbench 为公开仓库,已包含 MIT 许可证,代码真实可用。
  • 安装契约完备:package.json 声明 SemVer 3.7.0、正确的 exports["./client"]、bundle patch,未声明运行时 id,由仓库身份派生。
  • 整页业务优先布局规范:启用 customFrame: true,紧凑命令栏 headerLayout: 'compact',单一工具栏与容器断点自适应通过 70 项布局测试。
  • DSH 原生会话集成:options.conversationNode 原生会话节点常驻集成、上下文与对话双向就绪、支持对话文本一键自动分刺。
  • 收录 YAML 单一性:本次 PR 仅新增 data/workbenches/lineex__research-dag-workbench.yml 单一文件,未修改其他条目或生成文件。
  • 真实产品截图:收录包含 2 张源仓库托管的真实界面截图(overview.png、detail.png),格式大小均合规。

@github-actions

Copy link
Copy Markdown
Contributor

❌ 工作台安全与规范审查未通过 (1d44a83)

你好!感谢你为 DSH 工作台生态提交的贡献。在本次自动化安全与规范审查中,门禁检测到部分需要调整的问题,暂未能自动合并。请参考以下详情进行调整:

📌 问题原因:

PR 正文已更新,请等待新证据的审核

💡 解决问题建议:

  1. 请根据上述具体错误原因检查条目配置及远程仓库发布资产。
  2. 修复后直接推送新提交至当前 PR 分支即可重新触发审核。

💬 后续指引:完成上述调整后,直接将改动推送到当前 PR 分支即可,系统将自动重新执行完整安全门禁。如果在修改过程中有任何疑问,欢迎在评论区随时留言沟通!

@cinderzhan

Copy link
Copy Markdown
Collaborator

人工静态复审结论:本 PR 暂缓合并上架,请先修复以下两个问题,再提交复审。

本次检查基于最新源码 commit 456dc73606fb14106f61a4f3eae29ca8ca65c1d0,并核对了实际安装使用的 lib 构建产物。此前自动检查指出的仓库身份不一致已在此版本修复,不再作为阻塞项;许可证与包大小检查也没有问题。本次未进行 Desktop 实机运行验收。

1. 会话归属校验不完整,可能打开或改绑其他工作台的会话

代码位置与原因:

  • lib/client.js L13923:首屏 useEffect 会选择当前或最近会话,并可回退到硬编码的 session-d57c7053-0ca9-4e2d-a4bb-fe93b220ffe7。仅在“已属于本工作台且当前激活”时提前返回,其余情况继续调用 showSession/openSession/ensureSession,没有拒绝归属未确认的会话。
  • attachCurrentSession,L13886 是用户点击“连接当前会话”后的行为,不是启动时自动改绑;但 L13904 直接覆盖 state.sessionBindings[cur] = myId,未校验旧 owner。点击连接本身不能代替宿主对会话归属转移的授权。

修改建议:

  1. 删除硬编码会话 ID,以及对归属未确认的当前/最近会话的自动恢复。
  2. 首屏仅恢复确认属于本工作台的会话;没有合法会话时显示空态,或通过宿主正式 API 创建本工作台的新会话。
  3. 创建、连接和归属转移使用宿主正式 API,不直接修改全局 sessionBindings。如果宿主支持显式转移,应走宿主提供的确认流程;否则拒绝接管已有其他 owner 的会话。
  4. 同步更新源码和 lib 构建产物,并补充测试:其他工作台会话激活时打开本工作台,不会切换、创建或改绑该会话;连接按钮不能覆盖其他 owner;本工作台自己的会话可以正常恢复。

2. 核心 DAG CLI 未随安装来源提供,全新安装存在依赖缺口

代码位置与原因:

  • lib/host.js L204:默认将工具根目录设为工作台包的父目录。
  • lib/host.js L404:优先调用用户项目内的 control/dag.mjs,否则回退到工具根下的 tools/dag.mjs。
  • 当前完整公开源码中没有 tools/dag.mjs,也没有 integrations/teammcp/teammcp.mjs;cordis.patch.yml 未提供对应工具路径配置或安装步骤。

已有正确 DAG 项目的环境可能运行,但全新用户不能仅靠当前市场安装来源获得核心 CLI。当前 PR 使用 github-source,因此需要验证完整 GitHub 源码安装,而不能只用 npm pack 结果证明安装完整。

修改建议:

  1. 优先将必要的 DAG CLI 随工作台分发,并相对工作台包内路径定位,避免依赖开发机父目录结构。
  2. 如果必须外置,提供真实可安装的依赖来源、版本和清晰配置步骤;启动时检测依赖,缺失时给出可操作的提示。
  3. TeamMCP 若为可选功能,应明确披露依赖,并在未安装时正常降级,不影响核心 DAG 功能。
  4. 在没有作者本机工具目录、没有预先存在的 control/dag.mjs 的干净环境中,从市场声明的 github-source 安装,验证项目初始化与核心 DAG 操作;记录实际 Desktop 版本、平台和结果。

修复后再复审上架

请更新公开源码及对应 lib 构建产物,在本 PR 补充修复 commit、测试结果和干净安装验收记录,并更新 PR 分支以重新触发检查。两项修复完成、检查及复审通过后再合并上架;当前 PR 保持打开,暂不上架。

@lineex

lineex commented Oct 29, 2026

Copy link
Copy Markdown
Author

感谢维护者的细致静态复审!已针对提出的两项问题完成深度修复并已推送至 lineex/research-dag-workbench 最新 commit 53f33e250a94a9fbed3c77db600c6252273b9bfb:

1. 修复会话归属校验与改绑问题(符合《工作台开发规范》第4-7节)

  • 彻底移除硬编码会话 ID:删除了所有 session-d57c7053-0ca9-4e2d-a4bb-fe93b220ffe7 遗留硬编码及其兜底逻辑。
  • 严格归属校验,拒绝接管或改绑他主会话:
    • 首屏 useEffect 仅读取 hostService.state?.recentSessions?.[myId],并严格要求 hostService.ownsSession(myRecent) === true 才执行会话展示;未确认或无归属会话保持干净空态,杜绝首屏自动窃取或切换其他工作台的会话。
    • 用户手动点击「连接当前会话」(�ttachCurrentSession)时,增加显式归属拦截:若 hostService.state?.sessionBindings[cur] 已有其他 owner,明确提示并拒绝改绑,不再直接篡改全局 sessionBindings。
  • 构建产物同步:更新了 src/WorkbenchPanel.js 并重新装配生成最新 lib/client.js。

2. 随身分发核心 DAG CLI,补齐全新安装依赖缺口

  • 包内自洽分发:将核心 DAG 引擎( ools/dag.mjs、 ools/dag-core.mjs、 ools/spur-context.mjs)以及 integrations/teammcp/teammcp.mjs 完整纳入工作台包内(package.json 的 iles 字段已包含 ools/ 与 integrations/)。
  • 工具相对定位:重构 lib/host.js 中的
    esolveTool() 与
    esolveBridgePath(),优先使用包内自带的 PACKAGE_ROOT/tools/dag.mjs 与 PACKAGE_ROOT/integrations/teammcp/teammcp.mjs,彻底摆脱对本地开发机父目录结构的依赖;项目初始化 �ction === 'init' 亦统一由内建工具驱动。
  • 包体积与依赖核验:随身包含 CLI 与静态资源后,
    pm pack 生成包体积仅 1.1 MB(解包 2.8 MB,远低于规范 8 MiB / 64 MiB 上限),兼顾了全新环境开箱即用与轻量规范。

3. 本地独立安装与全量验收测试

  • �erify-doc.mjs:原生会话单一挂载契约、零覆盖层规范 ALL PASSED;
  • �erify-host.mjs:107 项服务端契约与内建 CLI 路由测试 ALL PASSED;
  • �erify-client.mjs:客户端组件、交互与降级断言 ALL PASSED;
  • �erify-layout.mjs:70 项三栏舞台、紧凑命令栏自适应断点 ALL PASSED。

请复审,感谢!

@github-actions

Copy link
Copy Markdown
Contributor

❌ 工作台安全与规范审查未通过 (327bf2d)

你好!感谢你为 DSH 工作台生态提交的贡献。在本次自动化安全与规范审查中,门禁检测到部分需要调整的问题,暂未能自动合并。请参考以下详情进行调整:

📌 问题原因:

审核项 workspace 引用的文件不存在:source/WorkbenchPanel.js#chars=114000-136230

💡 解决问题建议:

  1. 请根据上述具体错误原因检查条目配置及远程仓库发布资产。
  2. 修复后直接推送新提交至当前 PR 分支即可重新触发审核。

💬 后续指引:完成上述调整后,直接将改动推送到当前 PR 分支即可,系统将自动重新执行完整安全门禁。如果在修改过程中有任何疑问,欢迎在评论区随时留言沟通!

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants