botmux 2.114.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/dist/adapters/backend/herdr-backend.d.ts +9 -7
  2. package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
  3. package/dist/adapters/backend/herdr-backend.js +63 -53
  4. package/dist/adapters/backend/herdr-backend.js.map +1 -1
  5. package/dist/adapters/backend/riff-backend.d.ts +21 -1
  6. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  7. package/dist/adapters/backend/riff-backend.js +16 -5
  8. package/dist/adapters/backend/riff-backend.js.map +1 -1
  9. package/dist/adapters/backend/sandbox.d.ts +20 -16
  10. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  11. package/dist/adapters/backend/sandbox.js +192 -65
  12. package/dist/adapters/backend/sandbox.js.map +1 -1
  13. package/dist/adapters/backend/tmux-backend.d.ts +39 -2
  14. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  15. package/dist/adapters/backend/tmux-backend.js +55 -5
  16. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  17. package/dist/adapters/backend/tmux-pipe-backend.js +2 -2
  18. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  19. package/dist/adapters/backend/zellij-backend.d.ts.map +1 -1
  20. package/dist/adapters/backend/zellij-backend.js +9 -3
  21. package/dist/adapters/backend/zellij-backend.js.map +1 -1
  22. package/dist/adapters/cli/claude-code.d.ts +25 -0
  23. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  24. package/dist/adapters/cli/claude-code.js +79 -9
  25. package/dist/adapters/cli/claude-code.js.map +1 -1
  26. package/dist/adapters/cli/read-isolation.d.ts +2 -1
  27. package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
  28. package/dist/adapters/cli/read-isolation.js.map +1 -1
  29. package/dist/adapters/cli/types.d.ts +2 -2
  30. package/dist/adapters/hook-installer.d.ts +11 -0
  31. package/dist/adapters/hook-installer.d.ts.map +1 -1
  32. package/dist/adapters/hook-installer.js +72 -11
  33. package/dist/adapters/hook-installer.js.map +1 -1
  34. package/dist/cli.d.ts.map +1 -1
  35. package/dist/cli.js +15 -4
  36. package/dist/cli.js.map +1 -1
  37. package/dist/config.d.ts +6 -0
  38. package/dist/config.d.ts.map +1 -1
  39. package/dist/config.js +18 -0
  40. package/dist/config.js.map +1 -1
  41. package/dist/core/command-handler.d.ts.map +1 -1
  42. package/dist/core/command-handler.js +211 -57
  43. package/dist/core/command-handler.js.map +1 -1
  44. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  45. package/dist/core/dashboard-ipc-server.js +13 -6
  46. package/dist/core/dashboard-ipc-server.js.map +1 -1
  47. package/dist/core/dashboard-rows.d.ts +5 -0
  48. package/dist/core/dashboard-rows.d.ts.map +1 -1
  49. package/dist/core/dashboard-rows.js +2 -0
  50. package/dist/core/dashboard-rows.js.map +1 -1
  51. package/dist/core/doc-comment-prompt.d.ts +2 -0
  52. package/dist/core/doc-comment-prompt.d.ts.map +1 -1
  53. package/dist/core/doc-comment-prompt.js +30 -0
  54. package/dist/core/doc-comment-prompt.js.map +1 -1
  55. package/dist/core/github-auth.d.ts +8 -0
  56. package/dist/core/github-auth.d.ts.map +1 -0
  57. package/dist/core/github-auth.js +44 -0
  58. package/dist/core/github-auth.js.map +1 -0
  59. package/dist/core/managed-origin-capability.d.ts +7 -0
  60. package/dist/core/managed-origin-capability.d.ts.map +1 -1
  61. package/dist/core/managed-origin-capability.js +12 -0
  62. package/dist/core/managed-origin-capability.js.map +1 -1
  63. package/dist/core/passthrough-commands.d.ts.map +1 -1
  64. package/dist/core/passthrough-commands.js +1 -1
  65. package/dist/core/passthrough-commands.js.map +1 -1
  66. package/dist/core/restart-report.d.ts +7 -1
  67. package/dist/core/restart-report.d.ts.map +1 -1
  68. package/dist/core/restart-report.js +19 -5
  69. package/dist/core/restart-report.js.map +1 -1
  70. package/dist/core/session-activity.d.ts +8 -0
  71. package/dist/core/session-activity.d.ts.map +1 -1
  72. package/dist/core/session-activity.js +16 -0
  73. package/dist/core/session-activity.js.map +1 -1
  74. package/dist/core/session-discovery.d.ts.map +1 -1
  75. package/dist/core/session-discovery.js +4 -2
  76. package/dist/core/session-discovery.js.map +1 -1
  77. package/dist/core/update-check.d.ts +11 -0
  78. package/dist/core/update-check.d.ts.map +1 -1
  79. package/dist/core/update-check.js +6 -1
  80. package/dist/core/update-check.js.map +1 -1
  81. package/dist/core/vc-meeting-prepare-command.d.ts +22 -0
  82. package/dist/core/vc-meeting-prepare-command.d.ts.map +1 -0
  83. package/dist/core/vc-meeting-prepare-command.js +50 -0
  84. package/dist/core/vc-meeting-prepare-command.js.map +1 -0
  85. package/dist/core/worker-pool.d.ts.map +1 -1
  86. package/dist/core/worker-pool.js +11 -2
  87. package/dist/core/worker-pool.js.map +1 -1
  88. package/dist/daemon.d.ts +15 -5
  89. package/dist/daemon.d.ts.map +1 -1
  90. package/dist/daemon.js +555 -41
  91. package/dist/daemon.js.map +1 -1
  92. package/dist/dashboard/compat.d.ts +19 -0
  93. package/dist/dashboard/compat.d.ts.map +1 -0
  94. package/dist/dashboard/compat.js +38 -0
  95. package/dist/dashboard/compat.js.map +1 -0
  96. package/dist/dashboard/stale-chunk-module.d.ts +3 -0
  97. package/dist/dashboard/stale-chunk-module.d.ts.map +1 -0
  98. package/dist/dashboard/stale-chunk-module.js +55 -0
  99. package/dist/dashboard/stale-chunk-module.js.map +1 -0
  100. package/dist/dashboard/web/app.d.ts.map +1 -1
  101. package/dist/dashboard/web/app.js +64 -2
  102. package/dist/dashboard/web/app.js.map +1 -1
  103. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
  104. package/dist/dashboard/web/bot-defaults-page.js +14 -7
  105. package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
  106. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  107. package/dist/dashboard/web/i18n.js +44 -10
  108. package/dist/dashboard/web/i18n.js.map +1 -1
  109. package/dist/dashboard/web/preferences.d.ts +1 -1
  110. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  111. package/dist/dashboard/web/preferences.js +1 -1
  112. package/dist/dashboard/web/preferences.js.map +1 -1
  113. package/dist/dashboard/web/sessions-page.d.ts +19 -0
  114. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  115. package/dist/dashboard/web/sessions-page.js +68 -9
  116. package/dist/dashboard/web/sessions-page.js.map +1 -1
  117. package/dist/dashboard/web/sessions.d.ts +31 -0
  118. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  119. package/dist/dashboard/web/sessions.js +82 -0
  120. package/dist/dashboard/web/sessions.js.map +1 -1
  121. package/dist/dashboard/web/stale-chunk-reload.d.ts +16 -0
  122. package/dist/dashboard/web/stale-chunk-reload.d.ts.map +1 -0
  123. package/dist/dashboard/web/stale-chunk-reload.js +51 -0
  124. package/dist/dashboard/web/stale-chunk-reload.js.map +1 -0
  125. package/dist/dashboard-web/app.js +1 -1
  126. package/dist/dashboard-web/chunks/{bot-defaults-page-SRCBF7Z3.js → bot-defaults-page-KLDCZNLP.js} +5 -5
  127. package/dist/dashboard-web/chunks/{chunk-NGRUZCXP.js → chunk-EZAW2EPM.js} +1 -1
  128. package/dist/dashboard-web/chunks/{chunk-D2I5F4MY.js → chunk-FMJNOATE.js} +1 -1
  129. package/dist/dashboard-web/chunks/{chunk-3H6MVXXU.js → chunk-KEAOTUL3.js} +7 -7
  130. package/dist/dashboard-web/chunks/{chunk-77KD4TK2.js → chunk-MLNI5BKE.js} +1 -1
  131. package/dist/dashboard-web/chunks/{connectors-page-RM3BJVMV.js → connectors-page-O32LFAL5.js} +1 -1
  132. package/dist/dashboard-web/chunks/{groups-page-3D4YSYLA.js → groups-page-PSAFIZ6M.js} +1 -1
  133. package/dist/dashboard-web/chunks/{insights-page-CRFJKA54.js → insights-page-V23LLATX.js} +1 -1
  134. package/dist/dashboard-web/chunks/{monitor-room-HLK3XDT2.js → monitor-room-7X5AKYOF.js} +1 -1
  135. package/dist/dashboard-web/chunks/{monitoring-page-E3SNZFFN.js → monitoring-page-CBA3CQYL.js} +1 -1
  136. package/dist/dashboard-web/chunks/{office-page-MKQ2TENK.js → office-page-RL6QSEM7.js} +1 -1
  137. package/dist/dashboard-web/chunks/{overview-page-ICFKKRLV.js → overview-page-XQIPO6KH.js} +1 -1
  138. package/dist/dashboard-web/chunks/{roles-page-2DFJ7YRU.js → roles-page-ACIWV7QS.js} +1 -1
  139. package/dist/dashboard-web/chunks/{schedules-page-S4WDIXH5.js → schedules-page-KJDUKOJV.js} +1 -1
  140. package/dist/dashboard-web/chunks/sessions-page-2WDWHSP4.js +3 -0
  141. package/dist/dashboard-web/chunks/{settings-page-OBTE4LYP.js → settings-page-6VX4OUGG.js} +1 -1
  142. package/dist/dashboard-web/chunks/{skills-page-CTRQJR47.js → skills-page-WXE3UYLT.js} +1 -1
  143. package/dist/dashboard-web/chunks/{team-federation-page-GICLDKJP.js → team-federation-page-PYTF4FLM.js} +1 -1
  144. package/dist/dashboard-web/chunks/{v3-page-DI55IRL5.js → v3-page-G6CD6O3I.js} +1 -1
  145. package/dist/dashboard-web/chunks/{whiteboards-page-7KFWMILV.js → whiteboards-page-6SG33GP4.js} +1 -1
  146. package/dist/dashboard-web/style.css +167 -2
  147. package/dist/dashboard.js +26 -0
  148. package/dist/dashboard.js.map +1 -1
  149. package/dist/desktop/main/auto-start.d.ts +17 -0
  150. package/dist/desktop/main/auto-start.d.ts.map +1 -0
  151. package/dist/desktop/main/auto-start.js +37 -0
  152. package/dist/desktop/main/auto-start.js.map +1 -0
  153. package/dist/desktop/main/dashboard-compat.d.ts +25 -0
  154. package/dist/desktop/main/dashboard-compat.d.ts.map +1 -0
  155. package/dist/desktop/main/dashboard-compat.js +117 -0
  156. package/dist/desktop/main/dashboard-compat.js.map +1 -0
  157. package/dist/desktop/main/external-runtime.d.ts +29 -0
  158. package/dist/desktop/main/external-runtime.d.ts.map +1 -0
  159. package/dist/desktop/main/external-runtime.js +202 -0
  160. package/dist/desktop/main/external-runtime.js.map +1 -0
  161. package/dist/desktop/main/ipc.d.ts +20 -0
  162. package/dist/desktop/main/ipc.d.ts.map +1 -0
  163. package/dist/desktop/main/ipc.js +241 -0
  164. package/dist/desktop/main/ipc.js.map +1 -0
  165. package/dist/desktop/main/log-service.d.ts +4 -0
  166. package/dist/desktop/main/log-service.d.ts.map +1 -0
  167. package/dist/desktop/main/log-service.js +53 -0
  168. package/dist/desktop/main/log-service.js.map +1 -0
  169. package/dist/desktop/main/login-item.d.ts +10 -0
  170. package/dist/desktop/main/login-item.d.ts.map +1 -0
  171. package/dist/desktop/main/login-item.js +11 -0
  172. package/dist/desktop/main/login-item.js.map +1 -0
  173. package/dist/desktop/main/node-command.d.ts +22 -0
  174. package/dist/desktop/main/node-command.d.ts.map +1 -0
  175. package/dist/desktop/main/node-command.js +56 -0
  176. package/dist/desktop/main/node-command.js.map +1 -0
  177. package/dist/desktop/main/paths.d.ts +11 -0
  178. package/dist/desktop/main/paths.d.ts.map +1 -0
  179. package/dist/desktop/main/paths.js +13 -0
  180. package/dist/desktop/main/paths.js.map +1 -0
  181. package/dist/desktop/main/pm2-apps.d.ts +15 -0
  182. package/dist/desktop/main/pm2-apps.d.ts.map +1 -0
  183. package/dist/desktop/main/pm2-apps.js +97 -0
  184. package/dist/desktop/main/pm2-apps.js.map +1 -0
  185. package/dist/desktop/main/runtime-service.d.ts +49 -0
  186. package/dist/desktop/main/runtime-service.d.ts.map +1 -0
  187. package/dist/desktop/main/runtime-service.js +297 -0
  188. package/dist/desktop/main/runtime-service.js.map +1 -0
  189. package/dist/desktop/main/runtime-source.d.ts +17 -0
  190. package/dist/desktop/main/runtime-source.d.ts.map +1 -0
  191. package/dist/desktop/main/runtime-source.js +61 -0
  192. package/dist/desktop/main/runtime-source.js.map +1 -0
  193. package/dist/desktop/main/tray.d.ts +10 -0
  194. package/dist/desktop/main/tray.d.ts.map +1 -0
  195. package/dist/desktop/main/tray.js +27 -0
  196. package/dist/desktop/main/tray.js.map +1 -0
  197. package/dist/desktop/main/window.d.ts +16 -0
  198. package/dist/desktop/main/window.d.ts.map +1 -0
  199. package/dist/desktop/main/window.js +113 -0
  200. package/dist/desktop/main/window.js.map +1 -0
  201. package/dist/desktop/main.d.ts +2 -0
  202. package/dist/desktop/main.d.ts.map +1 -0
  203. package/dist/desktop/main.js +175 -0
  204. package/dist/desktop/main.js.map +1 -0
  205. package/dist/desktop/preload.d.ts +2 -0
  206. package/dist/desktop/preload.d.ts.map +1 -0
  207. package/dist/desktop/preload.js +24 -0
  208. package/dist/desktop/preload.js.map +1 -0
  209. package/dist/desktop/renderer/app.d.ts +35 -0
  210. package/dist/desktop/renderer/app.d.ts.map +1 -0
  211. package/dist/desktop/renderer/app.js +945 -0
  212. package/dist/desktop/renderer/app.js.map +1 -0
  213. package/dist/desktop/renderer/dashboard-url.d.ts +13 -0
  214. package/dist/desktop/renderer/dashboard-url.d.ts.map +1 -0
  215. package/dist/desktop/renderer/dashboard-url.js +98 -0
  216. package/dist/desktop/renderer/dashboard-url.js.map +1 -0
  217. package/dist/desktop/renderer/runtime-state.d.ts +8 -0
  218. package/dist/desktop/renderer/runtime-state.d.ts.map +1 -0
  219. package/dist/desktop/renderer/runtime-state.js +67 -0
  220. package/dist/desktop/renderer/runtime-state.js.map +1 -0
  221. package/dist/desktop/shared/types.d.ts +48 -0
  222. package/dist/desktop/shared/types.d.ts.map +1 -0
  223. package/dist/desktop/shared/types.js +2 -0
  224. package/dist/desktop/shared/types.js.map +1 -0
  225. package/dist/desktop/smoke.d.ts +28 -0
  226. package/dist/desktop/smoke.d.ts.map +1 -0
  227. package/dist/desktop/smoke.js +258 -0
  228. package/dist/desktop/smoke.js.map +1 -0
  229. package/dist/i18n/en.d.ts.map +1 -1
  230. package/dist/i18n/en.js +18 -3
  231. package/dist/i18n/en.js.map +1 -1
  232. package/dist/i18n/zh.d.ts.map +1 -1
  233. package/dist/i18n/zh.js +18 -3
  234. package/dist/i18n/zh.js.map +1 -1
  235. package/dist/im/lark/card-builder.d.ts.map +1 -1
  236. package/dist/im/lark/card-builder.js +11 -2
  237. package/dist/im/lark/card-builder.js.map +1 -1
  238. package/dist/im/lark/event-dispatcher.d.ts +4 -0
  239. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  240. package/dist/im/lark/event-dispatcher.js +249 -5
  241. package/dist/im/lark/event-dispatcher.js.map +1 -1
  242. package/dist/im/lark/forward-followup-buffer.d.ts +26 -0
  243. package/dist/im/lark/forward-followup-buffer.d.ts.map +1 -0
  244. package/dist/im/lark/forward-followup-buffer.js +48 -0
  245. package/dist/im/lark/forward-followup-buffer.js.map +1 -0
  246. package/dist/im/lark/forward-followup-content.d.ts +6 -0
  247. package/dist/im/lark/forward-followup-content.d.ts.map +1 -0
  248. package/dist/im/lark/forward-followup-content.js +46 -0
  249. package/dist/im/lark/forward-followup-content.js.map +1 -0
  250. package/dist/im/lark/forward-followup-store.d.ts +9 -0
  251. package/dist/im/lark/forward-followup-store.d.ts.map +1 -0
  252. package/dist/im/lark/forward-followup-store.js +48 -0
  253. package/dist/im/lark/forward-followup-store.js.map +1 -0
  254. package/dist/im/lark/message-parser.d.ts +1 -1
  255. package/dist/im/lark/message-parser.d.ts.map +1 -1
  256. package/dist/im/lark/message-parser.js +1 -2
  257. package/dist/im/lark/message-parser.js.map +1 -1
  258. package/dist/platform/tunnel-client.js +3 -3
  259. package/dist/platform/tunnel-client.js.map +1 -1
  260. package/dist/services/local-cli-opener.d.ts +7 -0
  261. package/dist/services/local-cli-opener.d.ts.map +1 -1
  262. package/dist/services/local-cli-opener.js +111 -3
  263. package/dist/services/local-cli-opener.js.map +1 -1
  264. package/dist/services/skill-registry-store.d.ts.map +1 -1
  265. package/dist/services/skill-registry-store.js +15 -2
  266. package/dist/services/skill-registry-store.js.map +1 -1
  267. package/dist/services/vc-meeting-consumer-isolation.d.ts +7 -5
  268. package/dist/services/vc-meeting-consumer-isolation.d.ts.map +1 -1
  269. package/dist/services/vc-meeting-consumer-isolation.js +7 -5
  270. package/dist/services/vc-meeting-consumer-isolation.js.map +1 -1
  271. package/dist/services/vc-meeting-preparations-store.d.ts +22 -0
  272. package/dist/services/vc-meeting-preparations-store.d.ts.map +1 -0
  273. package/dist/services/vc-meeting-preparations-store.js +131 -0
  274. package/dist/services/vc-meeting-preparations-store.js.map +1 -0
  275. package/dist/services/vc-meeting-runtime-store.d.ts +9 -0
  276. package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -1
  277. package/dist/services/vc-meeting-runtime-store.js +16 -0
  278. package/dist/services/vc-meeting-runtime-store.js.map +1 -1
  279. package/dist/setup/ensure-tmux.d.ts.map +1 -1
  280. package/dist/setup/ensure-tmux.js +9 -11
  281. package/dist/setup/ensure-tmux.js.map +1 -1
  282. package/dist/utils/child-env.d.ts +16 -8
  283. package/dist/utils/child-env.d.ts.map +1 -1
  284. package/dist/utils/child-env.js +30 -8
  285. package/dist/utils/child-env.js.map +1 -1
  286. package/dist/utils/daemon-discovery.d.ts +8 -0
  287. package/dist/utils/daemon-discovery.d.ts.map +1 -1
  288. package/dist/utils/daemon-discovery.js +19 -0
  289. package/dist/utils/daemon-discovery.js.map +1 -1
  290. package/dist/utils/ready-gate.d.ts +9 -3
  291. package/dist/utils/ready-gate.d.ts.map +1 -1
  292. package/dist/utils/ready-gate.js +12 -4
  293. package/dist/utils/ready-gate.js.map +1 -1
  294. package/dist/utils/version-info.d.ts +25 -0
  295. package/dist/utils/version-info.d.ts.map +1 -0
  296. package/dist/utils/version-info.js +48 -0
  297. package/dist/utils/version-info.js.map +1 -0
  298. package/dist/worker.js +131 -28
  299. package/dist/worker.js.map +1 -1
  300. package/dist/workflows/ops-projection.d.ts.map +1 -1
  301. package/dist/workflows/ops-projection.js +27 -5
  302. package/dist/workflows/ops-projection.js.map +1 -1
  303. package/dist/workflows/v3/distillation-runner.d.ts +4 -0
  304. package/dist/workflows/v3/distillation-runner.d.ts.map +1 -1
  305. package/dist/workflows/v3/distillation-runner.js +4 -2
  306. package/dist/workflows/v3/distillation-runner.js.map +1 -1
  307. package/package.json +9 -1
  308. package/dist/dashboard-web/chunks/sessions-page-4XWGUGB5.js +0 -3
