Skip to content

About

项目管理工作台

Resources

Stars

6 stars

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

多项目总控台(dsh-workbench-project-console)

一个本地自用的 DSH Desktop 工作台:把同时在跑的公司项目、日常工作和零散项目放在一处, 按模块看到每个项目的状态、进度、待跟进事项和 DDL 时间风险,点开看进展,随时问一句,或者 让 Agent 基于这些登记数据做分析、写汇报文档。

工作台只在本地开发和使用,不做市场投稿。

它解决什么

  • 项目太多、散落在脑子里或若干个表格里,没有一处能一眼看完「谁在跑、谁要炸、谁快到期」。
  • 待跟进事项容易漏,尤其是同时跟进十几个项目的时候。
  • 需要写周报、状态汇报、风险清单时,每次都要重新翻一遍记录。

一次任务的核心流程

  1. 进入:在侧栏顶部的模式切换器里选「项目总控台」。没有会话、没有工作区也能直接看到整个页面。

  2. 看板:顶栏下面是 7 个维度的页签,左侧是模块导航——「模块」轴(全部/公司项目/日常工作/ 其他项目,以及你自己新建的模块)带项目数与风险点,「智能视图」给出需关注/已逾期/本周到期/ 有待跟进/已完成的计数。所有页签都跟着左侧的筛选走。 页签分别是:

    页签 维度 内容
    概览 统计 6 个 KPI(项目总数/需关注/待跟进/本周到期/平均进度/未排期)、一句话结论、问一句、风险分布环形图、模块负载堆叠条、进度分布直方图、负责人负载排行、需要马上处理、本周到期
    模块看板 模块 按模块分区的卡片墙,段头给出项目数/需关注/待跟进/平均进度
    状态看板 状态 按「进行中/待启动/阻塞/暂停/已完成」分列的看板,列内按风险排序
    列表 明细 项目/模块/状态/进度/截止/剩余/风险/待跟进的紧凑表格
    日历 按天 月历网格,DDL 与待跟进落进对应日期格(风险着色),可翻月/回今天,点某天看当天事项并直接勾完成
    时间线 区间 甘特式横条,每行一个项目,按起止日期定位,risk 着色,带周刻度与「今天」竖线
    待跟进 行动 全部待跟进事项按「已逾期/今天到期/本周内/更晚/未排期」分桶,可就地勾完成
  3. 点开:点卡片、时间线条、列表行或日历里的项目名,都从右侧滑出详情抽屉:关键信息网格、 时间风险条与判定理由、说明与标签、进展记录(按类型追加、彩色时间线)、待跟进清单、AI 助手按钮。

  4. 问一句:在提问框里输入「哪些项目这周到期?」「有什么风险?」「我的待跟进还有哪些?」, 面板直接在本地数据上回答;回答里的项目可以接着点开。

  5. 交给 Agent:在详情或总览点「分析进展 / 生成周报 / 生成状态汇报 / 生成风险清单 / 生成会议纪要骨架」, 面板会把项目数据整理成提示词或文档草稿,一键复制后粘贴到旁边的原生会话发送,也可以下载成 .md。

完成状态:项目被标记为「已完成」,或改动写入成功(右上角显示「已保存 · 修订 N」)。 失败恢复:保存失败时面板回滚到上一次成功的数据并显示原因;版本冲突(另一个窗口改过)会提示 「重新加载」;数据文件损坏时拒绝覆盖。

示例数据

第一次进入(文档还是空的、而且从没生成过示例)时会自动按模块生成 12 个示例项目,内容都是 一个后端/全栈工程师手上的真实工作,用来把各个看板填满:

模块 示例
公司项目 订单结算服务重构、数据中台订单域接入、移动端首屏性能优化、灰度发布平台上线
日常工作 内部分享《线上问题定位实战》准备、Q3 技术季度汇报、线上告警值班与故障复盘、依赖升级与技术债清理
其他项目 自研服务监控小工具、开源项目 issue 与 PR 维护、技术笔记与博客整理、副业小程序原型

