@dsh-enhanced/lark-channel 0.1.64 → 0.1.66

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 (155) hide show
  1. package/README.md +20 -6
  2. package/cordis.patch.yml +1 -0
  3. package/docs/operations.md +1 -1
  4. package/docs/progress-security.md +3 -0
  5. package/docs/rsi-setup.md +11 -7
  6. package/docs/setup.md +2 -1
  7. package/lib/adapter.d.ts +8 -0
  8. package/lib/adapter.d.ts.map +1 -1
  9. package/lib/adapter.js +34 -2
  10. package/lib/adapter.js.map +1 -1
  11. package/lib/config.d.ts +4 -0
  12. package/lib/config.d.ts.map +1 -1
  13. package/lib/config.js +52 -8
  14. package/lib/config.js.map +1 -1
  15. package/lib/index.d.ts +5 -0
  16. package/lib/index.d.ts.map +1 -1
  17. package/lib/index.js +24 -1
  18. package/lib/index.js.map +1 -1
  19. package/lib/progress.d.ts +11 -1
  20. package/lib/progress.d.ts.map +1 -1
  21. package/lib/progress.js +13 -1
  22. package/lib/progress.js.map +1 -1
  23. package/lib/rsi-authority-runtime.d.ts +1 -0
  24. package/lib/rsi-authority-runtime.d.ts.map +1 -1
  25. package/lib/rsi-authority-runtime.js +121 -18
  26. package/lib/rsi-authority-runtime.js.map +1 -1
  27. package/lib/rsi-bootstrap-manifest.d.ts +12 -5
  28. package/lib/rsi-bootstrap-manifest.d.ts.map +1 -1
  29. package/lib/rsi-bootstrap-manifest.js +63 -9
  30. package/lib/rsi-bootstrap-manifest.js.map +1 -1
  31. package/lib/rsi-bootstrap.js +3 -3
  32. package/lib/rsi-bootstrap.js.map +1 -1
  33. package/lib/rsi-build.d.ts +12 -0
  34. package/lib/rsi-build.d.ts.map +1 -1
  35. package/lib/rsi-build.js +55 -5
  36. package/lib/rsi-build.js.map +1 -1
  37. package/lib/rsi-creation-build.d.ts +3 -0
  38. package/lib/rsi-creation-build.d.ts.map +1 -1
  39. package/lib/rsi-creation-build.js +45 -0
  40. package/lib/rsi-creation-build.js.map +1 -1
  41. package/lib/rsi-host-update.d.ts +51 -0
  42. package/lib/rsi-host-update.d.ts.map +1 -1
  43. package/lib/rsi-host-update.js +61 -1
  44. package/lib/rsi-host-update.js.map +1 -1
  45. package/lib/rsi-install.d.ts +10 -3
  46. package/lib/rsi-install.d.ts.map +1 -1
  47. package/lib/rsi-install.js +65 -15
  48. package/lib/rsi-install.js.map +1 -1
  49. package/lib/rsi-linux-cgroup-roots.d.ts +3 -0
  50. package/lib/rsi-linux-cgroup-roots.d.ts.map +1 -0
  51. package/lib/rsi-linux-cgroup-roots.js +3 -0
  52. package/lib/rsi-linux-cgroup-roots.js.map +1 -0
  53. package/lib/rsi-linux-creation-build.d.ts +36 -0
  54. package/lib/rsi-linux-creation-build.d.ts.map +1 -0
  55. package/lib/rsi-linux-creation-build.js +213 -0
  56. package/lib/rsi-linux-creation-build.js.map +1 -0
  57. package/lib/rsi-linux-native-materialize.d.ts +31 -0
  58. package/lib/rsi-linux-native-materialize.d.ts.map +1 -0
  59. package/lib/rsi-linux-native-materialize.js +162 -0
  60. package/lib/rsi-linux-native-materialize.js.map +1 -0
  61. package/lib/rsi-linux-native-relocation.d.ts +120 -0
  62. package/lib/rsi-linux-native-relocation.d.ts.map +1 -0
  63. package/lib/rsi-linux-native-relocation.js +1555 -0
  64. package/lib/rsi-linux-native-relocation.js.map +1 -0
  65. package/lib/rsi-linux-native-resources.d.ts +97 -0
  66. package/lib/rsi-linux-native-resources.d.ts.map +1 -0
  67. package/lib/rsi-linux-native-resources.js +521 -0
  68. package/lib/rsi-linux-native-resources.js.map +1 -0
  69. package/lib/rsi-linux-repository-bootstrap.d.ts +17 -0
  70. package/lib/rsi-linux-repository-bootstrap.d.ts.map +1 -0
  71. package/lib/rsi-linux-repository-bootstrap.js +317 -0
  72. package/lib/rsi-linux-repository-bootstrap.js.map +1 -0
  73. package/lib/rsi-linux-runner-states.d.ts +20 -0
  74. package/lib/rsi-linux-runner-states.d.ts.map +1 -0
  75. package/lib/rsi-linux-runner-states.js +70 -0
  76. package/lib/rsi-linux-runner-states.js.map +1 -0
  77. package/lib/rsi-linux-runtime-bootstrap.d.ts +10 -0
  78. package/lib/rsi-linux-runtime-bootstrap.d.ts.map +1 -0
  79. package/lib/rsi-linux-runtime-bootstrap.js +38 -0
  80. package/lib/rsi-linux-runtime-bootstrap.js.map +1 -0
  81. package/lib/rsi-linux-source-build.d.ts +28 -0
  82. package/lib/rsi-linux-source-build.d.ts.map +1 -0
  83. package/lib/rsi-linux-source-build.js +43 -0
  84. package/lib/rsi-linux-source-build.js.map +1 -0
  85. package/lib/rsi-local-install.d.ts +2 -0
  86. package/lib/rsi-local-install.d.ts.map +1 -1
  87. package/lib/rsi-local-install.js +42 -1
  88. package/lib/rsi-local-install.js.map +1 -1
  89. package/lib/rsi-local-pair-install.d.ts +15 -0
  90. package/lib/rsi-local-pair-install.d.ts.map +1 -1
  91. package/lib/rsi-local-pair-install.js +21 -6
  92. package/lib/rsi-local-pair-install.js.map +1 -1
  93. package/lib/rsi-local-resources.d.ts +2 -2
  94. package/lib/rsi-local-resources.d.ts.map +1 -1
  95. package/lib/rsi-local-resources.js +5 -0
  96. package/lib/rsi-local-resources.js.map +1 -1
  97. package/lib/rsi-local-update-build.d.ts +25 -6
  98. package/lib/rsi-local-update-build.d.ts.map +1 -1
  99. package/lib/rsi-local-update-build.js +46 -7
  100. package/lib/rsi-local-update-build.js.map +1 -1
  101. package/lib/rsi-local-update.d.ts +5 -2
  102. package/lib/rsi-local-update.d.ts.map +1 -1
  103. package/lib/rsi-local-update.js +6 -5
  104. package/lib/rsi-local-update.js.map +1 -1
  105. package/lib/rsi-plugin-creation.d.ts +16 -1
  106. package/lib/rsi-plugin-creation.d.ts.map +1 -1
  107. package/lib/rsi-plugin-creation.js +60 -14
  108. package/lib/rsi-plugin-creation.js.map +1 -1
  109. package/lib/rsi-plugin-revision.d.ts +35 -0
  110. package/lib/rsi-plugin-revision.d.ts.map +1 -0
  111. package/lib/rsi-plugin-revision.js +200 -0
  112. package/lib/rsi-plugin-revision.js.map +1 -0
  113. package/lib/rsi-profile.d.ts +8 -0
  114. package/lib/rsi-profile.d.ts.map +1 -1
  115. package/lib/rsi-profile.js +55 -2
  116. package/lib/rsi-profile.js.map +1 -1
  117. package/lib/rsi-release-build.d.ts +24 -8
  118. package/lib/rsi-release-build.d.ts.map +1 -1
  119. package/lib/rsi-release-build.js +89 -37
  120. package/lib/rsi-release-build.js.map +1 -1
  121. package/lib/rsi-scanner-retirement-config.d.ts +34 -0
  122. package/lib/rsi-scanner-retirement-config.d.ts.map +1 -0
  123. package/lib/rsi-scanner-retirement-config.js +272 -0
  124. package/lib/rsi-scanner-retirement-config.js.map +1 -0
  125. package/lib/rsi-scanner-retirement-runtime.d.ts +23 -0
  126. package/lib/rsi-scanner-retirement-runtime.d.ts.map +1 -0
  127. package/lib/rsi-scanner-retirement-runtime.js +98 -0
  128. package/lib/rsi-scanner-retirement-runtime.js.map +1 -0
  129. package/lib/rsi-scanner-retirement-stage.d.ts +55 -0
  130. package/lib/rsi-scanner-retirement-stage.d.ts.map +1 -0
  131. package/lib/rsi-scanner-retirement-stage.js +183 -0
  132. package/lib/rsi-scanner-retirement-stage.js.map +1 -0
  133. package/lib/rsi-scanner-retirement-transition.d.ts +57 -0
  134. package/lib/rsi-scanner-retirement-transition.d.ts.map +1 -0
  135. package/lib/rsi-scanner-retirement-transition.js +320 -0
  136. package/lib/rsi-scanner-retirement-transition.js.map +1 -0
  137. package/lib/rsi-setup.d.ts +20 -0
  138. package/lib/rsi-setup.d.ts.map +1 -1
  139. package/lib/rsi-setup.js +102 -5
  140. package/lib/rsi-setup.js.map +1 -1
  141. package/lib/rsi-source-maintenance.d.ts +9 -1
  142. package/lib/rsi-source-maintenance.d.ts.map +1 -1
  143. package/lib/rsi-source-maintenance.js +64 -5
  144. package/lib/rsi-source-maintenance.js.map +1 -1
  145. package/lib/rsi-source-update.js +2 -2
  146. package/lib/rsi-source-update.js.map +1 -1
  147. package/lib/service.d.ts.map +1 -1
  148. package/lib/service.js +1 -0
  149. package/lib/service.js.map +1 -1
  150. package/lib/setup-profile.d.ts.map +1 -1
  151. package/lib/setup-profile.js +1 -0
  152. package/lib/setup-profile.js.map +1 -1
  153. package/lib/version.d.ts +1 -1
  154. package/lib/version.js +1 -1
  155. package/package.json +21 -21
