@senguoyun/dsh-arkme 0.1.43 → 0.1.45

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.
Files changed (93) hide show
  1. package/cordis.patch.yml +1 -0
  2. package/docs/emoji-presentation.md +54 -0
  3. package/docs/member-event-cache.md +49 -0
  4. package/lib/client.js +81407 -28069
  5. package/lib/client.js.map +1 -1
  6. package/lib/index.js +25 -1
  7. package/lib/persistent-extension.js +1 -1
  8. package/lib/{persistent-runtime-DYBmIlId.js → persistent-runtime-CEGGFpR7.js} +20273 -598
  9. package/lib/types/arkme-emoji-text.d.ts +26 -0
  10. package/lib/types/arkme-emoji-text.d.ts.map +1 -0
  11. package/lib/types/arkme-service.d.ts +11 -1
  12. package/lib/types/arkme-service.d.ts.map +1 -1
  13. package/lib/types/chat-realtime.d.ts +27 -0
  14. package/lib/types/chat-realtime.d.ts.map +1 -1
  15. package/lib/types/client/ArkmeCalendarSurface.d.ts.map +1 -1
  16. package/lib/types/client/ArkmeLongArticleDialog.d.ts.map +1 -1
  17. package/lib/types/client/ArkmeMarkdownBody.d.ts +11 -0
  18. package/lib/types/client/ArkmeMarkdownBody.d.ts.map +1 -0
  19. package/lib/types/client/ArkmeMarkdownComposerInput.d.ts +10 -0
  20. package/lib/types/client/ArkmeMarkdownComposerInput.d.ts.map +1 -0
  21. package/lib/types/client/ArkmeMemberEventProfile.d.ts +10 -0
  22. package/lib/types/client/ArkmeMemberEventProfile.d.ts.map +1 -0
  23. package/lib/types/client/ArkmeMessagePreparingIndicator.d.ts +6 -0
  24. package/lib/types/client/ArkmeMessagePreparingIndicator.d.ts.map +1 -0
  25. package/lib/types/client/ArkmeNoteDetails.d.ts.map +1 -1
  26. package/lib/types/client/ArkmeRecordingSurface.d.ts.map +1 -1
  27. package/lib/types/client/ArkmeRelatedQuickNotes.d.ts.map +1 -1
  28. package/lib/types/client/ArkmeRichComposerInput.d.ts +6 -1
  29. package/lib/types/client/ArkmeRichComposerInput.d.ts.map +1 -1
  30. package/lib/types/client/ArkmeRichContent.d.ts.map +1 -1
  31. package/lib/types/client/ArkmeRichText.d.ts +7 -3
  32. package/lib/types/client/ArkmeRichText.d.ts.map +1 -1
  33. package/lib/types/client/ArkmeSidebar.d.ts +6 -0
  34. package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
  35. package/lib/types/client/ArkmeWorldSurface.d.ts.map +1 -1
  36. package/lib/types/client/arkme-emoji.d.ts +3 -12
  37. package/lib/types/client/arkme-emoji.d.ts.map +1 -1
  38. package/lib/types/client/composer-draft-store.d.ts +4 -0
  39. package/lib/types/client/composer-draft-store.d.ts.map +1 -1
  40. package/lib/types/client/conversation-resize-anchor.d.ts +3 -3
  41. package/lib/types/client/conversation-resize-anchor.d.ts.map +1 -1
  42. package/lib/types/client/interwoven-moments.d.ts +7 -2
  43. package/lib/types/client/interwoven-moments.d.ts.map +1 -1
  44. package/lib/types/client/markdown-editor.d.ts +28 -0
  45. package/lib/types/client/markdown-editor.d.ts.map +1 -0
  46. package/lib/types/client/member-event-cache.d.ts +24 -0
  47. package/lib/types/client/member-event-cache.d.ts.map +1 -0
  48. package/lib/types/client/member-event-hints.d.ts +11 -0
  49. package/lib/types/client/member-event-hints.d.ts.map +1 -0
  50. package/lib/types/client/member-event-timeline.d.ts +60 -0
  51. package/lib/types/client/member-event-timeline.d.ts.map +1 -0
  52. package/lib/types/client/message-preparing-reporter.d.ts +41 -0
  53. package/lib/types/client/message-preparing-reporter.d.ts.map +1 -0
  54. package/lib/types/client/message-preparing-store.d.ts +29 -0
  55. package/lib/types/client/message-preparing-store.d.ts.map +1 -0
  56. package/lib/types/client/realtime-client-events.d.ts +3 -1
  57. package/lib/types/client/realtime-client-events.d.ts.map +1 -1
  58. package/lib/types/client/recordings/ArkmeRecordingTimeline.d.ts +2 -1
  59. package/lib/types/client/recordings/ArkmeRecordingTimeline.d.ts.map +1 -1
  60. package/lib/types/client/recordings/useRecordingPlayback.d.ts +4 -0
  61. package/lib/types/client/recordings/useRecordingPlayback.d.ts.map +1 -1
  62. package/lib/types/client/use-member-event-timeline.d.ts +31 -0
  63. package/lib/types/client/use-member-event-timeline.d.ts.map +1 -0
  64. package/lib/types/client/use-message-preparing.d.ts +14 -0
  65. package/lib/types/client/use-message-preparing.d.ts.map +1 -0
  66. package/lib/types/client/use-resizable-composer.d.ts.map +1 -1
  67. package/lib/types/hashtag.d.ts +1 -1
  68. package/lib/types/hashtag.d.ts.map +1 -1
  69. package/lib/types/host-api.d.ts.map +1 -1
  70. package/lib/types/index.d.ts +1 -0
  71. package/lib/types/index.d.ts.map +1 -1
  72. package/lib/types/markdown.d.ts +43 -0
  73. package/lib/types/markdown.d.ts.map +1 -0
  74. package/lib/types/record-reedit-contract.d.ts +2 -0
  75. package/lib/types/record-reedit-contract.d.ts.map +1 -1
  76. package/lib/types/services/calendar-service.d.ts.map +1 -1
  77. package/lib/types/services/chat-realtime-service.d.ts +22 -0
  78. package/lib/types/services/chat-realtime-service.d.ts.map +1 -1
  79. package/lib/types/services/chat-service.d.ts +11 -1
  80. package/lib/types/services/chat-service.d.ts.map +1 -1
  81. package/lib/types/services/member-event-service.d.ts +25 -0
  82. package/lib/types/services/member-event-service.d.ts.map +1 -0
  83. package/lib/types/services/message-action-infrastructure.d.ts.map +1 -1
  84. package/lib/types/services/record-service.d.ts +2 -2
  85. package/lib/types/services/record-service.d.ts.map +1 -1
  86. package/lib/types/services/related-quick-note-service.d.ts.map +1 -1
  87. package/lib/types/services/service.d.ts +6 -1
  88. package/lib/types/services/service.d.ts.map +1 -1
  89. package/lib/types/services/source-service.d.ts +5 -0
  90. package/lib/types/services/source-service.d.ts.map +1 -1
  91. package/lib/types/types.d.ts +74 -1
  92. package/lib/types/types.d.ts.map +1 -1
  93. package/package.json +22 -6
