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
@@ -1,7 +1,26 @@
1
1
  import { type PageDisposer } from './react-mount.js';
2
+ type SessionRow = Record<string, any> & {
3
+ sessionId: string;
4
+ status: string;
5
+ };
2
6
  export declare function CliFilterGroup(props: {
3
7
  selected: Set<string>;
4
8
  onToggle: (cli: string, checked: boolean) => void;
5
9
  }): JSX.Element;
10
+ type TopicGroupsViewProps = {
11
+ rows: SessionRow[];
12
+ relationRows?: SessionRow[];
13
+ selected: Set<string>;
14
+ hidden: boolean;
15
+ onToggleSelect: (row: SessionRow) => void;
16
+ onOpen: (row: SessionRow) => void;
17
+ onHistory: (row: SessionRow) => void;
18
+ onLocate: (row: SessionRow) => Promise<boolean>;
19
+ onRestart: (row: SessionRow, button?: HTMLButtonElement) => void;
20
+ onLock: (row: SessionRow, locked: boolean, button?: HTMLButtonElement) => void;
21
+ onClose: (row: SessionRow, button?: HTMLButtonElement) => void;
22
+ };
23
+ export declare function TopicGroupsView(props: TopicGroupsViewProps): JSX.Element;
6
24
  export declare function renderSessionsPage(root: HTMLElement): PageDisposer;
25
+ export {};
7
26
  //# sourceMappingURL=sessions-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/sessions-page.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA6XrE,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CA4C/H;AAgyED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAElE"}
1
+ {"version":3,"file":"sessions-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/sessions-page.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAwErE,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA2T9E,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CA4C/H;AAumBD,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjE,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/E,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAChE,CAAC;AASF,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CA2ExE;AA0vDD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAElE"}
@@ -6,11 +6,11 @@ import { mountReactPage } from './react-mount.js';
6
6
  import { useStoreSelector, useT } from './react-hooks.js';
7
7
  import { KANBAN_TEAM_STORAGE_KEY, normalizeSessionsViewMode, readStoredBoardOrder, readStoredCreateKeepOpen, readStoredKanbanGroupBy, readStoredSessionsShowUnknownChats, readStoredSessionsViewMode, writeStoredBoardOrder, writeStoredCreateKeepOpen, writeStoredKanbanGroupBy, writeStoredSessionsShowUnknownChats, writeStoredSessionsViewMode, } from './preferences.js';
8
8
  import { OPEN_CREATE_SESSION_EVENT, consumePendingCreateSession } from './create-session-entry.js';
9
- import { BOARD_COLUMNS, CLI_FILTER_OPTIONS, ICON, SESSION_STATUS_OPTIONS, canRestartSession, cssToken, deriveSessionBoardColumn, fetchPickerBots, formatTokenCount, historySenderKey, isUnknownChatSession, lockActionLabel, openWriteLink, repoBasename, restartConfirmMessage, sessionLocationText, sessionLocationTitle, sessionRuntimeCounts, sessionSearchText, sessionStatusText, shouldOpenWritableTerminal, terminalHref, tokenCount, } from './sessions.js';
9
+ import { BOARD_COLUMNS, CLI_FILTER_OPTIONS, ICON, SESSION_STATUS_OPTIONS, canRestartSession, cssToken, deriveSessionBoardColumn, fetchPickerBots, formatTokenCount, groupSessionsByTopic, historySenderKey, isUnknownChatSession, lockActionLabel, openWriteLink, repoBasename, restartConfirmMessage, sessionLocationText, sessionLocationTitle, sessionRuntimeCounts, sessionSearchText, sessionTopicKey, sessionStatusText, shouldOpenWritableTerminal, terminalHref, tokenCount, } from './sessions.js';
10
10
  import { addMonitorRoomSessionIds, monitorRoomUrl } from './monitor-room-store.js';
11
11
  import { CreateActionButton, DropdownMenu, LoadingState } from './dashboard-components.js';