@@ -417,7 +417,8 @@ main:has(.sessions-page) .sessions-view-stage {
417
417
  overflow: hidden;
418
418
  }
419
419
 
420
- main:has(.sessions-page) .sessions-view-stage[data-view="table"] {
420
+ main:has(.sessions-page) .sessions-view-stage[data-view="table"],
421
+ main:has(.sessions-page) .sessions-view-stage[data-view="topics"] {
421
422
  overflow: auto;
422
423
  }
423
424
 
@@ -2181,6 +2182,150 @@ button.primary {
2181
2182
  display: none;
2182
2183
  }
2183
2184
 
2185
+ /* ── Sessions topic view — group by Lark location, not inferred ancestry ─── */
2186
+ .sessions-topic-view {
2187
+ display: grid;
2188
+ grid-auto-rows: max-content;
2189
+ align-content: start;
2190
+ gap: 12px;
2191
+ min-height: 0;
2192
+ height: 100%;
2193
+ padding: 10px;
2194
+ overflow-y: auto;
2195
+ box-sizing: border-box;
2196
+ }
2197
+
2198
+ .sessions-topic-view[hidden] {
2199
+ display: none;
2200
+ }
2201
+
2202
+ .session-topic-group {
2203
+ --topic-signal: var(--border);
2204
+ min-width: 0;
2205
+ border: 1px solid var(--border-soft);
2206
+ border-radius: var(--radius);
2207
+ background: var(--surface);
2208
+ box-shadow: var(--shadow);
2209
+ overflow: hidden;
2210
+ }
2211
+
2212
+ .session-topic-group.multi-bot {
2213
+ --topic-signal: var(--accent);
2214
+ border-color: color-mix(in srgb, var(--accent) 35%, var(--border-soft));
2215
+ }
2216
+
2217
+ .session-topic-group.inferred-bot-trigger {
2218
+ box-shadow: inset 3px 0 0 color-mix(in srgb, var(--warning) 72%, transparent), var(--shadow);
2219
+ }
2220
+
2221
+ .session-topic-group > header {
2222
+ display: grid;
2223
+ grid-template-columns: auto minmax(220px, 1fr) minmax(280px, auto);
2224
+ align-items: center;
2225
+ gap: 12px;
2226
+ min-height: 74px;
2227
+ padding: 12px 14px;
2228
+ border-bottom: 1px solid var(--border-soft);
2229
+ background: color-mix(in srgb, var(--topic-signal) 5%, var(--surface-muted));
2230
+ }
2231
+
2232
+ .session-topic-avatar {
2233
+ display: inline-flex;
2234
+ }
2235
+
2236
+ .session-topic-heading {
2237
+ display: grid;
2238
+ gap: 3px;
2239
+ min-width: 0;
2240
+ }
2241
+
2242
+ .session-topic-location,
2243
+ .session-topic-updated {
2244
+ color: var(--muted);
2245
+ font-size: 11px;
2246
+ }
2247
+
2248
+ .session-topic-heading h2 {
2249
+ margin: 0;
2250
+ color: var(--fg);
2251
+ font-size: 14px;
2252
+ line-height: 1.4;
2253
+ overflow: hidden;
2254
+ text-overflow: ellipsis;
2255
+ white-space: nowrap;
2256
+ }
2257
+
2258
+ .session-topic-heading code {
2259
+ max-width: min(58vw, 520px);
2260
+ color: var(--faint);
2261
+ font-size: 10px;
2262
+ overflow: hidden;
2263
+ text-overflow: ellipsis;
2264
+ white-space: nowrap;
2265
+ }
2266
+
2267
+ .session-topic-summary {
2268
+ display: flex;
2269
+ align-items: center;
2270
+ justify-content: flex-end;
2271
+ gap: 6px;
2272
+ flex-wrap: wrap;
2273
+ min-width: 0;
2274
+ }
2275
+
2276
+ .topic-chip {
2277
+ display: inline-flex;
2278
+ align-items: center;
2279
+ min-height: 22px;
2280
+ padding: 2px 8px;
2281
+ border: 1px solid var(--border-soft);
2282
+ border-radius: var(--radius-full);
2283
+ background: var(--surface-raised);
2284
+ color: var(--muted);
2285
+ font-size: 11px;
2286
+ font-weight: 700;
2287
+ white-space: nowrap;
2288
+ }
2289
+
2290
+ .topic-chip.collaboration {
2291
+ border-color: color-mix(in srgb, var(--accent) 38%, var(--border));
2292
+ background: color-mix(in srgb, var(--accent) 10%, var(--surface-raised));
2293
+ color: var(--accent-strong);
2294
+ }
2295
+
2296
+ .topic-chip.active {
2297
+ border-color: color-mix(in srgb, var(--success) 36%, var(--border));
2298
+ color: var(--success);
2299
+ }
2300
+
2301
+ .topic-chip.inferred {
2302
+ border-style: dashed;
2303
+ border-color: color-mix(in srgb, var(--warning) 44%, var(--border));
2304
+ color: var(--warning);
2305
+ }
2306
+
2307
+ .session-topic-members {
2308
+ display: grid;
2309
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
2310
+ align-items: start;
2311
+ gap: 10px;
2312
+ padding: 10px;
2313
+ }
2314
+
2315
+ .session-topic-members .session-card {
2316
+ --col-signal: var(--topic-signal);
2317
+ }
2318
+
2319
+ .sessions-topic-empty {
2320
+ min-height: 160px;
2321
+ display: grid;
2322
+ place-items: center;
2323
+ color: var(--muted);
2324
+ border: 1px dashed var(--border);
2325
+ border-radius: var(--radius);
2326
+ background: var(--surface);
2327
+ }
2328
+
2184
2329
  .session-board-column {
2185
2330
  --col-signal: var(--border);
2186
2331
  display: flex;
@@ -22592,7 +22737,7 @@ button.ui-refresh-button.is-loading .ui-action-icon {
22592
22737
 
22593
22738
  main:has(.sessions-page) .sessions-view-toggle {
22594
22739
  display: grid;
22595
- grid-template-columns: repeat(3, minmax(0, 1fr));
22740
+ grid-template-columns: repeat(4, minmax(0, 1fr));
22596
22741
  width: 100%;
22597
22742
  min-width: 0;
22598
22743
  max-width: 100%;
@@ -22643,6 +22788,26 @@ button.ui-refresh-button.is-loading .ui-action-icon {
22643
22788
  overflow: visible;
22644
22789
  }
22645
22790
 
22791
+ main:has(.sessions-page) .sessions-topic-view {
22792
+ height: auto;
22793
+ overflow: visible;
22794
+ padding-right: 0;
22795
+ padding-left: 0;
22796
+ }
22797
+
22798
+ main:has(.sessions-page) .session-topic-group > header {
22799
+ grid-template-columns: auto minmax(0, 1fr);
22800
+ }
22801
+
22802
+ main:has(.sessions-page) .session-topic-summary {
22803
+ grid-column: 1 / -1;
22804
+ justify-content: flex-start;
22805
+ }
22806
+
22807
+ main:has(.sessions-page) .session-topic-members {
22808
+ grid-template-columns: 1fr;
22809
+ }
22810
+
22646
22811
  main:has(.sessions-page) .session-board-column {
22647
22812
  height: min(70dvh, 640px);
22648
22813
  min-height: 320px;
package/dist/dashboard.js CHANGED
@@ -72,6 +72,8 @@ import { startPlatformTunnelClient } from './platform/tunnel-client.js';
72
72
  import { applyPlatformTeamSync, getPlatformTeamSyncRev, listPlatformTeams } from './services/platform-team-store.js';
73
73
  import { getBotUnionId } from './services/bot-union-ids-store.js';
74
74
  import { cleanupIdleSessions, parseIdleCleanupHours } from './dashboard/session-cleanup.js';
75
+ import { handleDesktopCompat } from './dashboard/compat.js';
76
+ import { isDashboardChunkJsPath, missingDashboardChunkModule } from './dashboard/stale-chunk-module.js';
75
77
  import { aggregateRoleBatch, parseRoleBatchTargets } from './dashboard/roles-batch.js';
76
78
  import { automateOpenPlatformSetup, vcListenerEventGateError } from './setup/open-platform-automation.js';
77
79
  import { VC_MEETING_FEATURE_SCOPES, VC_MEETING_REALTIME_VOICE_SCOPES } from './setup/verify-permissions.js';
@@ -993,6 +995,22 @@ function serveStatic(req, res, pathname) {
993
995
  return false;
994
996
  }
995
997
  }
998
+ function serveMissingDashboardChunkModule(req, res, pathname) {
999
+ if (!isDashboardChunkJsPath(pathname))
1000
+ return false;
1001
+ const body = missingDashboardChunkModule();
1002
+ res.writeHead(200, {
1003
+ 'content-type': 'application/javascript',
1004
+ 'cache-control': 'no-store',
1005
+ 'content-length': String(Buffer.byteLength(body)),
1006
+ });
1007
+ if (req.method === 'HEAD') {
1008
+ res.end();
1009
+ return true;
1010
+ }
1011
+ res.end(body);
1012
+ return true;
1013
+ }
996
1014
  function dashboardEntriesForRecord(record) {
997
1015
  return record.contributions?.dashboard ?? [];
998
1016
  }
@@ -1883,6 +1901,12 @@ const server = createServer(async (req, res) => {
1883
1901
  res.writeHead(200, { 'content-type': 'text/plain' });
1884
1902
  return res.end(DASHBOARD_SELF_NONCE);
1885
1903
  }
1904
+ // Desktop shell compatibility probe (read-only, no token required). Keep it
1905
+ // outside the browser auth gate so packaged desktop apps can decide whether
1906
+ // this runtime speaks their dashboard protocol before loading the SPA.
1907
+ if (handleDesktopCompat(req, res, url)) {
1908
+ return;
1909
+ }
1886
1910
  // Web terminal reverse-proxy: `/s/<sessionId>/*` → the owning bot daemon's
1887
1911
  // terminal proxy. The central platform only tunnels the dashboard port, so
1888
1912
  // terminal links served under the machine subdomain
@@ -2079,6 +2103,8 @@ const server = createServer(async (req, res) => {
2079
2103
  : url.pathname;
2080
2104
  if (serveStatic(req, res, lookupPath))
2081
2105
  return;
2106
+ if (serveMissingDashboardChunkModule(req, res, lookupPath))
2107
+ return;
2082
2108
  }
2083
2109
  // ─── HD2D office assets (token-gated: download triggers a ~74MB fetch) ──
2084
2110
  if (req.method === 'GET' && url.pathname === '/api/game/status') {