package/README.md CHANGED
@@ -13,7 +13,7 @@ revision 投递一条内容无关的状态更新;两种路径的重试、fence
13
13
 
14
14
  模型回答被输出上限截断、返回空正文或超过 Delivery 的 `maxTextBytes` 时,Delivery 默认会在后台自动续写、重新生成或压缩,并在恢复完成后只向飞书发送一条完整答复;正常情况不需要用户再回复“继续”。模型恢复次数耗尽或安全调度边界不可用时才展示明确的未完成提示,也不再要求用户发送“继续”这类协议词;持久化无法确认时则不投递结果,任何情况都不会把半句标成“任务已完成”。Delivery 与本插件的 `maxTextBytes` 默认都为 `65536`,手工覆盖时应保持一致。
15
15
 
16
- 默认进度策略为 `progressDetails: direct`:经 Delivery 授权的私聊可显示限长、常见凭据已脱敏的工具参数和结果;默认向导只授权 owner。群聊只显示工具名、状态、步骤与待办。`progressDetails: off` 可在所有会话隐藏参数和结果。任何 reasoning/thinking 内容都不外发;飞书 `message_cot` 不可用时只降级展示,不影响任务或最终回复。
16
+ 默认进度策略为 `progressDetails: direct`:经 Delivery 授权的私聊可显示限长、常见凭据已脱敏的工具参数和结果;默认向导只授权 owner。群聊只显示工具名、状态、步骤与待办。`progressDetails: off` 可在所有会话隐藏参数和结果。任何 reasoning/thinking 内容都不外发;飞书 `message_cot` 不可用时只降级展示,不影响任务或最终回复。后台进度(如原生 Goal 续跑轮次)默认不展示、也不新开进度消息,`showBackgroundProgress: true` 才追加到当前前台进度;终态始终关闭前台进度。
17
17
 
18
18
  已创建的进度消息句柄由 Delivery 私有 SQLite 账本保存;终态在飞书更新前落盘。连接重建或进程重启后,只有原 Inbox 已确认结束、原绑定代次与应用凭证仍一致时才更新同一条进度消息;活动任务不会被误关。终态更新失败按间隔重试,最多八次,不会因此重新运行任务或再建进度消息。创建请求的网络结果未知时保留无句柄状态,不盲目重建;升级前没有保存句柄的历史气泡无法原位恢复。账本只保存句柄、绑定与目标摘要、终态及重试状态,不保存工具参数或思考正文。
19
19
 
@@ -27,6 +27,8 @@ revision 投递一条内容无关的状态更新;两种路径的重试、fence
27
27
 
28
28
  Linux `supervised` 新安装在模型、TraeX、飞书配置与 doctor 后自动取得当前 owner、生成有限授权与 manifest,并部署目标和独立协调器两个 systemd Host。新 owner 安装接通有界新工具创建、任务派生独立验收与动态采用;旧安装重试保留原授权,不自动增加创建通道。未就绪会以非零状态停止安装完成提示;重试不续期授权。当前尚未完成真实普通任务驱动的修复、采用和观察验收,见上述配置指南。
29
29
 
30
+ Linux 成对升级会在候选 Host 首次启动前,核验旧 manifest 的冻结 owner 来源及 Delivery 撤权记录,并通过原 Policy/Automations 服务停用对应的四类旧扫描。维护只写已停服的私有 Home 副本,使用固定操作标识和原预算账户,保留任务历史与 unknown;来源读取与维护子进程都有有限期限。升级事务保存原配置、身份、数据库及完整迁移证据;切换后不能自动退回会复活旧扫描的状态,成功清理将证据整体保留在事务同级的 `.completed-<事务 ID>` 目录。此路径只处理旧扫描退出,不签发新 owner 授权,也不把旧授权转给其他身份。安装器依赖可信的已安装代码及完整依赖集合;来源摘要不是对任意 JavaScript 依赖的安全证明。
31
+
30
32
  ## 兼容性
31
33
 
32
34
  - DeepSeek Harness:`0.2.0-rc.2` 基线语义(通过 `assistant-delivery`)。
@@ -89,6 +91,7 @@ config:
89
91
  requireMentionInGroups: true
90
92
  showProgress: true
91
93
  progressDetails: direct
94
+ showBackgroundProgress: false
92
95
  statusReactions: true
93
96
  imageDownloadTimeoutMs: 30000
94
97
  userQuestionTtlMs: 86400000