package/cordis.patch.yml CHANGED
@@ -42,5 +42,6 @@
42
42
  updateCheckIntervalHours: 12
43
43
  updateAllowLocalInstall: true
44
44
  richMediaRenderEnabled: true
45
+ markdownQuickNotesEnabled: true
45
46
  richMediaSendEnabled: true
46
47
  maxUploadBytes: 104857600
@@ -0,0 +1,54 @@
1
+ # 表情展示合同
2
+
3
+ 原始正文继续保存 jm_emoji / im_emoji token、Unicode 和既有媒体引用,不把展示转换写回正文。
4
+ 插件的 arkme-emoji-text 持有无资源依赖的表情目录、解析和安全截断;Browser 只关联内嵌 SVG。
5
+
6
+ - 应用内用户内容经 ArkmeRichText;先识别完整 URL,再解析普通文本中的表情。正文保留原有链接行为,preview 只展示,不发起链接标题请求或产生交互元素。
7
+ - 纯文本出口经 arkmeEmojiPlainText;未知编码原样保留。图片表情包继续走 contentBlocks 媒体链,不从文字猜测。
8
+ - 视觉省略用 CSS;响应限长保护完整 token 和 Unicode 字素簇,并保留原有长度预算与截断标记。
9
+ - 编辑器保留自己的光标、mention 和草稿模型,共享目录与序列化规则。
10
+ - SVG 失败退化为可读 Unicode;图片提供语义名称。单个富文本块内含表情图片的复制选区转为 Unicode,同时保留 HTML 中的链接与格式;不含表情或跨块的选区保留浏览器原生复制。不得为每条文本新增网络请求、缓存或订阅。
11
+
12
+ ## 能力与验收范围
13
+
14
+ | 消费面 / owner | 本次范围 | 验证 |
15
+ | --- | --- | --- |
16
+ | UI | 日历、时间轴与详情抽屉的延展父引用、相关快记、转发选择弹窗与转发详情、录音/长文卡片及已有 Unicode 展示入口 | 同一组 token、组合表情和混合内容贯穿实际组件;预览无请求/额外交互;失败与复制 |
17
+ | Host | 既有内容投影使用共享安全截断,不改权限、查询或持久化合同 | 日历、相关快记、消息签名快照与两类转发快照的内容完整性测试 |
18
+ | Tools / SDK | 不新增能力,继续消费同一 Host;不复制转换逻辑 | 现有日历和相关快记入口兼容测试 |
19
+ | Client / Harness | 无原生桥或装配协议变化 | 独立制品安装、隔离页面验收;已安装客户端和生产发布不在本次授权内 |
20
+
21
+ 开发基线:插件 official/dev e7563b9e5fa84284032aeb0c7cd3a7020e1e0c44;提交 PR 前已合入最新 dev a055b4b15647741647c07acb368e68f958a74492 的 Markdown 合同。
22
+ 客户端只读参考 master 02f86d21dc3c2c94b01c4cd0e1f5f4bdda6bdeae。
23
+ 性能边界:解析工作随本次文本长度增长,不持有跨内容缓存;预览不新增 I/O。
24
+
25
+ ## 本次验证
26
+
27
+ - 原始基线相关测试 203 项通过;修改后 typecheck、build 和制品清单检查通过。
28
+ - 最新基线集成后全量:4024 项通过、5 项跳过、16 项失败。16 项失败全部在未修改的 dev/a055b4b 对应测试中逐项复现,失败集合完全一致;涉及 Markdown 基线的旧 UI/Host 参数断言、identity 与 service-architecture 清单。没有新增失败。
29
+ - 官方 DSH 0.1.1-rc.2(源码参考标签 dsh-v0.1.1-rc.2,b150a551)通过 plugin CLI 安装独立 tgz;使用带空格的全新 DSH_HOME 和独立凭据命名空间。最终安装的 client.js 与构建输出摘要一致。
30
+ - Chromium 实际页面使用浏览器路由固定样例,不使用真实账号:日历、时间轴父引用、详情父引用和相关快记均成功加载两种 token 对应的 SVG;未知 token 与 Unicode 保留,预览没有链接节点或链接元数据请求。
31
+ - 实际复制快捷键产生 Unicode 文本;验证监听器阻止写入系统剪贴板。模拟缺失图片资源后成功退化为 Unicode。
32
+ - 最终制品 SHA-256:bbad76d87ceb19e6e306e07c00ccea80a6811686c0758c91c4a5dcea1c73ef7b,版本保持 0.1.43。制品不含测试、node_modules、本机路径或验收端口。
33
+ - 上述是隔离 DSH Browser 页面验收,不等同于真实账号的远端数据验收、已安装 Electron 客户端替换或 Windows/Linux 验收;未发布或提交 PR。性能只验证无新增预览请求,不声称测得吞吐或帧率提升。
34
+
35
+ ## 深入审查与修复
36
+
37
+ | 问题 | 修复及证据 |
38
+ | --- | --- |
39
+ | P2:转发对象弹窗的最近消息与底部摘要绕过公共渲染 | 统一使用 preview 模式;实际弹窗加载 4 个表情图片,无链接节点;选择对象、填写附言、发送一次并关闭弹窗均验证通过,提交保留 actionRefs 与原始附言 token |
40
+ | P2:表情优先解析会拆开 URL 参数 | 由已有链接解析器先确定 URL 边界,再将普通文本交给唯一表情解析器;body/preview 都覆盖含 token 的完整 URL |
41
+ | P2:普通选区复制被无条件接管,含链接选区只留下纯文本 | 仅转换选区内的已知表情图片;保留 text/html 的原始 href;真实复制快捷键验证普通选区不接管、表情转 Unicode、链接不丢失,测试阻止写入系统剪贴板 |
42
+ | P2:历史转发摘要用冒号猜作者,破坏 token、URL 和时间 | 摘要整体作为内容显示;作者只从结构化字段取得。摘要-only 记录显示通用摘要标签,复现样例均通过 |
43
+ | P2:消息操作签名快照、普通记录/Agent 转发快照会写入半个 token | 使用共享安全截断并保留原有预算;公共读取→签名引用→转发写入测试与 Agent 网关测试证明原始正文保留,写入摘要不含半个 token |
44
+ | 清理:Browser 有重复解析包装和松散的 run 类型;目录继承 Object 原型 | 删除包装层,直接消费无资源依赖的判别联合类型;Browser 目录不再将 constructor / __proto__ 视为表情 |
45
+
46
+ 架构边界:表情目录与文本语义归插件公共层,SVG 和复制归 Browser;聊天关系、普通记录和 Agent 的来源身份、授权、幂等仍由原 owner 持有。仅共用无副作用的文本函数,不合并不同消息协议,不转换持久化原始正文。
47
+
48
+ 没有新增状态机、计时器、订阅、缓存或数据库字段。图片组件仅保留当前资源是否加载失败的局部状态;没有新增兼容开关、双轨解析或过渡协议。jm_emoji / im_emoji 和摘要-only 读取属于既有历史数据合同。未修改提示词、版本字段或根 README。
49
+
50
+ 表情修复快照已通过官方 CLI 装入独立 Profile,并在 Electron 验收客户端加载(代码摘要一致);转发弹窗和历史详情完成了固定业务样例的真实页面复验。最新 Markdown 基线的集成完成单测、类型检查与打包,尚未重新进行真机账号验收。
51
+
52
+ 输入区目标预览追加验收:延展与重新编辑共用的目标摘要已接入 preview 模式,102 项相关测试、typecheck 与 build 通过;原稿、重新编辑草稿及延展提交引用均保持原始数据。
53
+
54
+ Markdown 集成:保留 text_format、代码块与业务标签的 AST 边界,只对普通正文文本渲染表情;新增复合样例验证正文渲染、行内/块级代码保留原文、URL 参数值不变。
@@ -0,0 +1,49 @@
1
+ # 群成员变动记录的临时缓存
2
+
3
+ 退群记录使用插件客户端的共享内存缓存,不引入 SWR,不写本地磁盘或后端存储。
4
+ 缓存按登录环境、账号和群的 opaque source key 隔离;目前事件类型固定为 `left`。
5
+
6
+ ## 请求规则
7
+
8
+ - 第一次进入群聊:等待快记窗口和群主身份就绪,查询当前时间范围。
9
+ - 五分钟内再次进入:复用记录、查询范围、分页游标和空结果。最新窗口复用原截止时间,避免每次以新的当前时间查询。
10
+ - 超过五分钟再次进入:先展示已缓存记录,再查询当前窗口。有效期只在进入时判断,没有定时校准、轮询、聚焦刷新或网络恢复刷新。
11
+ - 历史滚动:只查询未覆盖的范围;密集事件的下一页仍由真实滚动触发。游标始终携带原查询范围,不拼接到新的时间窗口。
12
+ - 加载旧游标不延长首页的有效期。未加载的分页不能被当作完整历史。
13
+ - 查询失败保留已有记录,不自动重试;同群两秒失败冷却跨视图切换保留。
14
+
15
+ ## 缓存的首帧恢复
16
+
17
+ 展示缓存与发起查询分别控制。成员列表刷新时,群主身份会暂时变为未知;快记也可能仍在后台加载。
18
+ 这两种等待只阻止新的事件查询,不隐藏同账号、同群已授权读取的缓存。
19
+ Hook 在渲染阶段通过只读 `peek` 同步取得记录,按已恢复的快记窗口过滤,避免先渲染空列表再等待 Effect 插入退群提示。
20
+ 组件重新挂载、尚无快记窗口时,使用缓存中上次同模式的窗口,不借用其他群或其他模式的窗口。
21
+ 没有缓存的首次进入仍等待群主身份和快记窗口。明确撤销权限时,首帧就隐藏记录并清理缓存。
22
+
23
+ ## 生命周期和通知
24
+
25
+ `member-event-cache.ts` 持有每群的 `MemberEventTimeline`,组件只是订阅者。
26
+ 离开视图停止通知触发的查询和视图更新,已发出的请求可以完成并填充缓存;再次进入复用同一请求与分页状态。
27
+
28
+ 全局 SSE 消费者通过 `member-event-hints.ts` 通知缓存:
29
+
30
+ - 正在查看的群沿用 300 毫秒合并、两秒最小刷新间隔和串行请求。
31
+ - 非当前群只记录变动,不发请求;再次进入查询一次。
32
+ - 事件 ID 去重状态保留在缓存中,请求按发起时的通知版本记录结果。请求期间的新通知继续有效。
33
+ - 历史定位视图只刷新其历史窗口;这不能把最新窗口误标为已更新。
34
+
35
+ 退出登录或切换账号、环境会销毁缓存并取消请求,迟到结果不能写回。
36
+ 确认失去群主身份或服务端拒绝访问会清除对应群记录;身份加载中的临时禁用不会清缓存。
37
+ 名称点击和发起私聊仍沿用原服务端权限校验。
38
+
39
+ ## 容量与展示
40
+
41
+ 保留最近使用的 20 个群。离开视图后的缓存每群最多保留 1,000 条事件和 200 个查询范围;当前正在浏览的列表不因缓存限额截断。
42
+ 淘汰事件时同步丢弃覆盖这些事件的查询范围,避免出现“记录已淘汰,但被误判为已经加载”的缺口。
43
+
44
+ 快记与成员变动继续按发生时间和稳定 ID 合并。历史定位过滤当前窗口,不混入未来记录;名称高亮和资料卡行为保持原实现。
45
+
46
+ ## 验证
47
+
48
+ 回归测试覆盖切群和重新挂载的首帧、身份及快记加载中的缓存显示、空结果、过期后展示旧数据、失败冷却、跨视图游标、历史范围缺口、容量淘汰、权限撤销、账号隔离、后台群通知及请求期间新通知。
49
+ 请求入口和共享缓存通过真实 Hook / 控制器运行,接口边界使用可控响应记录实际发起的调用。