botmux 3.13.0 → 3.14.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.
Files changed (508) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +25 -1
  3. package/dist/.runtime-build-id +1 -1
  4. package/dist/adapters/adopt-route.d.ts +58 -0
  5. package/dist/adapters/adopt-route.d.ts.map +1 -1
  6. package/dist/adapters/adopt-route.js +136 -0
  7. package/dist/adapters/adopt-route.js.map +1 -1
  8. package/dist/adapters/backend/capabilities.js +1 -1
  9. package/dist/adapters/backend/capabilities.js.map +1 -1
  10. package/dist/adapters/backend/herdr-backend.d.ts +1 -1
  11. package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
  12. package/dist/adapters/backend/herdr-backend.js +2 -1
  13. package/dist/adapters/backend/herdr-backend.js.map +1 -1
  14. package/dist/adapters/backend/riff-backend.d.ts +97 -0
  15. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  16. package/dist/adapters/backend/riff-backend.js +380 -66
  17. package/dist/adapters/backend/riff-backend.js.map +1 -1
  18. package/dist/adapters/backend/sandbox.d.ts +8 -0
  19. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  20. package/dist/adapters/backend/sandbox.js +16 -2
  21. package/dist/adapters/backend/sandbox.js.map +1 -1
  22. package/dist/adapters/backend/tmux-backend.d.ts +12 -13
  23. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  24. package/dist/adapters/backend/tmux-backend.js +113 -53
  25. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  26. package/dist/adapters/backend/tmux-pipe-backend.d.ts +4 -3
  27. package/dist/adapters/backend/tmux-pipe-backend.d.ts.map +1 -1
  28. package/dist/adapters/backend/tmux-pipe-backend.js +12 -9
  29. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  30. package/dist/adapters/backend/zellij-backend.d.ts +2 -3
  31. package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
  32. package/dist/adapters/backend/zellij-backend.js +6 -13
  33. package/dist/adapters/backend/zellij-backend.js.map +1 -1
  34. package/dist/adapters/backend/zellij-observe-backend.d.ts +2 -1
  35. package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -1
  36. package/dist/adapters/backend/zellij-observe-backend.js +6 -3
  37. package/dist/adapters/backend/zellij-observe-backend.js.map +1 -1
  38. package/dist/adapters/backend/zmx-backend.d.ts.map +1 -1
  39. package/dist/adapters/backend/zmx-backend.js +40 -18
  40. package/dist/adapters/backend/zmx-backend.js.map +1 -1
  41. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  42. package/dist/adapters/cli/claude-code.js +12 -1
  43. package/dist/adapters/cli/claude-code.js.map +1 -1
  44. package/dist/adapters/cli/codex.d.ts.map +1 -1
  45. package/dist/adapters/cli/codex.js +3 -2
  46. package/dist/adapters/cli/codex.js.map +1 -1
  47. package/dist/adapters/cli/dsh.d.ts +4 -0
  48. package/dist/adapters/cli/dsh.d.ts.map +1 -0
  49. package/dist/adapters/cli/dsh.js +96 -0
  50. package/dist/adapters/cli/dsh.js.map +1 -0
  51. package/dist/adapters/cli/fs-policy.d.ts.map +1 -1
  52. package/dist/adapters/cli/fs-policy.js +5 -0
  53. package/dist/adapters/cli/fs-policy.js.map +1 -1
  54. package/dist/adapters/cli/opencode.d.ts +52 -1
  55. package/dist/adapters/cli/opencode.d.ts.map +1 -1
  56. package/dist/adapters/cli/opencode.js +117 -76
  57. package/dist/adapters/cli/opencode.js.map +1 -1
  58. package/dist/adapters/cli/opencode2.d.ts +4 -0
  59. package/dist/adapters/cli/opencode2.d.ts.map +1 -0
  60. package/dist/adapters/cli/opencode2.js +137 -0
  61. package/dist/adapters/cli/opencode2.js.map +1 -0
  62. package/dist/adapters/cli/read-isolation.d.ts +1 -1
  63. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  64. package/dist/adapters/cli/read-isolation.js +5 -2
  65. package/dist/adapters/cli/read-isolation.js.map +1 -1
  66. package/dist/adapters/cli/registry.d.ts +7 -1
  67. package/dist/adapters/cli/registry.d.ts.map +1 -1
  68. package/dist/adapters/cli/registry.js +19 -6
  69. package/dist/adapters/cli/registry.js.map +1 -1
  70. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  71. package/dist/adapters/cli/shared-hints.js +13 -0
  72. package/dist/adapters/cli/shared-hints.js.map +1 -1
  73. package/dist/adapters/cli/types.d.ts +24 -3
  74. package/dist/adapters/cli/types.d.ts.map +1 -1
  75. package/dist/adapters/hook-command.d.ts +8 -0
  76. package/dist/adapters/hook-command.d.ts.map +1 -1
  77. package/dist/adapters/hook-command.js +11 -0
  78. package/dist/adapters/hook-command.js.map +1 -1
  79. package/dist/adapters/hook-installer.d.ts +16 -1
  80. package/dist/adapters/hook-installer.d.ts.map +1 -1
  81. package/dist/adapters/hook-installer.js +232 -2
  82. package/dist/adapters/hook-installer.js.map +1 -1
  83. package/dist/bot-registry.d.ts +116 -8
  84. package/dist/bot-registry.d.ts.map +1 -1
  85. package/dist/bot-registry.js +52 -4
  86. package/dist/bot-registry.js.map +1 -1
  87. package/dist/cli/pm2-start-transaction.d.ts +14 -0
  88. package/dist/cli/pm2-start-transaction.d.ts.map +1 -1
  89. package/dist/cli/pm2-start-transaction.js +25 -9
  90. package/dist/cli/pm2-start-transaction.js.map +1 -1
  91. package/dist/cli/restart-failure-notification.d.ts +54 -0
  92. package/dist/cli/restart-failure-notification.d.ts.map +1 -0
  93. package/dist/cli/restart-failure-notification.js +142 -0
  94. package/dist/cli/restart-failure-notification.js.map +1 -0
  95. package/dist/cli/restart-failure-owner.d.ts +20 -0
  96. package/dist/cli/restart-failure-owner.d.ts.map +1 -0
  97. package/dist/cli/restart-failure-owner.js +27 -0
  98. package/dist/cli/restart-failure-owner.js.map +1 -0
  99. package/dist/cli/restart-shutdown-preflight.d.ts +24 -0
  100. package/dist/cli/restart-shutdown-preflight.d.ts.map +1 -0
  101. package/dist/cli/restart-shutdown-preflight.js +105 -0
  102. package/dist/cli/restart-shutdown-preflight.js.map +1 -0
  103. package/dist/cli/send-dispatch.d.ts +26 -0
  104. package/dist/cli/send-dispatch.d.ts.map +1 -1
  105. package/dist/cli/send-dispatch.js +30 -0
  106. package/dist/cli/send-dispatch.js.map +1 -1
  107. package/dist/cli.d.ts +4 -1
  108. package/dist/cli.d.ts.map +1 -1
  109. package/dist/cli.js +665 -399
  110. package/dist/cli.js.map +1 -1
  111. package/dist/codex-app-runner.js +38 -15
  112. package/dist/codex-app-runner.js.map +1 -1
  113. package/dist/codex-rpc-lifecycle.d.ts +14 -2
  114. package/dist/codex-rpc-lifecycle.d.ts.map +1 -1
  115. package/dist/codex-rpc-lifecycle.js +13 -3
  116. package/dist/codex-rpc-lifecycle.js.map +1 -1
  117. package/dist/core/ask-broker.d.ts +3 -0
  118. package/dist/core/ask-broker.d.ts.map +1 -1
  119. package/dist/core/ask-broker.js +29 -7
  120. package/dist/core/ask-broker.js.map +1 -1
  121. package/dist/core/ask-hook/registry.d.ts.map +1 -1
  122. package/dist/core/ask-hook/registry.js +4 -0
  123. package/dist/core/ask-hook/registry.js.map +1 -1
  124. package/dist/core/ask-types.d.ts +5 -1
  125. package/dist/core/ask-types.d.ts.map +1 -1
  126. package/dist/core/ask-types.js.map +1 -1
  127. package/dist/core/browser-restart.d.ts +112 -0
  128. package/dist/core/browser-restart.d.ts.map +1 -0
  129. package/dist/core/browser-restart.js +233 -0
  130. package/dist/core/browser-restart.js.map +1 -0
  131. package/dist/core/command-handler.d.ts +19 -11
  132. package/dist/core/command-handler.d.ts.map +1 -1
  133. package/dist/core/command-handler.js +237 -43
  134. package/dist/core/command-handler.js.map +1 -1
  135. package/dist/core/current-turn-provenance.d.ts.map +1 -1
  136. package/dist/core/current-turn-provenance.js +7 -27
  137. package/dist/core/current-turn-provenance.js.map +1 -1
  138. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  139. package/dist/core/dashboard-ipc-server.js +317 -10
  140. package/dist/core/dashboard-ipc-server.js.map +1 -1
  141. package/dist/core/dispatch-registry.d.ts.map +1 -1
  142. package/dist/core/dispatch-registry.js +6 -0
  143. package/dist/core/dispatch-registry.js.map +1 -1
  144. package/dist/core/dispatch-report-binding.d.ts +31 -0
  145. package/dist/core/dispatch-report-binding.d.ts.map +1 -0
  146. package/dist/core/dispatch-report-binding.js +88 -0
  147. package/dist/core/dispatch-report-binding.js.map +1 -0
  148. package/dist/core/doc-comment-prompt.d.ts +2 -0
  149. package/dist/core/doc-comment-prompt.d.ts.map +1 -1
  150. package/dist/core/doc-comment-prompt.js +6 -0
  151. package/dist/core/doc-comment-prompt.js.map +1 -1
  152. package/dist/core/host-overload-alert.d.ts +25 -1
  153. package/dist/core/host-overload-alert.d.ts.map +1 -1
  154. package/dist/core/host-overload-alert.js +69 -8
  155. package/dist/core/host-overload-alert.js.map +1 -1
  156. package/dist/core/local-terminal-opener.js +1 -1
  157. package/dist/core/local-terminal-opener.js.map +1 -1
  158. package/dist/core/managed-origin-capability.d.ts +7 -6
  159. package/dist/core/managed-origin-capability.d.ts.map +1 -1
  160. package/dist/core/managed-origin-capability.js +32 -1
  161. package/dist/core/managed-origin-capability.js.map +1 -1
  162. package/dist/core/passthrough-commands.d.ts.map +1 -1
  163. package/dist/core/passthrough-commands.js +3 -2
  164. package/dist/core/passthrough-commands.js.map +1 -1
  165. package/dist/core/plugins/materializer.d.ts.map +1 -1
  166. package/dist/core/plugins/materializer.js +1 -0
  167. package/dist/core/plugins/materializer.js.map +1 -1
  168. package/dist/core/producer-quiescence.d.ts +70 -0
  169. package/dist/core/producer-quiescence.d.ts.map +1 -0
  170. package/dist/core/producer-quiescence.js +90 -0
  171. package/dist/core/producer-quiescence.js.map +1 -0
  172. package/dist/core/raw-command-write-options.d.ts +10 -0
  173. package/dist/core/raw-command-write-options.d.ts.map +1 -0
  174. package/dist/core/raw-command-write-options.js +23 -0
  175. package/dist/core/raw-command-write-options.js.map +1 -0
  176. package/dist/core/raw-command-writer.d.ts +4 -0
  177. package/dist/core/raw-command-writer.d.ts.map +1 -1
  178. package/dist/core/raw-command-writer.js +15 -6
  179. package/dist/core/raw-command-writer.js.map +1 -1
  180. package/dist/core/reply-target.d.ts +11 -0
  181. package/dist/core/reply-target.d.ts.map +1 -1
  182. package/dist/core/reply-target.js +22 -7
  183. package/dist/core/reply-target.js.map +1 -1
  184. package/dist/core/report-session-relay.d.ts +53 -0
  185. package/dist/core/report-session-relay.d.ts.map +1 -0
  186. package/dist/core/report-session-relay.js +116 -0
  187. package/dist/core/report-session-relay.js.map +1 -0
  188. package/dist/core/session-discovery.d.ts +5 -0
  189. package/dist/core/session-discovery.d.ts.map +1 -1
  190. package/dist/core/session-discovery.js +13 -0
  191. package/dist/core/session-discovery.js.map +1 -1
  192. package/dist/core/session-group-birth.d.ts +7 -0
  193. package/dist/core/session-group-birth.d.ts.map +1 -0
  194. package/dist/core/session-group-birth.js +145 -0
  195. package/dist/core/session-group-birth.js.map +1 -0
  196. package/dist/core/session-manager.d.ts +16 -21
  197. package/dist/core/session-manager.d.ts.map +1 -1
  198. package/dist/core/session-manager.js +140 -21
  199. package/dist/core/session-manager.js.map +1 -1
  200. package/dist/core/trigger-session.d.ts.map +1 -1
  201. package/dist/core/trigger-session.js +18 -3
  202. package/dist/core/trigger-session.js.map +1 -1
  203. package/dist/core/types.d.ts +18 -0
  204. package/dist/core/types.d.ts.map +1 -1
  205. package/dist/core/types.js.map +1 -1
  206. package/dist/core/worker-pool.d.ts +63 -11
  207. package/dist/core/worker-pool.d.ts.map +1 -1
  208. package/dist/core/worker-pool.js +241 -13
  209. package/dist/core/worker-pool.js.map +1 -1
  210. package/dist/daemon.d.ts +33 -0
  211. package/dist/daemon.d.ts.map +1 -1
  212. package/dist/daemon.js +900 -137
  213. package/dist/daemon.js.map +1 -1
  214. package/dist/dashboard/auth.d.ts +20 -0
  215. package/dist/dashboard/auth.d.ts.map +1 -1
  216. package/dist/dashboard/auth.js +86 -1
  217. package/dist/dashboard/auth.js.map +1 -1
  218. package/dist/dashboard/bot-payload.d.ts +5 -0
  219. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  220. package/dist/dashboard/bot-payload.js +4 -1
  221. package/dist/dashboard/bot-payload.js.map +1 -1
  222. package/dist/dashboard/federation-spoke-api.d.ts.map +1 -1
  223. package/dist/dashboard/federation-spoke-api.js +27 -3
  224. package/dist/dashboard/federation-spoke-api.js.map +1 -1
  225. package/dist/dashboard/feedback-analytics-api.d.ts +6 -0
  226. package/dist/dashboard/feedback-analytics-api.d.ts.map +1 -0
  227. package/dist/dashboard/feedback-analytics-api.js +39 -0
  228. package/dist/dashboard/feedback-analytics-api.js.map +1 -0
  229. package/dist/dashboard/session-action-timeout.d.ts +3 -0
  230. package/dist/dashboard/session-action-timeout.d.ts.map +1 -0
  231. package/dist/dashboard/session-action-timeout.js +12 -0
  232. package/dist/dashboard/session-action-timeout.js.map +1 -0
  233. package/dist/dashboard/vc-consumer-profiles-api.d.ts +9 -3
  234. package/dist/dashboard/vc-consumer-profiles-api.d.ts.map +1 -1
  235. package/dist/dashboard/vc-consumer-profiles-api.js +2 -1
  236. package/dist/dashboard/vc-consumer-profiles-api.js.map +1 -1
  237. package/dist/dashboard/web/app.d.ts.map +1 -1
  238. package/dist/dashboard/web/app.js +48 -5
  239. package/dist/dashboard/web/app.js.map +1 -1
  240. package/dist/dashboard/web/bot-defaults-page.d.ts +4 -0
  241. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  242. package/dist/dashboard/web/bot-defaults-page.js +273 -36
  243. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  244. package/dist/dashboard/web/bot-defaults.d.ts +6 -0
  245. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  246. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  247. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -1
  248. package/dist/dashboard/web/dashboard-routes.js +1 -0
  249. package/dist/dashboard/web/dashboard-routes.js.map +1 -1
  250. package/dist/dashboard/web/feedback-page.d.ts +3 -0
  251. package/dist/dashboard/web/feedback-page.d.ts.map +1 -0
  252. package/dist/dashboard/web/feedback-page.js +34 -0
  253. package/dist/dashboard/web/feedback-page.js.map +1 -0
  254. package/dist/dashboard/web/groups-page.d.ts.map +1 -1
  255. package/dist/dashboard/web/groups-page.js +7 -2
  256. package/dist/dashboard/web/groups-page.js.map +1 -1
  257. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  258. package/dist/dashboard/web/i18n.js +114 -22
  259. package/dist/dashboard/web/i18n.js.map +1 -1
  260. package/dist/dashboard/web/team-federation-page.d.ts.map +1 -1
  261. package/dist/dashboard/web/team-federation-page.js +26 -2
  262. package/dist/dashboard/web/team-federation-page.js.map +1 -1
  263. package/dist/dashboard/web/team-federation.d.ts +19 -0
  264. package/dist/dashboard/web/team-federation.d.ts.map +1 -1
  265. package/dist/dashboard/web/team-federation.js +3 -0
  266. package/dist/dashboard/web/team-federation.js.map +1 -1
  267. package/dist/dashboard/web/update-action.d.ts +8 -0
  268. package/dist/dashboard/web/update-action.d.ts.map +1 -1
  269. package/dist/dashboard/web/update-action.js +10 -0
  270. package/dist/dashboard/web/update-action.js.map +1 -1
  271. package/dist/dashboard/web/vc-consumer-profiles-section.d.ts.map +1 -1
  272. package/dist/dashboard/web/vc-consumer-profiles-section.js +58 -9
  273. package/dist/dashboard/web/vc-consumer-profiles-section.js.map +1 -1
  274. package/dist/dashboard-web/app.js +1 -1
  275. package/dist/dashboard-web/chunks/bot-defaults-page-4RENHE7J.js +10 -0
  276. package/dist/dashboard-web/chunks/chunk-2WQDS65D.js +1 -0
  277. package/dist/dashboard-web/chunks/{chunk-CU4SUKK3.js → chunk-6O7KXFD2.js} +1 -1
  278. package/dist/dashboard-web/chunks/chunk-G5XGBCM6.js +1 -0
  279. package/dist/dashboard-web/chunks/{chunk-6JTZJRQJ.js → chunk-Q2MT4VWH.js} +15 -15
  280. package/dist/dashboard-web/chunks/{chunk-5QJB24I2.js → chunk-U3ZFSO7E.js} +1 -1
  281. package/dist/dashboard-web/chunks/connectors-page-2KZO5KSJ.js +1 -0
  282. package/dist/dashboard-web/chunks/feedback-page-CLVTOLLO.js +1 -0
  283. package/dist/dashboard-web/chunks/groups-page-HLASRTSY.js +8 -0
  284. package/dist/dashboard-web/chunks/{insights-page-EVGGJI5L.js → insights-page-4RPU2CRU.js} +1 -1
  285. package/dist/dashboard-web/chunks/{monitor-room-HRGR2ENP.js → monitor-room-OTKQ2CXK.js} +1 -1
  286. package/dist/dashboard-web/chunks/monitoring-page-IJPUB6JT.js +2 -0
  287. package/dist/dashboard-web/chunks/office-page-QSR3J44Y.js +1 -0
  288. package/dist/dashboard-web/chunks/overview-page-6OK63V4V.js +1 -0
  289. package/dist/dashboard-web/chunks/roles-page-6NWJMOB5.js +1 -0
  290. package/dist/dashboard-web/chunks/schedules-page-6I3LNXD4.js +1 -0
  291. package/dist/dashboard-web/chunks/{sessions-page-DXBCDWCS.js → sessions-page-B2TXGJDO.js} +1 -1
  292. package/dist/dashboard-web/chunks/settings-page-6KJADSC6.js +2 -0
  293. package/dist/dashboard-web/chunks/{skills-page-2QAVB2SA.js → skills-page-M2Q6L5CB.js} +1 -1
  294. package/dist/dashboard-web/chunks/team-federation-page-7I7FDE3B.js +1 -0
  295. package/dist/dashboard-web/chunks/{v3-page-AY35LKCX.js → v3-page-HQXRL65L.js} +1 -1
  296. package/dist/dashboard-web/chunks/whiteboards-page-LQKC4TAZ.js +1 -0
  297. package/dist/dashboard-web/style.css +35 -0
  298. package/dist/dashboard.js +199 -12
  299. package/dist/dashboard.js.map +1 -1
  300. package/dist/desktop/shared/shell-path-probes.d.ts +1 -1
  301. package/dist/desktop/shared/shell-path-probes.js +2 -2
  302. package/dist/desktop/shared/shell-path-probes.js.map +1 -1
  303. package/dist/dsh-runner.d.ts +3 -0
  304. package/dist/dsh-runner.d.ts.map +1 -0
  305. package/dist/dsh-runner.js +666 -0
  306. package/dist/dsh-runner.js.map +1 -0
  307. package/dist/global-config.d.ts +24 -0
  308. package/dist/global-config.d.ts.map +1 -1
  309. package/dist/global-config.js +35 -0
  310. package/dist/global-config.js.map +1 -1
  311. package/dist/i18n/en.d.ts.map +1 -1
  312. package/dist/i18n/en.js +25 -6
  313. package/dist/i18n/en.js.map +1 -1
  314. package/dist/i18n/zh.d.ts.map +1 -1
  315. package/dist/i18n/zh.js +25 -6
  316. package/dist/i18n/zh.js.map +1 -1
  317. package/dist/im/lark/ask-card.d.ts +3 -1
  318. package/dist/im/lark/ask-card.d.ts.map +1 -1
  319. package/dist/im/lark/ask-card.js +61 -5
  320. package/dist/im/lark/ask-card.js.map +1 -1
  321. package/dist/im/lark/card-builder.d.ts.map +1 -1
  322. package/dist/im/lark/card-builder.js +13 -6
  323. package/dist/im/lark/card-builder.js.map +1 -1
  324. package/dist/im/lark/card-handler.d.ts +2 -1
  325. package/dist/im/lark/card-handler.d.ts.map +1 -1
  326. package/dist/im/lark/card-handler.js +145 -5
  327. package/dist/im/lark/card-handler.js.map +1 -1
  328. package/dist/im/lark/event-dispatcher.d.ts +18 -0
  329. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  330. package/dist/im/lark/event-dispatcher.js +36 -9
  331. package/dist/im/lark/event-dispatcher.js.map +1 -1
  332. package/dist/im/lark/md-card.d.ts +18 -0
  333. package/dist/im/lark/md-card.d.ts.map +1 -1
  334. package/dist/im/lark/md-card.js +21 -0
  335. package/dist/im/lark/md-card.js.map +1 -1
  336. package/dist/im/lark/relay-target-routing.d.ts.map +1 -1
  337. package/dist/im/lark/relay-target-routing.js +3 -2
  338. package/dist/im/lark/relay-target-routing.js.map +1 -1
  339. package/dist/im/lark/reply-mode-command.d.ts.map +1 -1
  340. package/dist/im/lark/reply-mode-command.js +19 -8
  341. package/dist/im/lark/reply-mode-command.js.map +1 -1
  342. package/dist/im/lark/skill-feedback-card.d.ts +15 -0
  343. package/dist/im/lark/skill-feedback-card.d.ts.map +1 -0
  344. package/dist/im/lark/skill-feedback-card.js +149 -0
  345. package/dist/im/lark/skill-feedback-card.js.map +1 -0
  346. package/dist/services/bot-config-store.d.ts +10 -1
  347. package/dist/services/bot-config-store.d.ts.map +1 -1
  348. package/dist/services/bot-config-store.js +103 -3
  349. package/dist/services/bot-config-store.js.map +1 -1
  350. package/dist/services/bridge-fallback-gate.d.ts +14 -0
  351. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  352. package/dist/services/bridge-fallback-gate.js +15 -0
  353. package/dist/services/bridge-fallback-gate.js.map +1 -1
  354. package/dist/services/codex-reasoning-effort.d.ts +9 -0
  355. package/dist/services/codex-reasoning-effort.d.ts.map +1 -0
  356. package/dist/services/codex-reasoning-effort.js +23 -0
  357. package/dist/services/codex-reasoning-effort.js.map +1 -0
  358. package/dist/services/codex-service-tier.d.ts +1 -1
  359. package/dist/services/codex-service-tier.d.ts.map +1 -1
  360. package/dist/services/codex-transcript.d.ts +9 -0
  361. package/dist/services/codex-transcript.d.ts.map +1 -1
  362. package/dist/services/codex-transcript.js +13 -6
  363. package/dist/services/codex-transcript.js.map +1 -1
  364. package/dist/services/feed-group-tagger.d.ts +15 -0
  365. package/dist/services/feed-group-tagger.d.ts.map +1 -0
  366. package/dist/services/feed-group-tagger.js +348 -0
  367. package/dist/services/feed-group-tagger.js.map +1 -0
  368. package/dist/services/feedback-analytics.d.ts +82 -0
  369. package/dist/services/feedback-analytics.d.ts.map +1 -0
  370. package/dist/services/feedback-analytics.js +95 -0
  371. package/dist/services/feedback-analytics.js.map +1 -0
  372. package/dist/services/feedback-outbox.d.ts +24 -0
  373. package/dist/services/feedback-outbox.d.ts.map +1 -0
  374. package/dist/services/feedback-outbox.js +12 -0
  375. package/dist/services/feedback-outbox.js.map +1 -0
  376. package/dist/services/feedback-policy-resolver.d.ts +56 -0
  377. package/dist/services/feedback-policy-resolver.d.ts.map +1 -0
  378. package/dist/services/feedback-policy-resolver.js +156 -0
  379. package/dist/services/feedback-policy-resolver.js.map +1 -0
  380. package/dist/services/feedback-policy.d.ts +41 -0
  381. package/dist/services/feedback-policy.d.ts.map +1 -0
  382. package/dist/services/feedback-policy.js +102 -0
  383. package/dist/services/feedback-policy.js.map +1 -0
  384. package/dist/services/feedback-webhook-dispatcher.d.ts +76 -0
  385. package/dist/services/feedback-webhook-dispatcher.d.ts.map +1 -0
  386. package/dist/services/feedback-webhook-dispatcher.js +237 -0
  387. package/dist/services/feedback-webhook-dispatcher.js.map +1 -0
  388. package/dist/services/grant-prefs-store.d.ts +3 -0
  389. package/dist/services/grant-prefs-store.d.ts.map +1 -1
  390. package/dist/services/grant-prefs-store.js +30 -1
  391. package/dist/services/grant-prefs-store.js.map +1 -1
  392. package/dist/services/groups-store.d.ts +14 -0
  393. package/dist/services/groups-store.d.ts.map +1 -1
  394. package/dist/services/groups-store.js +23 -0
  395. package/dist/services/groups-store.js.map +1 -1
  396. package/dist/services/local-cli-opener.d.ts +1 -1
  397. package/dist/services/local-cli-opener.d.ts.map +1 -1
  398. package/dist/services/local-cli-opener.js +2 -0
  399. package/dist/services/local-cli-opener.js.map +1 -1
  400. package/dist/services/prompt-context-store.d.ts +29 -0
  401. package/dist/services/prompt-context-store.d.ts.map +1 -0
  402. package/dist/services/prompt-context-store.js +205 -0
  403. package/dist/services/prompt-context-store.js.map +1 -0
  404. package/dist/services/session-group-avatar.d.ts +6 -0
  405. package/dist/services/session-group-avatar.d.ts.map +1 -0
  406. package/dist/services/session-group-avatar.js +96 -0
  407. package/dist/services/session-group-avatar.js.map +1 -0
  408. package/dist/services/session-group-title.d.ts +47 -0
  409. package/dist/services/session-group-title.d.ts.map +1 -0
  410. package/dist/services/session-group-title.js +226 -0
  411. package/dist/services/session-group-title.js.map +1 -0
  412. package/dist/services/session-groups-store.d.ts +30 -0
  413. package/dist/services/session-groups-store.d.ts.map +1 -0
  414. package/dist/services/session-groups-store.js +132 -0
  415. package/dist/services/session-groups-store.js.map +1 -0
  416. package/dist/services/session-store.d.ts +58 -0
  417. package/dist/services/session-store.d.ts.map +1 -1
  418. package/dist/services/session-store.js +174 -0
  419. package/dist/services/session-store.js.map +1 -1
  420. package/dist/services/skill-feedback-store.d.ts +252 -0
  421. package/dist/services/skill-feedback-store.d.ts.map +1 -0
  422. package/dist/services/skill-feedback-store.js +795 -0
  423. package/dist/services/skill-feedback-store.js.map +1 -0
  424. package/dist/services/skill-registry-store.d.ts +23 -0
  425. package/dist/services/skill-registry-store.d.ts.map +1 -1
  426. package/dist/services/skill-registry-store.js +93 -7
  427. package/dist/services/skill-registry-store.js.map +1 -1
  428. package/dist/services/team-store.d.ts +4 -0
  429. package/dist/services/team-store.d.ts.map +1 -1
  430. package/dist/services/team-store.js +16 -0
  431. package/dist/services/team-store.js.map +1 -1
  432. package/dist/services/traex-transcript.d.ts +32 -4
  433. package/dist/services/traex-transcript.d.ts.map +1 -1
  434. package/dist/services/traex-transcript.js +116 -8
  435. package/dist/services/traex-transcript.js.map +1 -1
  436. package/dist/services/trigger-types.d.ts +1 -1
  437. package/dist/services/trigger-types.d.ts.map +1 -1
  438. package/dist/services/trigger-types.js +2 -2
  439. package/dist/services/trigger-types.js.map +1 -1
  440. package/dist/services/turn-completion-events.d.ts +57 -0
  441. package/dist/services/turn-completion-events.d.ts.map +1 -0
  442. package/dist/services/turn-completion-events.js +179 -0
  443. package/dist/services/turn-completion-events.js.map +1 -0
  444. package/dist/services/vc-meeting-consumer-isolation.d.ts +21 -12
  445. package/dist/services/vc-meeting-consumer-isolation.d.ts.map +1 -1
  446. package/dist/services/vc-meeting-consumer-isolation.js +25 -19
  447. package/dist/services/vc-meeting-consumer-isolation.js.map +1 -1
  448. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts +8 -2
  449. package/dist/services/vc-meeting-consumer-profile-bootstrap.d.ts.map +1 -1
  450. package/dist/services/vc-meeting-consumer-profile-bootstrap.js +18 -10
  451. package/dist/services/vc-meeting-consumer-profile-bootstrap.js.map +1 -1
  452. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  453. package/dist/setup/bot-config-editor.js +6 -0
  454. package/dist/setup/bot-config-editor.js.map +1 -1
  455. package/dist/setup/cli-availability.d.ts +2 -1
  456. package/dist/setup/cli-availability.d.ts.map +1 -1
  457. package/dist/setup/cli-availability.js +2 -1
  458. package/dist/setup/cli-availability.js.map +1 -1
  459. package/dist/setup/cli-selection.d.ts +8 -0
  460. package/dist/setup/cli-selection.d.ts.map +1 -1
  461. package/dist/setup/cli-selection.js +31 -0
  462. package/dist/setup/cli-selection.js.map +1 -1
  463. package/dist/setup/ensure-fonts.d.ts +5 -0
  464. package/dist/setup/ensure-fonts.d.ts.map +1 -1
  465. package/dist/setup/ensure-fonts.js +26 -1
  466. package/dist/setup/ensure-fonts.js.map +1 -1
  467. package/dist/setup/lark-scopes.json +3 -1
  468. package/dist/setup/open-platform-automation.d.ts +1 -1
  469. package/dist/setup/open-platform-automation.d.ts.map +1 -1
  470. package/dist/setup/open-platform-automation.js +15 -3
  471. package/dist/setup/open-platform-automation.js.map +1 -1
  472. package/dist/skills/definitions.d.ts +1 -1
  473. package/dist/skills/definitions.d.ts.map +1 -1
  474. package/dist/skills/definitions.js +9 -2
  475. package/dist/skills/definitions.js.map +1 -1
  476. package/dist/types.d.ts +10 -4
  477. package/dist/types.d.ts.map +1 -1
  478. package/dist/utils/user-token.d.ts +38 -0
  479. package/dist/utils/user-token.d.ts.map +1 -1
  480. package/dist/utils/user-token.js +76 -1
  481. package/dist/utils/user-token.js.map +1 -1
  482. package/dist/utils/web-terminal-scroll.d.ts +27 -0
  483. package/dist/utils/web-terminal-scroll.d.ts.map +1 -0
  484. package/dist/utils/web-terminal-scroll.js +60 -0
  485. package/dist/utils/web-terminal-scroll.js.map +1 -0
  486. package/dist/vc-agent/polling-source.d.ts +70 -0
  487. package/dist/vc-agent/polling-source.d.ts.map +1 -1
  488. package/dist/vc-agent/polling-source.js +115 -0
  489. package/dist/vc-agent/polling-source.js.map +1 -1
  490. package/dist/worker.js +237 -76
  491. package/dist/worker.js.map +1 -1
  492. package/dist/workflows/definition.d.ts +22 -22
  493. package/dist/workflows/events/payloads.d.ts +8 -8
  494. package/dist/workflows/events/schema.d.ts +20 -20
  495. package/dist/workflows/migration/v2-run-archive-schema.d.ts +20 -20
  496. package/package.json +1 -1
  497. package/dist/dashboard-web/chunks/bot-defaults-page-NQJFJ45Z.js +0 -10
  498. package/dist/dashboard-web/chunks/chunk-KEEYQ3WF.js +0 -1
  499. package/dist/dashboard-web/chunks/connectors-page-HADHZXXZ.js +0 -1
  500. package/dist/dashboard-web/chunks/groups-page-5TYF46RS.js +0 -8
  501. package/dist/dashboard-web/chunks/monitoring-page-LBU7TTTW.js +0 -2
  502. package/dist/dashboard-web/chunks/office-page-DF6RRBMN.js +0 -1
  503. package/dist/dashboard-web/chunks/overview-page-ZB6QH2EX.js +0 -1
  504. package/dist/dashboard-web/chunks/roles-page-ZBZGHIIF.js +0 -1
  505. package/dist/dashboard-web/chunks/schedules-page-NQVQC3QY.js +0 -1
  506. package/dist/dashboard-web/chunks/settings-page-E7NN4NVQ.js +0 -2
  507. package/dist/dashboard-web/chunks/team-federation-page-VGWL53AE.js +0 -1
  508. package/dist/dashboard-web/chunks/whiteboards-page-BNWUU4KG.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"current-turn-provenance.d.ts","sourceRoot":"","sources":["../../src/core/current-turn-provenance.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAiDD,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,qBAAqB,GAAG,IAAI,CAsE9B"}