@@ -160,22 +163,25 @@ dsh-lark-setup --profile web --refresh-agent-policy --allow-agent-tools
160
163
  - 记忆、Wiki 和行为学习提案使用 Card 2.0 审批按钮,签名绑定会话、提案版本与有效期;回调操作人另按 owner 授权校验。行为学习卡会把 scope、情境、guidance、版本、证据和回滚原因逐字段以纯文本展示;提案内容不会作为 Markdown 或卡片组件解释。点击后卡片只确认 Policy 决策已写入持久账本,明确不把“批准”误报成“变更已生效”。投递失败且已经过期的提案需要重新提交,升级不会自动批准或补发旧卡。
161
164
  - 消息通道运行时网络仅访问所选飞书/Lark OpenAPI、token 与 WebSocket endpoint;图片读取使用固定消息资源端点,不接受消息或模型提供的 URL,并关闭重定向。
162
165
  - 安装阶段的 `dsh-rsi-setup --prepare-source` 执行 Git,在 `$DSH_HOME/rsi-sources/<profile>` 写入私有源码与 bare 发布仓库;npm 来源访问固定官方 GitHub 仓库的精确版本 tag,本地来源只复制已提交内容。支持常用代理与 CA 环境变量,不执行安装脚本;此命令不使用飞书凭据或浏览器,详见 [RSI 配置](docs/rsi-setup.md)。
