choocoo/conversation-folders-package0

dsh-conversation-folders

DeepSeek Harness plugin: folders in the sidebar — project → folder → conversation. Create, rename, and move conversations into folders.

包名
dsh-conversation-folders
版本
0.1.0
许可证
MIT
最近更新
2026年8月18日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:choocoo/conversation-folders-package

dsh-conversation-folders

DeepSeek Harness 第三方插件:在左侧栏内嵌「项目 → 文件夹 → 对话」层级。

  • 新建文件夹、重命名、删除
  • 对话改名、把对话移入/移出文件夹
  • 数据持久化在 ~/.dsh/storages/convfolders.json

文件

文件说明
package.json包声明;dsh.client 声明浏览器半部(platform: 'web' + inject 依赖边)
lib/index.jsHost 半部(ESM named-export):storageDomain 持久化 + webServer 注册 POST /folders-rpc
lib/client.jsClient 半部:window.__ModuleLoader__.load({ id, factory }) classic script,require('react')fetch/folders-rpc

本包按官方 client bundle 约定编写:Client 半部是 window.__ModuleLoader__.load({ id, factory }) 格式(React 是 platform module,经 require('react') 解析),Host 半部是 ESM named-export(name/inject/apply)。纯 JS,无 TypeScript/typert 构建链。

安装与挂载

  1. 安装

    # 本地目录安装(开发调试)
    npm install 
    
    # 或发布到 npm 后
    npm install dsh-conversation-folders
    
  2. 挂载到 host composition:这是跨会话持久化 + 全局侧栏 UI,属于 host plane,必须加到 host composition(而非 agent preset)。在 host composition 文件里加一行:

    - id: conversation-folders
      name: 'dsh-conversation-folders'
    

    host composition 的具体文件名/位置因部署方式而异(自建部署通常是 base.cordis.yml / web.cordis.yml)。请勿编辑随部署附带的 preset 目录。

  3. 重启 DSH,左侧栏应出现「项目 → 文件夹 → 对话」层级。

与 dsh-plugin-dated-folders 的差异

本包dsh-plugin-dated-folders
分组方式手动建文件夹 + 自由移入移出按日期自动归档
改名✅ 文件夹、对话均可改名按日期,无需改名
定位手动自由分组自动时间归档

数据模型

convfolders 域(storageDomain),folders 表,每条记录:

{
  "id": "f-",
  "workspaceId": "",
  "title": "UI",
  "sessionIds": ["session-…"],
  "createdAt": "ISO-8601",
  "updatedAt": "ISO-8601"
}

约束:一个会话在同一项目内最多属于一个文件夹(moveSession 会先从其他文件夹移除)。

已知限制

  • 接管了原生 sidebar.workspaces:原生的搜索、归档、fork、workspace 新增/删除/排序未复刻。
  • 相比规范的 @Remote(typert) RPC,本方案用裸 HTTP 路由 POST /folders-rpc,缺少 wire schema 校验,是刻意的最简取舍(第三方包无构建链)。
  • peerDependencies>=0.1.0-rc.5;若你的 DSH 版本不同,可能需要调整。

从动态插件到正式包的改动对照

动态插件正式包
harness.handle('folders.*')webServer.register({ path: '/folders-rpc' })
host.call('folders.*')fetch('/folders-rpc')
恒等 { parse: v => v }schemastery z.object({...})
return { apply }ESM export const name/inject + export function apply
Builtin styles.insertdocument.createElement('style')
Client Builtin React / importrequire('react') + window.__ModuleLoader__.load