覆盖已逾期 2、紧急 3、进度风险 2、阻塞 1、已完成 1、正常 3,带 13 条未完成待跟进与多条进展记录, 每条都挂「示例」标签。侧栏底部「示例数据」可以再生成一份,「清空」一键删掉(带确认)。

AI 填充(自然语言增删改查)

顶栏「AI 填充」:用一句话说明要做什么,工作台会判断是新增 / 修改 / 删除 / 查询,并把它变成一份 可读的变更清单。增删改都会先弹确认,点「确认执行」才一次性写入;查询只回答案、不改数据。

  • 交给宿主注册的 LLM(默认走 agentDefaultModel 的 provider/model)把指令翻译成 JSON 计划; 模型只负责"翻译",校验、项目匹配、日期解析、预览、落库全部在本工作台的纯函数里做, 模型说错话不会直接改数据。
  • 模型不可用(没有 llm 服务、没配默认模型、超时、返回不是 JSON)时,退回本地规则解析, 界面上会标注来源是「模型解析」还是「本地规则解析」。
  • 支持的动作:新增项目、修改项目(名称/模块/状态/负责人/起止日期/进度/说明/链接)、删除项目、 新增待跟进、完成待跟进、追加进展记录;一次最多 20 条。
  • 找不到或匹配到多个项目的那几条会被跳过,并在确认弹窗里逐条列出原因,不会瞎改。
  • 执行完在工作台顶部留一条「撤销」条,可以一键回到执行前。

例:

  • 「把订单结算服务重构的 DDL 改到下周五,进度调到 80%」
  • 「新增项目:服务网格试点,放到公司项目,截止月底」
  • 「给内部分享《线上问题定位实战》准备加一条待跟进:周五前做一次预讲」
  • 「删掉副业小程序原型」
  • 「这周要交付什么?」

改了服务端入口后需要重启 Harness(应用菜单 Harness → 重启 / ⌘⇧R); 重启前点「解析」会提示「服务端还没加载 AI 解析接口」。

发布新版本

市场条目用的是固定地址 https://github.com/OliverLiy/projectHub/releases/latest/download/dsh-workbench-project-console.tgz, 所以发版不需要再提目录 PR:

  1. 改 package.json 的 version(完整 SemVer);
  2. pnpm verify && pnpm pack;
  3. 在 GitHub 建一个新 Release,把包改成固定文件名 dsh-workbench-project-console.tgz 上传(文件名不带版本号);
  4. 市场每天重建一次索引,会自动读到新版本号与新的校验值。

目录里不写版本号 —— 版本由包内的 package.json 决定,市场探测时读取。

数据放在哪

项目数据存在 DSH 数据目录下:

$DSH_HOME/project-console/state.json
# 本机即:~/Library/Application Support/dsh-desktop/harness/project-console/state.json
  • 写入是原子的(临时文件 + rename),并带版本号做并发检测。
  • 卸载工作台不会删除这个目录,重新安装后数据还在。
  • 想从零开始就自己移走或删掉这个文件。

时间风险怎么算

按本地日历日比较,等级从高到低:

等级 触发条件
已逾期 今天晚于 DDL
阻塞 状态为「阻塞」
紧急 距 DDL ≤ 3 天
进度风险 时间已过 X% 而进度明显落后(时间比例 − 进度 ≥ 30%)
临近 距 DDL ≤ 7 天
未排期 没填 DDL
正常 其余进行中的项目
已完成 状态为「已完成」

安装(本机)

包已按规范打成 tarball,用当前 Desktop 支持的插件安装方式装入 web profile:

pnpm pack                      # 产出 dsh-workbench-project-console-1.0.1.tgz
dsh plugin --profile web add "$PWD/dsh-workbench-project-console-1.0.1.tgz"

