npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@lynn123411/dsh-workspace-tree

v2.3.0

Published

DSH 工作区树:侧栏工作区浏览器——注册工作区按目录嵌套、无归属会话落「未分组」;安全归档区(归档有门槛、进区必可删、删除零守卫 fail-loud),附带重命名/移除/IDE 打开等管理。

Downloads

2,806

Readme

@lynn123411/dsh-workspace-tree

DSH 工作区树:接管左侧栏工作区浏览——三档分组(按工作区 / 工作区树 / 单一列表,默认按目录嵌套的树)、会话搜索、视图排序与会话拖拽,无归属会话落「未分组」,附带工作区重命名/移除/在 IDE 中打开、安全归档区(进了归档区就一定删得掉)、级联物理删除与会话全局重命名。归档/删除链路零守卫、fail-loud;删除墓碑以 Host 物理存在性校验权威自愈,误写墓碑不会永久隐藏存活会话。内核契约基线:DSH 0.1.6(主视图当前会话、会话导航、作用域租用与状态座位)。

特性

  • 三档分组与排序(与官方一致):视图选项菜单(官方 Menu 原语 + portal,不会被头部裁切)提供分组方式(按工作区平铺 / 工作区树 / 单一列表,默认工作区树)与排序方式(最近更新 / 手动,默认最近更新);排序、折叠与手选顺序按浏览器本地记忆。注册工作区在树模式下按真实路径的祖先/后代关系组织,子工作区排在自己父级的会话之前;祖先的文件夹图标按子树状态三档呈现(有会话为灰色开口文件夹、无会话为白色线框开口文件夹),蓝色高亮跟随当前会话所在的祖先链,并可在组头透传子树聚合状态点(运行 / 等待 / 已完成)。
  • 会话搜索(与官方一致):头部按钮展开搜索框(框内自带关闭按钮,Escape 同样退出),标题 / 工作区名的子串命中即时列出,250ms 防抖后并入 Host 内容检索(同一入口 sessions.search,结果上限由 Host 给定)并显示片段;前一次请求随新输入中止,真实失败时保留本地命中并如实提示;部署本身没开内容检索openAt: "never" 的会话索引、或未挂载 dsh-session-query)时按能力事实处理——静默降级为只做本地匹配,不提示也不重试;选中结果即打开该会话、收起搜索,并把它的行滚进视野(自动展开所在组与祖先)。
  • 视图交互(与官方一致):每组默认只显示 5 条普通会话,超出部分由「展开其余 N 个会话 / 收起」控制;工作区组(含「未分组」)可折叠,折叠状态按浏览器记忆;拖拽会话即改为手动顺序(顺序按账号存:工作区 / 未分组 / 单一列表各自一份,因此树模式下别的工作区那几行不亮插入标记——官方同样不支持跨工作区拖拽),拖拽工作区在注册表里持久重排同层顺序;全局面板打开时主视图会话不再显示选中态,只随当前会话出现的空白草稿行一并隐藏。
  • 未分组:不属于任何已注册工作区的会话照官方列表原样落进「未分组」区块(可折叠、同样受每组 5 条上限约束),插件不替用户注册工作区,也不改动这些会话的归属。
  • 后代子代理状态透传(与官方一致):父会话自身空闲、但它的不间断 subagent 谱系里还有后代在跑时,这一行同样显示运行中,悬停提示与 Hover 卡写明「N 个子代理运行中」;从某条会话 fork 出来的独立会话不会被算作子代理。归档门槛同样认这一层——后代子代理在跑时不给归档(按钮置灰并说明原因、动作侧复查、Host 侧按持久谱系逐个后代核验),因此凡进入归档区的会话,其谱系内也必然没有任何在跑的后代。
  • 添加工作区(两个入口,同一套交互):侧栏顶部的全局入口用于添加任意位置的第一个工作区;每个工作区行另有一个行内入口,选择器以该工作区目录为起始路径(只作起点,不限制越出)——macOS 的原生窗口经 osascriptdefault location 直接开在该目录,其余环境的内置浏览对话框也以它为起始层。本机 macOS 单击直达 Finder:宿主侧 osascript … choose folder 弹出原生「选择文件夹」窗口(与 DSH 自带 native 前端同一条命令、同样的取消判定),窗口开在本机屏幕上,远端设备看不到,那类环境宿主报不支持、同一按钮改走内置浏览;取消不产生任何工作区、也不弹错误。选定目录后只做幂等注册(要开会话就点该工作区自己的「新建会话」)。
  • 内置目录浏览:宿主不能弹 Finder 时(非 macOS、旧版宿主半边、探测失败),按钮打开插件自持的浏览对话框——面包屑 + 当前层目录列表(隐藏目录加暗淡标记)+ 绝对路径直输 + 「新建文件夹并进入」(走官方 uiWorkspace.createDirectory),底层只用官方 browse 原语;两种能力都不可用时如实报出原因。
  • 隐藏式工作区管理:移除工作区 = 仅移除显示(本地记忆)——隐藏该工作区节点,注册、目录文件、会话日志与会话归属均不受影响;被隐藏工作区的归档会话仍在归档区可见可恢复;重新添加同一目录后,工作区连同其会话一起恢复显示;空工作区自动真注销——名下已无任何可见会话与归档会话的工作区,移除时直接经官方 workspace/delete RPC 注销注册表记录(同样不删磁盘目录与会话文件,注销失败自动降级为仅隐藏)。
  • 会话可见性跟随官方:官方列表返回的有效会话一律可见,工作区视图显示活跃会话、归档区显示已归档会话;新建但未发送消息的空白草稿仅在当前处于打开状态时可见(显示为本地化的「新建会话」,并恒定钉在该组最前),切换到其他会话即隐藏(官方从不物理删除会话文件,本插件只在设置页按需回收空壳,见下条);subagent 来源的会话保持隐藏,从会话 fork 出来的独立会话不会被误判。
  • 一键删除空壳会话:设置页「侧边栏 - 工作区树」提供「删除所有空壳会话」按钮(确认弹窗后执行)。空壳判据取官方列表投影自己的 blank——官网 applySessionListMetadata 对「从未产生过 turn/start」的会话给出的权威标记,因此不需要(也不能)自行解析会话日志:DSH 的会话日志是多帧 zstd,Node 的 zstd 绑定只解得出首帧 header。判据不可用(sessionController 缺席)时拒绝执行而不是猜。三重排除确保不会误删:运行中(列表 running 位 + Host 侧活 Agent 状态复查,挡住转发位窗口期)、正在打开(已 attach 到本进程 session store,含你正在打字的当前草稿)、子代理会话(交给父会话的级联删除)。执行复用归档删除那套 fail-loud 级联引擎(物理删除 + 子代理闭包 + 注册表/归档/projcache 剔除),删不掉的留在原地并逐条列出原因,可幂等重试;删掉的 id 记入本地墓碑,官方列表收敛前不会以「未分组会话」复现。
  • 安全归档区(进区必可删):会话必须先移入归档才能执行永久删除,彻底防止日常误删;归档沿用官方 workspace/archiveSession RPC,运行中/等待回复审批的会话不允许归档——门槛三层:行按钮置灰(提示)、动作侧读 store 活快照 + 官方会话状态座位复查(运行中 / 等待审批·计划复核·提问 一律拒绝)、以及 Host 权威复查 /archive/guardCheck(官方 RPC 在 Host 侧没有运行态守卫,客户端 running 位又是转发事实、存在窗口期,故归档前问一次 agents.get(sessionId).status;不可达时 fail-open 放行),空白草稿不归档。进入归档区的会话必然空闲且只读(输入栏替换为只读条),因此删除零守卫、无条件执行;删除为 fail-loud:物理删除必须全部成功才从注册表/归档剔除,真实失败(文件被锁、权限不足等)会如实报错并把会话留在归档区,可幂等重试。
  • 级联物理删除与持久化墓碑(物理自愈):永久删除时自动递归级联清理其派生的全部 Subagent 子代理物理文件、注册关系及 session_projcache 投影元数据缓存,杜绝磁盘与元数据孤儿残留;级联范围只认真正的 Subagentorigin === "subagent" / delegationDepth > 0),从某条会话 fork 出来的独立会话绝不会被连带删除;删除成功后会话经本地持久化墓碑在任何标签页/刷新后都不可见。墓碑自愈以物理存在性为权威判据:官方列表仍返回的墓碑会向 Host 查询会话目录是否仍在——删除成功必然使目录消失,因此「目录仍在」即会话存活、墓碑系误写(如历史版本残留),自动作废恢复显示;「目录已没了」才是收敛竞态,继续隐藏直至列表收敛。设置页另提供「清空墓碑」一键兜底。
  • 归档只读阅览与就地恢复:归档区支持点击直接在主视口阅览已归档会话的历史记录,严格执行只读白名单(保留文本浏览与消息/代码复制,自动隐藏分支/重试/反馈/审批按钮并替换输入栏为只读状态条),支持就地一键恢复会话;阅览中的归档会话仍可随时删除。
  • 简洁归档管理:归档区按工作区分组展示(无归属的归档会话单独成「未分组」分组),支持单条恢复/永久删除、组级恢复全部/删除全部、一键恢复所有/一键删除所有;批量删除逐条执行——能删的删掉,删不掉的留在归档区并逐条列出原因;失效归档(官方列表已不再返回的 ID)在进入归档区时自动静默清理,无提示行/按钮。
  • 在 IDE 中打开工作区:在每个工作区/组头的按钮栏提供一键在外部 IDE(VS Code、CodeBuddy CN、Cursor、Windsurf、Trae、WebStorm、IDEA、PyCharm、Zed、Sublime 或自定义命令)中打开对应工作区的功能;IDE 类型限白名单(未知类型拒绝,绝对路径且存在时放行),自定义命令只读服务端设置,Windows 下含 shell 元字符的路径拒绝执行。
  • 全局会话重命名:无论会话当前是否处于打开状态,均可通过 Host RPC 实时重命名;会话侧允许确认未改动的标题(与官方一致,把当前的自动标题钉成显式标题),工作区侧重名会被拦下并提示。
  • 活动定时任务标记(与官方一致):会话行的列表投影值里 schedule 非空时,标题后显示闹钟标记(带 tooltip 与 aria 标签,本身不是按钮,点击照旧打开会话)。
  • Hover 卡(与官方一致):工作区行与会话行悬停显示卡片——工作区卡列出标题、完整目录与创建时间并可一键复制路径,会话卡列出标题、「多久之前」与每条状态文案并可一键复制标题(空白草稿卡只读)。
  • 状态点与相对时间走官方原语:状态点直接用 ui-primitivesStateDot(五档语义),行尾相对时间分档走官方 relativeTime,弹窗与目录对话框的骨架走官方 Modal,会话恢复走官方 workspaces.unarchiveSession——同一能力不再各写一份。
  • 悬停标题滚动(与官方一致):会话行与归档行的标题被省略号截断时,鼠标悬停即平滑滚到末尾露出尾部,离开时一步归位;prefers-reduced-motion 下两次移动都直接跳转。
  • 配置自由:在「设置 - 侧边栏 - 工作区树」中配置是否启用(关闭后回退官方工作区浏览器,注册级、刷新页面生效)、默认打开的 IDE 或自定义启动命令,并提供「清空墓碑」与「删除所有空壳会话」兜底入口;配置经 DSH 设置服务持久化到 ~/.dsh/settings.yaml,重启/换端口不丢失。「侧边栏」设置页与 dsh-mattpocock-skills-deck 共用(先加载者当选页面宿主,参与者可增删;机制见仓库 docs/rules/shared-settings-page.md)。
  • 主题完美适配:全面接入 DSH 设计系统(--dsh-* / --dsw-* 变量),完美自适应浅色与深色主题。

安装

dsh plugin --profile web add @lynn123411/dsh-workspace-tree