# 本插件需要的 harness 补丁 [English](README.md) | 中文 `harness-session-pin.patch` 适用于 `dsh-v0.1.1-rc.2` 的 DeepSeek Harness 检出。 不打这个补丁,插件根本不会激活:它依赖 `sessionPins`,而原版 harness 不提供这个服务。 ## 为什么是补丁,而不是插件 本插件要在侧栏每一行会话上渲染一个图钉控件,并把已置顶的会话提到所有工作区之上。 这两件事在 `@deepseek-ai/dsh-client-ui-workspace` 之外都够不着——截至 `0.1.1-rc.2`, 这个包: - 只声明两个插槽,都服务于目录选择流程,没有一个在会话行上; - 会话行的右键菜单硬编码为重命名、分叉、归档三项; - 会话的分组与排序锁在包私有的 `createWorkspaceViewStore()` 里。 所以补丁的做法是新增一个服务和消费它的界面,而不是绕开一个并不存在的接缝。 ## 它改了什么 | 文件 | 改动 | |---|---| | `ui-workspace/src/client/session-pins.ts` | 新增文件:`ctx.sessionPins` 背后的单 provider 客户端注册表 | | `ui-workspace/src/client/index.ts` | 提供 `ctx.sessionPins`,注入 `togglePinnedSession` | | `ui-workspace/src/client/contract/slots.ts` | 浏览器注入份额上的 `hooks.sessionPins` 与 `togglePinnedSession` | | `ui-workspace/src/client/WorkspaceBrowser.tsx` | 渲染置顶区;把已置顶的行从普通分组中移除 | | `ui-workspace/src/client/rows/Rows.tsx`、`tree.ts` | `derivePinned` 与行内图钉控件 | | `ui-workspace/src/client/{WorkspaceBrowser,rows/Rows}.module.css` | 两者的样式 | | `ui-workspace/src/client/locales.ts`、`README*` | 对应文案 | | `ui-primitives/src/icons/index.tsx` | `IconPinOutline16` | | 各自旁边的测试 | 注册表、行、树、浏览器的覆盖 | ## 怎么打 ```sh cd git checkout dsh-v0.1.1-rc.2 git apply /path/to/harness-session-pin.patch ``` 然后把本插件的源码登记进两个 TypeScript 总工程。补丁刻意没有动这两个文件,因为它们的内容 因检出而异: ```jsonc // tsconfig.base.json — compilerOptions.paths "@deepseek-ai/dsh-client-ui-session-pin": ["./packages/client/ui-session-pin/src"], // tsconfig.client.json — references { "path": "./packages/client/ui-session-pin" }, ``` 之后照常构建并挂载插件。 ## 这个补丁什么时候能退场 需要上游提供三样东西,其中前两样截至 `0.1.1-rc.2` 仍不存在: 1. **侧栏会话行的扩展点**——形如 `sidebar.workspaces.session.action`,owner 属性里带 `sessionId` 与该行的状态。 2. **会话排序的介入点**——置顶要把行提到最前,而排序在那个包私有的 store 里。 3. **插件自助的设置命名空间**。**这一条 `rc.7` 已经兑现**:它删掉了 `packages/host/apiproxy/src/api-proxy.ts` 里硬编码的 `WEB_SETTINGS_NAMESPACES` 白名单,改为直接服务 `ctx.settings.describe()` 返回的一切。补丁也因此缩小了一圈。 要跟踪的是前两条,不是这个文件:迄今每个上游版本都让这个补丁更小一点,`rc.8` 又拿掉了 其中一块——它把浏览器 hooks 改成经 `PropsHooks` 推导,手写的类型随之退场。 ## 否决过的替代方案 插件可以用更高优先级往 `sidebar.workspaces` 注册自己的浏览器,把官方那个整体盖掉, 官方代码一行不改。但那等于把整个侧栏(打包后约 2400 行)vendored 进插件自行维护, 每次升级都要重新对齐,比上面这个补丁更难维护。