12
12
  import { store } from './store.js';
13
- import { attentionWaitSince, botAvatarHtml, botDisplayName, chatDisplayTitle, loadNameMaps, relTime, stripMentionPrefix, t, ui, } from './ui.js';
13
+ import { attentionWaitSince, botAvatarHtml, botDisplayName, chatAvatarHtml, chatDisplayTitle, loadNameMaps, relTime, stripMentionPrefix, t, ui, } from './ui.js';
14
14
  import { SessionsKanbanView, } from './sessions-kanban.js';
15
15
  function idleCleanupHoursLabel(hours) {
16
16
  return hours === 168 ? '7d' : `${hours}H`;
@@ -240,7 +240,13 @@ function SessionsFilters(props) {
240
240
  next.delete(cli);
241
241
  return { ...prev, cli: next };
242
242
  });
243
- } }), _jsxs("label", { className: "filter-toggle", children: [_jsx("input", { type: "checkbox", name: "showUnknownChats", checked: props.filters.showUnknownChats, onChange: event => {
243
+ } }), _jsxs("label", { className: "filter-toggle", children: [_jsx("input", { type: "checkbox", name: "multiBotTopics", checked: props.filters.multiBotTopics, onChange: event => {
244
+ const multiBotTopics = event.currentTarget.checked;
245
+ props.setFilters(prev => ({ ...prev, multiBotTopics }));
246
+ } }), _jsx("span", { className: "filter-toggle-label", children: t('sessions.multiBotTopics') }), _jsx("span", { className: "filter-toggle-switch", "aria-hidden": "true" })] }), _jsxs("label", { className: "filter-toggle", children: [_jsx("input", { type: "checkbox", name: "botTriggeredTopics", checked: props.filters.botTriggeredTopics, onChange: event => {
247
+ const botTriggeredTopics = event.currentTarget.checked;
248
+ props.setFilters(prev => ({ ...prev, botTriggeredTopics }));
249
+ } }), _jsx("span", { className: "filter-toggle-label", children: t('sessions.botTriggeredTopics') }), _jsx("span", { className: "filter-toggle-switch", "aria-hidden": "true" })] }), _jsxs("label", { className: "filter-toggle", children: [_jsx("input", { type: "checkbox", name: "showUnknownChats", checked: props.filters.showUnknownChats, onChange: event => {
244
250
  const checked = event.currentTarget.checked;
245
251
  writeStoredSessionsShowUnknownChats(windowStorage(), checked);
246
252
  props.setFilters(prev => ({ ...prev, showUnknownChats: checked }));
@@ -388,7 +394,7 @@ function BoardCard(props) {
388
394
  };
389
395
  return (_jsxs("article", { className: `session-card${props.selected ? ' selected' : ''}${row.locked ? ' locked' : ''}`, "data-id": row.sessionId, "aria-pressed": props.selected, onClick: onCardClick, children: [_jsxs("div", { className: "session-card-top", children: [_jsx("span", { dangerouslySetInnerHTML: rawHtml(botAvatarHtml({ name: botName, larkAppId: row.larkAppId, size: 'sm' })) }), _jsxs("div", { className: "session-card-title", children: [_jsx("strong", { title: String(row.title ?? title), children: String(title).slice(0, 72) }), _jsxs("span", { children: [botName, " \u00B7 ", chatTitle ?? row.cliId ?? 'unknown'] })] }), _jsxs("span", { className: "session-card-status-group", children: [_jsx(StatusBadge, { status: row.status }), _jsx(LockChip, { row: row })] })] }), repo !== '-' || row.adopt || signal ? (_jsxs("div", { className: "session-card-meta", children: [repo !== '-' ? _jsx("span", { title: row.workingDir ?? '', children: repo }) : null, row.adopt ? _jsx("span", { className: "badge", children: "adopt" }) : null, signal ? _jsx("span", { className: "session-signal", title: signal, children: signal }) : null] })) : null, _jsx("div", { className: "session-card-time", children: _jsx("span", { children: row.agentAttention?.at
390
396
  ? `${t('sessions.board.waiting')} ${relTime(attentionWaitSince(row))}`
391
- : `${t('sessions.last')}: ${relTime(row.lastMessageAt)}` }) }), _jsxs("div", { className: "session-card-actions", children: [_jsx(ChatScopeLink, { row: row }), !row.feishuChatLink || row.scope !== 'chat' ? (_jsx(LocateIconButton, { row: row, onLocate: props.onLocate })) : null, _jsx(IconActionButton, { action: "details", icon: ICON.details, label: t('sessions.details'), onClick: () => props.onOpen(row) }), canRestartSession(row) ? (_jsx(IconActionButton, { action: "restart", icon: ICON.restart, label: t('sessions.restart'), onClick: button => props.onRestart(row, button) })) : null, _jsx(TerminalControls, { row: row, url: term }), _jsx(IconActionButton, { action: "lock", icon: row.locked ? ICON.unlock : ICON.lock, label: lockActionLabel(row), kind: row.locked ? 'locked' : '', onClick: button => props.onLock(row, !row.locked, button) }), _jsx(IconActionButton, { action: "close", icon: ICON.close, label: t('sessions.close'), kind: "danger", onClick: button => props.onClose(row, button) })] })] }));
397
+ : `${t('sessions.last')}: ${relTime(row.lastMessageAt)}` }) }), _jsxs("div", { className: "session-card-actions", children: [_jsx(ChatScopeLink, { row: row }), !row.feishuChatLink || row.scope !== 'chat' ? (_jsx(LocateIconButton, { row: row, onLocate: props.onLocate })) : null, _jsx(IconActionButton, { action: "details", icon: ICON.details, label: t('sessions.details'), onClick: () => props.onOpen(row) }), canRestartSession(row) ? (_jsx(IconActionButton, { action: "restart", icon: ICON.restart, label: t('sessions.restart'), onClick: button => props.onRestart(row, button) })) : null, _jsx(TerminalControls, { row: row, url: term }), row.status !== 'closed' ? (_jsxs(_Fragment, { children: [_jsx(IconActionButton, { action: "lock", icon: row.locked ? ICON.unlock : ICON.lock, label: lockActionLabel(row), kind: row.locked ? 'locked' : '', onClick: button => props.onLock(row, !row.locked, button) }), _jsx(IconActionButton, { action: "close", icon: ICON.close, label: t('sessions.close'), kind: "danger", onClick: button => props.onClose(row, button) })] })) : null] })] }));
392
398
  }
