READMESource: main@f5b34d1c
dsh-conversation-folders
DeepSeek Harness 第三方插件:在左侧栏内嵌「项目 → 文件夹 → 对话」层级。
- 新建文件夹、重命名、删除
- 对话改名、把对话移入/移出文件夹
- 数据持久化在
~/.dsh/storages/convfolders.json
文件
| 文件 | 说明 |
|---|---|
package.json |
包声明;dsh.client 声明浏览器半部(platform: 'web' + inject 依赖边) |
lib/index.js |
Host 半部(ESM named-export):storageDomain 持久化 + webServer 注册 POST /folders-rpc |
lib/client.js |
Client 半部: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 构建链。
安装与挂载
安装:
# 本地目录安装(开发调试) npm install <本目录绝对路径> # 或发布到 npm 后 npm install dsh-conversation-folders挂载到 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 目录。重启 DSH,左侧栏应出现「项目 → 文件夹 → 对话」层级。
与 dsh-plugin-dated-folders 的差异
| 本包 | dsh-plugin-dated-folders |
|
|---|---|---|
| 分组方式 | 手动建文件夹 + 自由移入移出 | 按日期自动归档 |
| 改名 | ✅ 文件夹、对话均可改名 | 按日期,无需改名 |
| 定位 | 手动自由分组 | 自动时间归档 |
数据模型
convfolders 域(storageDomain),folders 表,每条记录:
{
"id": "f-<id>",
"workspaceId": "<workspace uuid>",
"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.insert |
document.createElement('style') |
Client Builtin React / import |
require('react') + window.__ModuleLoader__.load |
No comments yet. Be the first to write one.