163
- - `dsh-rsi-setup --prepare-local-update` 在 Home 外准备本地上游与现有修复分支合并后的源码和 tarball,使用固定的镜像准备器及离线 bubblewrap 构建,保留原包、源码 refs 与授权。它可联网准备依赖镜像,但候选 build/pack 不带网络、凭据或原 Home;不会停服或激活更新。pre-owner 安装可使用 checkout 维护事务,已有 owner 的完整迁移仍未交付,详见 [RSI 配置](docs/rsi-setup.md)。
164
- - checkout 的 `local-service-upgrade` 使用固定 pnpm,在停服前以无 registry 凭据的私有配置联网验证旧锁文件并预取依赖,失败保留原服务。停服副本的原生安装无网络且禁用安装脚本;新 Node 子进程沿用隔离边界,完整核验安装包文件和依赖闭包。事务会写入独立缓存及 Home 副本、切换 systemd 服务;它不启用 owner scheduler 或扩大授权。用法与恢复见[安装器指南](../../scripts/install/README.md#checkout-内的-pre-owner-冻结源码维护)。
166
+ - `dsh-rsi-setup --prepare-local-update` 在 Home 外准备本地上游与现有修复分支合并后的源码和 tarball。Linux 默认准备摘要固定的原生运行时(schema 3)及离线 bubblewrap 构建,全程不接触 Docker;显式绝对路径 `--docker-path` 可保留旧镜像准备器,两类收据互斥不续跑。它可联网下载固定 Node/pnpm 与冻结依赖,但候选 build/pack 不带网络、凭据或原 Home;不会停服或激活更新,原生候选的停机激活迁移随原生安装事务交付。pre-owner 安装可使用 checkout 维护事务,已有 owner 的完整迁移仍未交付,详见 [RSI 配置](docs/rsi-setup.md)。
167
+ - checkout 的 `local-service-upgrade` 在停服前以无 registry 凭据的私有配置准备旧图和最终候选图,重新校验候选锁与策略,并在空 node_modules 的临时 Home 中实际断网调用原生 DSH 安装。首次服务操作前重核外部候选、原 Home 与缓存;停服后的正式副本继续核对同一依赖图、包清单和配置,失败保留证据。pre-owner 的 Docker→native 和 native→native 可迁移基础 runtime、release 资源及 cohort;正式阶段绑定实际目录身份,恢复拒绝复制产生的新 inode。事务会写入独立缓存及 Home 副本、切换 systemd 服务;它不启用 owner scheduler 或扩大授权,完整活服务升级仍未验收。用法与恢复见[安装器指南](../../scripts/install/README.md#checkout-内的-pre-owner-冻结源码维护)。
165
168
  - macOS 安装使用系统 Perl 的内核 `flock` 串行化同一用户、同名 profile 的 LaunchAgent 操作,使用 `plutil`/`launchctl` 核对服务归属并管理当前用户服务;运行检查核对状态与 PID。同名目标属于另一 DSH_HOME 时拒绝修改,替换失败时尝试恢复旧定义与注册状态。原生学习另串行化 Home 配置,写入私有计划、有限授权、恢复日志和 HMAC observer 密钥。新安装从冻结源码清单和锁文件准备私有 Node、pnpm 及依赖,候选构建和行为检查使用本机 Seatbelt;Host 也是原生 Node。支持范围与失败恢复见[原生 macOS 学习](docs/rsi-setup.md#原生-macos-学习)。
166
- - Linux 安装的 `--prepare-build` 还自动准备私有授权运行时和本地发布资源,也可单独执行 `--prepare-authorities`:从同版本已安装 Control Plane 复制官方程序及模块、固定独立 Node,运行副本做版本/模块检查,并生成 14 个独立 Ed25519 身份和本地 registry/catalog。共享契约从 Control Plane 声明的依赖解析,只接受包内依赖边或同一 pnpm 虚拟包目录内的相邻依赖边;祖先或 profile 顶层的同名包不能替代它。目录和密钥仅当前用户可读写;重复执行核验固定内容并保留发布/状态进展。此步骤需要文件写入与子进程权限,不需要网络、浏览器或飞书凭据,不执行 npm lifecycle,不签发 owner grant 或启动 Host。
167
- - Linux 的 `dsh-rsi-setup --prepare-build` 还会执行摘要固定的构建脚本和 Dockerfile,用空 Docker 配置准备联网下载依赖的镜像,保存不可变 image ID 与私有构建回执。随后候选检查使用离线完整仓库 sandbox;安装期间不会读取主机 Docker registry 凭据或启动候选 Host。Mac 则准备受摘要固定的私有 Node、pnpm 与冻结清单依赖,并在候选期用 Seatbelt 离线执行。当前 runtime 支持与资源上限见 [RSI 配置](docs/rsi-setup.md)。
168
- - 新 `--install-owner` 从已批准的源码镜像准备独立行为镜像;首次构建允许访问 Debian 包源,使用空 Docker 配置和固定 worker/launcher,不读取 owner 凭据、浏览器或候选期望行为,不运行 npm lifecycle。资源与摘要位于 `$DSH_HOME/rsi-creation-builds/<profile>`,创建验收和采用使用既有独立签名身份及私有 runner 账本;重试验证实际镜像,不重建缺失资源或重置额度。
169
+ - Linux 安装的 `--prepare-build` 还自动准备私有授权运行时和本地发布资源,也可单独执行 `--prepare-authorities`:从同版本已安装 Control Plane 复制官方程序及模块、固定独立 Node,运行副本做版本/模块检查,并生成 14 个独立 Ed25519 身份和本地 registry/catalog。共享契约从 Control Plane 声明的依赖解析,接受包内依赖边、同一 pnpm 虚拟包目录内的相邻依赖边,以及安装器生成的受管 profile 内经 profile 清单、pnpm 工作区、安装元数据和两份锁文件共同核验的 hoisted 直接依赖边;普通扁平项目或任意祖先目录的同名包不能替代它。核验材料在复制前后保持一致,目录和密钥仅当前用户可读写;重复执行核验固定内容并保留发布/状态进展。此步骤需要文件写入与子进程权限,不需要网络、浏览器或飞书凭据,不执行 npm lifecycle,不签发 owner grant 或启动 Host。
170
+ - Linux 的 `dsh-rsi-setup --prepare-build` 默认准备摘要固定的原生运行时:从 nodejs.org 与 npm registry 下载官方 Node v22.23.2、pnpm 11.7.0,经 bubblewrap 私有命名空间与无凭据环境先 `pnpm fetch` 再离线 `--frozen-lockfile --ignore-scripts` 安装,保存 schema 3 sourceBuild(运行时全树摘要)与 schema 2 `releaseBuild`(工具链/store/cache 三树副本加 `runtimeDigest`),全程不调用 Docker CLI、daemon、socket 或镜像。环境前置(Linux x64/arm64、bwrap/unshare/mount 等)缺失时经 `--optional-build` 报告 `buildUnavailable`/`releaseBuildUnavailable` 并保留源码与已验证运行时;完整性错误始终致命。显式绝对路径 `--docker-path` 仍执行摘要固定的 Dockerfile、用空 Docker 配置准备联网下载依赖的镜像并保存不可变 image ID,供迁移并存使用,原生与镜像收据互不续跑。随后候选检查使用离线完整仓库 sandbox;安装期间不会读取主机 Docker registry 凭据或启动候选 Host。Mac 则准备受摘要固定的私有 Node、pnpm 与冻结清单依赖,并在候选期用 Seatbelt 离线执行。当前 runtime 支持与资源上限见 [RSI 配置](docs/rsi-setup.md)。
171
+ - Linux 新 `--install-owner` 使用原生完整仓库边界:基础运行时导出发布工具链,repository schema 4 固定双 UID、系统工具快照与 cgroup v1,独立行为运行时支持工具创建、修订、配对回归及有限采用。准备阶段使用固定归档和冻结依赖;候选不读取 owner 凭据、浏览器、验收答案或网络。首次授权前创建五个空 runner 账本,在独立 seal 文件中固定目录/数据库身份,并把引用纳入原授权摘要;读取、安装重试和直接重启都不能补造丢失账本。旧 Docker 安装重试仍按原后台只查询真实镜像,不重建资源、不续期或新增创建/修订授权。
169
172
  - `requestTimeoutMs`(默认 30 秒)为常规 OpenAPI 请求设置硬 deadline,`imageDownloadTimeoutMs` 独立限制图片下载。SDK 会把可下传的 AbortSignal 交给底层 HTTP;若调用已经被服务端接收后超时,最终消息保留 Delivery 的 `unknown_after_send` 语义,绝不自动重发或假称未发送。
170
173
  - App Secret 不写 Delivery 数据库、工具参数、health、route、日志或异常;Linux protected-file 没有额外静态加密,同 UID、root 和可读备份仍能取得内容。
171
174
  - Delivery SQLite 保存标准化文本、路由 id 和最多 10 个受限附件描述符;不保存 raw 事件、token 或下载 URL。图片字节只交给 AttachmentStore。
172
175
  - 私聊详细进度只使用 Delivery 生成的限长、常见凭据脱敏 preview;它不是秘密扫描器。群聊始终不发送参数或结果,reasoning/thinking 内容在任何会话都不外发。
173
176
  - 群消息默认必须直接提及机器人;`@all` 不等于提及。最终授权始终由 Delivery/Policy 决定。
177
+ - 若 Delivery 提供 `observe`(WorkItems `intakeLedger.enabled` 时才有 observer),每条规范化、未过期、非问题/审批答复的消息(含因未 @ 而丢弃的群消息)额外上报一次元数据观察:事件 ID、时间、发送者、会话、是否寄址(私聊/@机器人/命令)、回复目标和正文 SHA-256,不含正文;观察失败不影响接收。当前 `senderIsBot` 恒为 `false`。
174
178
 
175
179
  完整的文件系统、子进程、浏览器、审批签名和 Policy 说明见[进度与安全文档](docs/progress-security.md)。
176
180
 
177
181
  ## 当前限制
178
182
 
183
+ - Linux 原生准备已接入 `--prepare-build`、本地更新候选构建和全新 `--install-owner` 配置事务。已有 Docker owner 的程序升级已接入空业务历史检查与停服采用授权 CAS:停服前、资源迁移前及 finalizer 重查,签名 overlay 绑定迁移计划、证明和文件身份,两个启动前验收点显式复核空表;后续正常就绪检查允许新的业务记录。配置启用但库缺失、非空 review/采用历史、sidecar、native→native 或授权不匹配会拒绝;不删库、不刷新额度和期限。完整临时 Home 升级、双服务就绪及回滚仍待实机验收,现有生产 Home 尚未迁移。旧 Docker owner 的安装重试保留原后端,不能用重复安装升级授权。实施边界见[原生运行时](../../docs/dockerless-runtime.md)。
184
+
179
185
  - v0.1 支持文本、受限图片描述符、文本/Markdown-card 出站、durable proposal、owner-DM 一次性工具审批、模型/权限卡片、reaction 和原生进度;模型不能提交任意 card JSON,也不能直接控制 reaction 或进度载荷。
180
186
  - 只有图片资源具备受限下载能力,且依赖 AttachmentStore 与模型图片能力;文件、音频、视频和 sticker 只进入 metadata quarantine。没有病毒扫描、附件上传或消息编辑。
181
187
  - 单应用长连接是集群竞争消费,不提供广播、多节点 exactly-once 或断线历史补拉;目标部署是受 supervisor 管理的单机进程。
@@ -187,3 +193,11 @@ dsh-lark-setup --profile web --refresh-agent-policy --allow-agent-tools
187
193
  ## License
188
194
 
189
195
  MIT
196
+
197
+ The Linux RSI bootstrap and cgroup modules are compatibility adapters over the
198
+ non-activating `@dsh-enhanced/assistant-isolation/native-resources` subentry.
199
+ RSI still verifies its own source-workspace receipt before/after shared preparation
200
+ and re-reads the fixed Git manifest objects. Its public exports, schema-3 runtime
201
+ receipt layout and private runtime cache paths remain compatible. Ordinary native
202
+ resource callers do not need an RSI workspace or repairs repository. Cgroup
203
+ discovery stays independent of base preparation and never creates delegation.
package/cordis.patch.yml CHANGED
@@ -15,6 +15,7 @@
15
15
  requireMentionInGroups: true
16
16
  showProgress: true
17
17
  progressDetails: direct
18
+ showBackgroundProgress: false
18
19
  statusReactions: true
19
20
  maxTextBytes: 65536
20
21
  staleAfterMs: 300000
@@ -124,5 +124,5 @@ Web 会话可调用 `assistant_health`。正常长连接状态为 `larkChannel.s
124
124
  - **权限卡不显示或点击失效:**卡片仅用于 active owner 私聊,并绑定原 chat/card、binding/session、权限状态和 15 分钟默认 TTL。群聊、过期、`/new` 后旧卡或已经文字切档都会失效;重新发送 `/permissions`。
125
125
  - **最终回复正常但没有 `Get` / `DONE`:**旧应用通常缺少 `im:message.reactions:write_only`。重跑一键向导,选择当前 App ID,确认权限增量并发布新版本。reaction 失败不会阻断回答。
126
126
  - **文字能回复但图片不能处理:**确认应用已有 `im:resource` 且发布新版本,profile 安装了 AttachmentStore,当前 route 声明图片输入。可用 `dsh-lark-setup --profile web --create-app --app-id <App ID>` 增量补权限。路径型 key、重定向、超限、MIME/magic 不一致或非 PNG/JPEG/GIF/WebP 会按预期 fail closed。
127
- - **看不到进度但能回答:**确认 `showProgress: true`。`message_cot` 是可降级能力;检查 `assistant_health` 的 `larkChannel.lastErrorCode` 和 Host 错误日志。私聊详情还要求 `progressDetails: direct`;群聊始终只显示状态。
127
+ - **看不到进度但能回答:**确认 `showProgress: true`。`message_cot` 是可降级能力;检查 `assistant_health` 的 `larkChannel.lastErrorCode` 和 Host 错误日志。私聊详情还要求 `progressDetails: direct`;群聊始终只显示状态。原生 Goal 续跑等后台轮次的进度默认不显示,需要时设 `showBackgroundProgress: true`。
128
128
  - **模型卡片下拉不联动或确认后无回复:**确认订阅 `card.action.trigger` 且回调走长连接;用一键向导锁定当前应用并增量补齐回调,发布、重启后重新发送 `/model`,不要继续使用升级前旧卡。实时目录变化或 effort 不受支持时,机器人会要求重新打开。
@@ -8,6 +8,7 @@
8
8
  config:
9
9
  showProgress: true
10
10
  progressDetails: direct
11
+ showBackgroundProgress: false
11
12
  statusReactions: true
12
13
  ```
13
14
 
@@ -19,6 +20,8 @@ config:
19
20
 
20
21
  `progressDetails` 只接受 `off` 或 `direct`,不存在允许群聊详情的模式。群聊即使由 owner 直接 @ 机器人,也始终是 status-only。
21
22
 
23
+ Delivery 为每条进度标注 `origin`(WP19 第 2c 阶段):认领本条消息的轮次及其自动补全轮次为 foreground,同一 Session 上的其他轮次(主要是原生 Goal 续跑轮次)为 background。`showBackgroundProgress: false`(默认)时 adapter 丢弃非终态 background 进度;任何设置下都不会为 background 的开始事件新建进度消息,终态始终送达以关闭前台进度。设为 `true` 时 background 步骤、工具与待办追加到已存在的前台进度,仍受上表受众与 `progressDetails` 约束。进度注意力审计由 Delivery 完成(`inspectProgressAttentionAudit`),只记录,不改变本插件的展示。
24
+
22
25
  `assistant/chunk` 的流式 `reasoning-delta` 与 `assistant/message` 的已组装 reasoning 块都不会越过 Delivery 的进度边界;DSH 将它们定义为 thinking content,不保证是可公开摘要。provider 原始错误消息、系统提示和完整工具对象同样不会进入进度。`step/start` 会产生中性的阶段文案,避免面板为空。
23
26
 
24
27
  ## 工具参数和结果 preview
package/docs/rsi-setup.md CHANGED
@@ -39,7 +39,7 @@ macOS x64 / Apple Silicon 的 `supervised` 使用一个原生 Node Host,由当
39
39
 
40
40
  输出 JSON 的 `repository` 与 `baseline` 可直接用于 `sourceJobs`;Growth 与相关授权须引用同一仓库。初始发布分支为 `repairs`,受管基准为 `refs/dsh-source/repairs`。重复执行会复用并核对已保存的来源和版本,保留已推进的发布分支及基准;它不会把日常修复回退到安装版本。不同版本或来源不能覆盖已有目录,须先完成部署迁移。准备过程需要 Git,官方来源还需要访问 GitHub;失败或中断不会被当成完成。
41
41
 
42
- Linux 上的新安装还会自动准备授权工具与本地发布资源,无需手工复制程序、生成密钥或创建 registry。`--prepare-build` 在构建准备前执行此步骤,因此 Docker 不可用时也能保留它们。已有安装可独立运行,不需要 Git、Docker、源码 checkout 或 owner manifest:
42
+ Linux 上的新安装还会自动准备授权工具与本地发布资源,无需手工复制程序、生成密钥或创建 registry。`--prepare-build` 在构建准备前执行此步骤,因此构建环境未就绪时也能保留它们。已有安装可独立运行,不需要 Git、Docker、源码 checkout 或 owner manifest:
43
43
 
44
44
  ```sh
45
45
  ~/.dsh/profiles/web/node_modules/.bin/dsh-rsi-setup \
@@ -56,9 +56,11 @@ Linux 上的新安装还会自动准备授权工具与本地发布资源,无
56
56
 
57
57
  新生成的创建采用授权显式包含 `creationCapabilities.retention.maximumLifetimeMs: 2592000000`(最多 30 天)。首次采用仍要求原创建作业和计划有效期内的新鲜独立证书;采用后可以跨单个作业、计划及证书的截止,在原使用授权和 runner 截止前复用精确版本。默认安装的创建与使用授权仍共用原年度截止,此模式不跨该授权期限。重启保留原采用时间、截止和调用额度,反馈纠正、撤回或 owner 变化仍阻断使用。旧 manifest 缺少此字段时保持证书窗口内的原语义;重跑安装不补签,不向已有账本自动增加此授权。该期限不证明真实任务收益或版本替换回退已经验收。
58
58
 
59
- Linux 安装器从已批准的源码构建镜像准备独立行为镜像,资源保存在 `$DSH_HOME/rsi-creation-builds/<profile>`。临时上下文只含固定受信任 worker/launcher、Dockerfile、清单和锁文件,不复制候选、owner 凭据或期望行为。首次镜像准备可能访问 Debian 包源;运行候选时禁用网络。重复安装核验原始回执、输入摘要、Docker 可执行文件和实际不可变镜像 ID;镜像缺失或输入漂移不会触发重建。macOS 行为 runner 复用上文私有原生运行时。两种平台的验收与调用均使用独立私有 runner 账本,额度和 unknown 不因重启重置。该安装配置本身不证明普通任务收益或完整自迭代闭环。
59
+ Linux 全新 `--install-owner` 默认走原生完整能力:从基础 schema 3 运行时导出发布工具链,准备 repository schema 4(双 UID、系统工具快照),再固定独立行为观察器及 cgroup v1 根。owner 确定后编译完整源码修改、创建、修订、回归及采用授权,并按原事务先启动协调器、后启动目标 Host。源码 runner 为 48 次、累计 24 小时、单次 1800 秒;创建与修订各 32 次,独立验收和采用仍有各自有限预算。原始模型选择、期限及所有配置在重试时保持一致。manifest 的 `linuxBuild` 固定完整源码构建配置与行为运行时摘要,阻止来源提交、锁文件、cgroup 和运行时身份在配置重编译时漂移;更新这些绑定需要独立迁移。
60
60
 
61
- Linux 新安装还会尝试准备离线构建镜像。当前完整仓库检查沿用已验证的 Linux x64、Docker Server `29.4.1/linux/amd64` 与嵌套 sandbox 配置;不满足这些前置条件时,安装器保留源码并报告 `buildUnavailable`,普通 Agent 安装继续,但不声称源码修复构建已经可用。macOS 原生准备失败会停止安装,不由 `--optional-build` 掩盖;已有资源不一致也会停止安装。
61
+ 首次授权前在 `state` 中初始化五个空 runner SQLite 账本,把目录/数据库的 dev、inode、固定 schema 与 seal 摘要绑定到各自配置。seal 文件在 `state/native-runner-states` 中,与 runner 目录分离。已有 manifest 的重试只读取原始引用;账本或目录缺失/替换、seal 缺失或内容漂移均拒绝,不清零额度、不重派 unknown。未使用的修订 runner 也必须保留其预初始化账本。主配置缺失时,首次安装模式还要求所有子账本无任何授权、controller、任务或审计历史,也无未结算 WAL;已使用的封存账本不能被当作新安装重新授权。该约束只保护显式带 `stateSeal` 的新配置;无 seal 的历史 generic runner 不能因此宣称已迁移。
62
+
63
+ Linux 新安装默认准备原生离线构建运行时(sourceBuild schema 3,`backend: linux-native`),不调用 Docker CLI、daemon、socket,也不拉取镜像:按固定摘要从 nodejs.org 与 npm registry 下载官方 Node v22.23.2 和 pnpm 11.7.0,经私有 user/mount/PID/network 命名空间(bubblewrap)与无凭据环境先 `pnpm fetch --frozen-lockfile --ignore-scripts` 预取,再以 `--offline` 完成安装,随后的候选与发布构建全部离线运行。前置为 Linux x64/arm64、`/usr/bin/{git,curl,tar,bwrap,unshare,mount,bash,python3}` 可用,以及 bwrap 全命名空间隔离和有界 tmpfs 挂载探测通过;不满足这些环境前置时,安装器保留源码并报告 `buildUnavailable`,普通 Agent 安装继续,但不声称源码修复构建已经可用。清单不完整、回执或内容漂移、网络失败等完整性错误始终致命,不由 `--optional-build` 掩盖;macOS 原生准备失败同样停止安装,已有资源不一致也会停止安装。迁移并存期间,显式传入绝对路径 `--docker-path` 仍走旧的不可变镜像准备路径,该路径沿用已验证的 Docker Server `29.4.1/linux/amd64` 与嵌套 sandbox 配置;同一 profile 的原生回执与镜像回执互不续跑。
62
64
 
63
65
  支持的环境可单独运行严格构建准备:
64
66
 
@@ -67,9 +69,9 @@ Linux 新安装还会尝试准备离线构建镜像。当前完整仓库检查
67
69
  --prepare-build --profile web --dsh-home "$HOME/.dsh"
68
70
  ```
69
71
 
70
- Linux 输出中的 `sourceBuild` 可用于 Control Plane manifest。Linux 安装器还自动从同一不可变镜像导出原生 Node、pnpm、离线 store 和供应链策略缓存,输出 `releaseBuild` 可直接用于本地发布 adapter 的 `build` 配置;无需手填工具链路径和摘要。资源保存在 `$DSH_HOME/rsi-release-builds/<profile>`,回执固定所有文件内容与模式。导出只创建未启动的容器,复制固定路径后删除容器,不执行其中的源码。发布仍使用本机 `/usr/bin/bwrap` 和 `/usr/bin/tar`;`--optional-build` 在缺少这些前置条件时报告 `releaseBuildUnavailable`,保留已准备的源码验证镜像。实际复制、工具链版本校验或已有回执漂移失败仍会停止安装。配置使用不可变镜像 ID,并将私有回执与 seccomp 保存到 `$DSH_HOME/rsi-builds/<profile>`。重新执行会核对来源、构建输入与本地镜像;不会静默换镜像或重新构建丢失的已登记镜像。Docker 构建脚本、Dockerfile 与 seccomp 必须匹配安装包内登记的摘要,只把 lock、workspace 配置及包清单放入构建上下文;不复制源码、主机包缓存或凭据。首次镜像准备需要网络,随后候选构建离线运行。macOS 的 `--prepare-build` 仅输出不含 owner 授权的 runtime/sourceBuild 基础回执;`--install-owner` 编译时才加入绑定安装、owner、期限与额度的 sourceBuild 配置。
72
+ `--prepare-build` 输出的是基础 schema 3 原生准备回执,不是 owner 执行授权。正式 `--install-owner` 另取 repository schema 4,并在 owner/原期限固定后编译 Control Plane 的 Linux sourceBuild,绑定完整运行时、双 UID、系统快照、资源限额与账本 seal。基础运行时仍用于导出 schema 2 `releaseBuild`:固定工具链、离线 store/cache 与 `runtimeDigest`,供既有发布 adapter 使用。创建、修订、回归及采用共享同族行为观察器与 cgroup,但使用独立账本和用途分离的签名授权。
71
73
 
72
- Linux 自动配置使用完整仓库检查的 30 分钟、16 GiB 内存、8 CPU、1024 PID 和 4 GiB 工作区上限;Linux repository 构建保持 2 GiB 临时目录。宿主需提供相应资源。嵌套 sandbox 的系统路径与 seccomp 边界见[构建镜像指南](../../../scripts/isolation/README.md#nested-sandbox-profile)。macOS 原生构建按固定 60 秒单次、1 MiB 输出、1000 次及 24 小时累计运行限额授予,独立行为 runner 保留各自原有额度。准备资源只完成安装前置步骤;`--install-owner` 会核对已安装 Host、owner 和最终配置后再应用。
74
+ Linux 原生自动配置使用完整仓库检查的 30 分钟、16 GiB 内存、8 CPU、1024 PID、8 GiB 工作区及 4 GiB 临时目录上限;两类目录各限 100 万 inode。宿主必须具备相应的委派和资源。原生边界见[运行时说明](../../../docs/dockerless-runtime.md);旧 Docker 授权保留原 4 GiB 工作区、2 GiB 临时目录与[嵌套 sandbox 配置](../../../scripts/isolation/README.md#nested-sandbox-profile)。macOS 原生构建按固定 60 秒单次、1 MiB 输出、1000 次及 24 小时累计运行限额授予,独立行为 runner 保留各自原有额度。准备资源只完成安装前置步骤;`--install-owner` 会核对已安装 Host、owner 和最终配置后再应用。
73
75
 
74
76
  目标先完成 [Lark 配对](setup.md)与 [supervised 安装](../../../scripts/install/README.md),已有唯一 active owner DM。无需先激活固定 Recovery runbook;缺失的 owner route 在成对配置事务内生成,既有唯一精确路由(包括 `supervised-growth-owner`)沿用原 ID 和 minimum generation。路由冲突或重复会拒绝,不覆盖其他授权。新安装自动补齐目标依赖;旧安装若缺依赖,为目标补装同一构建的 Growth Driver、Goals、Skills、Verifier、Memory Learning 与 Control Plane。Memory 由 Personal Assistant 内嵌提供,不再添加独立 Memory bundle。开发版应使用本地构建的包;仅有相同版本号不能证明含有这些新增 API。
75
77
 
@@ -147,15 +149,17 @@ macOS 本地 cohort 安装沿用冻结制品与安装文件校验,持同一个
147
149
 
148
150
  ```sh
149
151
  dsh-rsi-setup --prepare-local-update --profile web --dsh-home "$HOME/.dsh"
152
+ # 迁移并存期需要旧镜像收据时,可显式指定绝对路径:
153
+ # --docker-path /usr/bin/docker
150
154
  ```
151
155
 
152
156
  尚未安装 RSI owner 权限的旧冻结 profile 若缺少 Memory Learning,可在已审核并构建的 checkout 中显式追加 `--add-memory-learning`。它只允许这一根包扩展,生成独立 schema 2 候选;准备前后检查真实 pre-owner 权限与签名历史。后续 checkout 维护事务核验精确新增的默认 disabled、无 config 行及全部原配置,仍不启用 scheduler 或学习。原 schema 1 更新保持原 roots;已有 owner/coordinator 不支持这条扩展。具体命令与恢复边界见[安装器指南](../../../scripts/install/README.md#checkout-内的-pre-owner-冻结源码维护)。
153
157
 
154
158
  它从既有冻结收据读取源码路径,固定上游已提交 HEAD 和当前修复分支;两条修复 ref 必须已对齐。可直接快进时复用提交,分叉时在私有新仓库合并;冲突会停止准备并保留原始分支。上游的精确包版本可以不同于已安装版本,未提交修改不进入候选。源码、tarball 及准备收据保存在 Home 同级的私有 `.dsh-rsi-local-updates-<home-hash>/` 内;相同原始制品、上游和修复提交会复用已核验的准备结果,变化则使用另一目录。准备期间上游、原始收据或已安装包变化时不返回成功。
155
159
 
156
- 更新构建先用已固定摘要的 manifest-only Docker 构建器准备依赖镜像,再导出独立 Node/pnpm/store/cache。候选的 build/pack 脚本在现有 release adapter 的离线 bubblewrap 环境内运行,只挂载构建副本、输出及只读工具链/依赖,不提供原 Home、原 Git 仓库、凭据或环境变量。此步骤需要与首次构建准备相同的 Linux x64、Docker 和 bubblewrap 支持;没有宿主机直接构建的回退路径。输出 `mode: prepared` 只表示源码和制品已准备,尚未迁移签名源码历史、构建/授权配置或切换服务;当前普通 upgrade 仍拒绝冻结本地安装。尚无 owner/coordinator 的安装可显式使用[本地 checkout 维护事务](../../../scripts/install/README.md#checkout-内的-pre-owner-冻结源码维护);已配置 owner 的冻结安装尚不支持完整升级。激活须由停机事务重新核对当前状态,不能把准备收据当作激活授权。
160
+ Linux 更新构建默认准备摘要固定的原生运行时(schema 3,backend `linux-native`):从 nodejs.org 与 npm registry 下载官方 Node v22.23.2、pnpm 11.7.0,在受控无凭据环境中先 `pnpm fetch --frozen-lockfile --ignore-scripts` 再离线安装(依赖准备不执行仓库代码;候选执行另受 bubblewrap 隔离),并把运行时全树摘要写入候选 `rsi-linux-runtimes/<profile>/bootstrap.json`;随后导出同摘要工具链/store/cache 三树到 `rsi-release-builds`,输出 schema 2 release 收据(`runtimeDigest` 而非 image ID)。候选的 build/pack 脚本在现有 release adapter 的离线 bubblewrap 环境内运行,只挂载构建副本、输出及只读工具链/依赖,不提供原 Home、原 Git 仓库、凭据或环境变量。全程不调用 Docker CLI、daemon、socket 或镜像;前置(Linux x64/arm64、bwrap/unshare/mount 等)缺失时准备失败,运行时完整性错误始终致命。显式绝对路径 `--docker-path` 改用旧 manifest-only 镜像构建器(schema 1);两类后端收据目录(`rsi-linux-runtimes` 与 `rsi-builds`)互斥、互不续跑,同一候选同时存在两类收据判为不可重放漂移。输出 `mode: prepared` 只表示源码和制品已准备,尚未迁移签名源码历史、构建/授权配置或切换服务;当前普通 upgrade 仍拒绝冻结本地安装。尚无 owner/coordinator 的安装可显式使用[本地 checkout 维护事务](../../../scripts/install/README.md#checkout-内的-pre-owner-冻结源码维护);已配置 owner 的冻结安装尚不支持完整升级。上述 pre-owner checkout 事务支持 Docker→native 和 native→native 的基础 runtime/release/cohort 迁移,保留原身份和 `host:null` 源码历史;混合后端、原生降级回 Docker 及 owner 专用资源会拒绝。已有 owner 的迁移使用独立授权与验收路径。激活须由停机事务重新核对当前状态,不能把准备收据当作激活授权。
157
161
 
158
- 安装事务可通过只读候选检查重新验证源提交、原安装、tarball、固定构建器和导出的工具链;它不会执行 Docker 或候选脚本,也不会补建丢失的资源。这里的构建资源检查证明本地记录和文件仍匹配,不证明 Docker 镜像当前可运行。源码维护 helper 在独立 Home 副本中导入新提交、更新受管 refs,并保留最初 bootstrap、Git 对象及 `baseline.initialCommit`;既有 Host 密钥签名的 `maintenance.json` 使后续源码读取和候选准备解析到新版本。Control Plane schema 28 将该维护记录与旧 release 收据一起校验,拒绝未结源码任务、断链、旧 tip 或不匹配的 Host 身份。它是完整升级事务的内部接口,尚未开放为直接替换运行中 Agent 的命令;协议边界见[兼容性说明](../../../docs/compatibility.md#本地源码维护历史control-plane-schema-28)。
162
+ 安装事务可通过只读候选检查重新验证源提交、原安装、tarball、固定构建运行时和导出的工具链;它不会执行 Docker 或候选脚本,也不会补建丢失的资源。这里的构建资源检查证明本地记录和文件仍匹配,不证明旧 Docker 镜像当前可运行,也不重新下载或修复原生运行时。源码维护 helper 在独立 Home 副本中导入新提交、更新受管 refs,并保留最初 bootstrap、Git 对象及 `baseline.initialCommit`;既有 Host 密钥签名的 `maintenance.json` 使后续源码读取和候选准备解析到新版本。Control Plane schema 28 将该维护记录与旧 release 收据一起校验,拒绝未结源码任务、断链、旧 tip 或不匹配的 Host 身份。它是完整升级事务的内部接口,尚未开放为直接替换运行中 Agent 的命令;协议边界见[兼容性说明](../../../docs/compatibility.md#本地源码维护历史control-plane-schema-28)。
159
163
 
160
164
  内部激活准备已包含停服账本预检、维护签名生成和三类资源副本迁移。预检不会创建或迁移账本;非空 WAL/回滚日志、未结源码工作或冲突的部署观察须先在原 Host 对账。签名绑定原始与副本一致的部署及 readiness。资源迁移只重定位副本中的 tarball、构建器和发布工具链收据,并保留原安装与候选;替换或验证失败时尝试恢复副本原资源;已验证后的备份清理失败及进程崩溃由外层事务恢复或丢弃副本。成对包安装另由内部 `stageRsiLocalPairPackages` 处理:先核对两个 profile 的原制品文件、直接依赖、原生 Loader bundle 集合及固定 overrides,只替换原 cohort 拥有的精确依赖边;保留 profile 配置与注释,拒绝候选更改既有 build-script 决定或新增允许。两边安装和文件核验全部成功后才推进协调器登记,同版本源码更新也按制品字节核验。调用方须持有生命周期锁,并在隔离环境把可丢弃的已停写 Home 副本映射到原逻辑路径,准备相符的独立 pnpm store/cache;pnpm 会沿旧 `node_modules/.modules.yaml` 读取 store,且安装需要原 profile 的 lockfile 策略校验缓存和依赖包,仅复制源码构建缓存不足以离线安装。组件不自行建立这些边界,也不会放宽已有 lockfile 或脚本策略。安装中断或失败保留副本供外层恢复或丢弃,不宣称双方原子回滚。已配置 owner 的冻结安装仍需接入完整 owner 配置迁移、观察中的部署/回退证明、服务切换与崩溃恢复,因此这些成对内部组件不能当作升级成功。
161
165
 
package/docs/setup.md CHANGED
@@ -99,7 +99,7 @@ pnpm --filter @dsh-enhanced/lark-channel run onboard --profile web --create-app
99
99
 
100
100
  `DSH-CONNECT-...` 仅用于临时长连接上的 owner 身份绑定,绑定阶段不会自动回复,也不会建立 Delivery 聊天会话。应在当前向导的等待窗口内发送最新短语;向导超时退出后,旧短语不再有效。以终端的绑定成功结果判断,不以聊天中是否回复判断。
101
101
 
102
- 全新或完整重装的 Home 在常驻服务启动后,还需要 owner 私聊发送一条普通消息或 `/model`,以建立真实会话;`/model` 可同时验证模型卡片与选择回调。若后续原生学习配置报告 `exactly one current owner DM is required`,先完成这一步,再通过安装器的 Host-aware 入口续跑 owner 配置。此时已有身份绑定和普通服务会保留,无需重新配对或授予额外业务权限。
102
+ 全新或完整重装的 Home 在常驻服务启动后,还需要 owner 私聊发送一条普通消息或 `/model`,以建立真实会话;`/model` 可同时验证模型卡片与选择回调。交互式安装器会在配置 owner 学习前提示这一步并自动等待(默认最长 600 秒,`--owner-wait-seconds` 调整,`0` 关闭);等待只读取本地绑定快照,不发送消息,也不改变 owner 授权。也可单独运行 `dsh-rsi-setup --wait-owner-dm --profile web --dsh-home <绝对路径> --timeout-seconds 600`,出现唯一 owner 私聊时以 `{"mode":"ready"}` 退出,超时或存在多个绑定时退出码为 3。若后续原生学习配置报告 `exactly one current owner DM is required`,先完成这一步,再通过安装器的 Host-aware 入口续跑 owner 配置。此时已有身份绑定和普通服务会保留,无需重新配对或授予额外业务权限。
103
103
 
104
104
  ### 官方一键授权的范围
105
105
 
@@ -196,6 +196,7 @@ config:
196
196
  requireMentionInGroups: true
197
197
  showProgress: true
198
198
  progressDetails: direct
199
+ showBackgroundProgress: false
199
200
  statusReactions: true
200
201
  imageDownloadTimeoutMs: 30000
201
202
  ```
package/lib/adapter.d.ts CHANGED
@@ -25,6 +25,8 @@ export interface LarkAdapterOptions {
25
25
  onDisconnected?(): void;
26
26
  showProgress?: boolean;
27
27
  progressDetails?: 'off' | 'direct';
28
+ /** WP19 stage 2c: opt in to rendering non-terminal background progress. Default false. */
29
+ showBackgroundProgress?: boolean;
28
30
  /** SHA-256 of the exact app identity and secret, never the secret itself. */
29
31
  progressCredentialFingerprint?: string;
30
32
  statusReactions?: boolean;
@@ -121,6 +123,12 @@ export declare class LarkDeliveryAdapter implements DeliveryAdapter {
121
123
  private lastErrorCode;
122
124
  constructor(config: LarkInboundConfig, transport: LarkTransport, options?: LarkAdapterOptions);
123
125
  start(context: DeliveryAdapterContext): Promise<() => Promise<void>>;
126
+ /**
127
+ * WP20 intake: hand Delivery an observation (ids, booleans, a sha256 digest
128
+ * and the transient normalized text the digest covers). Optional on older
129
+ * Delivery cores and never allowed to affect acceptance.
130
+ */
131
+ private observeIntake;
124
132
  health(): LarkChannelHealth;
125
133
  private leaveConnected;
126
134
  progress(intent: Readonly<DeliveryProgressIntent>): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
package/lib/adapter.js CHANGED
@@ -351,7 +351,7 @@ export class LarkDeliveryAdapter {
351
351
  this.statusReactions = options.statusReactions ?? true;
352
352
  this.userQuestionTtlMs = options.userQuestionTtlMs ?? 24 * 60 * 60 * 1_000;
353
353
  this.progressCredentialFingerprint = options.progressCredentialFingerprint;
354
- this.progressPresenter = new LarkProgressPresenter(transport, options.showProgress ?? true, options.progressDetails ?? 'direct', error => this.recordPresentationFailure(error));
354
+ this.progressPresenter = new LarkProgressPresenter(transport, options.showProgress ?? true, options.progressDetails ?? 'direct', error => this.recordPresentationFailure(error), options.showBackgroundProgress ?? false);
355
355
  }
356
356
  async start(context) {
357
357
  this.closing = false;
@@ -383,14 +383,21 @@ export class LarkDeliveryAdapter {
383
383
  const normalized = normalizeLarkMessage(unmentionedQuestionReply
384
384
  ? { ...this.config, requireMentionInGroups: false }
385
385
  : this.config, message, this.now());
386
- if (normalized.outcome !== 'accept')
386
+ if (normalized.outcome !== 'accept') {
387
+ // An unaddressed group message is still a metadata-only intake
388
+ // observation; stale and empty events are not.
389
+ if (normalized.reason === 'bot-mention-required')
390
+ this.observeIntake(context, message, false);
387
391
  return;
392
+ }
388
393
  if (await this.tryAnswerUserQuestion(normalized.envelope, message.messageId))
389
394
  return;
390
395
  if (this.tryAnswerToolApproval(normalized.envelope, message.messageId))
391
396
  return;
392
397
  if (unmentionedQuestionReply)
393
398
  return;
399
+ this.observeIntake(context, message, message.chatType === 'p2p' || message.mentionedBot
400
+ || normalized.envelope.kind === 'command', normalized.envelope.text);
394
401
  const accepted = await context.accept(normalized.envelope);
395
402
  if (this.statusReactions && !accepted.duplicate && accepted.status === 'queued') {
396
403
  // The durable Inbox acknowledgement is the critical path. A slow or
@@ -466,6 +473,31 @@ export class LarkDeliveryAdapter {
466
473
  }
467
474
  };
468
475
  }
476
+ /**
477
+ * WP20 intake: hand Delivery an observation (ids, booleans, a sha256 digest
478
+ * and the transient normalized text the digest covers). Optional on older
479
+ * Delivery cores and never allowed to affect acceptance.
480
+ */
481
+ observeIntake(context, message, addressed, text) {
482
+ if (typeof context.observe !== 'function')
483
+ return;
484
+ try {
485
+ const normalized = text ?? message.content.replaceAll('\r\n', '\n').trim();
486
+ context.observe({
487
+ eventId: message.messageId,
488
+ occurredAt: message.createTime,
489
+ principal: { channel: 'lark', account: this.config.account, tenant: this.config.tenant, user: message.senderId },
490
+ conversation: { kind: message.chatType === 'p2p' ? 'dm' : 'group', chat: message.chatId },
491
+ addressed,
492
+ // The normalized SDK message carries no sender type; bot senders are not distinguished yet.
493
+ senderIsBot: false,
494
+ ...(message.replyToMessageId === undefined ? {} : { replyToProviderMessageId: message.replyToMessageId }),
495
+ // `text` is transient: Delivery forwards it only to an opted-in observer and never stores it.
496
+ ...(normalized.length === 0 ? {} : { contentDigest: createHash('sha256').update(normalized, 'utf8').digest('hex'), text: normalized }),
497
+ });
498
+ }
499
+ catch { /* observation is best-effort */ }
500
+ }
469
501
  health() {
470
502
  return {
471
503
  state: this.state,