393
399
  function BoardView(props) {
394
400
  useEffect(() => {
@@ -433,6 +439,38 @@ function BoardView(props) {
433
439
  }, children: [_jsxs("div", { children: [_jsx("h2", { children: t(column.labelKey) }), _jsx("p", { children: t(column.hintKey) })] }), _jsxs("span", { className: "session-board-head-right", children: [_jsxs("span", { className: "session-board-move", children: [_jsx("button", { type: "button", "data-move-col": column.id, "data-dir": "-1", "aria-label": t('sessions.board.moveLeft'), disabled: idx === 0, onClick: () => props.onMoveColumn(column.id, -1), children: "\u2039" }), _jsx("button", { type: "button", "data-move-col": column.id, "data-dir": "1", "aria-label": t('sessions.board.moveRight'), disabled: idx === columns.length - 1, onClick: () => props.onMoveColumn(column.id, 1), children: "\u203A" })] }), _jsx("span", { className: "session-board-count", children: columnRows.length })] })] }), _jsx("div", { className: "session-board-list", children: columnRows.length ? columnRows.map(row => (_jsx(BoardCard, { row: row, selected: props.selected.has(row.sessionId), onToggleSelect: props.onToggleSelect, onOpen: props.onOpen, onHistory: props.onHistory, onLocate: props.onLocate, onRestart: props.onRestart, onLock: props.onLock, onClose: props.onClose }, row.sessionId))) : _jsx("div", { className: "session-board-empty", children: t('sessions.board.emptyColumn') }) })] }, column.id));