1
+ {"version":3,"file":"current-turn-provenance.d.ts","sourceRoot":"","sources":["../../src/core/current-turn-provenance.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AA+BD,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,qBAAqB,GAAG,IAAI,CAsE9B"}
@@ -1,5 +1,4 @@
1
- import { readdirSync, readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
1
+ import { readSessionRowCopiesAcrossStores } from '../services/session-store.js';
3
2
  import { findAuthenticatedAncestorSessionContext } from './session-marker.js';
4
3
  export class CurrentTurnProvenanceError extends Error {
5
4
  constructor(message) {
@@ -11,36 +10,17 @@ function nonEmpty(value) {
11
10
  return typeof value === 'string' && value.trim().length > 0;
12
11
  }
13
12
  function readPersistedSession(dataDir, sessionId) {
14
- const matches = [];
15
- let files;
13
+ // The scan itself lives in session-store (fail-closed on an unlistable data
14
+ // dir, corrupt individual files skipped so an unrelated bot's bad file can
15
+ // neither block nor impersonate a valid record). The exactly-once policy —
16
+ // a duplicated row must not be used to infer the caller — stays here.
17
+ let matches;
16
18
  try {
17
- files = readdirSync(dataDir).filter((name) => (name === 'sessions.json'
18
- || (name.startsWith('sessions-') && name.endsWith('.json'))));
19
+ matches = readSessionRowCopiesAcrossStores(sessionId, dataDir);
19
20
  }
20
21
  catch (err) {
21
22
  throw new CurrentTurnProvenanceError(`无法读取 botmux session store:${err instanceof Error ? err.message : String(err)}`);
22
23
  }
23
- for (const file of files) {
24
- let parsed;
25
- try {
26
- parsed = JSON.parse(readFileSync(join(dataDir, file), 'utf-8'));
27
- }
28
- catch {
29
- // A corrupt unrelated bot file must not make a valid caller look like a
30
- // different principal. The target session still has to resolve exactly
31
- // once from a readable record below.
32
- continue;
33
- }
34
- if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
35
- continue;
36
- const keyed = parsed[sessionId];
37
- if (!keyed || typeof keyed !== 'object' || Array.isArray(keyed))
38
- continue;
39
- const session = keyed;
40
- if (session.sessionId !== sessionId)
41
- continue;
42
- matches.push(session);
43
- }
44
24
  if (matches.length === 0) {
45
25
  throw new CurrentTurnProvenanceError(`未找到当前进程所属 session ${sessionId}`);
46
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"current-turn-provenance.js","sourceRoot":"","sources":["../../src/core/current-turn-provenance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"current-turn-provenance.js","sourceRoot":"","sources":["../../src/core/current-turn-provenance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-ipc-server.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-ipc-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard-ipc-server.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-ipc-server.ts"],"names":[],"mappings":"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"}
@@ -7,11 +7,14 @@ import { logger } from '../utils/logger.js';
7
7
  import { cliAuthBind, verifyHmac } from '../dashboard/auth.js';
8
8
  import { WORKFLOW_DAEMON_IPC_ROUTE_PREFIX } from '../workflows/v3/daemon-ipc-auth.js';
9
9
  import { V3_SESSION_RUN_MUTATION_ROUTE_PREFIX } from '../workflows/v3/session-relay.js';
10
+ import { REPORT_SESSION_RELAY_ROUTE } from './report-session-relay.js';
11
+ import { DISPATCH_REPORT_REGISTER_ROUTE } from './dispatch-report-binding.js';
10
12
  import { listenWithProbe } from '../utils/listen-with-probe.js';
11
13
  import { dashboardSecretPath } from './dashboard-secret.js';
12
14
  import { MANAGED_ORIGIN_ATTEST_ROUTE, MANAGED_ORIGIN_PROOF_DOMAIN, MANAGED_ORIGIN_PROOF_TTL_MS, writeManagedOriginAttestationProof, } from './managed-origin-attestation.js';
13
15
  import * as sessionStore from '../services/session-store.js';
14
16
  import { cliSupportsNativeUsage } from '../services/transcript-resolver.js';
17
+ import { codexModelSupportsReasoningEffort, isCodexReasoningCliId, isCodexReasoningEffort, } from '../services/codex-reasoning-effort.js';
15
18
  import * as asyncTriggerStore from '../services/async-trigger-store.js';
16
19
  import { resolveAsyncTriggerState, decideAsyncOwnership } from '../services/async-trigger-state.js';
17
20
  import * as scheduleStore from '../services/schedule-store.js';
@@ -26,6 +29,7 @@ import { ensureBackendAvailable } from '../services/backend-availability.js';
26
29
  import * as persistentBackend from './persistent-backend.js';
27
30
  import * as cardPrefsStore from '../services/card-prefs-store.js';
28
31
  import * as substituteModeStore from '../services/substitute-mode-store.js';
32
+ import { claimPromptContext } from '../services/prompt-context-store.js';
29
33
  import { createCliAdapterSync } from '../adapters/cli/registry.js';
30
34
  import { normalizeCliRuntimeConfig } from '../adapters/cli/runtime.js';
31
35
  import { evaluateReadIsolationGate } from '../adapters/cli/read-isolation.js';
@@ -61,7 +65,8 @@ import { getDeploymentIdentity } from '../services/deployment-identity.js';
61
65
  import { getBotUnionId } from '../services/bot-union-ids-store.js';
62
66
  import * as grantPrefsStore from '../services/grant-prefs-store.js';
63
67
  import { applyExactChatGrantRequest } from '../services/exact-chat-grant.js';
64
- import { findConfigField, applyConfigField, coerceConfigValue } from '../services/bot-config-store.js';
68
+ import { findConfigField, applyConfigField, coerceConfigValue, setChatFeedbackPolicy } from '../services/bot-config-store.js';
69
+ import { traceFeedbackPolicyForDelivery } from '../services/feedback-policy-resolver.js';
65
70
  import { globalBuiltinSkillInjectionDefault, resolveSkillInjectionSupport } from '../skills/injection-mode.js';
66
71
  import { summaryRangeFromBotConfig, updateDashboardSummaryRange } from '../services/summary-range-store.js';
67
72
  import { config } from '../config.js';
@@ -124,6 +129,8 @@ export function setSupervisorShutdownHandler(registration) {
124
129
  }
125
130
  import { composeRowFromActive, composeRowFromClosed, composeRowFromPersistedActive, feishuChatLink, setBotName as setRowsBotName, getBotName, } from './dashboard-rows.js';
126
131
  import { getBotBrand, getBot, getBotOpenId, loadBotConfigs, readBotSkillPolicy, getBotTuiSlashAllow } from '../bot-registry.js';
132
+ import { generateAuthUrl, tryHandleCallbackUrl, getFeedGroupAuthStatus, FEED_GROUP_OAUTH_SCOPES } from '../utils/user-token.js';
133
+ import { normalizeBrand } from '../im/lark/lark-hosts.js';
127
134
  import { normalizeKanbanColumn, normalizeKanbanPosition, normalizeSessionTitle } from './session-board.js';
128
135
  import { validateSlashInjection } from './slash-inject.js';
129
136
  import { validateRoleLibraryPath } from './role-library.js';
@@ -136,6 +143,7 @@ import { sessionAnchorId, larkTransportEnabled } from './types.js';
136
143
  import { isRiffBackendSession } from './persistent-backend.js';
137
144
  import { attachSkillPolicy, detachSkillPolicy } from './skills/im-command.js';
138
145
  import { readSkillRegistry } from '../services/skill-registry-store.js';
146
+ import { isSessionGroup } from '../services/session-groups-store.js';
139
147
  import { commitDeviceIsolationActivation, DEVICE_ISOLATION_COMMIT_PATH, DEVICE_ISOLATION_PREPARE_PATH, DEVICE_ISOLATION_RELEASE_PATH, logDeviceIsolationActivationError, prepareDeviceIsolationActivation, releaseDeviceIsolationActivation, } from './device-isolation-daemon.js';
140
148
  // Daemon process start (module load ≈ daemon boot). Used by the SSE snapshot
141
149
  // replay to bound the "recently closed" set to sessions that flipped
@@ -530,10 +538,22 @@ function routeHasNarrowUntrustedAuth(method, pathname) {
530
538
  // 证明「我是这个会话当前这一轮的 CLI」,选不了别的会话。
531
539
  if (method === 'POST' && /^\/api\/sessions\/[^/]+\/(?:slash|cd|close|chat-rename)$/.test(pathname))
532
540
  return true;
541
+ // UserPromptSubmit hook 的 envelope claim:沙箱内 hook 读不到 host secret,
542
+ // 走 body 里的 per-turn capability;handler 内 sessionCliIpcAuth 绑定到 URL 的
543
+ // sessionId + 按 managedTurnOrigin.turnId 权威取(同 /close 姿势)。
544
+ if (method === 'POST' && /^\/api\/sessions\/[^/]+\/prompt-ctx\/claim$/.test(pathname))
545
+ return true;
533
546
  if (method === 'POST' && pathname === '/api/hooks/emit')
534
547
  return true;
535
548
  if (method === 'POST' && pathname === '/api/attention')
536
549
  return true;
550
+ // A sandboxed report cannot read the host HMAC secret. This narrow route
551
+ // validates the current session's rotating capability, binds the dispatch
552
+ // root server-side, then lets the trusted daemon relay to the orchestrator.
553
+ if (method === 'POST' && pathname === REPORT_SESSION_RELAY_ROUTE)
554
+ return true;
555
+ if (method === 'POST' && pathname === DISPATCH_REPORT_REGISTER_ROUTE)
556
+ return true;
537
557
  // macOS read-isolated `botmux send` presents a rotating worker capability;
538
558
  // the handler writes the authoritative tuple into a host-owned read-only
539
559
  // proof sidecar, so loopback response spoofing cannot confer authority.
@@ -889,6 +909,44 @@ ipcRoute('POST', '/api/sessions/:sessionId/close', async (req, res, params) => {
889
909
  jsonRes(res, r.ok ? 200 : 502, r);
890
910
  });
891
911
  });
912
+ /**
913
+ * Host-side atomic claim/pop for the UserPromptSubmit hook(#794 方向 B)。
914
+ *
915
+ * 沙箱内的 `botmux user-prompt-hook` 不能在 read-only 的 `prompt-ctx/<sid>` 里
916
+ * unlink(HIGH-2),同正文多轮也不能靠 FIFO 猜(HIGH-1:某轮漏 claim 会串轮到
917
+ * 后续轮)。hook 把 (session 凭据 + fingerprint) 提交到这里,宿主按
918
+ * **managedTurnOrigin.turnId 权威 turn 绑定**精确取该轮的 envelope,先删再返回。
919
+ * 漏 claim 只孤儿化自己那条,不污染后续轮;上一轮的 stale sidecar 永远不会被返回。
920
+ *
921
+ * 鉴权与 /close、/slash 同构:trusted-host HMAC,或本会话 rotating per-turn
922
+ * capability(沙箱内读 host secret 失败时的回退)。任何未命中/失败 → 404/403,
923
+ * hook 端空输出 exit 0(fail-open:reminder 丢失 < 卡住 prompt)。
924
+ */
925
+ ipcRoute('POST', '/api/sessions/:sessionId/prompt-ctx/claim', async (req, res, params) => {
926
+ const body = await readJsonBody(req).catch(() => ({}));
927
+ const ds = findActiveBySessionId(params.sessionId);
928
+ // claim 只读 daemon 自有本轮非凭证上下文(reminder/whiteboard),receiver 会话
929
+ // 也允许(allowReceiver: true);close/slash/cd 等 managed action 仍默认拒绝。
930
+ const auth = sessionCliIpcAuth(req, ds, params.sessionId, body, { allowReceiver: true });
931
+ if (!auth.ok)
932
+ return jsonRes(res, 403, { ok: false, error: auth.error });
933
+ const fingerprint = typeof body?.fingerprint === 'string' ? body.fingerprint : '';
934
+ if (!/^[a-f0-9]{64}$/.test(fingerprint)) {
935
+ return jsonRes(res, 400, { ok: false, error: 'invalid_fingerprint' });
936
+ }
937
+ // 权威 turnId:daemon 当前这轮的 turnId(worker 发布的 managed_turn_origin)。
938
+ // hook 不需要、也不应自己提供 turnId——daemon 只认自己的权威值,避免 FIFO 串轮。
939
+ const turnId = ds?.managedTurnOrigin?.turnId;
940
+ if (!turnId)
941
+ return jsonRes(res, 404, { ok: false, error: 'no_active_turn' });
942
+ const prefix = typeof body?.prefix === 'string' && body.prefix.length > 0
943
+ ? body.prefix.slice(0, 64)
944
+ : undefined;
945
+ const envelope = claimPromptContext(params.sessionId, turnId, fingerprint, prefix);
946
+ if (!envelope)
947
+ return jsonRes(res, 404, { ok: false, error: 'not_found' });
948
+ jsonRes(res, 200, { ok: true, envelope });
949
+ });
892
950
  // `botmux list` zombie pruning is maintenance, not explicit abandon. Serialize
893
951
  // against inbound admission and refuse if any backend-neutral durable owner
894
952
  // became unsettled after the CLI took its liveness snapshot.
@@ -1023,6 +1081,25 @@ ipcRoute('POST', '/api/sessions/:sessionId/suspend', async (_req, res, params) =
1023
1081
  // already reached, so report idempotent success without a live kill.
1024
1082
  return jsonRes(res, 200, { ok: true, sessionId: params.sessionId, suspended: false, reason: 'no_live_worker' });
1025
1083
  }
1084
+ // Producing a reply — killing the worker now would drop this turn. Queue
1085
+ // instead; worker-pool's runPendingSuspendIfSettled cashes it in on the
1086
+ // idle/limited edge. Ordering matters: the idempotent no-worker branch above
1087
+ // must win, so "worker was already gone" never reports as deferred.
1088
+ //
1089
+ // The suspendability check is part of the queueing condition, not a new guard
1090
+ // ahead of it: a non-suspendable (pty) backend must keep falling through to
1091
+ // suspendWorker's existing 409 rather than get a `deferred` that could only
1092
+ // fail silently at fulfillment time.
1093
+ if ((ds.lastScreenStatus === 'working' || ds.lastScreenStatus === 'analyzing')
1094
+ && isSuspendableBackendType(ds.initConfig?.backendType)) {
1095
+ ds.pendingSuspendReason = 'manual_suspend';
1096
+ // Bind the claim to the generation that is producing right now: it must not
1097
+ // outlive that worker (see clearPendingSuspendClaim).
1098
+ ds.pendingSuspendGeneration = ds.workerGeneration;
1099
+ return jsonRes(res, 200, {
1100
+ ok: true, sessionId: params.sessionId, suspended: false, reason: 'deferred',
1101
+ });
1102
+ }
1026
1103
  if (!suspendWorker(ds, 'manual_suspend')) {
1027
1104
  // Live worker but a non-suspendable (pty) backend: killing it would drop the
1028
1105
  // in-memory conversation with no persistent pane to resume from lazily.
@@ -1125,7 +1202,7 @@ ipcRoute('POST', '/api/host-overload/sweep', async (req, res) => {
1125
1202
  * capability 只证明「我是这个会话当前这一轮的 CLI」——绑定 URL sessionId,
1126
1203
  * 拿到别的 sessionId 也伪造不了它的 capability。会话不存在时对未签名调用方
1127
1204
  * 同样回 origin_unproven,不提供「哪些 sessionId 活跃」的探针。 */
1128
- function sessionCliIpcAuth(req, ds, sessionId, body) {
1205
+ function sessionCliIpcAuth(req, ds, sessionId, body, opts = {}) {
1129
1206
  const claimedAttempt = typeof body?.originDispatchAttempt === 'number'
1130
1207
  && Number.isSafeInteger(body.originDispatchAttempt)
1131
1208
  && body.originDispatchAttempt > 0
@@ -1135,7 +1212,9 @@ function sessionCliIpcAuth(req, ds, sessionId, body) {
1135
1212
  trustedHost: isTrustedHostIpcRequest(req),
1136
1213
  sessionExists: !!ds,
1137
1214
  receiverSession: !!ds?.session.vcMeetingReceiver,
1138
- allowReceiver: false,
1215
+ // close/slash/cd 是 managed action,默认拒绝 receiver;claim 只读 daemon 自有
1216
+ // 本轮非凭证上下文(reminder/whiteboard),读自己本轮 reminder 非提权,单独放开。
1217
+ allowReceiver: opts.allowReceiver === true,
1139
1218
  sessionId,
1140
1219
  liveOrigin: ds?.managedTurnOrigin,
1141
1220
  claimedCapability: typeof body?.originCapability === 'string' ? body.originCapability : undefined,
@@ -2679,7 +2758,17 @@ ipcRoute('GET', '/api/groups', async (_req, res) => {
2679
2758
  const observedBotNames = observedBotsStore
2680
2759
  .listObservedBots(config.session.dataDir, cachedLarkAppId, c.chatId)
2681
2760
  .map(b => b.name);
2682
- return { ...c, oncallChat: oncall ?? null, firstSeenAt: seenMap.get(c.chatId) ?? null, hasRole, hasMessageListener, observedBotNames };
2761
+ return {
2762
+ ...c,
2763
+ oncallChat: oncall ?? null,
2764
+ firstSeenAt: seenMap.get(c.chatId) ?? null,
2765
+ hasRole,
2766
+ hasMessageListener,
2767
+ observedBotNames,
2768
+ // 会话群分型(p2pMode=group 自动创建):dashboard 群面板据此把它们
2769
+ // 收进独立折叠区,避免淹没需要人工管理的常驻群。
2770
+ ...(isSessionGroup(c.chatId) ? { sessionGroup: true } : {}),
2771
+ };
2683
2772
  });
2684
2773
  jsonRes(res, 200, { chats: enriched });
2685
2774
  }
@@ -3369,10 +3458,17 @@ ipcRoute('GET', '/api/bot-default-oncall', async (_req, res) => {
3369
3458
  const grantPrefs = grantPrefsStore.getBotGrantPrefs(cachedLarkAppId);
3370
3459
  let p2pMode = 'chat';
3371
3460
  try {
3372
- if (getBot(cachedLarkAppId).config.p2pMode === 'thread')
3373
- p2pMode = 'thread';
3461
+ const configured = getBot(cachedLarkAppId).config.p2pMode;
3462
+ if (configured === 'thread' || configured === 'group')
3463
+ p2pMode = configured;
3374
3464
  }
3375
3465
  catch { /* default chat */ }
3466
+ let envelopeInjection = 'off';
3467
+ try {
3468
+ if (getBot(cachedLarkAppId).config.envelopeInjection === 'auto')
3469
+ envelopeInjection = 'auto';
3470
+ }
3471
+ catch { /* default off */ }
3376
3472
  let skillInjection = null;
3377
3473
  // How this bot's CLI delivers botmux skills, so the dashboard can render the
3378
3474
  // control correctly: 'dynamic' = per-session --plugin-dir (claude-family, not
@@ -3392,6 +3488,7 @@ ipcRoute('GET', '/api/bot-default-oncall', async (_req, res) => {
3392
3488
  let cliPathOverride = null;
3393
3489
  let wrapperCli = null;
3394
3490
  let model = null;
3491
+ let reasoningEffort = null;
3395
3492
  let agentSelectionKey = '';
3396
3493
  try {
3397
3494
  const cfg = getBot(cachedLarkAppId).config;
@@ -3406,6 +3503,7 @@ ipcRoute('GET', '/api/bot-default-oncall', async (_req, res) => {
3406
3503
  : null;
3407
3504
  wrapperCli = typeof cfg.wrapperCli === 'string' && cfg.wrapperCli.trim() ? cfg.wrapperCli : null;
3408
3505
  model = typeof cfg.model === 'string' && cfg.model.trim() ? cfg.model : null;
3506
+ reasoningEffort = cfg.reasoningEffort ?? null;
3409
3507
  agentSelectionKey = selectionKeyForBot(cliId, wrapperCli ?? undefined);
3410
3508
  }
3411
3509
  catch { /* no registered bot */ }
@@ -3493,6 +3591,7 @@ ipcRoute('GET', '/api/bot-default-oncall', async (_req, res) => {
3493
3591
  cliPathOverride,
3494
3592
  wrapperCli,
3495
3593
  model,
3594
+ reasoningEffort,
3496
3595
  agentSelectionKey,
3497
3596
  defaultOncall: defaultOncall ?? { enabled: false, workingDir: '', since: 0 },
3498
3597
  defaultWorkingDir,
@@ -3524,12 +3623,20 @@ ipcRoute('GET', '/api/bot-default-oncall', async (_req, res) => {
3524
3623
  regularGroupReplyMode: cardPrefs.regularGroupReplyMode,
3525
3624
  regularGroupMentionMode: cardPrefs.regularGroupMentionMode,
3526
3625
  substituteMode: substituteModeStore.getBotSubstituteMode(cachedLarkAppId) ?? null,
3626
+ feedback: (() => { try {
3627
+ return getBot(cachedLarkAppId).config.feedback ?? null;
3628
+ }
3629
+ catch {
3630
+ return null;
3631
+ } })(),
3527
3632
  docSubscribeDefaultMode: cardPrefs.docSubscribeDefaultMode,
3528
3633
  restrictGrantCommands: grantPrefs.restrictGrantCommands,
3529
3634
  autoGrantRequestCards: grantPrefs.autoGrantRequestCards,
3635
+ p2pOpen: grantPrefs.p2pOpen,
3530
3636
  messageQuotaDefaultLimit: grantPrefs.messageQuotaDefaultLimit,
3531
3637
  grantDefaultDurationMs: grantPrefs.grantDefaultDurationMs,
3532
3638
  p2pMode,
3639
+ envelopeInjection,
3533
3640
  skillInjection,
3534
3641
  skillInjectionSupport,
3535
3642
  // Resolved machine-wide default → the dashboard shows it as the pre-selected
@@ -3698,6 +3805,7 @@ ipcRoute('PUT', '/api/bot-summary-trigger', async (req, res) => {
3698
3805
  // Per-bot 授权偏好。Body 任意子集:
3699
3806
  // • restrictGrantCommands: boolean — 限制被授权人只能纯对话
3700
3807
  // • autoGrantRequestCards: boolean — 未授权 @ 被挡住时是否发 grant 申请卡
3808
+ // • p2pOpen: boolean — 私聊对话全开(talk-only;管理权仍只认 allowedUsers)
3701
3809
  // • messageQuotaDefaultLimit: number|null — 卡片/Oncall 额度覆盖(null = 卡片内置 3 条、Oncall 不限)
3702
3810
  // • grantDefaultDurationMs: number|null — 新授权默认有限时长(null = 产品默认 1 小时)
3703
3811
  ipcRoute('PUT', '/api/bot-grant-prefs', async (req, res) => {
@@ -3720,6 +3828,8 @@ ipcRoute('PUT', '/api/bot-grant-prefs', async (req, res) => {
3720
3828
  patch.restrictGrantCommands = body.restrictGrantCommands;
3721
3829
  if (typeof body.autoGrantRequestCards === 'boolean')
3722
3830
  patch.autoGrantRequestCards = body.autoGrantRequestCards;
3831
+ if (typeof body.p2pOpen === 'boolean')
3832
+ patch.p2pOpen = body.p2pOpen;
3723
3833
  // null(含 JSON null)= 恢复内置额度策略;number = 设定覆盖值(store 内校验 1–1000)。
3724
3834
  if (body.messageQuotaDefaultLimit === null)
3725
3835
  patch.messageQuotaDefaultLimit = null;
@@ -3876,7 +3986,13 @@ ipcRoute('PUT', '/api/bot-agent', async (req, res) => {
3876
3986
  return jsonRes(res, 400, { ok: false, error: 'invalid_cli', message: err?.message ?? String(err) });
3877
3987
  }
3878
3988
  const model = typeof body.model === 'string' ? body.model.trim() : '';
3989
+ const reasoningEffortFieldPresent = Object.prototype.hasOwnProperty.call(body, 'reasoningEffort');
3990
+ const reasoningEffort = isCodexReasoningEffort(body.reasoningEffort) ? body.reasoningEffort : null;
3991
+ if (body.reasoningEffort !== undefined && body.reasoningEffort !== '' && reasoningEffort === null) {
3992
+ return jsonRes(res, 400, { ok: false, error: 'invalid_reasoning_effort' });
3993
+ }
3879
3994
  const currentBotConfig = getBot(larkAppId).config;
3995
+ const supportsReasoningEffort = isCodexReasoningCliId(selected.cliId);
3880
3996
  const runtimeFieldPresent = Object.prototype.hasOwnProperty.call(body, 'cliRuntime');
3881
3997
  const currentSelectionKey = selectionKeyForBot(currentBotConfig.cliId, currentBotConfig.wrapperCli);
3882
3998
  const selectionChanged = key !== currentSelectionKey;
@@ -3971,6 +4087,12 @@ ipcRoute('PUT', '/api/bot-agent', async (req, res) => {
3971
4087
  // is the other way a bot could end up configured-but-unenforceable.)
3972
4088
  let readIsolationCleared = false;
3973
4089
  const r = await rmwBotEntry(larkAppId, (entry) => {
4090
+ const nextReasoningEffort = supportsReasoningEffort
4091
+ ? (reasoningEffortFieldPresent ? reasoningEffort ?? undefined : entry.reasoningEffort)
4092
+ : undefined;
4093
+ if (nextReasoningEffort && !codexModelSupportsReasoningEffort(model || undefined, nextReasoningEffort)) {
4094
+ return { write: false, result: { error: 'reasoning_effort_not_supported_by_model' } };
4095
+ }
3974
4096
  entry.cliId = selected.cliId;
3975
4097
  if (selected.wrapperCli)
3976
4098
  entry.wrapperCli = selected.wrapperCli;
@@ -3994,6 +4116,14 @@ ipcRoute('PUT', '/api/bot-agent', async (req, res) => {
3994
4116
  entry.model = model;
3995
4117
  else
3996
4118
  delete entry.model;
4119
+ if (!supportsReasoningEffort)
4120
+ delete entry.reasoningEffort;
4121
+ else if (reasoningEffortFieldPresent) {
4122
+ if (reasoningEffort)
4123
+ entry.reasoningEffort = reasoningEffort;
4124
+ else
4125
+ delete entry.reasoningEffort;
4126
+ }
3997
4127
  if (entry.readIsolation === true &&
3998
4128
  !readIsolationEnforceableFor({ cliId: selected.cliId, cliPathOverride: effectivePath, wrapperCli: selected.wrapperCli })) {
3999
4129
  delete entry.readIsolation;
@@ -4009,10 +4139,17 @@ ipcRoute('PUT', '/api/bot-agent', async (req, res) => {
4009
4139
  // 任务)。手动的 pty/tmux/herdr/zellij override 不受影响(它们不会是 riff)。
4010
4140
  delete entry.backendType;
4011
4141
  }
4012
- return { write: true, result: null };
4142
+ return { write: true, result: { nextReasoningEffort } };
4013
4143
  });
4014
4144
  if (!r.ok)
4015
4145
  return jsonRes(res, 400, { ok: false, error: r.reason });
4146
+ if (r.result.error) {
4147
+ return jsonRes(res, 400, {
4148
+ ok: false,
4149
+ error: r.result.error,
4150
+ message: `模型 ${model || '(Codex 默认模型)'} 不支持当前思考强度`,
4151
+ });
4152
+ }
4016
4153
  const bot = getBot(larkAppId);
4017
4154
  bot.config.cliId = selected.cliId;
4018
4155
  bot.config.cliRuntime = nextRuntime;
@@ -4022,6 +4159,10 @@ ipcRoute('PUT', '/api/bot-agent', async (req, res) => {
4022
4159
  else
4023
4160
  bot.config.wrapperCli = undefined;
4024
4161
  bot.config.model = model || undefined;
4162
+ if (!supportsReasoningEffort)
4163
+ bot.config.reasoningEffort = undefined;
4164
+ else
4165
+ bot.config.reasoningEffort = r.result.nextReasoningEffort ?? undefined;
4025
4166
  if (readIsolationCleared)
4026
4167
  bot.config.readIsolation = false;
4027
4168
  if (selected.cliId === 'riff') {
@@ -4041,6 +4182,7 @@ ipcRoute('PUT', '/api/bot-agent', async (req, res) => {
4041
4182
  cliPathOverride: nextRuntime ? null : nextLegacyPath ?? null,
4042
4183
  wrapperCli: selected.wrapperCli ?? null,
4043
4184
  model: model || null,
4185
+ reasoningEffort: supportsReasoningEffort ? bot.config.reasoningEffort ?? null : null,
4044
4186
  selectionKey,
4045
4187
  closedMismatchedSessions,
4046
4188
  // Report the (possibly auto-cleared) read-isolation state + whether the new
@@ -4056,9 +4198,100 @@ ipcRoute('PUT', '/api/bot-agent', async (req, res) => {
4056
4198
  });
4057
4199
  });
4058
4200
  });
4059
- // Per-bot 私聊单聊模式 p2pMode。Body `{ p2pMode: 'chat' | 'thread' }`:
4201
+ // ─── 会话群标签授权(feed-group OAuth,Dashboard 一站式流程)────────────────
4202
+ // POST /api/oauth-callback {url} — dashboard 的 /oauth/callback 接收页把回调
4203
+ // URL 广播给各 daemon;state 在本进程 pendingLogins 里的那个完成 code→token
4204
+ // 交换,其它 daemon 返回 matched:false 让 dashboard 继续尝试下一个。
4205
+ ipcRoute('POST', '/api/oauth-callback', async (req, res) => {
4206
+ let body;
4207
+ try {
4208
+ body = await readJsonBody(req);
4209
+ }
4210
+ catch {
4211
+ return jsonRes(res, 400, { ok: false, error: 'bad_json' });
4212
+ }
4213
+ if (typeof body.url !== 'string' || !body.url.trim()) {
4214
+ return jsonRes(res, 400, { ok: false, error: 'url_required' });
4215
+ }
4216
+ const result = await tryHandleCallbackUrl(body.url.trim());
4217
+ if (!result)
4218
+ return jsonRes(res, 200, { ok: false, matched: false, message: 'not a callback url' });
4219
+ jsonRes(res, 200, { ok: result.ok, matched: result.matched, message: result.message });
4220
+ });
4221
+ // POST /api/session-group-tag-auth — 生成带 feed-group scope 的授权链接。
4222
+ // state 存本 daemon 进程内存,回调必须经由上面的 /api/oauth-callback 回到
4223
+ // 同一进程完成,故链接生成与回调处理都放 IPC 侧。
4224
+ ipcRoute('POST', '/api/session-group-tag-auth', async (_req, res) => {
4225
+ if (!cachedLarkAppId)
4226
+ return jsonRes(res, 503, { error: 'larkAppId_not_set' });
4227
+ try {
4228
+ const cfg = getBot(cachedLarkAppId).config;
4229
+ const { authUrl } = generateAuthUrl(cfg.larkAppId, cfg.larkAppSecret, normalizeBrand(cfg.brand), FEED_GROUP_OAUTH_SCOPES);
4230
+ jsonRes(res, 200, { ok: true, authUrl });
4231
+ }
4232
+ catch (e) {
4233
+ jsonRes(res, 500, { ok: false, error: e?.message ?? String(e) });
4234
+ }
4235
+ });
4236
+ // GET /api/session-group-tag-status — 标签授权状态(Dashboard 徽标)。
4237
+ ipcRoute('GET', '/api/session-group-tag-status', async (_req, res) => {
4238
+ if (!cachedLarkAppId)
4239
+ return jsonRes(res, 503, { error: 'larkAppId_not_set' });
4240
+ try {
4241
+ const cfg = getBot(cachedLarkAppId).config;
4242
+ const status = getFeedGroupAuthStatus(cfg.larkAppId, normalizeBrand(cfg.brand));
4243
+ jsonRes(res, 200, { ok: true, ...status, tagMode: cfg.sessionGroup?.tag?.mode ?? 'feed-group' });
4244
+ }
4245
+ catch (e) {
4246
+ jsonRes(res, 500, { ok: false, error: e?.message ?? String(e) });
4247
+ }
4248
+ });
4249
+ // PUT /api/session-group-tag-config — 会话群标签模式(Dashboard tag mode
4250
+ // selector,PR review:授权行必须与实际 tagMode 一致)。Body `{ mode }`:
4251
+ // 'feed-group'(默认,个人侧边栏分组,需一次 OAuth,任何租户可用)|
4252
+ // 'chat-tag'(应用租户身份,无需用户授权,但部分租户权限目录无该 scope)|
4253
+ // 'off'。写 bots.json 的 sessionGroup.tag.mode 并热更内存注册表,与
4254
+ // /botconfig 同一持久化通道。
4255
+ ipcRoute('PUT', '/api/session-group-tag-config', async (req, res) => {
4256
+ if (!cachedLarkAppId)
4257
+ return jsonRes(res, 503, { error: 'larkAppId_not_set' });
4258
+ let body;
4259
+ try {
4260
+ body = await readJsonBody(req);
4261
+ }
4262
+ catch {
4263
+ return jsonRes(res, 400, { ok: false, error: 'bad_json' });
4264
+ }
4265
+ const mode = body.mode === 'chat-tag' || body.mode === 'feed-group' || body.mode === 'off'
4266
+ ? body.mode : undefined;
4267
+ if (!mode)
4268
+ return jsonRes(res, 400, { ok: false, error: 'invalid_mode' });
4269
+ try {
4270
+ const bot = getBot(cachedLarkAppId);
4271
+ const r = await rmwBotEntry(cachedLarkAppId, (entry) => {
4272
+ if (!entry.sessionGroup || typeof entry.sessionGroup !== 'object')
4273
+ entry.sessionGroup = {};
4274
+ if (!entry.sessionGroup.tag || typeof entry.sessionGroup.tag !== 'object')
4275
+ entry.sessionGroup.tag = {};
4276
+ entry.sessionGroup.tag.mode = mode;
4277
+ return { write: true, result: mode };
4278
+ });
4279
+ if (!r.ok)
4280
+ return jsonRes(res, 400, { ok: false, error: r.reason });
4281
+ bot.config.sessionGroup = {
4282
+ ...(bot.config.sessionGroup ?? {}),
4283
+ tag: { ...(bot.config.sessionGroup?.tag ?? {}), mode },
4284
+ };
4285
+ jsonRes(res, 200, { ok: true, tagMode: mode });
4286
+ }
4287
+ catch (e) {
4288
+ jsonRes(res, 500, { ok: false, error: e?.message ?? String(e) });
4289
+ }
4290
+ });
4291
+ // Per-bot 私聊单聊模式 p2pMode。Body `{ p2pMode: 'chat' | 'thread' | 'group' }`:
4060
4292
  // • 'chat'(默认) → 私聊走扁平连续 chat-scope 会话
4061
4293
  // • 'thread' → 显式回到每条 DM 独立 thread-scope 会话
4294
+ // • 'group' → 每条顶层 DM 自动建专属会话群并把会话落进去
4062
4295
  // 走 applyConfigField(与 /botconfig 同一写盘 + 热更新路径),保证一致。
4063
4296
  ipcRoute('PUT', '/api/bot-p2p-mode', async (req, res) => {
4064
4297
  if (!cachedLarkAppId)
@@ -4073,13 +4306,37 @@ ipcRoute('PUT', '/api/bot-p2p-mode', async (req, res) => {
4073
4306
  const spec = findConfigField('p2pMode');
4074
4307
  if (!spec)
4075
4308
  return jsonRes(res, 500, { ok: false, error: 'spec_missing' });
4076
- // 只有 'thread' 有意义;其它(含 'chat',新默认)一律清回默认,bots.json 保持干净。
4077
- const value = body.p2pMode === 'thread' ? 'thread' : null;
4309
+ // 只有 'thread' / 'group' 有意义;其它(含 'chat',新默认)一律清回默认,bots.json 保持干净。
4310
+ const value = body.p2pMode === 'thread' ? 'thread' : body.p2pMode === 'group' ? 'group' : null;
4078
4311
  const r = await applyConfigField(cachedLarkAppId, spec, value);
4079
4312
  if (!r.ok)
4080
4313
  return jsonRes(res, 400, { ok: false, error: r.reason });
4081
4314
  jsonRes(res, 200, { ok: true, p2pMode: value ?? 'chat' });
4082
4315
  });
4316
+ // Per-bot 每轮上下文注入方式 envelopeInjection(#794)。Body `{ envelopeInjection: 'auto'|'off'|'' }`:
4317
+ // • 'auto' → 支持的 CLI(claude-code)把 reminder/whiteboard 经 UserPromptSubmit
4318
+ // hook 注入为 system-reminder,user turn 只留消息本身;不支持的自动回退内联
4319
+ // • 'off'/其它 → 内联 envelope(历史行为,默认)
4320
+ // 走 applyConfigField(与 /botconfig 同一写盘 + 热更新路径),下一个 follow-up turn 生效。
4321
+ ipcRoute('PUT', '/api/bot-envelope-injection', async (req, res) => {
4322
+ if (!cachedLarkAppId)
4323
+ return jsonRes(res, 503, { error: 'larkAppId_not_set' });
4324
+ let body;
4325
+ try {
4326
+ body = await readJsonBody(req);
4327
+ }
4328
+ catch {
4329
+ return jsonRes(res, 400, { ok: false, error: 'bad_json' });
4330
+ }
4331
+ const spec = findConfigField('envelopeInjection');
4332
+ if (!spec)
4333
+ return jsonRes(res, 500, { ok: false, error: 'spec_missing' });
4334
+ const value = body.envelopeInjection === 'auto' ? 'auto' : null;
4335
+ const r = await applyConfigField(cachedLarkAppId, spec, value);
4336
+ if (!r.ok)
4337
+ return jsonRes(res, 400, { ok: false, error: r.reason });
4338
+ jsonRes(res, 200, { ok: true, envelopeInjection: value ?? 'off' });
4339
+ });
4083
4340
  // Per-bot 内置技能注入模式 skillInjection。Body `{ skillInjection: 'global'|'prompt'|'off'|'' }`:
4084
4341
  // • 'global'|'prompt'|'off' → 显式覆盖本 bot
4085
4342
  // • ''/其它 → 清回机器级默认(config.json skills.builtinInjection)
@@ -4236,6 +4493,56 @@ ipcRoute('PUT', '/api/bot-launch-shell', async (req, res) => {
4236
4493
  return jsonRes(res, 400, { ok: false, error: r.reason });
4237
4494
  jsonRes(res, 200, { ok: true, launchShell: value ?? '' });
4238
4495
  });
4496
+ ipcRoute('PUT', '/api/bot-feedback', async (req, res) => {
4497
+ if (!cachedLarkAppId)
4498
+ return jsonRes(res, 503, { error: 'larkAppId_not_set' });
4499
+ let body;
4500
+ try {
4501
+ body = await readJsonBody(req);
4502
+ }
4503
+ catch {
4504
+ return jsonRes(res, 400, { ok: false, error: 'bad_json' });
4505
+ }
4506
+ const spec = findConfigField('feedback');
4507
+ if (!spec)
4508
+ return jsonRes(res, 500, { ok: false, error: 'spec_missing' });
4509
+ const raw = typeof body.feedback === 'string' ? body.feedback : '';
4510
+ let value = null;
4511
+ if (raw.trim()) {
4512
+ const coerced = coerceConfigValue(spec, raw);
4513
+ if (!coerced.ok)
4514
+ return jsonRes(res, 400, { ok: false, error: coerced.reason });
4515
+ value = coerced.value;
4516
+ }
4517
+ const r = await applyConfigField(cachedLarkAppId, spec, value);
4518
+ if (!r.ok)
4519
+ return jsonRes(res, 400, { ok: false, error: r.reason });
4520
+ jsonRes(res, 200, { ok: true, feedback: value });
4521
+ });
4522
+ ipcRoute('PUT', '/api/chat-feedback/:chatId', async (req, res, params) => {
4523
+ if (!cachedLarkAppId)
4524
+ return jsonRes(res, 503, { ok: false, error: 'larkAppId_not_set' });
4525
+ let body;
4526
+ try {
4527
+ body = await readJsonBody(req);
4528
+ }
4529
+ catch {
4530
+ return jsonRes(res, 400, { ok: false, error: 'bad_json' });
4531
+ }
4532
+ const feedback = body.feedback === null || body.feedback === undefined ? null : body.feedback;
4533
+ const result = await setChatFeedbackPolicy(cachedLarkAppId, decodeURIComponent(params.chatId), feedback);
4534
+ if (!result.ok)
4535
+ return jsonRes(res, result.reason === 'bot_not_registered' ? 404 : 400, { ok: false, error: result.reason });
4536
+ jsonRes(res, 200, { ok: true, feedback });
4537
+ });
4538
+ ipcRoute('GET', '/api/feedback-effective', async (req, res) => {
4539
+ if (!cachedLarkAppId)
4540
+ return jsonRes(res, 503, { ok: false, error: 'larkAppId_not_set' });
4541
+ const chatId = new URL(req.url ?? '/', 'http://localhost').searchParams.get('chatId') || undefined;
4542
+ jsonRes(res, 200, { ok: true, trace: traceFeedbackPolicyForDelivery({
4543
+ dataDir: config.session.dataDir, larkAppId: cachedLarkAppId, chatId, bot: getBot(cachedLarkAppId).config,
4544
+ }) });
4545
+ });
4239
4546
  // Per-bot 环境变量 env。Body `{ env: string }`(原始 JSON 文本,如
4240
4547
  // `{"ANTHROPIC_BASE_URL":"…","ANTHROPIC_AUTH_TOKEN":"…"}` 让本 bot 走 GLM/第三方
4241
4548
  // 服务商):空白 → 清除;否则按 json kind 解析 + sanitizePerBotEnv 过滤后落盘。