DeepSeek Harness(DSH)的智能体办公室仪表盘:工作区、会话、token 用量和子代理都摆在 6 列像素办公室里,还有智能体邮箱、飞书消息、会议、逐字稿和办公室日志,一屏总览,一眼看穿每个智能体在忙什么。
34.3/100
综合分
6
GitHub 星标
920
npm 周下载
—/5
用户评分
数据截至 2026/10/11 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/Fayelin12/dsh-office.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 24 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-office @ 0.4.6
✓Node 引擎要求 >=22.5 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 23:06:14
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 76 处,展示前 54 条)
- 写入本地文件lib/office.js:73
async function ensureDataDir() { await mkdir(DATA_DIR, { recursive: true }); } - 读取本地文件lib/office.js:141
const txt = await readFile(CONFIG_PATH, "utf8"); - 写入本地文件lib/office.js:155
await writeFile(CONFIG_PATH, JSON.stringify({ assignments }), "utf8"); - 读取本地文件lib/office.js:182
const raw = await readFile(path, "utf8"); - 写入本地文件lib/office.js:251
.then(() => writeFile(filePath, JSON.stringify(obj), "utf8")) - 读取本地文件lib/office.js:466
try { html = await readFile(HTML_PATH, "utf8"); } catch (e) { - 读取本地文件lib/office.js:510
const bytes = await readFile(resolved); - 读取本地文件lib/office.js:525
try { texts = await readFile(BUBBLE_TEXTS_PATH, 'utf8'); } catch (e) { console.warn('[office]', e?.message || e); } - 发起网络请求lib/office.js:649
const res = await fetch(url, { signal: ac.signal }); - 读取本地文件lib/mail.js:28
if (existsSync(entry)) { - 执行外部命令来自配置/变量lib/mail.js:85
execFile(process.execPath, [entry, ...args], common, onDone); - 读取本地文件lib/lark.js:44
const parsed = JSON.parse(await readFile(FEISHU_STATE_PATH, "utf8")); - 写入本地文件lib/lark.js:50
.then(() => writeFile(FEISHU_STATE_PATH, JSON.stringify({ lastSync: feishuLastSync }), "utf8")) - 读取本地文件lib/lark.js:59
const parsed = JSON.parse(await readFile(CALENDAR_CACHE_PATH, "utf8")); - 写入本地文件lib/lark.js:69
.then(() => writeFile(CALENDAR_CACHE_PATH, - 读取本地文件lib/lark.js:164
const parsed = JSON.parse(await readFile(TRANSCRIPTS_STATE_PATH, "utf8")); - 写入本地文件lib/lark.js:169
mkdir(DATA_DIR, { recursive: true }) - 写入本地文件lib/lark.js:170
.then(() => writeFile(TRANSCRIPTS_STATE_PATH, JSON.stringify(transcriptsState), "utf8")) - 写入本地文件lib/lark.js:326
await rename(src, dest); - 写入本地文件lib/lark.js:329
await copyFile(src, dest); - 删除本地文件lib/lark.js:330
await unlink(src); - 读取本地文件lib/lark.js:376
const raw = readFileSync(FEISHU_CONFIG_PATH, "utf8").replace(/^ FEFF/, ""); - 读取本地文件lib/lark.js:381
const sync = (typeof syncRaw === "string" && syncRaw.trim() && existsSync(syncRaw.trim())) - 读取本地文件lib/lark.js:383
: (existsSync(FEISHU_INGESTOR_DEFAULT) ? FEISHU_INGESTOR_DEFAULT : ""); - 执行外部命令来自配置/变量lib/lark.js:923
execFile(file, args, opts, (error, stdout, stderr) => { - 执行外部命令固定命令lib/lark.js:936
child = execFile("cmd.exe", ["/c", "start", "", filePath], { windowsHide: true, detached: true, stdio: "ignore" }); - 执行外部命令来自配置/变量lib/lark.js:938
child = execFile(process.platform === "darwin" ? "open" : "xdg-open", [filePath], { detached: true, stdio: "ignore" }); - 读取本地文件lib/insights.js:25
const parsed = JSON.parse(await readFile(join(DATA_DIR, INSIGHTS_STATE_FILE), "utf8")); - 写入本地文件lib/insights.js:31
.then(() => writeFile(join(DATA_DIR, INSIGHTS_STATE_FILE), JSON.stringify(insightsState || {}), "utf8")) - 读取本地文件lib/insights.js:39
const parsed = JSON.parse(await readFile(join(DATA_DIR, INSIGHTS_HISTORY_FILE), "utf8")); - 写入本地文件lib/insights.js:45
.then(() => writeFile(join(DATA_DIR, INSIGHTS_HISTORY_FILE), JSON.stringify(insightsHistory || { days: {} }), "utf8")) - 读取本地文件lib/insights.js:77
if (readFileSync(keyFile, "utf8").trim()) prereq.llmConfigured = true; - 读取本地文件lib/insights.js:110
const key = readFileSync(opts.llmKeyFile, "utf8").trim(); - 读取本地文件lib/todos.js:84
const parsed = JSON.parse(await readFile(join(DATA_DIR, TODOS_FILE), "utf8")); - 写入本地文件lib/todos.js:101
.then(() => writeFile(join(DATA_DIR, TODOS_FILE), JSON.stringify(todosState || { version: 2, projects: [], items: [] }), "utf8")) - 读取本地文件lib/larkbot.js:72
if (existsSync(p)) return readFileSync(p, "utf8").replace(/^ FEFF/, "").trimEnd(); - 读取本地文件lib/larkbot.js:72
if (existsSync(p)) return readFileSync(p, "utf8").replace(/^ FEFF/, "").trimEnd(); - 读取本地文件lib/larkbot.js:112
return JSON.parse(readFileSync(filePath, "utf8").replace(/^ FEFF/, "")); - 读取本地文件lib/larkbot.js:117
if (!existsSync(LARKBOT_CONFIG_PATH)) { - 读取本地文件lib/larkbot.js:130
const existing = existsSync(LARKBOT_CONFIG_PATH) - 写入本地文件lib/larkbot.js:134
mkdirSync(DATA_DIR, { recursive: true }); - 写入本地文件lib/larkbot.js:135
writeFileSync(LARKBOT_CONFIG_PATH, JSON.stringify(existing, null, 2), "utf8"); - 读取本地文件lib/larkbot.js:145
if (!existsSync(FEISHU_CONFIG_PATH)) return { ok: false, error: { code: "NO_FEISHU_CONFIG", message: "未找到 feishu-config.json(需先配置 💬 飞书消息流)" } }; - 写入本地文件lib/larkbot.js:186
mkdirSync(DATA_DIR, { recursive: true }); - 写入本地文件lib/larkbot.js:187
writeFileSync(LARKBOT_STATE_PATH, JSON.stringify(state, null, 2), "utf8"); - 执行外部命令来自配置/变量lib/larkbot.js:224
child = spawn(process.execPath, [scriptPath, ...args], { - 写入本地文件lib/larkbot.js:265
await mkdir(dir, { recursive: true }); - 写入本地文件lib/larkbot.js:577
try { await mkdir(this.workspaceRoot, { recursive: true }); } catch (_) { } - 执行外部命令来自配置/变量lib/larkbot.js:638
child = spawn(process.execPath, [runJs, ...args], { - 删除本地文件lib/larkbot.js:1292
try { unlinkSync(target); } catch (_) { } - 读取本地文件lib/notify.js:37
return JSON.parse(readFileSync(path, "utf8").replace(/^ FEFF/, "")); - 读取本地文件lib/notify.js:73
return candidates.find((p) => existsSync(p)) || ""; - 读取本地文件lib/notify.js:126
const st = statSync(NOTIFY_CONFIG_PATH); - 执行外部命令来自配置/变量lib/notify.js:359
child = spawn(process.execPath, [cliPath, ...args], {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 工作区与会话总览
- 邮箱飞书会议日志聚合
README
由 DeepSeek 最新模型翻译生成🏢 dsh-office
一眼看穿你的每个智能体在忙什么。 面向 DeepSeek Harness (DSH) 的智能体办公室面板:工作区、会话、token 用量、子代理、Agent 邮箱、飞书消息、会议日程与逐字稿,全部可视化成 6 列精灵办公室 —— 每个智能体,一眼看清。
惊艳时刻:打开面板,整个智能体舰队就在一屏之内 —— 谁在干活、谁在等你、每个会话烧了多少 token、刚调用了哪些工具 —— 再加上你的飞书消息和即将开始的会议,一个会话都不用点开。
📧 内置 Agent 邮箱 / 💬 飞书消息流 / 📅 会议日程 + 妙记逐字稿 / 🪵 办公室日志,全部在面板内完成,不离开办公室。
DeepSeek Harness「办公室」插件:工作区 / 会话 / token 用量 / 子代理一屏总览,内置 Agent 邮箱收发、飞书消息、会议日程与妙记逐字稿,每个 agent 在忙什么,一眼就知道。
📈 日均 50+ 次下载(npm,持续增长)—— 别看 GitHub star 少,真实用户每天都在装。
What is dsh-office? / 这是什么
dsh-office 是 DeepSeek Harness 的悬浮办公室面板。
展开完整文档(README 剩余 1 节)
🏢 dsh-office
一眼看穿你的每个智能体在忙什么。 面向 DeepSeek Harness (DSH) 的智能体办公室面板:工作区、会话、token 用量、子代理、Agent 邮箱、飞书消息、会议日程与逐字稿,全部可视化成 6 列精灵办公室 —— 每个智能体,一眼看清。
惊艳时刻:打开面板,整个智能体舰队就在一屏之内 —— 谁在干活、谁在等你、每个会话烧了多少 token、刚调用了哪些工具 —— 再加上你的飞书消息和即将开始的会议,一个会话都不用点开。
📧 内置 Agent 邮箱 / 💬 飞书消息流 / 📅 会议日程 + 妙记逐字稿 / 🪵 办公室日志,全部在面板内完成,不离开办公室。
DeepSeek Harness「办公室」插件:工作区 / 会话 / token 用量 / 子代理一屏总览,内置 Agent 邮箱收发、飞书消息、会议日程与妙记逐字稿,每个 agent 在忙什么,一眼就知道。
📈 日均 50+ 次下载(npm,持续增长)—— 别看 GitHub star 少,真实用户每天都在装。
What is dsh-office? / 这是什么
dsh-office 是 DeepSeek Harness 的悬浮办公室面板。它把你的 工作区、会话、token 用量、子代理、Agent 邮箱、飞书消息和会议 变成 6 列精灵办公室,一眼看清每个智能体在做什么 ——不用逐个点开会话。
dsh-office 是 DeepSeek Harness 的一个悬浮「办公室」面板,把工作区、会话、 token 用量、子代理、Agent 邮箱、飞书消息、会议日程变成一屏 6 列精灵办公室,一眼看清每个 agent 在忙什么,不用逐个点开会话。
- Workspace / 工作区:6 列布局,一眼总览。
- Session / 会话:活跃 / 待确认 / 已完成状态,彩色边框区分。
- Token / token 用量:单次输入 vs 累计,活跃会话实时、历史会话冷读。
- Subagent / 子代理:自动过滤子代理会话,父会话聚合显示「有子代理在跑」。
- Mail / 邮箱:内置 Agent 邮箱页签,收件箱 / 已发送 / 读信 / 写信 / 回复,不离开面板。
- Feishu / 飞书:本机飞书消息流会话卡片(群聊/私聊),一屏查看 + 同步。
- Meetings / 会议:日程卡片 + 倒计时提醒 + 妙记/纪要 + 逐字稿一键保存。
Features / 特性
- 📧 Agent 邮箱页签 / Agent Mail tab(收件箱 / 已发送 / 读信 / 写信 / 回复,基于 agently-cli,不离开面板)
- 💬 飞书消息流 / Feishu messages(本机消息库会话卡片流:群聊/私聊、新增徽标、最近 3 条预览、消息弹窗、同步/定时增量/提到我悬浮提示)
- 📅 会议日程视图 + ⏰ 悬浮提醒 / Meetings & reminders(与飞书消息共用 lark-cli 授权,提前 1 小时提醒、每 5 分钟刷新倒计时,已开完会议自动关联妙记/纪要)
- 📋 待办看板 + 会议日程 / Todo board & meetings(「📋 日程」tab:待办看板按项目分组 + 备注 + 截止日逾期标红 + 完成归档 + 日历/时间轴/今天视图,外加会议日程视图 + 倒计时提醒)
- 📄 妙记逐字稿 + 一键保存 / Transcripts(自动拉取已结束会议逐字稿到本地缓存,卡片提醒「逐字稿已生成」,点【保存】移动到目标目录)
- 💡 每日洞察 / Daily insights(飞书日报:LLM 通读当天消息生成要点式日报 + 待办 + 未回复 + 值得回顾的讨论)
- 🪵 办公室日志 / Office logs(帮助弹窗内 tab:实时查看加载 / 调用 / 同步等全部动作,排查问题)
- 🏢 6-column sprite office / 6 列精灵办公室
- 🔵 悬浮入口 + 一键开关 / floating FAB + toggle
- 🧠 MBTI 角色 + 个性化气泡 / MBTI characters + idle bubble texts
- 🔢 token 单次 vs 累计口径 / per-input vs cumulative token
- 🤖 子代理识别与过滤 / subagent detection & filtering
- 🔔 会话跑完通知 / Session-done notification(按工作区白名单,会话跑完私聊推送飞书:工作区 + 会话标题 + 最后一段回答 + 耗时;子代理不推送)
Install / 安装
从 npm 安装 / Install from npm
dsh plugin --profile web add dsh-office
🤖 给 AI 助手的安装提示词(大家现在都让 AI 去 GitHub 搜项目来装,复制这句发给你的 AI):
帮我安装 DeepSeek Harness 的 dsh-office 插件:运行 dsh plugin --profile web add dsh-office,然后重启 dsh web。装好后告诉我怎么打开右下角的「办公室」面板。
本地开发安装 / Local (file:) install
pnpm add dsh-office@file:<path/to/dsh-office>
然后在 profile 的 bundles 里加 "dsh-office"
即:在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 数组中加入 "dsh-office",然后重启 dsh web。
数据目录:~/.dsh/office/(office-config.json、token-usage.json、notify-config.json)。
需要 Node.js 22.5+(飞书消息脚本依赖 Node 内置的 node:sqlite,无需单独安装 SQLite 数据库),建议 Node 24。
依赖清单 / Dependencies
插件本体零依赖(纯 JS、无构建)。以下为各功能的外部 CLI / 服务依赖,按需安装:
| 依赖 | 对应功能 | 必须? | 安装 |
| Node.js 22.5+ | 飞书消息脚本(内置 node:sqlite) | ✅ 必须 | — |
| @larksuite/cli | 💬 飞书 / 📋 日程·会议 / 💡 洞察 | 用飞书需装 | npm install -g @larksuite/cli(详见 feishu-setup 指南) |
| @tencent-qqmail/agently-cli | 📧 邮箱 | 用邮箱需装 | npm install -g @tencent-qqmail/agently-cli(见下方邮箱章节) |
| @photostructure/sqlite-vec | 飞书语义召回 | 可选 | 需要语义召回时在插件目录安装 |
| embedding API key | 飞书语义召回 | 可选 | dashscope(默认 qwen3.7-text-embedding,1024 维)/ OpenAI 兼容 |
| —(复用飞书授权 + dsh 模型) | 🤖 助理(群聊助理) | 可选,默认关闭 | 配 ~/.dsh/office/larkbot-config.json(enabled: true + allowChats);LLM 走 dsh 模型路由,无需独立 key |
飞书消息流 / 洞察不装 sqlite-vec、不配 embedding 也能用(降级为「无语义召回」)。
📖 配置指南:
- 飞书(消息 + 会议 + 洞察):<https://qcn7nupmeook.feishu.cn/docx/SILkdkE4xo8jF8x3SMGcOrFVnSf>
- 群聊助理:<https://qcn7nupmeook.feishu.cn/docx/BpNLdm7LsoaCHjxdEJWcdL87nGz>
🤖 群聊助理提示词热加载 / Hot-reload assistant prompts (0.4.2+)
群聊助理的 3 块提示词已外置为插件包内文件,每次使用实时读盘:改动即时生效、无需重启 DSH,也不用改 node_modules / 重新安装。
| 文件(包内 assets/prompts/) | 作用 | 生效 |
| gate-system.md | 门控判断(run / direct / skip)+ direct 的回复文本 | 下一条消息即生效 |
| reply-style.md | run 会话的回复风格(注入会话 system prompt) | 下一次该会话回合生效 |
| bridge-protocol.md | 群聊运行约定与安全规则(注入会话 system prompt) | 下一次该会话回合生效 |
本机定制(升级不覆盖):把同名 .md 复制到 ~/.dsh/office/prompts/ 再修改——该目录优先于包内默认。
⚠️ 提示词正文不要写 {{变量}}——DSH 组装系统提示时会当模板变量插值,未注册的变量名会报错。
Usage / 使用
1. 右下角点 🏢 办公室 FAB。
2. 打开 6 列面板,看到工作区 / 会话 / token / 子代理。
3. 点会话卡片跳转;面板随侧边栏切换自动收起。
面板视图映射 / Panel view map
面板由 1 个主视图 + 4 个 header tab + 2 个工具按钮 组成:
| 视图 | 入口 | 内容 |
| 🏢 办公室 | 默认主视图(FAB 打开) | 6 列精灵办公室:工作区 / 会话 / token / 子代理 可视化 |
| 📋 日程 | header tab | 待办看板 + 日历 + 会议(左栏子导航:📅 日历 / 🕐 全部 / ⏳ 今天 / 💬 会议 / 未分配) |
| 💬 飞书 | header tab | 飞书消息流(左栏)+ 每日洞察(右栏) |
| 📧 邮箱 | header tab | Agent 邮箱:收件箱 / 已发送 / 读信 / 写信 / 回复 |
| 🤖 助理 | header tab | 群聊助理:监听群/私聊 → LLM 门控 → dsh 会话执行 → 回消息 |
| ❓ 帮助 | 工具按钮 | 帮助弹窗(数据口径 / 办公室日志 / 打赏 三 tab) |
| ⚙️ 配置 | 工具按钮 | 工作区 → 列分配(6 列小人骨架) |
展开说明:
- 📋 日程 是「待办」和「会议」的统一入口:
- 待办:📅 日历(月历总览)、🕐 全部(时间轴)、⏳ 今天(今日聚焦)、未分配;
- 会议:💬 会议(会议日程视图 + 倒计时 + 妙记/纪要入口)。
- 💬 飞书 是「消息」和「洞察」的统一入口:
- 左栏:飞书消息流(会话卡片流 + 同步 + 提到我提示);
- 右栏:每日洞察(飞书日报:要点 + 待办 + 未回复 + 值得回顾的讨论)。
Agent Mail 邮箱功能 / Mail tab
📧 邮箱页签让你直接在办公室面板里收发 Agent Mail(腾讯 Agent 邮箱)的邮件。每人一个独立邮箱;凭据由 CLI 存在本机 keychain,同一台机器上多人使用互不冲突。
邮箱页签需要先安装并授权 Agent Mail CLI(每人一个独立邮箱,凭据由 CLI 存在本机 keychain,互不冲突):
1. 安装 CLI(全局安装)
npm install -g @tencent-qqmail/agently-cli
2. OAuth 授权(浏览器完成) agently-cli auth login
- 未安装 / 未授权时,面板的 📧 邮箱页签会显示安装引导卡片(含步骤与可复制的提示语),不影响办公室其它功能。
- 也可以让 Agent 代为安装配置,直接把下面这句发给 Agent:请阅读 https://agent.qq.com/doc/cli-setup.md 文档,按照步骤为我安装并配置 Agent Mail CLI。
- 完整安装文档:<https://agent.qq.com/doc/cli-setup.md>
💬 飞书消息流 / Feishu messages
飞书消息视图把本机消息库(如飞书群聊/私聊消息)汇总到办公室面板一屏查看。
消息采集/读取脚本已随包提供(scripts/feishu/),只需装好 lark-cli 并授权、在 feishu-config.json 配 profile,无需自己写脚本:
- 插件不直接调用飞书 API、不上传任何数据——只执行本地脚本(随包 scripts/feishu/ 或你自定义)并解析其 stdout JSON;
- 面板以会话卡片流展示:会话名 + 群/私聊标签 + 新增徽标(+N)+ 最近 3 条预览 + 最后活跃时间,点卡片打开消息弹窗,点消息行展开完整正文;
- 同步:手动点「同步」深捞最近 30 天(manualWindowDays 可调),或开启 autoSync 定时增量同步(整点对齐,无后台守护进程);
- 「提到我」悬浮提示:定时同步后若新消息提到 mention 关键词,办公室按钮旁闪过 📢 提示。
- 可选语义召回:配 embedding 段(apiKey 等)后对文本消息做向量化,支持按语义检索历史群消息;不配也能用消息流。
未配置 feishu-config.json 时,💬 飞书视图显示引导卡(含步骤、配置模板、在线指南链接),不影响其它功能。
完整「飞书消息 + 会议 + 洞察 从 0 到 1」配置指南见面板内 📖 指南链接。
📅 会议日程 + ⏰ 提醒 / Meetings & reminders
会议功能与飞书消息共用同一套 lark-cli 授权:在 feishu-config.json 的 scripts 里加一个 calendar 脚本(拉取日程的 Node 脚本,输出 { ok, events }),消息同步完成时会顺带拉取日程,缓存到 ~/.dsh/office/calendar-cache.json。
// ~/.dsh/office/feishu-config.json
{
"profile": "<你的 lark-cli profile>", // ← 授权身份(见飞书配置指南)
"scripts": {
// sync / latest / calendar / transcript / permission 可不填:默认用随包脚本 "calendar": "", // ← 可选:会议日程(仓库 scripts/calendar.js 开箱) "transcript": "", // ← 可选:妙记逐字稿(仓库 scripts/transcript.js 开箱) "permission": "" // ← 可选:妙记权限申请(仓库 scripts/permission.js 开箱) } }
- 面板 📅 会议视图:按日期分组的日程卡片(左时间轴 + 中标题/组织者 + 右倒计时),即将开始橙色描边、进行中绿色描边、已结束灰色淡化;过去 3 天前的组默认折叠。
- ⏰ 悬浮提醒按钮:办公室按钮旁,会议开始前 1 小时出现,每 5 分钟轮询刷新倒计时,点击直接打开面板会议视图。
- 📝 妙记/纪要:已开完的会议自动尝试关联 AI 智能纪要 / 妙记(需授权 vc:meeting.meetingevent:read + vc:record:readonly,lark-cli auth login --scope "vc:meeting.meetingevent:read vc:record:readonly"),有产物时卡片显示可点击的「📝 纪要 / 妙记」入口。
- 📄 逐字稿 + 一键保存:配置 scripts.transcript(仓库 scripts/transcript.js 开箱示例,依赖 minutes:minutes.basic:read 授权)后,日历同步时对比新旧日程,只对「新出现的妙记」自动生成逐字稿 (历史会议可点【转逐字稿】手动转换),暂存到 ~/.dsh/office/transcripts/;会议卡片显示「✅ 逐字稿已生成」,点【保存】输入目标目录即可把逐字稿移动到该目录(记忆上次保存目录;拉取失败 30 分钟后自动重试,卡片可手动重试)。
- 🔑 妙记权限申请:配置 scripts.permission(仓库 scripts/permission.js,依赖 minutes:permission:apply 授权)后,无妙记查看权限的会议卡片显示【申请权限】按钮,一键向妙记 owner 发起查看申请。
未配置 scripts.calendar 时,会议视图显示引导卡,不影响其它功能;未配置 scripts.transcript 时,逐字稿功能不显示。
Why dsh-office? / 解决什么痛点
用 AI 写代码久了,后台常挂着一堆会话:这个在跑、那个在等你审批、还有个在问你问题——但它们长得几乎一模一样,你只能一个个点进去读文字才知道状态。凭什么要我费劲去读?直接让我"看"不就行了。
- 🔴 痛点 1:会话状态靠文字读,判断成本高 → 把每个工作区映射成「工位小人」,动画替你说话:空闲站着、工作走路、忙疯小跑、等你审批时举手 + ⚠️。0 秒扫一眼就知道先回谁。
- 🔴 痛点 2:token 用量不可见 → 单次输入 vs 累计,活跃会话实时、历史会话冷读,谁在烧 token 一眼看清。
- 🔴 痛点 3:待办会漏 → 审批、提问、「已回复但我还没看」的会话都会举手或亮角标,不再悄悄烂在列表里。
- 🔴 痛点 4:子代理混在主列表造成噪声 → 自动过滤子代理会话,父会话聚合显示「有子代理在跑」,token 仍计入父会话。
- 🔴 痛点 5:邮箱 / 飞书 / 会议分散在多个外部工具 → 全部内置到面板,一个地方收发邮件、看飞书消息、盯会议日程、记待办、看日报。
一句话:它把「需要你关注」这件抽象的事,翻译成「一眼能懂」的信号。
FAQ / 常见问题
Q: 它和 dsh-polling 有什么区别? A: dsh-polling 管定时任务;dsh-office 管可视化总览。两者可共存。
Q: token 的「单次输入」和「累计」是什么口径? A: 单次输入 = 最近一次请求的输入 token;累计 = 该会话历史输入 + 输出 + 缓存读写之和。活跃会话显示单次,空闲会话显示累计。
Q: 子代理会话为什么看不到? A: 子代理会话默认从列表 / 徽标 / 悬浮里过滤(避免噪声),但 token 仍计入父会话。
Q: 飞书消息 / 会议数据是怎么来的?会不会上传? A: 插件不直接调用飞书 API。你在 feishu-config.json 里配置本地脚本(采集/读取),插件执行脚本并解析 stdout JSON——数据只在本机流转,不上传任何服务器。
Q: 怎么排查插件问题? A: 帮助弹窗 → 「办公室日志」tab,实时查看加载 / 调用 / 同步等全部动作(/office-ui/logs)。
Q: 会议逐字稿保存在哪? A: 拉取后暂存 ~/.dsh/office/transcripts/;点卡片【保存】可输入目标目录移动过去(记忆上次目录)。
Ecosystem / 生态
- DeepSeek Harness — the harness this plugin runs on
- dsh-plugin topic — more DSH plugins
- awesome-deepseek-harness — curated DSH ecosystem
- 🐦 飞书答疑群:加入群聊
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Fayelin12/dsh-office
DeepSeek Harness(DSH)的智能体办公室仪表盘:工作区、会话、token 用量和子代理都摆在 6 列像素办公室里,还有智能体邮箱、飞书消息、会议、逐字稿和办公室日志,一屏总览,一眼看穿每个智能体在忙什么。
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,792已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,170已汉化DeepSeek 客户端
71
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,041已汉化DSH
70.7
这是你的仓库?认领条目