434
440
  }) }));
435
441
  }
442
+ function topicGroupTitle(group) {
443
+ const title = stripMentionPrefix(group.title).trim();
444
+ if (title)
445
+ return title;
446
+ if (group.kind === 'thread')
447
+ return t('sessions.topic.untitled');
448
+ return group.kind === 'chat' ? t('sessions.topic.wholeChat') : t('sessions.topic.singleSession');
449
+ }
450
+ export function TopicGroupsView(props) {
451
+ const groups = useMemo(() => groupSessionsByTopic(props.rows), [props.rows]);
452
+ const relationGroups = useMemo(() => new Map(groupSessionsByTopic(props.relationRows ?? props.rows).map(group => [group.key, group])), [props.relationRows, props.rows]);
453
+ return (_jsx("div", { id: "sessions-topics", className: "sessions-topic-view", hidden: props.hidden, children: groups.length ? groups.map(group => {
454
+ // Member cards respect the current session filters. Header metadata is
455
+ // derived from the complete store so a hidden closed sibling does not
456
+ // erase the topic's multi-Bot relationship.
457
+ const relation = relationGroups.get(group.key) ?? group;
458
+ const representative = group.rows[0];
459
+ const location = sessionLocationText(representative);
460
+ const title = topicGroupTitle(relation);
461
+ const anchor = relation.rootMessageId || relation.chatId;
462
+ return (_jsxs("section", { className: `session-topic-group${relation.multiBot ? ' multi-bot' : ''}${relation.inferredBotTriggered ? ' inferred-bot-trigger' : ''}`, "data-topic-key": group.key, children: [_jsxs("header", { children: [_jsx("span", { className: "session-topic-avatar", dangerouslySetInnerHTML: rawHtml(chatAvatarHtml({ chatId: group.chatId, name: location, size: 'sm' })) }), _jsxs("div", { className: "session-topic-heading", children: [_jsx("span", { className: "session-topic-location", children: location }), _jsx("h2", { title: relation.title, children: title }), _jsx("code", { title: anchor, children: relation.kind === 'thread'
463
+ ? anchor
464
+ : relation.kind === 'chat'
465
+ ? t('sessions.topic.wholeChat')
466
+ : t('sessions.topic.singleSession') })] }), _jsxs("div", { className: "session-topic-summary", "aria-label": t('sessions.topic.summary'), children: [relation.multiBot ? _jsx("span", { className: "topic-chip collaboration", children: t('sessions.topic.collaboration') }) : null, _jsx("span", { className: "topic-chip", children: t('sessions.topic.sessions', { count: relation.rows.length }) }), _jsx("span", { className: "topic-chip", children: t('sessions.topic.bots', { count: relation.botCount }) }), _jsx("span", { className: "topic-chip active", children: t('sessions.topic.active', { count: relation.activeCount }) }), relation.closedCount ? _jsx("span", { className: "topic-chip", children: t('sessions.topic.closed', { count: relation.closedCount }) }) : null, relation.inferredBotInputCount ? (_jsx("span", { className: "topic-chip inferred", title: t('sessions.topic.inferredHint'), children: t('sessions.topic.botInputs', { count: relation.inferredBotInputCount }) })) : null, _jsxs("span", { className: "session-topic-updated", children: [t('sessions.last'), ": ", relTime(relation.latestActivityAt)] })] })] }), _jsx("div", { className: "session-topic-members", children: group.rows.map(row => (_jsx(BoardCard, { row: row, selected: props.selected.has(row.sessionId), onToggleSelect: candidate => {
467
+ if (candidate.status !== 'closed')
468
+ props.onToggleSelect(candidate);
469
+ else
470
+ props.onOpen(candidate);
471
+ }, onOpen: props.onOpen, onHistory: props.onHistory, onLocate: props.onLocate, onRestart: props.onRestart, onLock: props.onLock, onClose: props.onClose }, row.sessionId))) })] }, group.key));
472
+ }) : _jsx("div", { className: "sessions-topic-empty", children: t('sessions.topic.empty') }) }));
473
+ }
436
474
  function HistoryBubble(props) {
437
475
  const m = props.message;
438
476
  const human = m.senderType === 'user';
@@ -797,6 +835,8 @@ function SessionsPage() {
797
835
  status: '',
798
836
  adopt: '',
799
837
  chat: '',
838
+ multiBotTopics: false,
839
+ botTriggeredTopics: false,
800
840
  showUnknownChats: readStoredSessionsShowUnknownChats(windowStorage()),
801
841
  active: true,
802
842
  cli: new Set(CLI_FILTER_OPTIONS),
@@ -885,20 +925,31 @@ function SessionsPage() {
885
925
  const cli = [...filters.cli];
886
926
  const cliFilterActive = cli.length > 0 && cli.length < CLI_FILTER_OPTIONS.length;
887
927
  const keepClosed = viewMode === 'kanban';
888
- return storeRows
928
+ const acceptedTopicKeys = filters.multiBotTopics || filters.botTriggeredTopics
929
+ ? new Set(groupSessionsByTopic(storeRows)
930
+ .filter(group => !filters.multiBotTopics || group.multiBot)
931
+ .filter(group => !filters.botTriggeredTopics || group.inferredBotTriggered)
932
+ .map(group => group.key))
933
+ : null;
934
+ const base = storeRows
889
935
  .filter(s => !cliFilterActive || cli.includes(s.cliId ?? 'unknown'))
890
936
  .filter(s => filters.showUnknownChats || !isUnknownChatSession(s))
891
937
  .filter(s => !filters.status || s.status === filters.status)
892
938
  .filter(s => !filters.adopt || (filters.adopt === 'yes') === !!s.adopt)
893
939
  .filter(s => !filters.chat || String(s.chatId ?? '') === filters.chat)
894
940
  .filter(s => !filters.active || keepClosed || s.status !== 'closed')
895
- .filter(s => !q || sessionSearchText(s).includes(q))
941
+ .filter(s => !q || sessionSearchText(s).includes(q));
942
+ if (!acceptedTopicKeys) {
943
+ return base.sort((a, b) => compareRows(a, b, sortKey, sortDir));
944
+ }
945
+ return base
946
+ .filter(row => acceptedTopicKeys.has(sessionTopicKey(row)))
896
947
  .sort((a, b) => compareRows(a, b, sortKey, sortDir));
897
948
  }, [filters, revision, sortDir, sortKey, storeRows, viewMode]);
898
949
  const runtimeCounts = useMemo(() => sessionRuntimeCounts(storeRows), [storeRows]);
899
950
  const rowsById = useMemo(() => new Map(storeRows.map(row => [row.sessionId, row])), [storeRows, revision]);
900
951
  const boardRows = useMemo(() => rows.filter(row => row.status !== 'closed'), [rows]);
901
- const visibleRows = viewMode === 'table' ? rows : boardRows;
952
+ const visibleRows = viewMode === 'table' || viewMode === 'topics' ? rows : boardRows;
902
953
  const selectableRows = visibleRows.filter(row => row.status !== 'closed');
903
954
  const selectedRows = [...selected]
904
955
  .map(id => rowsById.get(id))
@@ -1580,7 +1631,7 @@ function SessionsPage() {
1580
1631
  setCreateLoading(false);
1581
1632
  setCreateState(null);
1582
1633
  }, []);