dsh plugin 会把包装进 profile 并把 dsh.profile.bundles 里加上本包,所以它会被当作 插件层加载。装完重启 Harness(应用菜单 Harness → 重启,或 ⌘⇧R), 再到「工作台管理/已安装的工作台」确认条目并添加。

首次使用还需要在 设置 → 通用 里打开「启用工作台功能」(这是宿主的开关,工作台不能代替你打开)。

开发

pnpm install
pnpm build      # 把 src/ 打成单文件客户端模块 lib/client.js
pnpm test       # node:test 单元与集成测试
pnpm check      # 按规范第 3 节校验包格式
pnpm verify     # build + test + check

目录

package.json                npm 与 DSH 插件声明
cordis.patch.yml            把服务端入口插入插件树,并指定数据目录
dsh/server.js               服务端入口:/api/project-console/* 接口
dsh/store.js                项目数据的原子存储与结构收敛
src/client/index.js         客户端入口:注册工作台面板
src/client/panel.js         面板外壳:顶栏、页签、侧栏、抽屉、表单、弹窗
src/client/screens.js       7 个维度的看板视图组件
src/client/charts.js        环形图/堆叠条/直方图/排行条(手写 SVG + CSS)
src/client/ui.js            图标与基础组件(按钮、徽标、进度、弹窗、抽屉、提示)
src/client/styles.js        面板样式(宿主令牌 + 容器查询)
src/client/api.js           客户端访问本工作台接口
src/shared/analysis.js      风险与汇总计算(纯函数)
src/shared/views.js         模块分组、智能视图筛选与搜索(纯函数)
src/shared/insights.js      看板数据层:风险分布/状态列/模块负载/进度分布/负责人负载/日历/时间线/待跟进分桶(纯函数)
src/shared/aiplan.js        AI 计划层:NL→计划校验、项目匹配、日期解析、预览、应用、本地规则兜底(纯函数)
src/shared/query.js         「问一句」的本地问答
src/shared/prompt.js        Agent 提示词与文档草稿
scripts/build-client.mjs    多文件源码 → 单文件客户端模块
scripts/check-workbench-package.mjs  包格式校验
lib/client.js               构建产物(随包分发)

客户端构建的约束

Desktop 不会替你构建客户端,lib/client.js 必须是已构建好的单文件模块。本项目的 scripts/build-client.mjs 只支持一个很小的语法子集:第 0 列的单行 import/export, 其他内容(包括 CSS 模板字符串)原样保留。相对路径的模块会被内联;裸包名(react) 交给模块加载器的 require,因为它是宿主共享基线。写不支持的语法会在构建时报错, 而不是产出坏包。

界面边界

  • 面板注册为左侧嵌入式业务面板(embedded: true + businessSide: 'left' + 宽度 0.68), 根节点第一个子元素是语义 <header>:这是宿主文档里的结构,macOS 收起侧栏时宿主会按 --dsh-frame-leading-clearance 给顶栏预留窗口按钮的宽度(本机实测 160px 生效)。
  • 面板宽度受宿主约束,只有左侧 68% 主区;原生会话留在右侧,公共入口(侧栏、 模式切换器、「工作台管理」、设置)都由宿主保留。
  • 不使用 customFrame(那会拿走宿主自带的「新建工作区并开始对话/在此工作区新建会话」入口, 需要自己重做一遍会话创建与归属登记),也不自己造聊天界面:原生会话由宿主放置。
  • 样式优先复用宿主的 --dsw-* 设计令牌(颜色、圆角、字体),跟随 Desktop 主题; 布局用容器查询适配面板宽度,不是视口宽度。
  • 不创建会话、不改写会话归属、不动工作区:所有依赖会话的动作都由你复制提示词到旁边的会话完成。
  • 键盘可达:所有操作都是原生 button/input,有可见焦点轮廓。

许可证

MIT,见 LICENSE。

About

项目管理工作台

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages