切换手册章节
workspace.json 怎样把工作区和会话连起来?
在工作台点开一个项目,下面会列出它的会话。要知道这个项目指向哪个文件夹、哪些聊天还归它管,可以读工作区索引。下面按 Windows 截图里的层次,从一个 ID 找到一条完整记录。
本篇目录 7 节
跟着截图读一遍
公开图保留字段名和行号,已遮住真实标识。可以先数条目,再对照下文的虚构 JSON 看同一个 ID 怎样连接两处。
- 先看 global.workspaceIds。截图列出 3 个工作区 ID,它们在数组中的位置决定项目的显示顺序。
- 再看 tables.workspaces。截图里展开的那条记录以第三个工作区 ID 为键。用这个 ID 对上记录,就能看到它的目录路径和显示标题。表中先写哪条记录不决定左栏顺序。
- 展开这条记录的 sessionIds。图中从第 22 行到第 36 行,共有 15 个会话 ID。这是一个工作区的归属记录;另外两个工作区要各自按 ID 查找。
- 回到 global。归档和置顶两个数组均为 [],表示当时这份索引没有标记任何归档或置顶会话。它们和工作区里已经列出的 15 个会话可以同时成立。
作者提供的 Windows 实图。保留可对照的字段名,已遮盖账号、真实路径与标识符。
- 1查看 workspaceIds 列表
- 2展开 tables.workspaces
- 3找到该项的 sessionIds
文件上半部是整份索引的状态
部分记录还会有 defaultWorkspaceId,用于识别首次使用时建立的默认项目。pendingMutation 是一次工作区创建或移除尚待完成的内部标记,交由程序在启动时处理。
| 字段 | 怎样读 |
|---|---|
| unit.name / version | 标明这一类数据叫 workspace,RC5 使用第 2 版数据格式。这里的 2 与应用版本号分别计数。 |
| global.initialized | true 表示首次根据已有会话头部建立索引的步骤已经结束。刚启动过、但从未登记项目的空索引也可以是 true。 |
| global.workspaceIds | 记录工作区 ID 及显示顺序。要找标题或磁盘位置,拿 ID 去下半部查。 |
| global.archivedSessionIds | 全局归档的会话。归档隐藏会话,保留原项目中的位置,以便日后恢复。 |
| global.pinnedSessionIds | 全局置顶的会话,最近置顶的排在最前。归档会同时取消置顶,取消归档后可另行置顶。 |
文件下半部是每个项目的登记卡
| 字段 | 它回答的问题 |
|---|---|
| tables.workspaces 的键 | 这是哪个工作区?外层的长 ID 是它的身份,改显示名后依然沿用。 |
| path | 项目登记时解析到哪个真实目录?Windows 路径在 JSON 引号内会把一个反斜杠写成两个。 |
| title | 左栏给它起了什么名字?默认取目录的最后一段,也可以在应用里重命名。 |
| sessionIds | 有哪些会话归这个项目,按什么顺序排?新挂入的会话排在前面,顺序还可手动调整。聊天正文没有保存在这里。 |
| createdAt / updatedAt | 这一条工作区记录何时建立、最后何时变更?重命名、增添或调整会话顺序都可能更新后者。 |
用虚构路径练习读一条记录
下方是完整的小例子,可以直接按字段看,无需在电脑上创建文件。周五读书会指向 D:\HarnessDemo\Reading,在这个工作区下显示两场聊天,第二场排在第一场之前。
{
"unit": { "name": "workspace", "version": 2 },
"global": {
"initialized": true,
"workspaceIds": ["00000000-0000-4000-8000-000000000001"],
"archivedSessionIds": [],
"pinnedSessionIds": []
},
"tables": { "workspaces": {
"00000000-0000-4000-8000-000000000001": {
"path": "D:\\HarnessDemo\\Reading",
"title": "周五读书会",
"sessionIds": ["session-demo-two", "session-demo-one"],
"createdAt": "2026-10-01T01:00:00.000Z",
"updatedAt": "2026-10-02T08:30:00.000Z"
}
} }
}为什么目录、时间和权限有时看起来对不上?
新登记项目时,createdAt 和 updatedAt 初始相同。若这条记录来自首次整理旧会话,RC5 会取该目录下最新一个已有会话的创建时间来建立记录。用这个日期推算软件安装时间或项目文件夹的生日,可能得到错误结论。
记录着 path,只表明工作区和目录有关联。移动磁盘、移除映射盘后,某些原有归属仍会保留。想确认文件是否存在,就在运行 Harness 的那台机器上用自己的账户打开实际目录。
能否改文件还取决于具体工具、当前沙箱策略和操作系统权限。改 title 只会改显示名称。在索引中登记一个路径,也不会给账号新增磁盘访问权或批准越界写入。
用两个空会话验证归档和移除
我们在 Linux 临时目录中,用发布的 RC5 工作区、会话与持久化服务登记了一个虚构项目,再依次挂入两个空会话。文件上的顺序为第二个、第一个。给第一个会话置顶再归档后,置顶被清除,归档清单多出一项,两个 ID 的项目内顺序保持原样。只有全局状态改变,这次 workspace 行的 updatedAt 没动。
随后取消归档并移除工作区登记。原目录里的 meeting.txt 内容仍在,持久化服务还列得出两份会话日志。此验证没有登录账号、调用模型或操作 Windows 桌面。
可选:在自己的电脑上做只读核对
如果只想跟着教学看,用文件管理器打开目录即可。已安装 Node.js 的读者,也可以解压本站的演示素材,在 harness-lab/config-check 目录打开终端。下面两行分开运行,第一行只读随包虚构样本。
样本应显示工作区顺序列表和记录表各有 2 项。样本桌面配置有补丁文件,Web 配置没有。第二行才检查本机当前终端的 DSH_HOME 或默认主目录,不输出项目名称、绝对路径、会话 ID 或正文。
看到“未找到”时,先核对当前操作系统用户、实际数据根和存储实现。要确认插件能用,还要回到对应工作台验证。
node inspect-dsh.mjs --demo
node inspect-dsh.mjs --local来源与延伸阅读
知识库与演示素材
知识库附录含录屏分镜。练习包里的 INDEX.md 可按题目查找会议简报、只读目录核对、Cordis 报销回执,以及门店销售和团队练习。