Files
deepseek-harness/packages/client/ui-workspace/README.zh.md
Hypatia May 61163b7da5 Merge remote-tracking branch 'origin/master' into codex/basic-session-search
Conflict resolutions:

- `session.list`: master's projection columns fold into the PR's cancellable,
  batched `listVisibleSessionSummaries`, which `session.search` shares as its
  visibility baseline; master's goal helpers stay beside it.
- Client sessions face: master narrowed `ctx.sessions` to `ISessions`, so the
  search verb and its protocol-constant bound are declared there and the
  test-runtime double implements them (recorded, empty page unless a scenario
  stubs hits).
- `WorkspaceBrowser`: master's per-row Rename wiring rides the PR's search
  results view; the tree keeps the PR's query-free derivations.
- `dsh web` bin: the PR's shutdown-handlers-before-readiness order with
  master's boot-time LAN address snapshot.
- `session-query-sqlite`: master's `SCHEMA_VERSION` 7 stands; the PR's bump
  carried no schema change.
- Specs: master wraps assistant/steering message payloads and requires an
  `application/json` carrier request, so the search fixtures and tests follow.
- Web aria goldens keep master's recording plus the PR's search placeholder;
  the navigation-panes inventory keeps master's terminal-card golden next to
  the PR's search-results golden.
2026-07-30 09:40:38 +08:00

4.1 KiB
Raw Blame History

@deepseek-ai/dsh-client-ui-workspace

English | 中文

共享 Workspace 浏览器与选择器插件。WorkspaceBrowser 填充侧边栏的 sidebar.workspaces slotWorkspacePicker 则填充页面局部 Session Intent 主视觉区的 conversation.hero.workspace slot两个表层使用同一套 Workspace 菜单和创建流程。

该浏览器通过全局运行时钩子将 Session 行渲染为分组或扁平形式,并负责 Workspace 创建/重命名和 Workspace 内的重排序流程。非空白查询会以单一扁平结果列表替代任一浏览模式:不区分大小写的标题和 Workspace 子串匹配项会立即显示,经 250 ms 防抖的 Host 请求则会加入经过排序的当前对话内容匹配项及其摘要片段。英文搜索输入框及其防御性请求路径会移除 NUL将查询限制在传输 schema 规定的 500 个 UTF-16 code unit 内且不会拆分 surrogate pair并保留现有的防抖与取消行为。每次新查询都会中止前一个请求内容搜索失败时元数据匹配项仍会显示同时给出警告。列表最多显示 20 条结果,并会在查询过宽时提示用户缩小范围;打开所选 Session 时既不会清除查询,也不会跳转至特定事件。

该选择器通过全局 useWorkspaces hook 列出真实的 Host Workspace 实体。选择 Workspace 会调用 slot owner 的 onPick 回调,重新定位前端 Session 对象。每个注册各自声明一个目录流子洞single kindconversation.hero.workspace.directoryFlowsidebar.workspaces.directoryFlow),由组合的选择器包 client half 填入其选取交互——今天是 -native 后端的无渲染 OS 选择器驱动,-browse 组合下则是应用内浏览对话框。平铺显示的 打开本地文件夹… 操作仅在本表层的洞被占用时渲染每次菜单渲染读取占用状态洞为空意味着该组合没有选目录能力——seam 文档化的无流程默认行为)。本包持有触发与接纳:占用者经洞的 owner 会话(open/busy/onPicked/onCancel/onError每次打开上报一个所选路径owner 通过对象层接纳它,并等待 Workspace 列表投影刷新后才选中已提交的 Workspace取消操作不会显示提示错误落入可重试的文件夹对话框重新选择 会重新打开流程。创建新工作区 操作保留名称对话框,并禁用列表中已有的名称,而 Host 对并发或非 UI 调用方仍具有最终决定权。运行时 Session 与 Workspace 服务负责物化。Workspace 行内的 Delete 操作会打开确认框,说明保留边界、阻止重复提交,并在失败时保持打开;成功后,该分组会被移除,其 Session 则留在 Ungrouped 下。Session 行内的 Rename 操作打开同款浏览器持有的对话框并以该行的显示标题预填客户端不设名称冲突规则host 负责规范化,可能以 title-invalid 拒绝,错误渲染在对话框告警区);确认未修改的标题是有意允许的——这正是把当前自动标题钉住、不再被重新生成覆盖的手势。

两个目标 slot 都由其他插件声明,因此 apply 通过声明感知的延迟机制完成注册,并在声明该 slot 的插件恢复后重新注册。

模型体验

无。选择器属于浏览器 chrome这里没有任何内容进入模型请求。

KV Cache 影响

无;该包既不组装也不发送提供方请求。

已知限制与暂缓事项

  • 没有模糊内容搜索或事件深链接:内容后端采用字面 token短语匹配选择结果会打开 Session而不是匹配的事件。
  • 没有 Session 删除与 fork 控件Session 菜单的 Fork 与 Delete 行仍仅提供视觉效果Rename 已接线);删除 Workspace 注册记录不会删除 Session。
  • 原生文件夹选择依赖本地 Host 载体:在 -native 组合下,仅使用 fixture测试前置数据的部署或远程浏览器部署无法打开本地操作系统对话框模态框会显示平台故障并允许重试。可远程的选取是 -browse 组合的应用内流程。