1583
- const openCreateSession = async () => {
1634
+ const openCreateSession = useCallback(async () => {
1584
1635
  const requestId = createRequestRef.current + 1;
1585
1636
  createRequestRef.current = requestId;
1586
1637
  setCreateState({ bots: [], loading: true });
@@ -1595,7 +1646,7 @@ function SessionsPage() {
1595
1646
  if (createRequestRef.current === requestId)
1596
1647
  setCreateLoading(false);
1597
1648
  }
1598
- };
1649
+ }, []);
1599
1650
  // 侧边菜单「创建会话」入口:已在本页时收事件直接打开;跨页跳转时消费挂载前的 pending
1600
1651
  useEffect(() => {
1601
1652
  const maybeOpenFromEntry = () => {
@@ -1611,6 +1662,7 @@ function SessionsPage() {
1611
1662
  return (_jsxs("section", { className: "page sessions-page", children: [_jsxs("div", { className: "page-heading", children: [_jsxs("div", { className: "sessions-heading-main", children: [_jsx("p", { className: "eyebrow", children: t('nav.sessions') }), _jsx("h1", { children: t('sessions.title') }), _jsxs("div", { className: "sessions-view-controls", children: [_jsx("div", { className: "segmented sessions-view-toggle", role: "group", "aria-label": t('sessions.viewMode'), children: [
1612
1663
  ['kanban', t('sessions.viewKanban')],
1613
1664
  ['board', t('sessions.viewBoard')],
1665
+ ['topics', t('sessions.viewTopics')],
1614
1666
  ['table', t('sessions.viewTable')],
1615
1667
  ].map(([value, label]) => (_jsx("button", { type: "button", "data-view": value, className: viewMode === value ? 'active' : undefined, "aria-pressed": viewMode === value, onClick: () => setView(value), children: label }, value))) }), _jsx("div", { className: `segmented kanban-groupby${viewMode === 'kanban' ? ' is-visible' : ' is-collapsed'}`, id: "kanban-groupby", role: "group", "aria-label": t('sessions.kanban.groupBy'), "aria-hidden": viewMode !== 'kanban', children: [
1616
1668
  ['flow', t('sessions.kanban.groupFlow')],
@@ -1663,6 +1715,13 @@ function SessionsPage() {
1663
1715
  else
1664
1716
  next.add(row.sessionId);
1665
1717
  return next;
1718
+ }), onOpen: row => setDrawerSessionId(row.sessionId), onHistory: openHistoryModal, onLocate: row => locateSession(row), onRestart: (row, button) => void restartSession(row, button), onLock: (row, locked, button) => void setSessionLocked(row, locked, button), onClose: (row, button) => void closeSession(row, button) }), _jsx(TopicGroupsView, { rows: rows, relationRows: storeRows, selected: selected, hidden: viewMode !== 'topics', onToggleSelect: row => setSelected(prev => {
1719
+ const next = new Set(prev);
1720
+ if (next.has(row.sessionId))
1721
+ next.delete(row.sessionId);
1722
+ else
1723
+ next.add(row.sessionId);
1724
+ return next;
1666
1725
  }), onOpen: row => setDrawerSessionId(row.sessionId), onHistory: openHistoryModal, onLocate: row => locateSession(row), onRestart: (row, button) => void restartSession(row, button), onLock: (row, locked, button) => void setSessionLocked(row, locked, button), onClose: (row, button) => void closeSession(row, button) }), _jsx("div", { id: "sessions-kanban", ref: setKanbanHost, className: `sessions-kanban${kanbanGroupBy === 'bot' ? ' kanban-mode-bot' : ''}`, hidden: viewMode !== 'kanban', children: viewMode === 'kanban' ? (_jsx(SessionsKanbanView, { host: kanbanHost, ...kanbanState, canRestartSession: canRestartSession, getTeamChatIds: teamChatIdsFor, icons: {
1667
1726
  details: ICON.details,
1668
1727
  feishu: ICON.feishu,