@michengai/dsh-btw 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/CHANGELOG.zh-CN.md +10 -0
- package/LICENSE +201 -0
- package/README.md +204 -0
- package/README.zh-CN.md +200 -0
- package/assets/screenshots/btw-bubbles.png +0 -0
- package/assets/screenshots/btw-command-menu.png +0 -0
- package/assets/screenshots/btw-conversation.png +0 -0
- package/cordis.patch.yml +3 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/00-/351/230/205/350/257/273/345/257/274/350/210/252.md +12 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/02-/345/275/223/345/211/215/347/212/266/346/200/201.md +16 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/03-/345/276/205/345/212/236/344/270/216/351/230/273/345/241/236.md +11 -0
- package/docs/01-/345/275/223/345/211/215/345/267/245/344/275/234/I005-/351/246/226/346/254/241/345/217/221/345/270/203/344/270/216/345/217/257/344/277/241/345/217/221/345/270/203/351/205/215/347/275/256/00-/350/277/255/344/273/243/346/200/273/350/247/210.md +27 -0
- package/docs/05-/345/267/245/347/250/213/344/272/244/344/273/230/01-/350/207/252/345/212/250/345/217/221/345/270/203.md +58 -0
- package/docs/07-/350/277/255/344/273/243/345/275/222/346/241/243/2026/I001-/344/270/200/346/254/241/346/200/247/346/227/201/351/227/256/346/260/224/346/263/241/344/270/216/350/276/223/345/205/245/345/216/206/345/217/262/00-/350/277/255/344/273/243/346/200/273/350/247/210.md +44 -0
- package/docs/07-/350/277/255/344/273/243/345/275/222/346/241/243/2026/I001-/344/270/200/346/254/241/346/200/247/346/227/201/351/227/256/346/260/224/346/263/241/344/270/216/350/276/223/345/205/245/345/216/206/345/217/262/01-/351/252/214/346/224/266/350/256/260/345/275/225.md +32 -0
- package/docs/07-/350/277/255/344/273/243/345/275/222/346/241/243/2026/I002-/345/256/236/351/231/205DSH/346/217/222/344/273/266/346/216/245/345/205/245/00-/350/277/255/344/273/243/346/200/273/350/247/210.md +45 -0
- package/docs/07-/350/277/255/344/273/243/345/275/222/346/241/243/2026/I002-/345/256/236/351/231/205DSH/346/217/222/344/273/266/346/216/245/345/205/245/01-/346/265/213/350/257/225/347/216/257/345/242/203/351/232/224/347/246/273.md +38 -0
- package/docs/07-/350/277/255/344/273/243/345/275/222/346/241/243/2026/I002-/345/256/236/351/231/205DSH/346/217/222/344/273/266/346/216/245/345/205/245/02-/345/256/242/346/210/267/347/253/257/346/263/250/345/205/245/344/270/216/346/260/224/346/263/241/345/256/275/345/272/246/344/277/256/345/244/215.md +28 -0
- package/docs/07-/350/277/255/344/273/243/345/275/222/346/241/243/2026/I003-/345/256/277/344/270/273/345/244/226/350/247/202/344/270/216/345/233/275/351/231/205/345/214/226/00-/350/277/255/344/273/243/346/200/273/350/247/210.md +47 -0
- package/docs/07-/350/277/255/344/273/243/345/275/222/346/241/243/2026/I003-/345/256/277/344/270/273/345/244/226/350/247/202/344/270/216/345/233/275/351/231/205/345/214/226/01-/350/247/206/350/247/211/351/252/214/346/224/266.md +35 -0
- package/docs/07-/350/277/255/344/273/243/345/275/222/346/241/243/2026/I004-/344/273/223/345/272/223/344/270/216/350/207/252/345/212/250/345/217/221/345/270/203/00-/350/277/255/344/273/243/346/200/273/350/247/210.md +38 -0
- package/lib/client.js +13473 -0
- package/lib/index.js +322 -0
- package/lib/types/client/BubbleView.d.ts +13 -0
- package/lib/types/client/bubbles.d.ts +32 -0
- package/lib/types/client/index.d.ts +3 -0
- package/lib/types/client/styles.d.ts +1 -0
- package/lib/types/index.d.ts +5 -0
- package/lib/types/locales.d.ts +49 -0
- package/lib/types/server/command-visibility.d.ts +3 -0
- package/lib/types/server/jobs.d.ts +43 -0
- package/lib/types/server/tool-guard.d.ts +13 -0
- package/lib/types/shared.d.ts +15 -0
- package/package.json +110 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 当前状态
|
|
2
|
+
|
|
3
|
+
更新时间:2026-09-06 14:55(Asia/Shanghai)
|
|
4
|
+
|
|
5
|
+
- 阶段:用户已授权首次发布 `0.1.0`,活动迭代为 [I005](../01-当前工作/I005-首次发布与可信发布配置/00-迭代总览.md)。公开仓库和流程验收见 [I004](../07-迭代归档/2026/I004-仓库与自动发布/00-迭代总览.md)。
|
|
6
|
+
- 当前验收依据:[I003 宿主外观与国际化](../07-迭代归档/2026/I003-宿主外观与国际化/00-迭代总览.md);基础能力见 [I001](../07-迭代归档/2026/I001-一次性旁问气泡与输入历史/00-迭代总览.md)。
|
|
7
|
+
- 目标宿主:DSH 0.1.2-rc.1,Web 客户端。
|
|
8
|
+
- 边界:只提供一次性 fork 旁问、运行时禁用全部工具及独立气泡,不占侧边栏,不创建持续侧聊。上下键输入历史已迁至 Codex UI,BTW 不再包含采集、持久化或键盘绑定代码。
|
|
9
|
+
- 迁出验证:21 项单元/运行时测试、构建通过;桌面/移动浏览器 17 项通过、1 项不适用跳过,包含 BTW 不拦截上下键、不写历史存储的回归。历史导航及旧数据迁移由 Codex UI 独立验收。
|
|
10
|
+
- 待验证:真实模型旁问及 Codex UI 样式共存。详见[待办](03-待办与阻塞.md)。
|
|
11
|
+
- `web` profile 保留 BTW 本地开发链接;按用户最新要求移除 Codex UI 加载和依赖配置,以测试原生界面。其安装目录链接仍保留,但不再配置加载。
|
|
12
|
+
- 仓库为 [MichengAI/dsh-btw](https://github.com/MichengAI/dsh-btw),默认分支 `main`;CI 与发布 dry run 均通过,源码和工作流已推送。README 包含三张实际界面截图。
|
|
13
|
+
- 按用户确认统一为 Apache-2.0,LICENSE、包元数据和徽章保持一致;默认 README 为英文,完整中文说明位于 `README.zh-CN.md`,两份文档和三张截图均纳入安装包。
|
|
14
|
+
- 版本仍为 `0.1.0`,尚未创建版本标签、GitHub Release 或发布 npm。标签发布会自动测试并生成双语 Release 和安装包;npm 发布开关关闭,待完成 Trusted Publisher 配置。详见[自动发布](../05-工程交付/01-自动发布.md)。
|
|
15
|
+
- 桌面端完整退出后再启动会补装内置插件;当前热重载不会补装。3 个未启用的目录链接因工具策略未删除。
|
|
16
|
+
- 已接入宿主浅深色令牌、locale 服务及中英文文案,目录过滤代码和本地链接产物已更新;两套宿主真实 RPC 回归通过。此前运行后端未加载隐藏修复,用户随后提供的菜单截图显示“旁问”分类,但不足以验证整个命令目录,完整隐藏验收仍见[待办](03-待办与阻塞.md)。后端 HMR 的 `root: []` 不监听插件 JS,须重新加载实际后端,不能仅刷新浏览器。
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 待办与阻塞
|
|
2
|
+
|
|
3
|
+
更新时间:2026-09-06 14:34(Asia/Shanghai)
|
|
4
|
+
|
|
5
|
+
| 事项 | 负责人 | 优先级 | 下一步与解除条件 |
|
|
6
|
+
| --- | --- | --- | --- |
|
|
7
|
+
| 启用 npm 自动发布 | 用户 | P2 | 在 npm 包设置中为 `MichengAI/dsh-btw` 的 `publish.yml` 配置 Trusted Publisher,再将仓库变量 `NPM_PUBLISH_ENABLED` 改为 `true`。当前关闭,不阻塞 GitHub Release 和安装包。步骤见[自动发布](../05-工程交付/01-自动发布.md)。 |
|
|
8
|
+
| 内部命令隐藏生效 | 用户、Codex | P1 | 文件已安装,两套真实 RPC 回归通过;目前运行中的后端仍未加载修复。等允许中断任务时重新加载实际后端,再确认菜单不含 `btw-run`、`btw-close`。仅浏览器刷新不能更新后端。 |
|
|
9
|
+
| 实际 DSH 使用验收 | 用户 | P1 | 等主任务结束后重新加载,在原输入框复测 `/btw`、关闭,以及浅深色和中英文切换;BTW 只保留旁问,上下键输入历史已移至 Codex UI,由该项目验收。真实模型行为及样式共存仍由用户反馈。 |
|
|
10
|
+
|
|
11
|
+
没有阻塞本地代码交付的外部依赖。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# I005 首次发布与可信发布配置
|
|
2
|
+
|
|
3
|
+
状态:进行中
|
|
4
|
+
负责人:Codex
|
|
5
|
+
优先级:P1
|
|
6
|
+
更新时间:2026-09-06 14:55(Asia/Shanghai)
|
|
7
|
+
|
|
8
|
+
## 目标与边界
|
|
9
|
+
|
|
10
|
+
按用户“你来发布”的授权,首次公开发布 `@michengai/dsh-btw@0.1.0`,生成对应 GitHub Release,并配置 npm Trusted Publisher。不更改插件行为、不发布额外测试版本、不重启 DSH。
|
|
11
|
+
|
|
12
|
+
## 任务与验收
|
|
13
|
+
|
|
14
|
+
- [x] 确认 npm 目标版本尚不存在、账号已登录、Apache-2.0 与中英文 README 一致。
|
|
15
|
+
- [x] 两份 README 增加 npm 安装方式,首发版本号保持 `0.1.0`。
|
|
16
|
+
- [ ] 重新构建并校验安装包,首次发布到 npm,核对线上版本与许可证。
|
|
17
|
+
- [ ] 推送 `v0.1.0` 标签,验证 GitHub Release 标题、双语正文和安装包附件。
|
|
18
|
+
- [ ] 在 npm 中配置 `MichengAI/dsh-btw`、`publish.yml`、允许 `npm publish` 的 Trusted Publisher,随后启用仓库发布变量。
|
|
19
|
+
- [ ] 刷新发布文档、状态及待办,归档本迭代。
|
|
20
|
+
|
|
21
|
+
## 已完成与待处理
|
|
22
|
+
|
|
23
|
+
准备阶段源码提交 `5b9782b` 的 CI 已通过;本次只更新发布文档。npm 首个包必须先发布才能配置 Trusted Publisher,期间保持 `NPM_PUBLISH_ENABLED=false`,避免标签工作流重复发布已存在版本。
|
|
24
|
+
|
|
25
|
+
阻塞:无。关联提交:未提交。
|
|
26
|
+
|
|
27
|
+
阅读顺序:本总览 → [自动发布](../../05-工程交付/01-自动发布.md) → [中文 README](../../../README.zh-CN.md)。
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# 自动测试与发布
|
|
2
|
+
|
|
3
|
+
更新时间:2026-09-06 14:49(Asia/Shanghai)
|
|
4
|
+
|
|
5
|
+
## 仓库与触发条件
|
|
6
|
+
|
|
7
|
+
仓库:<https://github.com/MichengAI/dsh-btw>,默认分支 `main`。
|
|
8
|
+
|
|
9
|
+
| 入口 | 行为 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| 推送 `main` 或提交 Pull Request | Node.js 22、24 类型检查、单元测试、真实宿主运行时测试和构建;Node.js 24 额外执行 Chromium 桌面及移动端回归。 |
|
|
12
|
+
| Actions → 发布 → Run workflow | 默认 `dry_run=true`,执行相同测试、版本说明校验和打包,上传工作流产物,不创建 Release、不发布 npm。 |
|
|
13
|
+
| 推送 `v*` 标签 | 测试通过后校验版本、生成双语说明、打包并创建 GitHub Release;npm 发布受仓库变量控制。 |
|
|
14
|
+
|
|
15
|
+
正式发布要求标签严格等于 `v` 加 `package.json` 版本。`CHANGELOG.zh-CN.md` 和 `CHANGELOG.md` 必须各自包含唯一且非空的同版本章节。Release 标题为版本标签,正文为中文在前、英文在后,与两份 CHANGELOG 对应章节一致。
|
|
16
|
+
|
|
17
|
+
## npm Trusted Publishing
|
|
18
|
+
|
|
19
|
+
发布工作流为 `.github/workflows/publish.yml`,使用 GitHub OIDC,不在仓库保存 npm 令牌。
|
|
20
|
+
|
|
21
|
+
新仓库默认设置 `NPM_PUBLISH_ENABLED=false`:GitHub Release 和安装包可独立发布。完成 npm 端设置后再启用:
|
|
22
|
+
|
|
23
|
+
1. 确认 npm 包 `@michengai/dsh-btw` 已创建并归当前发布者管理;尚未创建时,按 npm 当前要求先完成首次发布。
|
|
24
|
+
2. 在 npm 包设置的 Trusted Publisher 中选择 GitHub Actions,填写组织或用户名 `MichengAI`、仓库 `dsh-btw`、工作流文件 `publish.yml`,不指定 Environment。允许的操作需要启用直接 `npm publish`;2026-09-03 后新建连接默认只允许 `npm stage publish`,与本工作流不匹配。
|
|
25
|
+
3. 在 GitHub 仓库 Actions Variables 中将 `NPM_PUBLISH_ENABLED` 改为字符串 `true`。
|
|
26
|
+
|
|
27
|
+
启用后通过 Node.js 24 自带的新版 npm 执行 `npm publish <安装包> --access public --provenance`。首次启用前确认 npm 支持当前 CLI 的 OIDC。不要以任意新增版本号作为测试手段。
|
|
28
|
+
|
|
29
|
+
官方 [Trusted Publishing](https://docs.npmjs.com/trusted-publishers) 要求在已存在包的设置中配置;[Staged Publishing](https://docs.npmjs.com/staged-publishing/) 也明确不支持全新包。首次公开发布会占用版本号,需先确认发布范围;不能用暂存发布替代新包初始化。
|
|
30
|
+
|
|
31
|
+
同一 npm 版本不能覆盖。若 npm 已成功发布而后续 Release 步骤失败,可暂时关闭 npm 发布开关,再重跑标签工作流,恢复 GitHub Release 和附件;不要改写已经共享的标签。
|
|
32
|
+
|
|
33
|
+
## 发布步骤
|
|
34
|
+
|
|
35
|
+
先更新 `package.json`、锁文件及两份 CHANGELOG,完成审核和提交推送。推荐先在 Actions 手动运行默认的 dry run,确认产物内容,再创建标签。
|
|
36
|
+
|
|
37
|
+
```powershell
|
|
38
|
+
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
39
|
+
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
40
|
+
|
|
41
|
+
$releaseVersion = (Get-Content package.json -Raw -Encoding UTF8 | ConvertFrom-Json).version
|
|
42
|
+
git tag "v$releaseVersion"
|
|
43
|
+
git push origin "v$releaseVersion"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
工作流测试失败时不会进入发布阶段。`scripts/check-package.mjs` 校验实际 tar 包中的入口、类型、截图、更新日志以及文件范围。
|
|
47
|
+
|
|
48
|
+
## 提交与产物范围
|
|
49
|
+
|
|
50
|
+
提交源码、测试、浏览器模拟宿主、构建配置、锁文件、Actions、项目文档和 README 截图。模拟宿主 `preview` 是浏览器测试的依赖,并非用户独立使用页面。
|
|
51
|
+
|
|
52
|
+
`node_modules`、`lib`、`dist`、`artifacts`、测试报告、缓存、日志、环境变量文件、备份和 `.tgz` 不进入 Git。截图交付物位于 `assets/screenshots`;自动截图保存在被忽略的 `artifacts`,CI 失败时作为工作流证据保留 7 天。
|
|
53
|
+
|
|
54
|
+
本地与 CI 均使用锁文件中的官方 npm 下载地址,沿用项目的 `legacy-peer-deps=true`。CI 通过 `DSH_RUNTIME_ROOT` 指向开发依赖中的真实运行时,不依赖机器预装的 DSH,也不读取模型凭据。
|
|
55
|
+
|
|
56
|
+
## 恢复
|
|
57
|
+
|
|
58
|
+
仓库代码通过正常修复提交恢复,不强制推送。停止 npm 发布时将 `NPM_PUBLISH_ENABLED` 设为 `false`。已发布 npm 版本不能通过代码回退覆盖,修复后发布新版本;已安装客户端可按需要安装此前可用版本。
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# I001 一次性旁问气泡与输入历史
|
|
2
|
+
|
|
3
|
+
状态:已完成
|
|
4
|
+
负责人:Codex
|
|
5
|
+
优先级:P1
|
|
6
|
+
更新时间:2026-09-06 11:33(Asia/Shanghai)
|
|
7
|
+
|
|
8
|
+
## 目标与边界
|
|
9
|
+
|
|
10
|
+
独立实现 DSH BTW 插件并交付本地安装包。每次提问使用 fork 子代理,继承已完成回合;空白名单与执行层 guard 共同限制工具。气泡使用输入框上方的 list slot,不接管侧边栏。上下键召回本地输入历史。
|
|
11
|
+
|
|
12
|
+
不包含多轮侧聊、侧聊恢复、自动回填主会话、持久子会话归档、真实凭据配置修改或发布。
|
|
13
|
+
|
|
14
|
+
## 任务
|
|
15
|
+
|
|
16
|
+
- [x] 后端请求、权限与清理。
|
|
17
|
+
- [x] 独立气泡与宿主 RPC 接入。
|
|
18
|
+
- [x] 输入历史、草稿和 IME 边界。
|
|
19
|
+
- [x] 自动测试、浏览器验证、打包。
|
|
20
|
+
|
|
21
|
+
## 设计依据
|
|
22
|
+
|
|
23
|
+
- JasonQQ/dsh-btw-plugin:借鉴 commands + 一次性 fork 的最小职责划分。
|
|
24
|
+
- kaieye/dsh-AIR:借鉴取消、迟到结果与关闭失败保留状态;不复用其持久侧会话和侧栏。
|
|
25
|
+
- narumiruna/pi-extensions/packages/pi-btw:借鉴固定上下文、取消后的结果检查、默认不回写主上下文。其自身为直接模型调用,与本项目 fork 路线不同。
|
|
26
|
+
- 以实际安装的 DSH 0.1.2-rc.1 类型及实现为准;不复制第三方实现。
|
|
27
|
+
|
|
28
|
+
## 验收
|
|
29
|
+
|
|
30
|
+
20 项单元及真实宿主运行时测试通过。9 项浏览器测试通过,1 项窄屏工作区切换测试因预览不展示该入口而跳过。类型检查、构建、服务端产物导入及客户端产物加载通过。详细范围见[验收记录](01-验收记录.md)。
|
|
31
|
+
|
|
32
|
+
## 阻塞与待处理
|
|
33
|
+
|
|
34
|
+
没有本地交付阻塞。真实模型与用户 DSH 界面的联调转入[项目待办](../../../00-交接入口/03-待办与阻塞.md),不将隔离测试描述为实际安装验证。
|
|
35
|
+
|
|
36
|
+
## 已完成
|
|
37
|
+
|
|
38
|
+
完成请求身份隔离、90 秒超时、启动与取消竞态、关闭失败重试、迟到答案抑制、草稿与 IME 保护、工作区历史隔离和容量裁剪。
|
|
39
|
+
|
|
40
|
+
真实 ToolRuntime 验证空白名单仍保留子作用域工具和 `run_code`,新增 guard 拒绝这些执行且不影响主任务。真实 Cordis 验证子代理清理完成后才卸载保护。
|
|
41
|
+
|
|
42
|
+
关联提交:未提交。
|
|
43
|
+
|
|
44
|
+
阅读顺序:本总览 → [验收记录](01-验收记录.md) → [README](../../../../README.md)。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# I001 验收记录
|
|
2
|
+
|
|
3
|
+
更新时间:2026-09-06 11:33(Asia/Shanghai)
|
|
4
|
+
|
|
5
|
+
## 环境与结果
|
|
6
|
+
|
|
7
|
+
- Windows PowerShell、Node.js 24.20.0,目标宿主 DSH 0.1.2-rc.1。
|
|
8
|
+
- `npm run check`:类型检查、20 项测试及构建通过。
|
|
9
|
+
- 浏览器测试:Microsoft Edge,1280×900 与 390×844;累计 9 项通过,1 项跳过。最终补充的 2 项构建包装配测试单独复测通过;其他 7 项在前次完整运行通过。
|
|
10
|
+
- `npm audit --registry=https://registry.npmjs.org --json`:报告已知漏洞 0。镜像不支持审计端点,已改用官方源完成查询。
|
|
11
|
+
- 服务端构建产物可直接导入,客户端构建产物可按宿主 `window.__ModuleLoader__.load` 协议加载;外部 React 与 JSX runtime 使用真实 React 18 运行时。
|
|
12
|
+
- 本地交付包:项目 `artifacts/michengai-dsh-btw-0.1.0.tgz`。未发布或安装到用户 profile。
|
|
13
|
+
|
|
14
|
+
## 验证范围
|
|
15
|
+
|
|
16
|
+
| 范围 | 证据 |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| 请求与清理 | 7 项 jobs 测试:正常释放、关闭、取消竞态、失败重试、身份隔离等 |
|
|
19
|
+
| 气泡状态 | 4 项 bubbles 测试:独立更新、迟到结果丢弃、关闭重试、同步异常恢复 |
|
|
20
|
+
| 历史 | 5 项 history 测试:工作区、上下边界、草稿、损坏存储、容量裁剪与重读 |
|
|
21
|
+
| 工具限制 | 2 项 guard 单测;真实 ToolRuntime 验证自有工具及 `run_code` 被拒绝、主任务工具可执行 |
|
|
22
|
+
| 热卸载 | 真实 Cordis 验证清理期间 guard 不被提前卸载 |
|
|
23
|
+
| 浏览器 | 气泡位置、Markdown 代码块、复制、折叠、关闭、IME、历史持久化、工作区切换与构建包加载 |
|
|
24
|
+
| 视觉 | 桌面及手机截图已人工检查;无横向溢出,气泡不覆盖输入框;截图位于项目 artifacts 目录 |
|
|
25
|
+
|
|
26
|
+
同步请求异常与历史超量先由新增测试复现失败,再修复为通过。预览因 Node 专属 crypto 导入空白的问题已改为 Node 22+ 和浏览器共同支持的 Web Crypto。构建包装配测试曾遗漏宿主支持的 `react/jsx-runtime`,补齐真实运行时后通过。
|
|
27
|
+
|
|
28
|
+
## 限制与恢复
|
|
29
|
+
|
|
30
|
+
真实宿主只在内存中装配工具运行时和 Cordis,未调用真实模型。浏览器使用模拟宿主与 textarea;真实 Lexical 输入框、模型上下文及已安装侧栏共存待联调。关闭释放运行资源,不承诺删除宿主审计日志。
|
|
31
|
+
|
|
32
|
+
停用方式见 README:移除 Cordis patch 并重启宿主;历史仅存在浏览器 `michengai.btw.history.v1`,停用不删除主会话记录。此交付尚未修改宿主配置,无配置回滚需求。
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# I002 实际 DSH 插件接入
|
|
2
|
+
|
|
3
|
+
状态:已完成
|
|
4
|
+
负责人:Codex
|
|
5
|
+
优先级:P1
|
|
6
|
+
更新时间:2026-09-06 12:26(Asia/Shanghai)
|
|
7
|
+
|
|
8
|
+
## 目标与边界
|
|
9
|
+
|
|
10
|
+
用户明确要求在实际 DSH 内使用,不接受模拟独立页面作为功能交付。把已有插件装入实际 Web profile,使用原聊天输入框及现有侧栏。无需将 preview 代码部署到 DSH。
|
|
11
|
+
|
|
12
|
+
## 任务与已完成
|
|
13
|
+
|
|
14
|
+
- [x] 确认正在运行的 DSH Codex Desktop 使用 `.dsh/profiles/web`,已装 `dsh-better-sidebar`。
|
|
15
|
+
- [x] 核对官方 `dsh plugin --profile web add` 自动安装及 bundle 装配机制,版本 0.1.2-rc.1。
|
|
16
|
+
- [x] README 优先说明真实 DSH 安装入口,明确模拟页面仅供开发测试。
|
|
17
|
+
- [x] 安装插件并核对宿主重载、装配健康状态。
|
|
18
|
+
- [x] 按用户“安装到本地,我自己测试”的要求交接实际使用验收。
|
|
19
|
+
- [x] 修复用户截图中的客户端命名空间注入报错与气泡宽度,重新构建并验证本地安装产物,见[修复记录](02-客户端注入与气泡宽度修复.md)。
|
|
20
|
+
|
|
21
|
+
## 阻塞与待处理
|
|
22
|
+
|
|
23
|
+
用户已明确要求安装到本地并自行测试。实际交互验收转入[项目待办](../../../00-交接入口/03-待办与阻塞.md),不阻塞本次安装交付。
|
|
24
|
+
|
|
25
|
+
随后用户要求先卸载其他插件避免干扰。已完成启用项及依赖移除,见[测试环境隔离](01-测试环境隔离.md);该记录描述当前测试配置,上述安装验收保留为执行证据。
|
|
26
|
+
|
|
27
|
+
实际 DSH 地址有认证;独立浏览器未继承桌面端认证,无法直接打开。未读取凭据或绕过认证。
|
|
28
|
+
|
|
29
|
+
## 验收
|
|
30
|
+
|
|
31
|
+
当前 `web` profile 新增 `@michengai/dsh-btw` 依赖及 bundle,`node_modules/@michengai/dsh-btw` 通过 Windows Junction 指向本仓库。沿用现有本地插件的 `link:` 约定;`pnpm-lock.yaml` 同步了对应 importer。
|
|
32
|
+
|
|
33
|
+
常规 tarball 安装在复核既有锁文件时,被 pnpm 11.25 的最小发布时间策略拦截,涉及 3 个既有插件。本次未调整策略、未重装被拦截的包,改为链接本次自主开发的代码;原有 10 个依赖版本均保持一致。
|
|
34
|
+
|
|
35
|
+
DSH 在 2026-09-06 12:07:14(Asia/Shanghai)自动重载,12:07:19 报告 `healthy`。从真实 profile 解析并导入插件成功,`apply` 为函数,依赖服务为 commands、subagents、tools。
|
|
36
|
+
|
|
37
|
+
实际 UI 与模型由用户测试,未宣称已经完成。功能只使用聊天输入框上方的气泡,不新增或改动侧栏。
|
|
38
|
+
|
|
39
|
+
## 恢复方式
|
|
40
|
+
|
|
41
|
+
安装前 package.json、pnpm-lock.yaml、pnpm-workspace.yaml 备份保存在项目 `artifacts/profile-backup-20260906-1205`,该目录已忽略版本控制。停用时从 profile bundle 移除本插件即可触发重载;完整卸载使用 README 的官方 remove 命令。若 pnpm 仍因既有包策略阻塞,应仅撤回本插件依赖、锁文件 importer 与 Junction,保留之后的其他配置改动,禁止递归删除 Junction 指向的源仓库。
|
|
42
|
+
|
|
43
|
+
关联提交:未提交。
|
|
44
|
+
|
|
45
|
+
阅读顺序:本总览 → [README](../../../../README.md) → [当前状态](../../../00-交接入口/02-当前状态.md)。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 测试环境隔离
|
|
2
|
+
|
|
3
|
+
更新时间:2026-09-06 13:32(Asia/Shanghai)
|
|
4
|
+
|
|
5
|
+
## 用户要求与结果
|
|
6
|
+
|
|
7
|
+
用户要求“把其他插件先卸载了,避免干扰”。在当前 Web profile 移除以下 10 个第三方插件的依赖和 bundle:
|
|
8
|
+
|
|
9
|
+
- @michengai/dsh-agency-agents
|
|
10
|
+
- @michengai/dsh-archive-manager
|
|
11
|
+
- @michengai/dsh-automation
|
|
12
|
+
- @michengai/dsh-codex-ui
|
|
13
|
+
- @michengai/dsh-im-connect
|
|
14
|
+
- @michengai/dsh-skills-manager
|
|
15
|
+
- dsh-better-sidebar
|
|
16
|
+
- dsh-context
|
|
17
|
+
- dsh-mcp-connector
|
|
18
|
+
- dshmarket
|
|
19
|
+
|
|
20
|
+
隔离完成时 dependencies 仅有本地链接的 @michengai/dsh-btw。bundle 仅有 @deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app、dsh-desktop-bridge、@michengai/dsh-btw。未删除会话、凭据、插件业务数据或源码仓库。
|
|
21
|
+
|
|
22
|
+
2026-09-06 用户要求安装 Codex UI 测试样式兼容:恢复 `@michengai/dsh-codex-ui` 0.2.103 的本地链接依赖、bundle 和锁文件条目,复用已有 Junction 与构建产物。当前第三方启用项为 BTW 和 Codex UI,其余保持停用;实际样式兼容由用户测试。恢复前状态可通过移除这一个包的依赖和 bundle、锁文件条目还原,无需删除源码及偏好数据。
|
|
23
|
+
|
|
24
|
+
配置变更后桌面端于 13:31:43 自动重载,13:31:46 报告 healthy。Codex UI 服务端、客户端 JS 语法检查通过,安装链接与源码目录的客户端构建哈希一致;健康状态不代替样式兼容验收。
|
|
25
|
+
|
|
26
|
+
## 执行与验证
|
|
27
|
+
|
|
28
|
+
官方 `dsh plugin --profile web remove` 因 pnpm 11.25 检查既有锁文件而触发 minimumReleaseAge 错误。沿用桌面端 `src/plugin-seed.ts` 已有的卸载参数,对本次 remove 传入 `--config.minimumReleaseAge=0`,并使用 `--config.ignore-scripts=true --config.offline=true`。没有新增包下载或安装,也未修改持久策略;pnpm-workspace.yaml 与备份的 SHA256 一致。
|
|
29
|
+
|
|
30
|
+
依赖、bundle、锁文件已核对。7 个 registry 插件目录已移除;另外 3 个本地插件(agency-agents、automation、codex-ui)的 Junction 残留,删除操作被工具自动审批 `blocked by policy` 拦截,未改用其他方式重试。它们不在依赖或启用列表中,不参与当前 profile 装配。
|
|
31
|
+
|
|
32
|
+
DSH 于 2026-09-06 12:15:24(Asia/Shanghai)自动重载,12:15:27 报告 healthy。实际 BTW 界面和模型效果由用户自行测试。
|
|
33
|
+
|
|
34
|
+
## 恢复与持续性
|
|
35
|
+
|
|
36
|
+
卸载前的 package.json、pnpm-lock.yaml、pnpm-workspace.yaml、cordis.patch.yml 备份在项目 `artifacts/profile-backup-before-isolation-20260906`,已被 .gitignore 忽略。恢复需要按备份版本重新安装 7 个 registry 包并恢复 3 个本地链接及其依赖、bundle,不是只覆盖配置文件;恢复前应保留之后的新改动。
|
|
37
|
+
|
|
38
|
+
当前桌面端每次完整启动都会补装缺少的内置社区插件。卸载后的服务热重载不执行补装,因此当前环境保持隔离;若完整退出桌面端再启动,应重新核对插件清单。没有为此改动桌面端代码。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 客户端注入与气泡宽度修复
|
|
2
|
+
|
|
3
|
+
更新时间:2026-09-06 12:26(Asia/Shanghai)
|
|
4
|
+
|
|
5
|
+
## 问题与根因
|
|
6
|
+
|
|
7
|
+
用户在真实 DSH 提交旁问时,气泡显示 `Error: cannot get property "remote.commands" without inject`。客户端仅声明 `remote`,缺少 Cordis 对命名空间服务要求的独立 `remote.commands` 注入。官方命令客户端也显式声明这两个服务。此前普通对象模拟没有覆盖真实注入权限检查。
|
|
8
|
+
|
|
9
|
+
截图中气泡横跨窗口。插件挂载在输入区域 dock,但未应用宿主输入框的宽度限制与水平留白。
|
|
10
|
+
|
|
11
|
+
## 修复
|
|
12
|
+
|
|
13
|
+
- `src/client/index.tsx` 补充 `remote.commands` 注入声明。
|
|
14
|
+
- `src/client/styles.ts` 使用宿主的 `--dsh-composer-card-max-width` 和 `--dsh-composer-side-clearance` 限制宽度并居中。
|
|
15
|
+
- `tests/client-injection.test.ts` 用真实 Cordis Context、Service 与独立提供命令服务的插件验证提交路径。保留属性读取以触发注入检查;不能使用绕过检查的 `ctx.get()`。
|
|
16
|
+
- 浏览器测试检查构建包注入声明,以及桌面和移动端气泡与输入框的宽度、水平位置。
|
|
17
|
+
|
|
18
|
+
## 验证与交付
|
|
19
|
+
|
|
20
|
+
修复前真实 Cordis 测试无法执行命令;旧样式的桌面与移动端宽度差分别为 444px、32px。
|
|
21
|
+
|
|
22
|
+
修复后 `npm run check` 通过:类型检查、21 项单元及运行时测试、构建成功。`npm run test:browser` 为 11 项通过、1 项跳过;跳过项是模拟窄屏中未显示入口的工作区切换。已检查桌面与移动端截图,没有发现文字重叠或横向溢出。
|
|
23
|
+
|
|
24
|
+
实际 `web` profile 的 `node_modules/@michengai/dsh-btw` 仍通过 Junction 指向本仓库。已核对安装路径和仓库 `lib/client.js` 的 SHA-256 一致,均为 `B53BB4D854A7E6CC48EDC6311362A11F3FE16BDD713E9DCB5FD86FFD7098015F`,并确认产物包含上述修复。
|
|
25
|
+
|
|
26
|
+
未重启桌面端或当前主任务,也未执行真实模型问答。已核对桌面端 `shell-actions.ts` 和 `main.ts`:“重新加载”(Ctrl+R)会调用 `recycleDshForPluginUpdate()` 停止并重启后台服务,因此应等当前主任务结束后再重新加载并复测 `/btw`,不能将该操作描述为单纯页面刷新。本记录不把模拟浏览器测试视为实际模型验收。仍需用户完成的事项统一保留在[项目待办](../../../00-交接入口/03-待办与阻塞.md)。
|
|
27
|
+
|
|
28
|
+
关联提交:未提交。
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# I003 宿主外观与国际化
|
|
2
|
+
|
|
3
|
+
状态:已完成
|
|
4
|
+
负责人:Codex
|
|
5
|
+
优先级:P1
|
|
6
|
+
更新时间:2026-09-06 13:28(Asia/Shanghai)
|
|
7
|
+
|
|
8
|
+
## 目标与边界
|
|
9
|
+
|
|
10
|
+
修复用户截图中气泡与宿主风格不一致、浅色界面出现深色气泡、英文界面仍显示中文的问题。交付实际 DSH 插件,不增加独立使用页面,不修改侧栏、一次性子代理和工具禁用边界。
|
|
11
|
+
|
|
12
|
+
## 任务与已完成
|
|
13
|
+
|
|
14
|
+
- [x] 核对官方主题和 locale 服务实现,采用已安装同版本契约。
|
|
15
|
+
- [x] 移除系统 `prefers-color-scheme` 和不存在的 `dsw-alias-background-*` 变量,改用宿主语义令牌。
|
|
16
|
+
- [x] 去掉绿色左边框,统一中性边框、12px 圆角、字体、圆形工具按钮及正文留白。展开时向下收起,折叠时向上展开。
|
|
17
|
+
- [x] 注册 `michengai.btw` 中英文字典,slot 声明 locale 并使用宿主注入的 `t`;输入触发器使用实时绑定的翻译。
|
|
18
|
+
- [x] 覆盖按钮、状态、命令说明、输入校验、复制/关闭失败,以及服务器超时、取消、清理等提示;服务器沿用请求语言,不翻译模型和外部原始错误。
|
|
19
|
+
- [x] 重新构建,并核对本地 web profile 链接中的客户端、服务端文件与仓库哈希一致。
|
|
20
|
+
- [x] 完成 `btw-run`、`btw-close` 命令目录过滤代码。宿主0.1.2-rc.1没有hidden选项,使用可卸载兼容层,仅过滤这两个名称,不修改find/execute及宿主文件;真实菜单生效尚待后端重新加载,承接到项目待办。
|
|
21
|
+
- [x] 分类标题补齐国际化:中文“旁问”、英文“Side Questions”,`/btw`命令名不变。宿主将来源名作为分类标题且无独立标题字段,插件随语言变化注销旧来源并注册翻译后的名称,不改宿主字典。真实LocaleRuntime测试验证切换后只保留一个来源,桌面及移动语言交互回归2项通过。
|
|
22
|
+
|
|
23
|
+
## 验收
|
|
24
|
+
|
|
25
|
+
- 13:28 补充排查:用户截图及真实 Edge 菜单仍包含内部命令,此前仅直接调用 CommandRuntime,不能证明实际菜单已生效。现已补测两套已安装宿主的真实 Typert Gateway RPC,列表隐藏、内部执行、卸载恢复均通过。运行中的桌面及独立 Web 后端均早于修复构建启动,`patchReload: live` 创建的 HMR 使用 `root: []`,不监听插件 JS;文件哈希一致不能作为运行代码已更新的证据。未擅自重启,实际菜单验收见[项目待办](../../../00-交接入口/03-待办与阻塞.md)。
|
|
26
|
+
|
|
27
|
+
- 类型检查和构建通过,25 项单元及运行时测试通过;新增真实CommandRuntime用例覆盖内部命令隐藏、提交/关闭仍可执行、其他命令保留及卸载恢复。
|
|
28
|
+
- 浏览器18项中17项通过、1项不适用跳过;最终针对链接颜色修复补跑4项主题用例全部通过,其余13项此前已通过。
|
|
29
|
+
- 新增主题检查覆盖系统 light/dark 与宿主浅色/深色交叉组合,桌面1280×900、移动390×844;正文、辅助图标、链接对比度均不低于4.5:1。
|
|
30
|
+
- 使用真实官方 LocaleRuntime 检查注册、注入与命令提示切换;验证气泡可见文案即时切换、错误语言、模型原文保留。
|
|
31
|
+
- 浏览器主题用例无 pageerror;界面截图及设计复核见[视觉验收](01-视觉验收.md)。
|
|
32
|
+
|
|
33
|
+
客户端 SHA-256:`257D7174D6FCF50F8F200414951F7357AC48654655DCE8D10B08463AC836A425`。
|
|
34
|
+
|
|
35
|
+
服务端 SHA-256:`49E9FA2BA1FA7B92685A2DA90564DFE46F38CFAFF5629DCBC0F9180490A6909B`。
|
|
36
|
+
|
|
37
|
+
## 阻塞与待处理
|
|
38
|
+
|
|
39
|
+
没有阻塞本地代码交付的事项。未重启用户主任务;完整 DSH 界面和真实模型复测统一承接到[项目待办](../../../00-交接入口/03-待办与阻塞.md)。本次验证使用真实主题/语言模块与模拟会话,不将测试页称为完整宿主验收。
|
|
40
|
+
|
|
41
|
+
## 恢复方式
|
|
42
|
+
|
|
43
|
+
本次未迁移历史数据或改变 profile 启用项。需要停用时,沿用 [I002 的恢复方式](../I002-实际DSH插件接入/00-迭代总览.md)。`btw-run` 新增可选 locale,省略仍兼容旧请求;返回结构和关闭命令不变。
|
|
44
|
+
|
|
45
|
+
关联提交:未提交。
|
|
46
|
+
|
|
47
|
+
阅读顺序:本总览 → [视觉验收](01-视觉验收.md) → [README](../../../../README.md)。
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# 视觉验收
|
|
2
|
+
|
|
3
|
+
更新时间:2026-09-06 12:56(Asia/Shanghai)
|
|
4
|
+
|
|
5
|
+
## 比较依据与限制
|
|
6
|
+
|
|
7
|
+
源图:用户在该迭代提供的浅色界面截图,2504×1322像素;源界面的CSS视口和设备倍率未知。参考对象为其中原生DSH的浅色表面、边框、字号及输入区域。历史源图保留在本地,不随仓库发布。
|
|
8
|
+
|
|
9
|
+
实现截图位于本地忽略目录 `artifacts/btw-theme-{light,dark}-{desktop,mobile}.png`,桌面1280×900、移动390×844,CSS尺寸与图片像素一致,deviceScaleFactor=1。另有 `btw-english-desktop.png` 和 `btw-english-mobile.png`;这些文件可通过浏览器测试重新生成,不随仓库发布。
|
|
10
|
+
|
|
11
|
+
已将用户源图和实现截图放在同次图像检查输入中查看整体及气泡区域。源图处于回答中,实现主题截图处于回答完成;正文和外壳为模拟数据,因此只比较本次气泡的风格及主题适配,不声称全页、行高或内容逐像素复刻。等待态和语言切换另由浏览器交互断言验证。
|
|
12
|
+
|
|
13
|
+
## 五项检查
|
|
14
|
+
|
|
15
|
+
| 项目 | 结论 |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| 字体与层级 | 使用宿主字体,问题13px/500,正文13px/1.7,辅助状态13px;窄屏长文本换行,未发现重叠。 |
|
|
18
|
+
| 间距与布局 | 保持输入框对齐,移除绿色强调边;12px圆角与官方输入dock相邻面板规范一致。正文不再额外缩进到图标下方。 |
|
|
19
|
+
| 颜色与令牌 | 背景、文本、边框、代码块、错误均使用宿主变量;系统主题与宿主选择相反时仍正确。正文、辅助图标、链接达到4.5:1。 |
|
|
20
|
+
| 图像与图标 | 气泡没有需要生成的位图,沿用Lucide线性图标;按钮尺寸固定,未使用替代插画或手绘图标。 |
|
|
21
|
+
| 文案与内容 | 提示和按钮接入宿主中英文字典;回答内容及外部原始错误保持原文。服务器提示按请求时的界面语言固定。 |
|
|
22
|
+
|
|
23
|
+
## 修正过程
|
|
24
|
+
|
|
25
|
+
1. 原始P1:宿主浅色而气泡深色,前景对比不足;移除独立系统主题判断,改为宿主令牌。
|
|
26
|
+
2. 原始P2:绿色强调边与宿主中性组件不协调;改为均匀细边框和宿主文字色。
|
|
27
|
+
3. 原始P1:英文界面显示中文提示;接入locale服务并验证即时切换。
|
|
28
|
+
4. 验证发现图标颜色过渡与背景切换不同步;移除图标颜色过渡,重新测试通过。
|
|
29
|
+
5. 验证发现默认品牌蓝的小字号链接对比度约4.23:1;采用正文色加下划线,补跑4项主题用例通过并重新查看截图。
|
|
30
|
+
|
|
31
|
+
## 结果
|
|
32
|
+
|
|
33
|
+
final result: passed
|
|
34
|
+
|
|
35
|
+
该结果限本次气泡组件及已列出的主题/语言状态,没有发现待修复P0/P1/P2问题。完整真实DSH和真实模型验收仍由用户进行,不能用此结论替代。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# I004 仓库与自动发布
|
|
2
|
+
|
|
3
|
+
状态:已完成
|
|
4
|
+
负责人:Codex
|
|
5
|
+
优先级:P1
|
|
6
|
+
更新时间:2026-09-06 14:49(Asia/Shanghai)
|
|
7
|
+
|
|
8
|
+
## 目标与边界
|
|
9
|
+
|
|
10
|
+
创建公开仓库 `MichengAI/dsh-btw`,提交并推送已有插件,建立 CI 和版本标签发布流程。不提交本地无用文件,不直接发布版本或重启 DSH。
|
|
11
|
+
|
|
12
|
+
## 任务与验收
|
|
13
|
+
|
|
14
|
+
- [x] 补齐 Git 忽略规则,只保留源码、测试、配置、文档和三张 README 截图。
|
|
15
|
+
- [x] 配置 Node.js 22、24 检查及 Chromium 桌面、移动端回归。
|
|
16
|
+
- [x] 补齐真实宿主测试依赖,锁文件下载地址使用官方 npm 源。
|
|
17
|
+
- [x] 新增版本标签校验、双语更新日志提取、安装包清单检查和 GitHub Release 工作流。
|
|
18
|
+
- [x] 创建公开仓库、提交推送,并确认 GitHub CI 与手动 dry run 通过。
|
|
19
|
+
- [x] 复核提交清单,确认本地备份、日志、缓存和安装包未上传。
|
|
20
|
+
|
|
21
|
+
## 已完成与待处理
|
|
22
|
+
|
|
23
|
+
本地 21 项单元及运行时测试、2 项发布脚本测试、类型检查和构建通过;浏览器回归 17 项通过,1 项移动端工作区按钮场景不适用跳过。
|
|
24
|
+
|
|
25
|
+
公开仓库:<https://github.com/MichengAI/dsh-btw>。首次提交共 60 个文件,其中正式截图 3 张;43 个本地文档链接、忽略规则及凭据模式扫描通过。
|
|
26
|
+
|
|
27
|
+
- [GitHub CI](https://github.com/MichengAI/dsh-btw/actions/runs/34016743132):Node.js 22、24 均通过,含真实运行时与 Chromium 浏览器回归。
|
|
28
|
+
- [发布 dry run](https://github.com/MichengAI/dsh-btw/actions/runs/34016748284):测试、双语说明提取、构建、打包、安装包清单校验及 Artifact 上传全部通过。
|
|
29
|
+
- 下载云端 Artifact 再次验证:安装包含 33 个文件,双语说明与本地 CHANGELOG 提取结果哈希一致。
|
|
30
|
+
- 没有推送版本标签,没有创建正式 Release,也没有执行 npm 发布。
|
|
31
|
+
|
|
32
|
+
npm Trusted Publishing 需在 npm 包设置完成信任关系后启用,仓库变量 `NPM_PUBLISH_ENABLED=false`;不阻塞 GitHub Release 和安装包流程。启用事项由[项目待办](../../../00-交接入口/03-待办与阻塞.md)承接,有效流程见[自动发布](../../../05-工程交付/01-自动发布.md)。
|
|
33
|
+
|
|
34
|
+
阻塞:无。关联提交:`0dd8ff7`(插件与发布自动化);归档记录通过后续文档提交补齐。
|
|
35
|
+
|
|
36
|
+
14:49 补充:按用户要求补齐完整中英文 README,并按明确确认统一采用 Apache-2.0。同步 LICENSE、package.json、锁文件、徽章及双语 CHANGELOG;安装包校验新增中文 README 必选项。两份 README 的 26 个本地链接、截图一致性、许可证一致性、2 项发布说明测试和 34 文件安装包检查通过。npm 账号已登录,但包尚不存在;官方 staged publishing 不支持新包,首次公开发布正在等待用户确认,期间保持自动发布开关关闭。
|
|
37
|
+
|
|
38
|
+
阅读顺序:本总览 → [自动发布](../../../05-工程交付/01-自动发布.md) → [README](../../../../README.md)。
|