@senguoyun/dsh-arkme 0.1.56 → 0.1.58
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/docs/harness-activity.md +18 -0
- package/docs/harness-quick-create.md +13 -0
- package/docs/harness-session-dropdown.md +65 -0
- package/docs/harness-sidebar-settings.md +9 -0
- package/docs/harness-trajectory-navigation.md +28 -0
- package/lib/client.js +972 -239
- package/lib/client.js.map +1 -1
- package/lib/harness-sidebar-client.js +840 -0
- package/lib/harness-trajectory-client.js +254 -0
- package/lib/index.js +70 -3
- package/lib/persistent-extension.js +1 -1
- package/lib/{persistent-runtime-Bsk6in2a.js → persistent-runtime-BnDj8qcY.js} +194 -15
- package/lib/types/client/ArkmePersistentShell.d.ts.map +1 -1
- package/lib/types/client/ArkmeQuickAdd.d.ts +5 -2
- package/lib/types/client/ArkmeQuickAdd.d.ts.map +1 -1
- package/lib/types/client/ArkmeSidebar.d.ts +6 -1
- package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
- package/lib/types/client/ArkmeSourceBreadcrumb.d.ts +9 -2
- package/lib/types/client/ArkmeSourceBreadcrumb.d.ts.map +1 -1
- package/lib/types/client/ArkmeVirtualWorkspace.d.ts +3 -1
- package/lib/types/client/ArkmeVirtualWorkspace.d.ts.map +1 -1
- package/lib/types/client/DeepSeekHarnessSurface.d.ts +2 -1
- package/lib/types/client/DeepSeekHarnessSurface.d.ts.map +1 -1
- package/lib/types/client/frame-menu-dismissal.d.ts +3 -0
- package/lib/types/client/frame-menu-dismissal.d.ts.map +1 -0
- package/lib/types/client/harness-activity-reporter.d.ts +4 -0
- package/lib/types/client/harness-activity-reporter.d.ts.map +1 -0
- package/lib/types/client/harness-activity.d.ts +49 -0
- package/lib/types/client/harness-activity.d.ts.map +1 -0
- package/lib/types/client/harness-new-session.d.ts +3 -0
- package/lib/types/client/harness-new-session.d.ts.map +1 -0
- package/lib/types/client/harness-session-dropdown.d.ts +9 -0
- package/lib/types/client/harness-session-dropdown.d.ts.map +1 -0
- package/lib/types/client/harness-session-hover.d.ts +3 -0
- package/lib/types/client/harness-session-hover.d.ts.map +1 -0
- package/lib/types/client/harness-session-list-default.d.ts +12 -0
- package/lib/types/client/harness-session-list-default.d.ts.map +1 -0
- package/lib/types/client/harness-session-menu-bridge.d.ts +16 -0
- package/lib/types/client/harness-session-menu-bridge.d.ts.map +1 -0
- package/lib/types/client/harness-session-summary.d.ts +28 -0
- package/lib/types/client/harness-session-summary.d.ts.map +1 -0
- package/lib/types/client/harness-sidebar-client.d.ts +5 -0
- package/lib/types/client/harness-sidebar-client.d.ts.map +1 -0
- package/lib/types/client/harness-trajectory-client.d.ts +5 -0
- package/lib/types/client/harness-trajectory-client.d.ts.map +1 -0
- package/lib/types/client/harness-trajectory-menu.d.ts +7 -0
- package/lib/types/client/harness-trajectory-menu.d.ts.map +1 -0
- package/lib/types/client/self-topic-sort-preference.d.ts +5 -0
- package/lib/types/client/self-topic-sort-preference.d.ts.map +1 -0
- package/lib/types/client/use-harness-activity.d.ts +3 -0
- package/lib/types/client/use-harness-activity.d.ts.map +1 -0
- package/lib/types/harness-embed-contract.d.ts +2 -0
- package/lib/types/harness-embed-contract.d.ts.map +1 -1
- package/lib/types/harness-embed-route.d.ts +3 -1
- package/lib/types/harness-embed-route.d.ts.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/services/chat-service.d.ts +2 -0
- package/lib/types/services/chat-service.d.ts.map +1 -1
- package/lib/types/services/source-service.d.ts +7 -0
- package/lib/types/services/source-service.d.ts.map +1 -1
- package/lib/types/types.d.ts +2 -2
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 第二栏 Harness 活动摘要
|
|
2
|
+
|
|
3
|
+
只调整 Arkme 第二栏的 DeepSeek Harness 入口。会话下拉、官方会话状态与执行流程不变,也不新增完成弹窗。
|
|
4
|
+
|
|
5
|
+
- 没有进行中的任务:第二行显示点击入口会打开的原生当前会话名称;切换或改名时同步。空白会话显示「新会话」,尚未获得有效选择时不猜测目标名称。未登录保留原有介绍。
|
|
6
|
+
- 有进行中的任务:显示「n 待处理」「n 进行中」「n 待查看」,同一会话只计入优先级最高的一项。
|
|
7
|
+
- 无进行中但有待处理或待查看时:保留目标会话名,在头像上显示小角标。全部已查看后不留角标。长标题省略,完整目标名和状态计数保留在读屏标签中;卡片不显示浏览器原生悬停文字提示。
|
|
8
|
+
- 待处理包括官方批准、计划确认和提问;子任务归入其主会话,不重复计数。
|
|
9
|
+
- 窄栏只显示数字角标,颜色依次优先为待处理、待查看、进行中。悬停展开原生会话菜单,点击仍打开 Harness。
|
|
10
|
+
- 仅在对应会话实际可见、页面可见且窗口聚焦时清除待查看。隐藏的原生 iframe 当前会话不视为已读。
|
|
11
|
+
|
|
12
|
+
通过官方 `sidebar.footer.action` 根作用域槽位读取 `useSessions`、`useWorkspaces` 和可用时的 `useSessionPendingInteraction`。旧宿主使用会话上的待处理字段。只桥接显示摘要,不复制或替换官方侧边栏、会话存储和控制器;升级继续使用宿主提供的状态和组件。
|
|
13
|
+
|
|
14
|
+
入口显示的目标来自同一份 `useSessions` 的 `current` 和 `byId`,不自行按更新时间挑选另一条会话,也不新增跳转或选择逻辑。点击只恢复现有 Harness 界面,因此标题与真正打开的会话一致。
|
|
15
|
+
|
|
16
|
+
本地存储仅保存按环境与账户隔离的待查看会话 ID,不保存会话正文、执行状态或凭据。活动状态仍由官方数据实时提供。刷新时保留已观察到的待查看提醒;页面完全关闭期间未观察到的运行变化依赖宿主的完成状态,不保证补报。
|
|
17
|
+
|
|
18
|
+
退出登录时移除摘要;未登录入口保持原有行为。测试覆盖状态优先级、子任务合并、已读、刷新、归档与删除、账户隔离,以及公开槽位订阅和可见性桥接。浏览器中的模拟状态只用于视觉验收,不向真实会话发送消息。
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 第二栏快捷新建 DSH 会话
|
|
2
|
+
|
|
3
|
+
登录后的会话列表「+」菜单第一项增加「新建 DSH 会话」,沿用菜单原有尺寸、图标线条、分隔线和关闭交互。原有添加联系人、创建群聊、添加 Bot 顺序不变。
|
|
4
|
+
|
|
5
|
+
在 DSH、私聊、群聊或发给自己页面点击后,触发嵌入 Harness 原生侧栏的新建按钮,然后显示 Harness,关闭菜单并聚焦原生输入框。沿用宿主的工作区继承、空白会话复用和会话创建流程,不另建数据模型,也不向会话发送内容。第二栏名称通过现有官方选择摘要同步。
|
|
6
|
+
|
|
7
|
+
动作严格限定在登录态、Arkme 持有的同源 Harness iframe。优先使用已经识别的原生新建按钮标记,升级后布局不匹配时回退到原侧栏的中英文语义按钮;按钮缺失或禁用时保留菜单并提示稍后重试,不伪造创建成功。焦点只进入原生 composer,用户另行点击或两秒超时后取消聚焦尝试。
|
|
8
|
+
|
|
9
|
+
未登录仍沿用原有登录入口;未提供 Harness 入口的其他菜单保留三项。只安装到独立 3082 Web profile,不修改桌面客户端。
|
|
10
|
+
|
|
11
|
+
## 外部点击收起
|
|
12
|
+
|
|
13
|
+
原菜单只监听外层 document,DSH iframe 内点击和 Esc 不会冒泡到外层,导致菜单不收起。菜单打开期间额外监听可访问的嵌入文档及其同源子页面,随 iframe 插入、加载、刷新和移除更新绑定;菜单关闭时完整释放。外部点击不阻止默认行为或传播,仍能聚焦原输入框、点击原按钮。Esc 由当前菜单先处理并把焦点还给「+」,避免触发下层快捷操作。外观不变,未新增遮罩,也不读取或绕过跨域页面。
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Harness 会话下拉入口
|
|
2
|
+
|
|
3
|
+
已确认的交互:Arkme 登录状态下,把 DSH 常驻会话侧栏收进对话标题下拉菜单。标题使用圆角描边按钮,文字与箭头之间有分隔线;菜单直接显示原有会话和工作区,底部同一行显示新会话、视图选项和添加工作区。菜单内不再显示重复的搜索入口,搜索仍可从 Arkme 第二栏使用。空白会话也有入口,点击会话、外部区域或 Escape 收起菜单。未登录和独立 Harness 页面继续使用官方侧栏。
|
|
4
|
+
|
|
5
|
+
## 官方升级边界
|
|
6
|
+
|
|
7
|
+
`harness-session-dropdown.ts` 是可撤销的展示适配层。官方 SidebarRoot、WorkspaceBrowser、会话树、右键/更多菜单、工作区目录选择器和所有数据操作继续由当前宿主提供。没有复制官方组件源码,没有重挂载会话内容,没有新增会话数据缓存,也没有移动 React 所拥有的 DOM 节点。
|
|
8
|
+
|
|
9
|
+
目前官方没有替换标题和把侧栏列宽设为零的公共插槽。因此用已有的 `data-slot`、语义按钮和三列布局结构识别适配位置,仅添加自己的标题按钮和 CSS 标记。菜单是原侧栏的浮层展示,原“新会话”按钮通过 CSS 排序放到底部。原生侧栏折叠时,首次展开菜单通过原按钮请求展开;没有直接改布局存储。
|
|
10
|
+
|
|
11
|
+
第一列归零;右侧详情列的宽度从官方当前布局读取并跟随变化,其他官方组件和样式继续使用升级后的版本。若升级改变了已识别的侧栏或布局结构,适配自动撤销,恢复官方侧栏,避免失去导航。未知结构需要重新适配;不能保证任意未来版本的私有 DOM 结构都兼容。
|
|
12
|
+
|
|
13
|
+
模块卸载或账号退出会移除按钮、样式及标记,并恢复原侧栏折叠状态(仅当适配层主动展开过它时)。插件的登录态设置入口规则继续单独使用官方 `sidebar.settings` 插槽。
|
|
14
|
+
|
|
15
|
+
工具栏紧凑布局仅在识别到官方搜索、视图选项、目录选择插槽及已知操作集合时启用;出现未知操作时保留原工具栏。隐藏的是标题与搜索区域,整个工具栏容器使用 `display: contents`,目录选择插槽继续挂载。视图选项和添加工作区仅通过 CSS 定位到底部,原按钮及其回调、原生菜单和目录选择流程都不变。撤销适配时恢复全部区域。
|
|
16
|
+
|
|
17
|
+
底部操作行上方不额外绘制分隔线,以现有留白区分会话列表和操作区;新会话按钮自身的边框和三个操作的布局保持不变。
|
|
18
|
+
|
|
19
|
+
## 第二栏卡片悬停入口
|
|
20
|
+
|
|
21
|
+
登录后,鼠标在第二栏 DSH 卡片停留 200ms,原生会话菜单出现在卡片右侧;离开卡片和菜单 300ms 后收起,经过两者间隙时允许移入菜单继续操作。原卡片点击入口保留,键盘聚焦卡片后可用向右键进入菜单,Escape 返回卡片。标题下拉与悬停入口共享同一菜单,互斥展开。
|
|
22
|
+
|
|
23
|
+
`harness-session-hover.ts` 通过同源文档事件请求 `harness-session-dropdown.ts` 改变浮层位置,没有复制列表、重挂载 iframe 或转移 React 节点。私聊、群聊继续显示;仅在菜单及其原生子菜单区域展示和接收 iframe 输入,其他区域仍可操作原聊天。退出浮层时移除临时样式和监听器。点击会话或新会话时,先执行原生操作,再激活 Arkme 的 DSH 页面。
|
|
24
|
+
|
|
25
|
+
悬停不改变 `data-arkme-visible` / `data-arkme-follow-session`,不会把当前 DSH 会话标为已查看;账号范围不匹配、原生布局未识别、页面切换或 iframe 重载时撤销浮层。触屏不触发悬停,继续使用点击卡片和标题下拉入口。底部原有操作及排序偏好继续归官方管理。
|
|
26
|
+
|
|
27
|
+
验证:6 个相关测试文件、65 项检查通过,类型检查和完整打包通过。真实页面覆盖 DSH、私聊、群聊的会话选择,悬停保持原聊天与未读状态、跨菜单间隙、二级菜单外部关闭、创建空白会话、标题入口互斥、键盘向右键/Escape 和窄窗口边界;页面无 JavaScript 错误。证据保存在独立 profile 的 `session-hover-verification.json` 与 `session-hover-*.png`。
|
|
28
|
+
|
|
29
|
+
第二栏所有会话卡片统一使用悬停底色:普通卡片显示主题的浅色悬停背景,选中卡片在原底色上轻微加深;DSH 菜单展开期间通过 `aria-expanded` 保持来源卡片高亮。规则仅覆盖 Arkme 会话树,包含插件贡献入口和虚拟列表中的私聊/群聊/Bot,不影响原生 DSH 菜单或联系人目录。浅深色主题均适配,底色过渡为 120ms,系统减少动态效果时关闭过渡;禁用卡片不增加可点击提示。
|
|
30
|
+
|
|
31
|
+
第二栏卡片不再设置浏览器原生 `title` 提示,避免“打开:会话名”等文字浮框遮挡菜单。卡片名称、摘要、状态角标、读屏标签、高亮、点击与悬停菜单均保留。
|
|
32
|
+
|
|
33
|
+
## 隔离验证
|
|
34
|
+
|
|
35
|
+
只更新 `.codex-artifacts/web-preview-3082` 的独立 Web profile,使用已有线上账号登录。未操作桌面客户端或 3080/3081 服务。
|
|
36
|
+
|
|
37
|
+
验证覆盖真实宿主 0.1.5-rc.2 的空白页、会话切换、新会话、原有菜单、搜索、Escape/外部关闭、窄窗口、登录/未登录设置入口,以及升级结构不匹配时恢复官方导航。测试脚本和截图保存在该独立 profile 目录。
|
|
38
|
+
|
|
39
|
+
2026-09-16 验收结果:类型声明构建和完整打包成功,6 个相关测试文件、63 项测试通过。真实 Web 页面在宽/窄窗口中第一列均为 0,对话区使用剩余全部宽度;标题栏仍为 51px,轨迹往返正常。原菜单保留重命名、分叉和归档;新会话、搜索、外部关闭和 Escape 正常。浏览器临时插入长列表夹具验证菜单上限 560px、原列表滚动及底部新会话可见,未向服务端创建夹具会话。登录/未登录设置入口回归通过。
|
|
40
|
+
|
|
41
|
+
## 默认单列表
|
|
42
|
+
|
|
43
|
+
2026-09-16 的后续调整:登录后的首次启用改为单列表。没有重写官方列表或默认状态对象;通过公开插槽注册一个不显示内容的组件,共享官方工作区视图 StoreHandle,仅调用官方 `setGroupBy('flat')`。排序继续沿用官方的最近更新默认值,已有的手动排序选择也保留。
|
|
44
|
+
|
|
45
|
+
浏览器本地只新增一个“已应用默认分组”的标记,不保存第二份视图偏好。之后分组与排序由官方继续保存,刷新或重新挂载不会强制改回单列表;其记忆范围与官方一致,即当前浏览器和站点。官方改变存储键或增加其他字段时无需复制或覆盖。共享存储仅在两端插槽都为 root、且原官方分组动作存在时启用。
|
|
46
|
+
|
|
47
|
+
验证:67 项相关检查、类型检查和打包通过。真实页面首次为 flat/updated;手动选择 workspace/manual 后刷新保留;再切回 flat/updated 后刷新同样保留。没有操作桌面客户端。
|
|
48
|
+
|
|
49
|
+
## 下拉入口和紧凑工具栏
|
|
50
|
+
|
|
51
|
+
2026-09-16 的后续调整:标题按钮增加圆角边框、独立箭头分区和展开状态;去掉下拉列表的搜索及标题行,把官方视图选项、添加工作区与新会话放在底部同一行。
|
|
52
|
+
|
|
53
|
+
验证:68 项相关检查、类型检查和完整打包通过。真实宿主宽/窄窗口中,三个底部操作垂直居中且互不遮挡,移除的标题行高度为 0;60 个临时 DOM 行验证列表在 560px 上限内滚动,底部操作始终可见。会话切换、新会话和官方视图选项正常,当前对话标题栏仍为 51px,页面无 JavaScript 错误。
|
|
54
|
+
|
|
55
|
+
此 Web 运行环境由官方自动选用系统目录选择器,添加工作区点击后已验证其启动原生目录选择进程;关闭测试浏览器时自动撤销,未选择目录或创建工作区。这里只改变按钮位置,没有改成另一套目录选择器。截图和几何验证结果位于独立 profile 的 `session-dropdown-compact-*.png` 和 `session-dropdown-compact-verification.json`。
|
|
56
|
+
|
|
57
|
+
## 标题下方的模式与对话次数
|
|
58
|
+
|
|
59
|
+
后续确认的布局:标题独占第一行,模式标签与“n 次对话”并列在第二行。标题取消 360px 固定上限,使用右侧官方操作按钮以外的可用宽度,超长时省略并通过原生 title 提示显示全文。
|
|
60
|
+
|
|
61
|
+
模式标签仍由官方 `agent-preset` 贡献提供,没有复制名称、图标或交互。只识别原生标题行、标题容器和 `conversation.session.header.actions` 的关系,通过 CSS 纵向排列;原节点及 React 归属不变,卸载、退出账号或未知布局时撤销标记。
|
|
62
|
+
|
|
63
|
+
次数作为独立条目注册到公开的 `conversation.session.header.actions` 会话级列表插槽,使用框架 `useProjection('sessionStats')` 读取官方整段会话的 `turns`。不统计当前屏幕消息,不复制官方计算逻辑、不缓存第二份次数;分页、折叠、历史压缩及实时推送继续由官方负责。失败、取消及轮次何时增长也沿用宿主统计口径,与官方底部“n 轮”保持一致。数据缺失或格式不兼容时不显示次数,不用 0 代替未知值。文案通过官方 locale 接口提供中英文。
|
|
64
|
+
|
|
65
|
+
验证:8 个相关文件、59 项检查通过,包含次数更新、工具步骤不重复计数、会话数据切换、缺失值、卸载清理以及原生节点身份保留。类型检查和完整打包通过。真实页面对比顶部次数与官方底部轮次,验证宽/窄窗口、超长标题、会话切换、新会话和轨迹往返。当前两行标题区高度 77px;第二行是实际信息,并非原 tab 留白。测试用长标题仅在浏览器临时 DOM 中模拟,没有修改服务端会话标题。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Harness 底部设置入口
|
|
2
|
+
|
|
3
|
+
已登录时,Arkme 最左侧头像菜单已经提供官方设置入口,因此嵌入的 Harness 侧栏不再重复显示底部“设置”。未登录、登录状态未确认时保留官方入口。
|
|
4
|
+
|
|
5
|
+
实现使用官方 `sidebar.settings` 插槽,在 Arkme 拥有的 iframe 内注册空组件。登录身份只读取父界面已有的 `data-arkme-account-id`,不新增认证请求,也不修改凭据。身份移除或模块卸载时撤销插槽贡献,恢复官方组件。其他底部操作及头像菜单打开官方设置的流程不变。
|
|
6
|
+
|
|
7
|
+
独立官方 Harness 页面和其他 iframe 不受影响。模块仅在启动图中存在官方侧栏包时加入,独立于轨迹菜单适配。官方设置页面、设置内容和侧栏主体均继续使用宿主提供的组件。
|
|
8
|
+
|
|
9
|
+
验证:`pnpm typecheck`、`pnpm build`、`pnpm exec vitest run tests/harness-sidebar-client.test.ts tests/harness-embed-route.test.ts tests/deepseek-harness-surface.test.tsx tests/persistent-shell.test.tsx`。Web 验证应同时覆盖已登录时底部入口与占位消失、头像设置仍能打开,以及未登录时原入口仍显示并可打开。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Harness 轨迹入口收纳
|
|
2
|
+
|
|
3
|
+
Arkme 嵌入的 Harness 对话页默认隐藏“对话 / 轨迹”标签行,在原有右上角“更多操作”菜单中增加“查看轨迹”。轨迹视图显示“← 返回对话”。
|
|
4
|
+
|
|
5
|
+
标签行隐藏时同时释放官方标题栏为双行导航保留的最小高度,标题栏由当前内容自然撑开,并保留 10px 下间距。该布局规则仅在标签行成功适配时生效;恢复原标签或卸载适配时,官方标题栏样式自动恢复。
|
|
6
|
+
|
|
7
|
+
## 与官方升级的边界
|
|
8
|
+
|
|
9
|
+
- 仅在 Arkme 的 `arkme-harness-embed=1` 文档加载独立的 `harness-trajectory-client.js`。
|
|
10
|
+
- 保留官方标题栏、菜单、对话、轨迹和输入框组件。切换时点击官方原有标签按钮,复用其视图切换和状态管理;没有复制官方组件或改动其源码。
|
|
11
|
+
- 菜单中原有及未来新增的操作保留。新增行在每次打开时读取官方当前菜单的样式类名;返回按钮使用官方主题变量。
|
|
12
|
+
- 当前已检查的 Harness 0.1.5-rc.2 没有独立的标签行或菜单项扩展插槽,因此这里采用局部 DOM 适配。将来如开放对应官方入口,应优先迁移。
|
|
13
|
+
- 适配只识别中英文“对话 / 轨迹”两个标签以及对应的“更多操作”按钮。出现第三个官方视图、标签变化、入口缺失或菜单结构不兼容时恢复原标签,不强行覆盖新版结构。
|
|
14
|
+
- 菜单采用未知结构时,本次标题栏生命周期内停止适配。卸载客户端模块会移除新增控件及样式,恢复原界面。
|
|
15
|
+
- 官方版本需要先进入 Arkme 的宿主运行包;本改动不会自动下载官方版本,也不保证未来所有 DOM 结构零适配。
|
|
16
|
+
|
|
17
|
+
## 验证
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
pnpm typecheck
|
|
21
|
+
pnpm exec vitest run tests/harness-trajectory-menu.test.tsx tests/harness-embed-route.test.ts tests/deepseek-harness-surface.test.tsx tests/harness-model-client-rc2.test.ts tests/harness-onboarding-client.test.tsx tests/harness-session-client.test.ts
|
|
22
|
+
pnpm build
|
|
23
|
+
node scripts/verify-harness-trajectory-native.mjs /path/to/harness
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
最后一项从指定安装目录读取官方当前标题栏、视图选择逻辑、更多操作和 Menu 函数,在隔离 DOM 中执行已构建的插件客户端,检查往返切换、原下载操作、草稿元素、焦点和卸载恢复。装饰图标、下载结果对话框及会话数据使用测试替身;不启动 Host、不读取账号、不修改安装目录。
|
|
27
|
+
|
|
28
|
+
已验证原生组件版本:0.1.5-rc.2。组件验证不等同于完整桌面客户端安装和真实会话验收;真实会话的消息滚动恢复继续依赖官方视图管理。
|