packages/dsh-task-board
zhu1090093659/dsh-web侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
禅模式视图 + 前台盯屏时间统计插件:智能体后台运行时提供极简 Zen 标签页(进行中/结束状态文案、用户消息、动态提示、Markdown 渲染最终回复、单行轮次统计),统计前台盯屏时长并给出每日/每周禅值,支持一键隐藏中间过程(工具调用/推理行)、任务开始完成时自动进出禅、Alt+Z 快捷键与 Zen 设置面板——纯前端实现,数据存 localStorage,无网络请求。
A Zen Mode view tab + foreground time tracker for DeepSeek Harness (DSH).
While an agent works in the background, switch to the Zen tab and get a calm, minimal surface: a status message, your latest user message, and one line of statistics — no tool calls, no reasoning rows, no noise. Zen also tracks how much of your "running" time was spent actually watching the screen, and reports a daily / weekly Zen score.
Zen view (while generating) | Zen view (done) | Zen settings | |
conversation.view tab (对话 / Zen / 轨迹), showing:步数 N · 用时 Nm · 统计per session, persisted in localStorage. Daily / weekly Zen score (100% − 盯屏比例) is shown in the settings panel.
隐藏中间过程) that hides tool-call, command,context, compaction, reasoning rows, etc. from the chat view via CSS.
back to chat when it completes.
Alt+Z to toggle between the Zen and chat views from anywhere.instant rendering.
This plugin is distributed as a DSH bundle. It requires a Web-capable profile (the default web profile).
dsh plugin --profile web add github:john-walks-slow/dsh-zen#<40-character-commit>Then restart dsh web. The bundle patch (cordis.patch.yml) inserts the zen row into the profile's composition, and the Web client is served from the committed lib/client.js.
Prefer pinning the exact commit hash; a floating branch can be force-pushed. See
docs/PUBLISHING.md for the catalog submission flow.
dsh plugin --profile web add @johnnren/dsh-zenAlt+Z) to switch to the Zen view.intermediate process nodes in the chat view.
步数 N · 用时 Nm lineThe settings panel also shows your 今日禅 / 本周禅 scores and the current Zen level.
npm install
npm run build # bundle src/client.ts + src/index.ts → lib/, deploy into web profile
npm run typecheck # tsc --noEmit against the local shims in src/dts-shim.d.ts
npm run e2e:zen # GUI probe against a disposable dsh-e2e instance (see e2e/)The deploy target is $DSH_HOME/profiles/web/node_modules (default ~/.dsh). Client-only changes need a page refresh; host-side changes need a DSH restart.
The GUI probe needs a disposable instance started with the provider layer in e2e/profile/e2e-profile.patch.yml, otherwise agent turns fail with NO_ADAPTER and the live Chat surfaces cannot be exercised:
export CPA_API_KEY=... # cpa gateway key (see ~/.config/api-vault)
export DSH_E2E_PLAYWRIGHT_CORE=<path to an installed playwright-core entry>
dsh-e2e start --patch e2e/profile/e2e-profile.patch.yml --wait-ready
npm run e2e:zen
dsh-e2e stop├── src/
│ ├── client.ts # Web client: slots, settings section, shortcuts
│ ├── index.ts # Host face (empty apply; bundle row only)
│ ├── foreground-tracker.ts# Foreground time tracking + persistence
│ ├── zen-settings.ts # Settings store + migration
│ ├── locales.ts # zh / en dictionaries
│ └── components/ # ZenView, ChatHideToggle, ZenSettingsSection
├── lib/ # Committed build artifacts (client factory bundle + host)
├── assets/icon.svg # Plugin icon
├── cordis.patch.yml # Bundle patch: inserts the zen row
├── build.mjs # esbuild bundler + deploy
└── docs/ # Screenshots and publishing guideweb profile).docs/issues/261011-dsh-02-compat).
conversation.view, conversation.session.header.actions,settings.section.
slots, sessions, locale, uiConversation.ctx.uiConversation.binding(sessionId).target("chat"); the current Session is derived from sessions.list main-view retention. Both are 0.2-era contracts — re-verify them against the target version's source when upgrading.
services — the host face is an empty apply() and all data stays in browser localStorage (dsh.zen.*). 无网络请求、无文件写入、无外部服务、无遥测。
dsh plugin --profile web remove @johnnren/dsh-zenOr remove the row from the profile composition. Stored stats/settings in localStorage can be cleared by deleting keys prefixed dsh.zen..
MIT — see LICENSE.