botmux 2.104.0 → 2.105.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 (329) hide show
  1. package/README.en.md +10 -10
  2. package/README.md +10 -10
  3. package/dist/adapters/backend/sandbox.d.ts +5 -1
  4. package/dist/adapters/backend/sandbox.d.ts.map +1 -1
  5. package/dist/adapters/backend/sandbox.js +54 -5
  6. package/dist/adapters/backend/sandbox.js.map +1 -1
  7. package/dist/adapters/backend/tmux-pipe-backend.d.ts +1 -1
  8. package/dist/adapters/backend/tmux-pipe-backend.js +1 -1
  9. package/dist/adapters/backend/zellij-observe-backend.d.ts +1 -1
  10. package/dist/adapters/backend/zellij-observe-backend.js +1 -1
  11. package/dist/adapters/cli/claude-code.d.ts +1 -1
  12. package/dist/adapters/cli/relay.d.ts +2 -2
  13. package/dist/adapters/cli/relay.js +2 -2
  14. package/dist/adapters/cli/seed.d.ts +2 -2
  15. package/dist/adapters/cli/seed.js +2 -2
  16. package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
  17. package/dist/adapters/cli/shared-hints.js +1 -0
  18. package/dist/adapters/cli/shared-hints.js.map +1 -1
  19. package/dist/bot-registry.d.ts +65 -1
  20. package/dist/bot-registry.d.ts.map +1 -1
  21. package/dist/bot-registry.js +145 -0
  22. package/dist/bot-registry.js.map +1 -1
  23. package/dist/cli/send-dispatch.d.ts +44 -0
  24. package/dist/cli/send-dispatch.d.ts.map +1 -1
  25. package/dist/cli/send-dispatch.js +79 -0
  26. package/dist/cli/send-dispatch.js.map +1 -1
  27. package/dist/cli/vc-agent.d.ts +2 -0
  28. package/dist/cli/vc-agent.d.ts.map +1 -0
  29. package/dist/cli/vc-agent.js +331 -0
  30. package/dist/cli/vc-agent.js.map +1 -0
  31. package/dist/cli.d.ts.map +1 -1
  32. package/dist/cli.js +106 -24
  33. package/dist/cli.js.map +1 -1
  34. package/dist/config.d.ts +8 -0
  35. package/dist/config.d.ts.map +1 -1
  36. package/dist/config.js +13 -1
  37. package/dist/config.js.map +1 -1
  38. package/dist/core/auto-start.d.ts +2 -2
  39. package/dist/core/auto-start.js +2 -2
  40. package/dist/core/command-handler.d.ts.map +1 -1
  41. package/dist/core/command-handler.js +2 -1
  42. package/dist/core/command-handler.js.map +1 -1
  43. package/dist/core/dashboard-events.d.ts +5 -0
  44. package/dist/core/dashboard-events.d.ts.map +1 -1
  45. package/dist/core/dashboard-events.js.map +1 -1
  46. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  47. package/dist/core/dashboard-ipc-server.js +47 -2
  48. package/dist/core/dashboard-ipc-server.js.map +1 -1
  49. package/dist/core/idle-worker-sweeper.d.ts +1 -1
  50. package/dist/core/idle-worker-sweeper.js +1 -1
  51. package/dist/core/passthrough-commands.d.ts.map +1 -1
  52. package/dist/core/passthrough-commands.js +1 -0
  53. package/dist/core/passthrough-commands.js.map +1 -1
  54. package/dist/core/scheduler.d.ts +12 -0
  55. package/dist/core/scheduler.d.ts.map +1 -1
  56. package/dist/core/scheduler.js +67 -7
  57. package/dist/core/scheduler.js.map +1 -1
  58. package/dist/core/session-discovery.js +1 -1
  59. package/dist/core/session-discovery.js.map +1 -1
  60. package/dist/core/session-manager.d.ts.map +1 -1
  61. package/dist/core/session-manager.js +33 -7
  62. package/dist/core/session-manager.js.map +1 -1
  63. package/dist/core/trigger-session.d.ts.map +1 -1
  64. package/dist/core/trigger-session.js +78 -23
  65. package/dist/core/trigger-session.js.map +1 -1
  66. package/dist/core/worker-pool.d.ts +4 -1
  67. package/dist/core/worker-pool.d.ts.map +1 -1
  68. package/dist/core/worker-pool.js +4 -0
  69. package/dist/core/worker-pool.js.map +1 -1
  70. package/dist/core/zellij-adopt-discovery.js +1 -1
  71. package/dist/core/zellij-adopt-discovery.js.map +1 -1
  72. package/dist/daemon.d.ts +121 -0
  73. package/dist/daemon.d.ts.map +1 -1
  74. package/dist/daemon.js +2644 -2
  75. package/dist/daemon.js.map +1 -1
  76. package/dist/dashboard/federated-group-core.js +1 -1
  77. package/dist/dashboard/federated-group-core.js.map +1 -1
  78. package/dist/dashboard/federation-api.js +1 -1
  79. package/dist/dashboard/schedule-card-model.d.ts +4 -3
  80. package/dist/dashboard/schedule-card-model.d.ts.map +1 -1
  81. package/dist/dashboard/schedule-card-model.js +5 -4
  82. package/dist/dashboard/schedule-card-model.js.map +1 -1
  83. package/dist/dashboard/settings-write-applier.d.ts +37 -3
  84. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  85. package/dist/dashboard/settings-write-applier.js +63 -0
  86. package/dist/dashboard/settings-write-applier.js.map +1 -1
  87. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  88. package/dist/dashboard/web/i18n.js +28 -0
  89. package/dist/dashboard/web/i18n.js.map +1 -1
  90. package/dist/dashboard/web/insights.js +19 -19
  91. package/dist/dashboard/web/insights.js.map +1 -1
  92. package/dist/dashboard/web/overview-page.d.ts.map +1 -1
  93. package/dist/dashboard/web/overview-page.js +7 -4
  94. package/dist/dashboard/web/overview-page.js.map +1 -1
  95. package/dist/dashboard/web/schedules-page.d.ts +1 -1
  96. package/dist/dashboard/web/schedules-page.d.ts.map +1 -1
  97. package/dist/dashboard/web/schedules-page.js +7 -3
  98. package/dist/dashboard/web/schedules-page.js.map +1 -1
  99. package/dist/dashboard/web/sessions.js +2 -2
  100. package/dist/dashboard/web/settings-page.d.ts +9 -0
  101. package/dist/dashboard/web/settings-page.d.ts.map +1 -1
  102. package/dist/dashboard/web/settings-page.js +132 -43
  103. package/dist/dashboard/web/settings-page.js.map +1 -1
  104. package/dist/dashboard/web/store.d.ts +6 -0
  105. package/dist/dashboard/web/store.d.ts.map +1 -1
  106. package/dist/dashboard/web/store.js +18 -1
  107. package/dist/dashboard/web/store.js.map +1 -1
  108. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  109. package/dist/dashboard/webhook-routes.js +24 -0
  110. package/dist/dashboard/webhook-routes.js.map +1 -1
  111. package/dist/dashboard-web/app.js +3 -3
  112. package/dist/dashboard-web/chunks/{bot-defaults-page-Z36I5CKM.js → bot-defaults-page-3OIY7N76.js} +1 -1
  113. package/dist/dashboard-web/chunks/{chunk-2BBCKWNO.js → chunk-BNEXMNQD.js} +3 -3
  114. package/dist/dashboard-web/chunks/{chunk-QDKIUULH.js → chunk-DKKOGZCG.js} +1 -1
  115. package/dist/dashboard-web/chunks/chunk-LXIK7OUJ.js +1 -0
  116. package/dist/dashboard-web/chunks/{chunk-BAMNP73K.js → chunk-VFCACTRF.js} +1 -1
  117. package/dist/dashboard-web/chunks/{connectors-I3MGERCM.js → connectors-VDOAKUW3.js} +1 -1
  118. package/dist/dashboard-web/chunks/{groups-page-DTP2L4FQ.js → groups-page-CX5AN4XG.js} +1 -1
  119. package/dist/dashboard-web/chunks/{insights-page-FNI24WYF.js → insights-page-DOMRL4S6.js} +1 -1
  120. package/dist/dashboard-web/chunks/overview-page-AZBAXVZ7.js +1 -0
  121. package/dist/dashboard-web/chunks/{roles-page-A5DZ7Q6U.js → roles-page-3FEAH6S4.js} +1 -1
  122. package/dist/dashboard-web/chunks/schedules-CTQEA7IE.js +1 -0
  123. package/dist/dashboard-web/chunks/{sessions-YJ735IH4.js → sessions-LVZCXO2Z.js} +1 -1
  124. package/dist/dashboard-web/chunks/{sessions-page-2REIJ56C.js → sessions-page-NHBJDSBC.js} +1 -1
  125. package/dist/dashboard-web/chunks/settings-page-CRDIHRNE.js +2 -0
  126. package/dist/dashboard-web/chunks/{skills-page-ZCCLHWMJ.js → skills-page-VUG3EPWX.js} +1 -1
  127. package/dist/dashboard-web/chunks/{team-federation-page-4FCGO3WW.js → team-federation-page-ZKL3YMGN.js} +1 -1
  128. package/dist/dashboard-web/chunks/{workflows-KFJ7O57L.js → workflows-4BYQQBFP.js} +1 -1
  129. package/dist/dashboard-web/index.html +1 -1
  130. package/dist/dashboard-web/style.css +111 -16
  131. package/dist/dashboard.js +196 -2
  132. package/dist/dashboard.js.map +1 -1
  133. package/dist/global-config.d.ts +30 -0
  134. package/dist/global-config.d.ts.map +1 -1
  135. package/dist/global-config.js +64 -1
  136. package/dist/global-config.js.map +1 -1
  137. package/dist/i18n/en.d.ts.map +1 -1
  138. package/dist/i18n/en.js +10 -7
  139. package/dist/i18n/en.js.map +1 -1
  140. package/dist/i18n/zh.d.ts.map +1 -1
  141. package/dist/i18n/zh.js +10 -7
  142. package/dist/i18n/zh.js.map +1 -1
  143. package/dist/im/lark/card-builder.d.ts +1 -1
  144. package/dist/im/lark/card-builder.js +1 -1
  145. package/dist/im/lark/card-handler.d.ts +3 -0
  146. package/dist/im/lark/card-handler.d.ts.map +1 -1
  147. package/dist/im/lark/card-handler.js +8 -0
  148. package/dist/im/lark/card-handler.js.map +1 -1
  149. package/dist/im/lark/client.d.ts +1 -0
  150. package/dist/im/lark/client.d.ts.map +1 -1
  151. package/dist/im/lark/client.js +19 -0
  152. package/dist/im/lark/client.js.map +1 -1
  153. package/dist/im/lark/event-dispatcher.d.ts +10 -0
  154. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  155. package/dist/im/lark/event-dispatcher.js +100 -21
  156. package/dist/im/lark/event-dispatcher.js.map +1 -1
  157. package/dist/im/lark/grant-command.d.ts +1 -1
  158. package/dist/im/lark/grant-command.js +1 -1
  159. package/dist/im/lark/workflow-slash-command.js +4 -0
  160. package/dist/im/lark/workflow-slash-command.js.map +1 -1
  161. package/dist/mir-prompt.d.ts +16 -0
  162. package/dist/mir-prompt.d.ts.map +1 -0
  163. package/dist/mir-prompt.js +170 -0
  164. package/dist/mir-prompt.js.map +1 -0
  165. package/dist/mir-runner.js +1 -149
  166. package/dist/mir-runner.js.map +1 -1
  167. package/dist/platform/bind.d.ts.map +1 -1
  168. package/dist/platform/bind.js +3 -11
  169. package/dist/platform/bind.js.map +1 -1
  170. package/dist/platform/binding.d.ts +4 -5
  171. package/dist/platform/binding.d.ts.map +1 -1
  172. package/dist/platform/binding.js +0 -11
  173. package/dist/platform/binding.js.map +1 -1
  174. package/dist/platform/tunnel-client.d.ts.map +1 -1
  175. package/dist/platform/tunnel-client.js +37 -28
  176. package/dist/platform/tunnel-client.js.map +1 -1
  177. package/dist/services/deployment-identity.d.ts +1 -1
  178. package/dist/services/deployment-identity.d.ts.map +1 -1
  179. package/dist/services/deployment-identity.js +1 -1
  180. package/dist/services/deployment-identity.js.map +1 -1
  181. package/dist/services/doc-subs-store.js +1 -1
  182. package/dist/services/team-board-store.js +1 -1
  183. package/dist/services/team-board-store.js.map +1 -1
  184. package/dist/services/trigger-types.d.ts +2 -1
  185. package/dist/services/trigger-types.d.ts.map +1 -1
  186. package/dist/services/trigger-types.js +11 -2
  187. package/dist/services/trigger-types.js.map +1 -1
  188. package/dist/services/vc-meeting-runtime-store.d.ts +55 -0
  189. package/dist/services/vc-meeting-runtime-store.d.ts.map +1 -0
  190. package/dist/services/vc-meeting-runtime-store.js +313 -0
  191. package/dist/services/vc-meeting-runtime-store.js.map +1 -0
  192. package/dist/services/voice/index.d.ts +6 -1
  193. package/dist/services/voice/index.d.ts.map +1 -1
  194. package/dist/services/voice/index.js +12 -5
  195. package/dist/services/voice/index.js.map +1 -1
  196. package/dist/services/voice/sami.js +1 -1
  197. package/dist/setup/lark-scopes.json +5 -0
  198. package/dist/setup/verify-permissions.d.ts +6 -0
  199. package/dist/setup/verify-permissions.d.ts.map +1 -1
  200. package/dist/setup/verify-permissions.js +17 -0
  201. package/dist/setup/verify-permissions.js.map +1 -1
  202. package/dist/skills/definitions.d.ts.map +1 -1
  203. package/dist/skills/definitions.js +10 -0
  204. package/dist/skills/definitions.js.map +1 -1
  205. package/dist/utils/daemon-discovery.d.ts +2 -0
  206. package/dist/utils/daemon-discovery.d.ts.map +1 -1
  207. package/dist/utils/daemon-discovery.js +2 -0
  208. package/dist/utils/daemon-discovery.js.map +1 -1
  209. package/dist/utils/timezone.d.ts +51 -0
  210. package/dist/utils/timezone.d.ts.map +1 -0
  211. package/dist/utils/timezone.js +110 -0
  212. package/dist/utils/timezone.js.map +1 -0
  213. package/dist/vc-agent/cards.d.ts +47 -0
  214. package/dist/vc-agent/cards.d.ts.map +1 -0
  215. package/dist/vc-agent/cards.js +489 -0
  216. package/dist/vc-agent/cards.js.map +1 -0
  217. package/dist/vc-agent/meeting-state.d.ts +39 -0
  218. package/dist/vc-agent/meeting-state.d.ts.map +1 -0
  219. package/dist/vc-agent/meeting-state.js +186 -0
  220. package/dist/vc-agent/meeting-state.js.map +1 -0
  221. package/dist/vc-agent/normalizer.d.ts +13 -0
  222. package/dist/vc-agent/normalizer.d.ts.map +1 -0
  223. package/dist/vc-agent/normalizer.js +411 -0
  224. package/dist/vc-agent/normalizer.js.map +1 -0
  225. package/dist/vc-agent/polling-source.d.ts +36 -0
  226. package/dist/vc-agent/polling-source.d.ts.map +1 -0
  227. package/dist/vc-agent/polling-source.js +129 -0
  228. package/dist/vc-agent/polling-source.js.map +1 -0
  229. package/dist/vc-agent/push-source.d.ts +13 -0
  230. package/dist/vc-agent/push-source.d.ts.map +1 -0
  231. package/dist/vc-agent/push-source.js +109 -0
  232. package/dist/vc-agent/push-source.js.map +1 -0
  233. package/dist/vc-agent/realtime/audio-source.d.ts +6 -0
  234. package/dist/vc-agent/realtime/audio-source.d.ts.map +1 -0
  235. package/dist/vc-agent/realtime/audio-source.js +17 -0
  236. package/dist/vc-agent/realtime/audio-source.js.map +1 -0
  237. package/dist/vc-agent/realtime/endpoint.d.ts +6 -0
  238. package/dist/vc-agent/realtime/endpoint.d.ts.map +1 -0
  239. package/dist/vc-agent/realtime/endpoint.js +25 -0
  240. package/dist/vc-agent/realtime/endpoint.js.map +1 -0
  241. package/dist/vc-agent/realtime/errors.d.ts +9 -0
  242. package/dist/vc-agent/realtime/errors.d.ts.map +1 -0
  243. package/dist/vc-agent/realtime/errors.js +17 -0
  244. package/dist/vc-agent/realtime/errors.js.map +1 -0
  245. package/dist/vc-agent/realtime/events.d.ts +24 -0
  246. package/dist/vc-agent/realtime/events.d.ts.map +1 -0
  247. package/dist/vc-agent/realtime/events.js +190 -0
  248. package/dist/vc-agent/realtime/events.js.map +1 -0
  249. package/dist/vc-agent/realtime/frontier.d.ts +34 -0
  250. package/dist/vc-agent/realtime/frontier.d.ts.map +1 -0
  251. package/dist/vc-agent/realtime/frontier.js +40 -0
  252. package/dist/vc-agent/realtime/frontier.js.map +1 -0
  253. package/dist/vc-agent/realtime/index.d.ts +11 -0
  254. package/dist/vc-agent/realtime/index.d.ts.map +1 -0
  255. package/dist/vc-agent/realtime/index.js +11 -0
  256. package/dist/vc-agent/realtime/index.js.map +1 -0
  257. package/dist/vc-agent/realtime/pacer.d.ts +21 -0
  258. package/dist/vc-agent/realtime/pacer.d.ts.map +1 -0
  259. package/dist/vc-agent/realtime/pacer.js +80 -0
  260. package/dist/vc-agent/realtime/pacer.js.map +1 -0
  261. package/dist/vc-agent/realtime/protobuf.d.ts +33 -0
  262. package/dist/vc-agent/realtime/protobuf.d.ts.map +1 -0
  263. package/dist/vc-agent/realtime/protobuf.js +159 -0
  264. package/dist/vc-agent/realtime/protobuf.js.map +1 -0
  265. package/dist/vc-agent/realtime/protocol.d.ts +4 -0
  266. package/dist/vc-agent/realtime/protocol.d.ts.map +1 -0
  267. package/dist/vc-agent/realtime/protocol.js +59 -0
  268. package/dist/vc-agent/realtime/protocol.js.map +1 -0
  269. package/dist/vc-agent/realtime/session.d.ts +39 -0
  270. package/dist/vc-agent/realtime/session.d.ts.map +1 -0
  271. package/dist/vc-agent/realtime/session.js +221 -0
  272. package/dist/vc-agent/realtime/session.js.map +1 -0
  273. package/dist/vc-agent/realtime/transport.d.ts +23 -0
  274. package/dist/vc-agent/realtime/transport.d.ts.map +1 -0
  275. package/dist/vc-agent/realtime/transport.js +112 -0
  276. package/dist/vc-agent/realtime/transport.js.map +1 -0
  277. package/dist/vc-agent/realtime/types.d.ts +84 -0
  278. package/dist/vc-agent/realtime/types.d.ts.map +1 -0
  279. package/dist/vc-agent/realtime/types.js +5 -0
  280. package/dist/vc-agent/realtime/types.js.map +1 -0
  281. package/dist/vc-agent/types.d.ts +142 -0
  282. package/dist/vc-agent/types.d.ts.map +1 -0
  283. package/dist/vc-agent/types.js +2 -0
  284. package/dist/vc-agent/types.js.map +1 -0
  285. package/dist/worker.js +3 -3
  286. package/dist/worker.js.map +1 -1
  287. package/dist/workflows/attempt-resume.d.ts +4 -0
  288. package/dist/workflows/attempt-resume.d.ts.map +1 -1
  289. package/dist/workflows/attempt-resume.js +2 -0
  290. package/dist/workflows/attempt-resume.js.map +1 -1
  291. package/dist/workflows/attempt-terminal.d.ts +4 -0
  292. package/dist/workflows/attempt-terminal.d.ts.map +1 -1
  293. package/dist/workflows/attempt-terminal.js.map +1 -1
  294. package/dist/workflows/daemon-spawn.d.ts.map +1 -1
  295. package/dist/workflows/daemon-spawn.js +7 -0
  296. package/dist/workflows/daemon-spawn.js.map +1 -1
  297. package/dist/workflows/events/payloads.d.ts +32 -0
  298. package/dist/workflows/events/payloads.d.ts.map +1 -1
  299. package/dist/workflows/events/payloads.js +4 -0
  300. package/dist/workflows/events/payloads.js.map +1 -1
  301. package/dist/workflows/events/schema.d.ts +56 -0
  302. package/dist/workflows/events/schema.d.ts.map +1 -1
  303. package/dist/workflows/runtime.d.ts +4 -0
  304. package/dist/workflows/runtime.d.ts.map +1 -1
  305. package/dist/workflows/runtime.js.map +1 -1
  306. package/dist/workflows/spawn-policy.d.ts +14 -0
  307. package/dist/workflows/spawn-policy.d.ts.map +1 -0
  308. package/dist/workflows/spawn-policy.js +9 -0
  309. package/dist/workflows/spawn-policy.js.map +1 -0
  310. package/dist/workflows/v3/bot-resolve.d.ts.map +1 -1
  311. package/dist/workflows/v3/bot-resolve.js +4 -0
  312. package/dist/workflows/v3/bot-resolve.js.map +1 -1
  313. package/dist/workflows/v3/cli-run.d.ts.map +1 -1
  314. package/dist/workflows/v3/cli-run.js +4 -0
  315. package/dist/workflows/v3/cli-run.js.map +1 -1
  316. package/dist/workflows/v3/contract.d.ts +9 -3
  317. package/dist/workflows/v3/contract.d.ts.map +1 -1
  318. package/dist/workflows/v3/contract.js +3 -3
  319. package/dist/workflows/v3/contract.js.map +1 -1
  320. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -1
  321. package/dist/workflows/v3/ephemeral-pool.js +2 -0
  322. package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
  323. package/dist/workflows/v3/runtime.js +1 -1
  324. package/dist/workflows/v3/runtime.js.map +1 -1
  325. package/package.json +1 -1
  326. package/dist/dashboard-web/chunks/chunk-76J7PNZI.js +0 -1
  327. package/dist/dashboard-web/chunks/overview-page-EHCZJBWY.js +0 -1
  328. package/dist/dashboard-web/chunks/schedules-RSXALJU4.js +0 -1
  329. package/dist/dashboard-web/chunks/settings-page-XKFTXTDE.js +0 -2
@@ -84,8 +84,10 @@ function ActiveSessionRow({ session }) {
84
84
  const status = String(session.status ?? 'unknown');
85
85
  return (_jsxs("li", { className: "sess-row", children: [_jsx(Html, { html: botAvatarHtml({ name: botName, larkAppId: session.larkAppId, size: 'sm' }) }), _jsxs("div", { className: "sess-tx", children: [_jsx("b", { children: (stripMentionPrefix(session.title) || session.sessionId).slice(0, 64) }), _jsxs("span", { children: [botName, " \u00B7 ", chatDisplayTitle(session) ?? session.cliId ?? 'unknown', " \u00B7 ", relTime(session.lastMessageAt)] })] }), _jsx("span", { className: `status status-${statusToken(status)}`, children: sessionStatusText(status, tr) })] }));
86
86
  }
87
- function ScheduleMini({ schedule }) {
88
- const next = schedule.nextRunAt ? new Date(schedule.nextRunAt).toLocaleString() : '-';
87
+ function ScheduleMini({ schedule, timeZone }) {
88
+ const next = schedule.nextRunAt
89
+ ? new Date(schedule.nextRunAt).toLocaleString(undefined, timeZone ? { timeZone, timeZoneName: 'short' } : undefined)
90
+ : '-';
89
91
  return (_jsxs("li", { className: "overview-list-row", children: [_jsxs("div", { children: [_jsx("strong", { children: schedule.name ?? schedule.id }), _jsxs("span", { children: [botDisplayName(schedule), " \u00B7 ", schedule.parsed?.display ?? ''] })] }), _jsx("span", { children: next })] }));
90
92
  }
91
93
  function Donut({ working, attention, idle }) {
@@ -106,9 +108,10 @@ function OverviewPage() {
106
108
  const [teamExpanded, setTeamExpanded] = useState(readTeamExpanded);
107
109
  const [collapsedN, setCollapsedN] = useState(TEAM_COLLAPSED_ROWS * 3);
108
110
  const [namesVersion, forceNamesRefresh] = useState(0);
109
- const { sessions, schedules } = useStoreSelector(snapshot => ({
111
+ const { sessions, schedules, scheduleTimeZone } = useStoreSelector(snapshot => ({
110
112
  sessions: [...snapshot.sessions.values()],
111
113
  schedules: [...snapshot.schedules.values()],
114
+ scheduleTimeZone: snapshot.scheduleTimeZone,
112
115
  }));
113
116
  useEffect(() => {
114
117
  const refresh = () => setCollapsedN(collapsedCardCount(teamRef.current));
@@ -141,7 +144,7 @@ function OverviewPage() {
141
144
  return !v;
142
145
  });
143
146
  };
144
- return (_jsxs("section", { className: "page hero-page", children: [_jsxs("div", { className: "page-heading", children: [_jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: tr('app.subtitle') }), _jsx("h1", { children: tr('overview.title') }), _jsx("p", { id: "overview-sub", children: tr('overview.subtitle') })] }), _jsxs("div", { className: "hero-pills", id: "overview-pills", children: [_jsxs("span", { className: "pill", children: [tr('overview.workingSessions'), " ", _jsx("b", { children: busy.length })] }), _jsxs("span", { className: `pill${attentionRows.length ? ' pill-hot' : ''}`, children: [tr('overview.attention'), " ", _jsx("b", { children: attentionRows.length })] }), _jsxs("span", { className: "pill", children: [tr('overview.onlineBots'), " ", _jsx("b", { children: onlineBots })] })] })] }), _jsxs("div", { className: "sect-head", children: [_jsx("h2", { children: tr('overview.team') }), _jsx("span", { children: tr('overview.teamHint') }), _jsx("a", { href: "#/bot-defaults", children: tr('overview.viewAll') })] }), _jsx("div", { className: "team-grid", id: "team-grid", ref: teamRef, children: visibleCards.length ? visibleCards.map(card => _jsx(MateCard, { card: card }, card.larkAppId ?? card.botName)) : _jsx("div", { className: "empty", children: tr('overview.noSessions') }) }), _jsx("button", { type: "button", className: "team-toggle", id: "team-toggle", hidden: cards.length <= collapsedN, onClick: toggleTeam, children: teamExpanded ? tr('overview.teamCollapse') : tr('overview.teamExpand', { count: cards.length }) }), _jsxs("div", { className: "sect-head", id: "attention-head", children: [_jsx("h2", { children: tr('overview.attention') }), _jsx("span", { children: tr('overview.attentionHint') })] }), _jsx("div", { className: "qgrid", id: "attention-list", children: attentionRows.length ? attentionRows.map(s => _jsx(AttentionCard, { session: s }, s.sessionId)) : _jsx("div", { className: "qcard qcard-empty", children: tr('overview.noAttention') }) }), _jsxs("div", { className: "overview-cols", children: [_jsxs("section", { className: "panel", children: [_jsxs("header", { className: "panel-header", children: [_jsxs("div", { children: [_jsx("h2", { children: tr('overview.activeSessions') }), _jsx("p", { children: tr('overview.activeSessionsHint') })] }), _jsx("a", { className: "btn-link", href: "#/sessions", children: tr('overview.viewAll') })] }), _jsx("ul", { className: "overview-list", id: "recent-sessions", children: recent.length ? recent.map(s => _jsx(ActiveSessionRow, { session: s }, s.sessionId)) : _jsx("li", { className: "empty", children: tr('overview.noSessions') }) })] }), _jsxs("div", { className: "overview-side", children: [_jsxs("section", { className: "panel", children: [_jsx("header", { className: "panel-header", children: _jsxs("div", { children: [_jsx("h2", { children: tr('overview.today') }), _jsx("p", { children: tr('overview.todayHint') })] }) }), _jsx("div", { className: "donut-row", id: "today-donut", children: _jsx(Donut, { working: busy.length, attention: attentionRows.length, idle: Math.max(0, idle) }) })] }), _jsxs("section", { className: "panel", children: [_jsxs("header", { className: "panel-header", children: [_jsxs("div", { children: [_jsx("h2", { children: tr('overview.nextSchedules') }), _jsx("p", { children: tr('schedules.subtitle') })] }), _jsx("a", { className: "btn-link", href: "#/schedules", children: tr('overview.viewAll') })] }), _jsx("ul", { className: "overview-list", id: "next-schedules", children: upcoming.length ? upcoming.map(s => _jsx(ScheduleMini, { schedule: s }, s.id)) : _jsx("li", { className: "empty", children: tr('overview.noSchedules') }) })] })] })] })] }));
147
+ return (_jsxs("section", { className: "page hero-page", children: [_jsxs("div", { className: "page-heading", children: [_jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: tr('app.subtitle') }), _jsx("h1", { children: tr('overview.title') }), _jsx("p", { id: "overview-sub", children: tr('overview.subtitle') })] }), _jsxs("div", { className: "hero-pills", id: "overview-pills", children: [_jsxs("span", { className: "pill", children: [tr('overview.workingSessions'), " ", _jsx("b", { children: busy.length })] }), _jsxs("span", { className: `pill${attentionRows.length ? ' pill-hot' : ''}`, children: [tr('overview.attention'), " ", _jsx("b", { children: attentionRows.length })] }), _jsxs("span", { className: "pill", children: [tr('overview.onlineBots'), " ", _jsx("b", { children: onlineBots })] })] })] }), _jsxs("div", { className: "sect-head", children: [_jsx("h2", { children: tr('overview.team') }), _jsx("span", { children: tr('overview.teamHint') }), _jsx("a", { href: "#/bot-defaults", children: tr('overview.viewAll') })] }), _jsx("div", { className: "team-grid", id: "team-grid", ref: teamRef, children: visibleCards.length ? visibleCards.map(card => _jsx(MateCard, { card: card }, card.larkAppId ?? card.botName)) : _jsx("div", { className: "empty", children: tr('overview.noSessions') }) }), _jsx("button", { type: "button", className: "team-toggle", id: "team-toggle", hidden: cards.length <= collapsedN, onClick: toggleTeam, children: teamExpanded ? tr('overview.teamCollapse') : tr('overview.teamExpand', { count: cards.length }) }), _jsxs("div", { className: "sect-head", id: "attention-head", children: [_jsx("h2", { children: tr('overview.attention') }), _jsx("span", { children: tr('overview.attentionHint') })] }), _jsx("div", { className: "qgrid", id: "attention-list", children: attentionRows.length ? attentionRows.map(s => _jsx(AttentionCard, { session: s }, s.sessionId)) : _jsx("div", { className: "qcard qcard-empty", children: tr('overview.noAttention') }) }), _jsxs("div", { className: "overview-cols", children: [_jsxs("section", { className: "panel", children: [_jsxs("header", { className: "panel-header", children: [_jsxs("div", { children: [_jsx("h2", { children: tr('overview.activeSessions') }), _jsx("p", { children: tr('overview.activeSessionsHint') })] }), _jsx("a", { className: "btn-link", href: "#/sessions", children: tr('overview.viewAll') })] }), _jsx("ul", { className: "overview-list", id: "recent-sessions", children: recent.length ? recent.map(s => _jsx(ActiveSessionRow, { session: s }, s.sessionId)) : _jsx("li", { className: "empty", children: tr('overview.noSessions') }) })] }), _jsxs("div", { className: "overview-side", children: [_jsxs("section", { className: "panel", children: [_jsx("header", { className: "panel-header", children: _jsxs("div", { children: [_jsx("h2", { children: tr('overview.today') }), _jsx("p", { children: tr('overview.todayHint') })] }) }), _jsx("div", { className: "donut-row", id: "today-donut", children: _jsx(Donut, { working: busy.length, attention: attentionRows.length, idle: Math.max(0, idle) }) })] }), _jsxs("section", { className: "panel", children: [_jsxs("header", { className: "panel-header", children: [_jsxs("div", { children: [_jsx("h2", { children: tr('overview.nextSchedules') }), _jsx("p", { children: tr('schedules.subtitle') })] }), _jsx("a", { className: "btn-link", href: "#/schedules", children: tr('overview.viewAll') })] }), _jsx("ul", { className: "overview-list", id: "next-schedules", children: upcoming.length ? upcoming.map(s => _jsx(ScheduleMini, { schedule: s, timeZone: scheduleTimeZone }, s.id)) : _jsx("li", { className: "empty", children: tr('overview.noSchedules') }) })] })] })] })] }));
145
148
  }
146
149
  export function renderOverviewPage(root) {
147
150
  return mountReactPage(root, _jsx(OverviewPage, {}));
@@ -1 +1 @@
1
- {"version":3,"file":"overview-page.js","sourceRoot":"","sources":["../../../src/dashboard/web/overview-page.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overview-page.js","sourceRoot":"","sources":["../../../src/dashboard/web/overview-page.tsx"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ export interface ScheduleFilters {
7
7
  kind: string;
8
8
  enabledOnly: boolean;
9
9
  }
10
- export declare function fmtScheduleDate(s?: string): string;
10
+ export declare function fmtScheduleDate(s?: string, timeZone?: string): string;
11
11
  export declare function filterSchedules(rows: ScheduleRow[], filters: ScheduleFilters): ScheduleRow[];
12
12
  export declare function renderSchedulesPage(root: HTMLElement): PageDisposer;
13
13
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"schedules-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/schedules-page.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrE,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAGxD,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,WAAW,EAAE,CAY5F;AAoKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAEnE"}
1
+ {"version":3,"file":"schedules-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/schedules-page.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrE,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAGxD,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CASrE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,WAAW,EAAE,CAY5F;AAqKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAEnE"}
@@ -2,12 +2,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useMemo, useState } from 'react';
3
3
  import { mountReactPage } from './react-mount.js';
4
4
  import { useStoreSelector, useT } from './react-hooks.js';
5
- export function fmtScheduleDate(s) {
5
+ export function fmtScheduleDate(s, timeZone) {
6
6
  if (!s)
7
7
  return '—';
8
8
  try {
9
9
  const d = new Date(s);
10
- return d.toLocaleString();
10
+ // Render in the scheduler's effective zone (with a short zone suffix so a
11
+ // viewer in another zone isn't misled). Empty tz ⇒ browser-local (legacy).
12
+ const opts = timeZone ? { timeZone, timeZoneName: 'short' } : undefined;
13
+ return d.toLocaleString(undefined, opts);
11
14
  }
12
15
  catch {
13
16
  return s;
@@ -42,6 +45,7 @@ function repeatLabel(s) {
42
45
  function SchedulesPage() {
43
46
  const tr = useT();
44
47
  const scheduleRows = useStoreSelector(snapshot => [...snapshot.schedules.values()]);
48
+ const scheduleTz = useStoreSelector(snapshot => snapshot.scheduleTimeZone);
45
49
  const [filters, setFilters] = useState({ q: '', kind: '', enabledOnly: false });
46
50
  const [pending, setPending] = useState(null);
47
51
  const labels = {
@@ -73,7 +77,7 @@ function SchedulesPage() {
73
77
  setPending(cur => cur === key ? null : cur);
74
78
  }
75
79
  }
76
- return (_jsxs("section", { className: "page schedules-page", children: [_jsx("div", { className: "page-heading", children: _jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: tr('nav.schedules') }), _jsx("h1", { children: tr('schedules.title') }), _jsx("p", { children: tr('schedules.subtitle') })] }) }), _jsxs("form", { id: "sched-filters", className: "filters", children: [_jsx("input", { type: "search", name: "q", placeholder: tr('schedules.search'), value: filters.q, onChange: e => setFilters(f => ({ ...f, q: e.currentTarget.value })) }), _jsxs("select", { name: "kind", value: filters.kind, onChange: e => setFilters(f => ({ ...f, kind: e.currentTarget.value })), children: [_jsx("option", { value: "", children: tr('schedules.anyKind') }), _jsx("option", { value: "cron", children: "cron" }), _jsx("option", { value: "interval", children: "interval" }), _jsx("option", { value: "once", children: "once" })] }), _jsxs("label", { children: [_jsx("input", { type: "checkbox", name: "enabled", checked: filters.enabledOnly, onChange: e => setFilters(f => ({ ...f, enabledOnly: e.currentTarget.checked })) }), ' ', tr('schedules.enabledOnly')] })] }), _jsxs("table", { className: "schedules-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: labels.name }), _jsx("th", { children: labels.bot }), _jsx("th", { children: labels.schedule }), _jsx("th", { children: labels.delivery }), _jsx("th", { children: labels.next }), _jsx("th", { children: labels.last }), _jsx("th", { children: labels.repeat }), _jsx("th", { children: labels.enabled }), _jsx("th", { children: labels.actions })] }) }), _jsx("tbody", { id: "schedules-tbody", children: rows.length === 0 ? (_jsx("tr", { className: "schedule-empty-row", children: _jsx("td", { colSpan: 9, className: "empty", children: tr('schedules.empty') }) })) : rows.map(s => (_jsxs("tr", { "data-id": s.id, children: [_jsx("td", { "data-label": labels.name, children: s.name ?? s.id }), _jsx("td", { "data-label": labels.bot, children: s.botName ?? s.larkAppId ?? '-' }), _jsx("td", { "data-label": labels.schedule, children: _jsx("code", { children: s.parsed?.display ?? '?' }) }), _jsx("td", { "data-label": labels.delivery, children: deliveryLabel(s, tr) }), _jsx("td", { "data-label": labels.next, children: fmtScheduleDate(s.nextRunAt) }), _jsxs("td", { "data-label": labels.last, children: [fmtScheduleDate(s.lastRunAt), " ", s.lastStatus === 'error' ? '⚠️' : ''] }), _jsx("td", { "data-label": labels.repeat, children: repeatLabel(s) }), _jsx("td", { "data-label": labels.enabled, children: s.enabled ? '✓' : '✗' }), _jsx("td", { className: "actions-cell", "data-label": labels.actions, children: _jsxs("div", { className: "schedule-actions", children: [_jsx(ActionButton, { op: "run", label: tr('schedules.runNow'), pending: pending === `${s.id}:run`, onClick: () => void runAction(s.id, 'run') }), s.enabled ? (_jsx(ActionButton, { op: "pause", label: tr('schedules.pause'), pending: pending === `${s.id}:pause`, onClick: () => void runAction(s.id, 'pause') })) : (_jsx(ActionButton, { op: "resume", label: tr('schedules.resume'), pending: pending === `${s.id}:resume`, onClick: () => void runAction(s.id, 'resume') })), s.deliver === 'local' ? null : (_jsx(ActionButton, { op: "delivery", label: s.deliver === 'new-topic' ? tr('schedules.useOrigin') : tr('schedules.useNewTopic'), pending: pending === `${s.id}:delivery`, onClick: () => void runAction(s.id, 'delivery') }))] }) })] }, s.id))) })] })] }));
80
+ return (_jsxs("section", { className: "page schedules-page", children: [_jsx("div", { className: "page-heading", children: _jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: tr('nav.schedules') }), _jsx("h1", { children: tr('schedules.title') }), _jsx("p", { children: tr('schedules.subtitle') })] }) }), _jsxs("form", { id: "sched-filters", className: "filters", children: [_jsx("input", { type: "search", name: "q", placeholder: tr('schedules.search'), value: filters.q, onChange: e => setFilters(f => ({ ...f, q: e.currentTarget.value })) }), _jsxs("select", { name: "kind", value: filters.kind, onChange: e => setFilters(f => ({ ...f, kind: e.currentTarget.value })), children: [_jsx("option", { value: "", children: tr('schedules.anyKind') }), _jsx("option", { value: "cron", children: "cron" }), _jsx("option", { value: "interval", children: "interval" }), _jsx("option", { value: "once", children: "once" })] }), _jsxs("label", { children: [_jsx("input", { type: "checkbox", name: "enabled", checked: filters.enabledOnly, onChange: e => setFilters(f => ({ ...f, enabledOnly: e.currentTarget.checked })) }), ' ', tr('schedules.enabledOnly')] })] }), _jsxs("table", { className: "schedules-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: labels.name }), _jsx("th", { children: labels.bot }), _jsx("th", { children: labels.schedule }), _jsx("th", { children: labels.delivery }), _jsx("th", { children: labels.next }), _jsx("th", { children: labels.last }), _jsx("th", { children: labels.repeat }), _jsx("th", { children: labels.enabled }), _jsx("th", { children: labels.actions })] }) }), _jsx("tbody", { id: "schedules-tbody", children: rows.length === 0 ? (_jsx("tr", { className: "schedule-empty-row", children: _jsx("td", { colSpan: 9, className: "empty", children: tr('schedules.empty') }) })) : rows.map(s => (_jsxs("tr", { "data-id": s.id, children: [_jsx("td", { "data-label": labels.name, children: s.name ?? s.id }), _jsx("td", { "data-label": labels.bot, children: s.botName ?? s.larkAppId ?? '-' }), _jsx("td", { "data-label": labels.schedule, children: _jsx("code", { children: s.parsed?.display ?? '?' }) }), _jsx("td", { "data-label": labels.delivery, children: deliveryLabel(s, tr) }), _jsx("td", { "data-label": labels.next, children: fmtScheduleDate(s.nextRunAt, scheduleTz) }), _jsxs("td", { "data-label": labels.last, children: [fmtScheduleDate(s.lastRunAt, scheduleTz), " ", s.lastStatus === 'error' ? '⚠️' : ''] }), _jsx("td", { "data-label": labels.repeat, children: repeatLabel(s) }), _jsx("td", { "data-label": labels.enabled, children: s.enabled ? '✓' : '✗' }), _jsx("td", { className: "actions-cell", "data-label": labels.actions, children: _jsxs("div", { className: "schedule-actions", children: [_jsx(ActionButton, { op: "run", label: tr('schedules.runNow'), pending: pending === `${s.id}:run`, onClick: () => void runAction(s.id, 'run') }), s.enabled ? (_jsx(ActionButton, { op: "pause", label: tr('schedules.pause'), pending: pending === `${s.id}:pause`, onClick: () => void runAction(s.id, 'pause') })) : (_jsx(ActionButton, { op: "resume", label: tr('schedules.resume'), pending: pending === `${s.id}:resume`, onClick: () => void runAction(s.id, 'resume') })), s.deliver === 'local' ? null : (_jsx(ActionButton, { op: "delivery", label: s.deliver === 'new-topic' ? tr('schedules.useOrigin') : tr('schedules.useNewTopic'), pending: pending === `${s.id}:delivery`, onClick: () => void runAction(s.id, 'delivery') }))] }) })] }, s.id))) })] })] }));
77
81
  }
78
82
  function ActionButton(props) {
79
83
  return (_jsx("button", { type: "button", "data-op": props.op, disabled: props.pending, onClick: props.onClick, children: props.pending ? '...' : props.label }));
@@ -1 +1 @@
1
- {"version":3,"file":"schedules-page.js","sourceRoot":"","sources":["../../../src/dashboard/web/schedules-page.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedules-page.js","sourceRoot":"","sources":["../../../src/dashboard/web/schedules-page.tsx"],"names":[],"mappings":"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"}
@@ -1134,14 +1134,14 @@ export function wireSessionsPage(root) {
1134
1134
  }
1135
1135
  else {
1136
1136
  const team = kanbanTeams.find(tm => tm.key === kanbanTeamKey) ?? kanbanTeams[0];
1137
- // 「团队群」白名单(申晗定稿):
1137
+ // 「团队群」白名单(既定规则):
1138
1138
  // A. dashboard 团队页发起的协作群(建群时落盘的 team↔chatId 绑定)
1139
1139
  // B. 群里 /introduce 过该团队成员机器人的群——介绍记录按名字与团队
1140
1140
  // roster 匹配;介绍过的若不是本团队成员,不算(防误筛)
1141
1141
  // 命中群里所有 bot 的会话都展示(本质 = 同团队 bot 所在群/话题的会话)。
1142
1142
  const teamChats = teamChatIdsFor(team);
1143
1143
  const teamRows = team ? rows.filter(r => teamChats.has(String(r.chatId))) : [];
1144
- // ── hub 团队看板合并(申晗架构:编排存团队 host)──────────────────────
1144
+ // ── hub 团队看板合并(既定架构:编排存团队 host)──────────────────────
1145
1145
  // 本地行(实时)+ 对方部署上报的裁剪行(host 快照);共享编排的列/排序
1146
1146
  // 覆盖个人看板字段——团队视图里大家看到同一份摆放。
1147
1147
  if (team)
@@ -1,3 +1,12 @@
1
1
  import { type PageDisposer } from './react-mount.js';
2
+ export declare function TimeZoneRow(props: {
3
+ value: string;
4
+ host: string;
5
+ /** TRUE effective zone (env → config → host) for the "currently effective"
6
+ * hint. Must come from the backend, not be reconstructed as value||host. */
7
+ effective: string;
8
+ disabled: boolean;
9
+ onSave(tz: string | null): void;
10
+ }): import("react").JSX.Element;
2
11
  export declare function renderSettingsPage(root: HTMLElement): PageDisposer;
3
12
  //# sourceMappingURL=settings-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/settings-page.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA4oBrE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAElE"}
1
+ {"version":3,"file":"settings-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/settings-page.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAkuBrE,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb;iFAC6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CACjC,+BAkCA;AA6JD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAElE"}
@@ -2,16 +2,37 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useCallback, useEffect, useRef, useState } from 'react';
3
3
  import { useT } from './react-hooks.js';
4
4
  import { mountReactPage } from './react-mount.js';
5
+ import { store } from './store.js';
6
+ /** A handful of common IANA zones offered as a datalist for the timezone field. */
7
+ const COMMON_TIMEZONES = [
8
+ 'Asia/Shanghai', 'Asia/Hong_Kong', 'Asia/Tokyo', 'Asia/Singapore', 'Asia/Kolkata',
9
+ 'UTC', 'Europe/London', 'Europe/Paris', 'Europe/Moscow',
10
+ 'America/Los_Angeles', 'America/New_York', 'America/Sao_Paulo', 'Australia/Sydney',
11
+ ];
5
12
  function parseSettings(s) {
6
13
  return {
7
14
  publicReadOnly: s?.publicReadOnly === true,
8
15
  openTerminalInFeishu: s?.openTerminalInFeishu === true,
9
16
  chatBotDiscovery: s?.chatBotDiscovery !== false,
17
+ vcMeetingAgent: {
18
+ enabled: s?.vcMeetingAgent?.enabled !== false,
19
+ listenerBotAppId: typeof s?.vcMeetingAgent?.listenerBotAppId === 'string' ? s.vcMeetingAgent.listenerBotAppId : null,
20
+ listenerBotOptions: Array.isArray(s?.vcMeetingAgent?.listenerBotOptions) ? s.vcMeetingAgent.listenerBotOptions : [],
21
+ },
10
22
  repoPickerMode: s?.repoPickerMode === 'repos' ? 'repos' : 'all',
11
23
  maintenance: (s?.maintenance && typeof s.maintenance === 'object') ? s.maintenance : {},
12
24
  localDevInstall: s?.localDevInstall === true,
13
25
  whiteboard: { enabled: s?.whiteboard?.enabled === true },
14
26
  remoteAccess: s?.remoteAccess === true,
27
+ scheduleTimeZone: typeof s?.scheduleTimeZone === 'string' ? s.scheduleTimeZone : '',
28
+ hostTimeZone: typeof s?.hostTimeZone === 'string' && s.hostTimeZone ? s.hostTimeZone : 'UTC',
29
+ // Prefer the backend's true effective zone (includes env override); fall back
30
+ // to configured||host only if an older backend didn't send it.
31
+ effectiveScheduleTimeZone: typeof s?.effectiveScheduleTimeZone === 'string' && s.effectiveScheduleTimeZone
32
+ ? s.effectiveScheduleTimeZone
33
+ : (typeof s?.scheduleTimeZone === 'string' && s.scheduleTimeZone
34
+ ? s.scheduleTimeZone
35
+ : (typeof s?.hostTimeZone === 'string' && s.hostTimeZone ? s.hostTimeZone : 'UTC')),
15
36
  };
16
37
  }
17
38
  function taskUi(m, key) {
@@ -140,8 +161,15 @@ function SettingsPage() {
140
161
  return;
141
162
  if (!r.ok || body.ok === false)
142
163
  throw new Error(body?.error ?? `HTTP ${r.status}`);
143
- setSettings(parseSettings(body.settings));
164
+ const saved = parseSettings(body.settings);
165
+ setSettings(saved);
166
+ // Sync the shared store to the TRUE effective zone (env → config → host,
167
+ // as computed by the backend) so this SPA's schedules/overview re-render
168
+ // correctly — reconstructing configured||host here would drop an env
169
+ // override. Other browsers pick it up via the schedule.timezone SSE event.
170
+ store.setScheduleTimeZone(saved.effectiveScheduleTimeZone);
144
171
  setSettingsMsg({ text: tr('settings.saved'), cls: 'hint-ok' });
172
+ setTimer(() => setSettingsMsg(current => (current?.cls === 'hint-ok' ? null : current)), 2400);
145
173
  }
146
174
  catch (e) {
147
175
  if (!mountedRef.current)
@@ -279,21 +307,47 @@ function SettingsPage() {
279
307
  setUpMsg({ text: tr('update.updateFailed', { detail: e instanceof Error ? e.message : String(e) }), cls: 'hint-warn-inline' });
280
308
  }
281
309
  }
282
- const settingsBody = settings ? (_jsx(SettingsBody, { settings: settings, canWrite: canWrite, bound: bound, savingKey: savingKey, message: settingsMsg, onSave: saveSettings })) : loadError ? (_jsxs("p", { className: "hint-warn", children: [tr('settings.loadFailed'), ": ", loadError] })) : (_jsx("p", { className: "empty", children: tr('settings.loading') }));
283
- return (_jsxs("section", { className: "page", children: [_jsx("div", { className: "page-heading", children: _jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: tr('nav.settings') }), _jsx("h1", { children: tr('settings.title') }), _jsx("p", { children: tr('settings.subtitle') })] }) }), settingsBody, _jsx(UpdateCard, { canWrite: canWrite, status: upStatus, statusError: upStatusError, changelog: upChangelog, changelogOpen: upChangelogOpen, changelogOk: upChangelogOk, changelogRateLimited: upChangelogRateLimited, releasesUrl: upReleasesUrl, busy: upBusy, message: upMsg, onCheck: () => {
284
- setUpStatus(null);
285
- setUpChangelog(null);
286
- setUpChangelogOpen(false);
287
- setUpMsg(null);
288
- setUpStatusError(null);
289
- void fetchStatus();
290
- }, onToggleChangelog: () => {
291
- const next = !upChangelogOpen;
292
- setUpChangelogOpen(next);
293
- if (next && upChangelog === null)
294
- void loadChangelog();
295
- }, onUpdate: () => void doUpdate(), onRestart: () => { if (window.confirm(tr('update.confirmPlainRestart')))
296
- void doRestart(null); } })] }));
310
+ const settingsBody = settings ? (_jsx(SettingsBody, { settings: settings, canWrite: canWrite, bound: bound, savingKey: savingKey, onSave: saveSettings })) : loadError ? (_jsxs("p", { className: "hint-warn st-banner", children: [tr('settings.loadFailed'), ": ", loadError] })) : (_jsx("p", { className: "empty st-banner", children: tr('settings.loading') }));
311
+ return (_jsxs("section", { className: "page", children: [_jsx("div", { className: "page-heading", children: _jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: tr('nav.settings') }), _jsx("h1", { children: tr('settings.title') }), _jsx("p", { children: tr('settings.subtitle') })] }) }), _jsxs("div", { className: "settings-grid", children: [settingsBody, _jsx(UpdateCard, { canWrite: canWrite, status: upStatus, statusError: upStatusError, changelog: upChangelog, changelogOpen: upChangelogOpen, changelogOk: upChangelogOk, changelogRateLimited: upChangelogRateLimited, releasesUrl: upReleasesUrl, busy: upBusy, message: upMsg, onCheck: () => {
312
+ setUpStatus(null);
313
+ setUpChangelog(null);
314
+ setUpChangelogOpen(false);
315
+ setUpMsg(null);
316
+ setUpStatusError(null);
317
+ void fetchStatus();
318
+ }, onToggleChangelog: () => {
319
+ const next = !upChangelogOpen;
320
+ setUpChangelogOpen(next);
321
+ if (next && upChangelog === null)
322
+ void loadChangelog();
323
+ }, onUpdate: () => void doUpdate(), onRestart: () => { if (window.confirm(tr('update.confirmPlainRestart')))
324
+ void doRestart(null); } })] }), settingsMsg ? (_jsx("div", { className: `st-status ${settingsMsg.cls ?? ''}`, "data-settings-status": true, role: "status", children: settingsMsg.text })) : null] }));
325
+ }
326
+ function SectionIcon(props) {
327
+ const shapes = {
328
+ access: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M8 1.7l5 1.9v4.1c0 3.2-2.1 5.6-5 6.6-2.9-1-5-3.4-5-6.6V3.6z" }), _jsx("path", { d: "M5.9 8l1.5 1.5 2.7-2.8" })] })),
329
+ cards: _jsx("path", { d: "M2.2 3.2h11.6v7.4H8.3L5.1 13.2v-2.6H2.2z" }),
330
+ experimental: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M6.1 1.8h3.8M7 1.8v4L3.1 12.4a1.35 1.35 0 001.2 2h7.4a1.35 1.35 0 001.2-2L9 5.8v-4" }), _jsx("path", { d: "M4.7 10.6h6.6" })] })),
331
+ meeting: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "1.6", y: "4.1", width: "8.9", height: "7.8", rx: "1.4" }), _jsx("path", { d: "M10.5 7.4l3.9-2.3v5.8l-3.9-2.3" })] })),
332
+ whiteboard: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "1.9", y: "2.4", width: "12.2", height: "8.4", rx: "1.2" }), _jsx("path", { d: "M4.7 8.2c1-.9 1.8-2.5 2.5-1.8.7.7-.5 2 .3 2.3.7.3 1.8-1.6 3.8-1.9" }), _jsx("path", { d: "M5.3 13.9h5.4M8 10.8v3.1" })] })),
333
+ repo: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "4.3", cy: "3.6", r: "1.7" }), _jsx("circle", { cx: "4.3", cy: "12.4", r: "1.7" }), _jsx("circle", { cx: "11.9", cy: "5.3", r: "1.7" }), _jsx("path", { d: "M4.3 5.3v5.4M11.9 7c0 2.7-3.6 2.9-5.7 3.6" })] })),
334
+ maintenance: (_jsx(_Fragment, { children: _jsx("path", { d: "M13.9 4.7a3.7 3.7 0 01-4.9 4.5l-4.4 4.4a1.6 1.6 0 01-2.2-2.2L6.8 7a3.7 3.7 0 014.5-4.9L8.9 4.5l2.6 2.6z" }) })),
335
+ update: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M13.5 6.2A5.8 5.8 0 103 10.9" }), _jsx("path", { d: "M13.7 2.5v3.9H9.8" }), _jsx("path", { d: "M8 5.6v4.6M6 8.3l2 1.9 2-1.9" })] })),
336
+ };
337
+ return (_jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: shapes[props.name] }));
338
+ }
339
+ function SectionCard(props) {
340
+ return (_jsxs("article", { className: "bd-card st-card", "data-saving": props.saving ? '' : undefined, children: [_jsxs("header", { className: "st-card-head", children: [_jsx("span", { className: "st-chip", "aria-hidden": "true", children: _jsx(SectionIcon, { name: props.icon }) }), _jsx("h3", { children: props.title })] }), props.children] }));
341
+ }
342
+ /** Long help copy defaults to a 2-line clamp; click toggles the full text
343
+ * (same interaction as bot-defaults' bd-help, without flipping the switch). */
344
+ function HelpText(props) {
345
+ const [open, setOpen] = useState(false);
346
+ return (_jsx("small", { className: open ? 'open' : undefined, onClick: e => {
347
+ e.preventDefault();
348
+ e.stopPropagation();
349
+ setOpen(v => !v);
350
+ }, children: props.text }));
297
351
  }
298
352
  function SettingsBody(props) {
299
353
  const tr = useT();
@@ -305,33 +359,68 @@ function SettingsBody(props) {
305
359
  const saveBoolean = (key, value) => {
306
360
  void props.onSave(key, { [key]: value }, s => ({ ...s, [key]: value }));
307
361
  };
308
- return (_jsx("div", { className: "settings-grid", children: _jsxs("article", { className: "bd-card settings-card", children: [canWrite ? null : _jsx("p", { className: "hint-warn", children: tr('settings.readOnlyVisitor') }), _jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: tr('settings.sectionAccess') }), _jsx(ToggleRow, { title: tr('settings.publicReadOnly'), help: tr('settings.publicReadOnlyHelp'), checked: settings.publicReadOnly, disabled: dis || savingKey === 'publicReadOnly', onChange: value => saveBoolean('publicReadOnly', value) }), bound ? (_jsx(ToggleRow, { title: tr('settings.remoteAccess'), help: tr('settings.remoteAccessHelp'), checked: settings.remoteAccess, disabled: dis || savingKey === 'remoteAccess', onChange: value => saveBoolean('remoteAccess', value) })) : null] }), _jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: tr('settings.sectionCards') }), _jsx(ToggleRow, { title: tr('settings.openTerminalInFeishu'), help: tr('settings.openTerminalInFeishuHelp'), checked: settings.openTerminalInFeishu, disabled: dis || savingKey === 'openTerminalInFeishu', onChange: value => saveBoolean('openTerminalInFeishu', value) })] }), _jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: tr('settings.sectionExperimental') }), _jsx(ToggleRow, { title: tr('settings.chatBotDiscovery'), help: tr('settings.chatBotDiscoveryHelp'), checked: settings.chatBotDiscovery, disabled: dis || savingKey === 'chatBotDiscovery', onChange: value => saveBoolean('chatBotDiscovery', value) })] }), _jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: "\u672C\u5730\u767D\u677F" }), _jsx(ToggleRow, { title: "\u542F\u7528\u9879\u76EE\u767D\u677F", help: "\u9ED8\u8BA4\u5173\u95ED\u3002\u5F00\u542F\u53EA\u542F\u7528\u80FD\u529B\uFF0C\u4E0D\u4F1A\u7ACB\u5373\u521B\u5EFA\u767D\u677F\uFF1B\u9996\u6B21\u9700\u8981\u65F6\u624D\u6309\u7FA4+\u9879\u76EE ensure\u3002", checked: settings.whiteboard.enabled, disabled: dis || savingKey === 'whiteboard', onChange: value => {
309
- void props.onSave('whiteboard', { whiteboard: { enabled: value } }, s => ({ ...s, whiteboard: { enabled: value } }));
310
- } })] }), _jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: tr('settings.sectionRepoPicker') }), _jsxs("label", { className: "form-row", children: [_jsx("span", { children: tr('settings.repoPickerMode') }), _jsxs("select", { value: settings.repoPickerMode, disabled: dis || savingKey === 'repoPickerMode', onChange: e => {
311
- const value = e.currentTarget.value === 'repos' ? 'repos' : 'all';
312
- void props.onSave('repoPickerMode', { repoPickerMode: value }, s => ({ ...s, repoPickerMode: value }));
313
- }, children: [_jsx("option", { value: "all", children: tr('settings.repoPickerModeAll') }), _jsx("option", { value: "repos", children: tr('settings.repoPickerModeRepos') })] }), _jsx("small", { children: tr('settings.repoPickerModeHelp') })] })] }), _jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: tr('settings.sectionMaintenance') }), _jsx(ToggleRow, { title: tr('settings.autoUpdate'), help: tr('settings.autoUpdateHelp'), checked: autoUpdate.enabled, disabled: autoUpdateDisabled || savingKey === 'autoUpdate', onChange: value => {
314
- const task = { enabled: value, time: autoUpdate.time };
315
- void props.onSave('autoUpdate', { maintenance: { autoUpdate: task } }, s => ({
316
- ...s,
317
- maintenance: { ...s.maintenance, autoUpdate: task },
318
- }));
319
- } }), _jsx("div", { className: "maint-time", children: _jsxs("label", { children: [tr('settings.maintenanceTime'), _jsx("input", { type: "time", value: autoUpdate.time, disabled: autoUpdateDisabled || savingKey === 'autoUpdate', onChange: e => {
320
- const task = { enabled: autoUpdate.enabled, time: e.currentTarget.value || '04:00' };
321
- void props.onSave('autoUpdate', { maintenance: { autoUpdate: task } }, s => ({
322
- ...s,
323
- maintenance: { ...s.maintenance, autoUpdate: task },
324
- }));
325
- } })] }) }), settings.localDevInstall ? _jsx("p", { className: "hint-warn", children: tr('settings.autoUpdateLocalDev') }) : null, _jsx(ToggleRow, { title: tr('settings.autoRestart'), help: tr('settings.autoRestartHelp'), checked: settings.maintenance.autoRestart?.enabled === true, disabled: autoRestartDisabled || savingKey === 'autoRestart', onChange: value => {
326
- const task = { enabled: value };
327
- void props.onSave('autoRestart', { maintenance: { autoRestart: task } }, s => ({
328
- ...s,
329
- maintenance: { ...s.maintenance, autoRestart: task },
330
- }));
331
- } })] }), _jsx("div", { className: "actions settings-actions", children: _jsx("span", { className: `oncall-status ${props.message?.cls ?? ''}`, "data-settings-status": true, children: props.message?.text ?? '' }) })] }) }));
362
+ return (_jsxs(_Fragment, { children: [canWrite ? null : _jsx("p", { className: "hint-warn st-banner", children: tr('settings.readOnlyVisitor') }), _jsxs(SectionCard, { icon: "access", title: tr('settings.sectionAccess'), saving: savingKey === 'publicReadOnly' || savingKey === 'remoteAccess', children: [_jsx(ToggleRow, { title: tr('settings.publicReadOnly'), help: tr('settings.publicReadOnlyHelp'), checked: settings.publicReadOnly, disabled: dis || savingKey === 'publicReadOnly', onChange: value => saveBoolean('publicReadOnly', value) }), bound ? (_jsx(ToggleRow, { title: tr('settings.remoteAccess'), help: tr('settings.remoteAccessHelp'), checked: settings.remoteAccess, disabled: dis || savingKey === 'remoteAccess', onChange: value => saveBoolean('remoteAccess', value) })) : null] }), _jsxs(SectionCard, { icon: "meeting", title: tr('settings.sectionVcMeetingAgent'), saving: savingKey === 'vcMeetingAgent', children: [_jsx(ToggleRow, { title: tr('settings.vcMeetingAgent'), help: tr('settings.vcMeetingAgentHelp'), checked: settings.vcMeetingAgent.enabled, disabled: dis || savingKey === 'vcMeetingAgent', onChange: value => {
363
+ void props.onSave('vcMeetingAgent', { vcMeetingAgent: { enabled: value } }, s => ({ ...s, vcMeetingAgent: { ...s.vcMeetingAgent, enabled: value } }));
364
+ } }), _jsxs("label", { className: "st-field", children: [_jsx("span", { children: tr('settings.vcMeetingListenerBot') }), _jsxs("select", { value: settings.vcMeetingAgent.listenerBotAppId ?? '', disabled: dis || savingKey === 'vcMeetingAgent', onChange: e => {
365
+ const value = e.currentTarget.value || null;
366
+ void props.onSave('vcMeetingAgent', { vcMeetingAgent: { listenerBotAppId: value } }, s => ({ ...s, vcMeetingAgent: { ...s.vcMeetingAgent, listenerBotAppId: value } }));
367
+ }, children: [_jsx("option", { value: "", children: tr('settings.vcMeetingListenerBotAuto') }), settings.vcMeetingAgent.listenerBotOptions.map(bot => {
368
+ const label = bot.botName || bot.larkAppId;
369
+ const detail = bot.cliId ? ` · ${bot.cliId}` : '';
370
+ const suffixParts = [
371
+ bot.vcMeetingAgentEnabled === true ? undefined : tr('settings.vcMeetingListenerBotDisabled'),
372
+ bot.hasLarkCliProfile === true ? undefined : tr('settings.vcMeetingListenerBotNoProfile'),
373
+ ].filter(Boolean);
374
+ const suffix = suffixParts.length > 0 ? ` · ${suffixParts.join(' · ')}` : '';
375
+ return (_jsxs("option", { value: bot.larkAppId, children: [label, detail, suffix] }, bot.larkAppId));
376
+ })] }), _jsx(HelpText, { text: tr('settings.vcMeetingListenerBotHelp') })] })] }), _jsx(SectionCard, { icon: "cards", title: tr('settings.sectionCards'), saving: savingKey === 'openTerminalInFeishu', children: _jsx(ToggleRow, { title: tr('settings.openTerminalInFeishu'), help: tr('settings.openTerminalInFeishuHelp'), checked: settings.openTerminalInFeishu, disabled: dis || savingKey === 'openTerminalInFeishu', onChange: value => saveBoolean('openTerminalInFeishu', value) }) }), _jsx(SectionCard, { icon: "experimental", title: tr('settings.sectionExperimental'), saving: savingKey === 'chatBotDiscovery', children: _jsx(ToggleRow, { title: tr('settings.chatBotDiscovery'), help: tr('settings.chatBotDiscoveryHelp'), checked: settings.chatBotDiscovery, disabled: dis || savingKey === 'chatBotDiscovery', onChange: value => saveBoolean('chatBotDiscovery', value) }) }), _jsx(SectionCard, { icon: "whiteboard", title: tr('settings.sectionWhiteboard'), saving: savingKey === 'whiteboard', children: _jsx(ToggleRow, { title: tr('settings.whiteboardEnable'), help: tr('settings.whiteboardEnableHelp'), checked: settings.whiteboard.enabled, disabled: dis || savingKey === 'whiteboard', onChange: value => {
377
+ void props.onSave('whiteboard', { whiteboard: { enabled: value } }, s => ({ ...s, whiteboard: { enabled: value } }));
378
+ } }) }), _jsx(SectionCard, { icon: "repo", title: tr('settings.sectionRepoPicker'), saving: savingKey === 'repoPickerMode', children: _jsxs("label", { className: "st-field", children: [_jsx("span", { children: tr('settings.repoPickerMode') }), _jsxs("select", { value: settings.repoPickerMode, disabled: dis || savingKey === 'repoPickerMode', onChange: e => {
379
+ const value = e.currentTarget.value === 'repos' ? 'repos' : 'all';
380
+ void props.onSave('repoPickerMode', { repoPickerMode: value }, s => ({ ...s, repoPickerMode: value }));
381
+ }, children: [_jsx("option", { value: "all", children: tr('settings.repoPickerModeAll') }), _jsx("option", { value: "repos", children: tr('settings.repoPickerModeRepos') })] }), _jsx(HelpText, { text: tr('settings.repoPickerModeHelp') })] }) }), _jsx(SectionCard, { icon: "maintenance", title: tr('settings.sectionSchedule'), saving: savingKey === 'scheduleTimeZone', children: _jsx(TimeZoneRow, { value: settings.scheduleTimeZone, host: settings.hostTimeZone, effective: settings.effectiveScheduleTimeZone, disabled: dis || savingKey === 'scheduleTimeZone', onSave: tz => {
382
+ void props.onSave('scheduleTimeZone', { scheduleTimeZone: tz }, s => ({ ...s, scheduleTimeZone: tz ?? '' }));
383
+ } }) }), _jsxs(SectionCard, { icon: "maintenance", title: tr('settings.sectionMaintenance'), saving: savingKey === 'autoUpdate' || savingKey === 'autoRestart', children: [_jsx(ToggleRow, { title: tr('settings.autoUpdate'), help: tr('settings.autoUpdateHelp'), checked: autoUpdate.enabled, disabled: autoUpdateDisabled || savingKey === 'autoUpdate', onChange: value => {
384
+ const task = { enabled: value, time: autoUpdate.time };
385
+ void props.onSave('autoUpdate', { maintenance: { autoUpdate: task } }, s => ({
386
+ ...s,
387
+ maintenance: { ...s.maintenance, autoUpdate: task },
388
+ }));
389
+ } }), _jsx("div", { className: "st-subrow", children: _jsxs("label", { className: "st-field", children: [_jsx("span", { children: tr('settings.maintenanceTime') }), _jsx("input", { type: "time", value: autoUpdate.time, disabled: autoUpdateDisabled || savingKey === 'autoUpdate', onChange: e => {
390
+ const task = { enabled: autoUpdate.enabled, time: e.currentTarget.value || '04:00' };
391
+ void props.onSave('autoUpdate', { maintenance: { autoUpdate: task } }, s => ({
392
+ ...s,
393
+ maintenance: { ...s.maintenance, autoUpdate: task },
394
+ }));
395
+ } })] }) }), settings.localDevInstall ? _jsx("p", { className: "hint-warn", children: tr('settings.autoUpdateLocalDev') }) : null, _jsx(ToggleRow, { title: tr('settings.autoRestart'), help: tr('settings.autoRestartHelp'), checked: settings.maintenance.autoRestart?.enabled === true, disabled: autoRestartDisabled || savingKey === 'autoRestart', onChange: value => {
396
+ const task = { enabled: value };
397
+ void props.onSave('autoRestart', { maintenance: { autoRestart: task } }, s => ({
398
+ ...s,
399
+ maintenance: { ...s.maintenance, autoRestart: task },
400
+ }));
401
+ } })] })] }));
402
+ }
403
+ export function TimeZoneRow(props) {
404
+ const tr = useT();
405
+ const [draft, setDraft] = useState(props.value);
406
+ // Re-sync when a save round-trips (or another client changes the value).
407
+ useEffect(() => { setDraft(props.value); }, [props.value]);
408
+ const commit = () => {
409
+ const next = draft.trim();
410
+ if (next === props.value.trim())
411
+ return; // unchanged — skip the PUT
412
+ props.onSave(next === '' ? null : next); // empty ⇒ clear override, follow host
413
+ };
414
+ const effective = props.effective || props.value.trim() || props.host;
415
+ return (_jsxs("label", { className: "form-row", children: [_jsx("span", { children: tr('settings.scheduleTimeZone') }), _jsx("input", { type: "text", list: "tz-common", value: draft, placeholder: props.host, disabled: props.disabled, onChange: e => setDraft(e.currentTarget.value), onBlur: commit, onKeyDown: e => {
416
+ if (e.key === 'Enter') {
417
+ e.preventDefault();
418
+ e.currentTarget.blur();
419
+ }
420
+ } }), _jsx("datalist", { id: "tz-common", children: COMMON_TIMEZONES.map(z => _jsx("option", { value: z }, z)) }), _jsx("small", { children: tr('settings.scheduleTimeZoneHelp', { host: props.host, effective }) })] }));
332
421
  }
333
422
  function ToggleRow(props) {
334
- return (_jsxs("label", { className: "toggle-row", children: [_jsx("input", { type: "checkbox", checked: props.checked, disabled: props.disabled, onChange: e => props.onChange(e.currentTarget.checked) }), _jsx("span", { className: "switch", "aria-hidden": "true" }), _jsxs("span", { className: "toggle-tx", children: [_jsx("strong", { children: props.title }), _jsx("small", { children: props.help })] })] }));
423
+ return (_jsxs("label", { className: "toggle-row", children: [_jsx("input", { type: "checkbox", checked: props.checked, disabled: props.disabled, onChange: e => props.onChange(e.currentTarget.checked) }), _jsx("span", { className: "switch", "aria-hidden": "true" }), _jsxs("span", { className: "toggle-tx", children: [_jsx("strong", { children: props.title }), _jsx(HelpText, { text: props.help })] })] }));
335
424
  }
336
425
  function UpdateCard(props) {
337
426
  const tr = useT();
@@ -348,9 +437,9 @@ function UpdateCard(props) {
348
437
  else {
349
438
  const s = props.status;
350
439
  const updateDisabled = s.localDevInstall || props.busy;
351
- inner = (_jsxs(_Fragment, { children: [_jsxs("p", { className: "update-version", children: [_jsxs("span", { children: [tr('update.current'), ": ", _jsxs("strong", { children: ["v", s.current] })] }), ' ', _jsx(UpdateBadge, { status: s })] }), !s.node.ok ? _jsx("p", { className: "hint-warn", children: tr('update.nodeWarn', { version: s.node.version, required: s.node.required }) }) : null, s.localDevInstall ? _jsx("p", { className: "hint-warn", children: tr('update.localDev') }) : null, s.installs.multiple ? _jsx(MultiInstallWarning, { entries: s.installs.entries }) : null, _jsxs("div", { className: "update-actions", children: [_jsx("button", { type: "button", "data-up": "check", disabled: props.busy, onClick: props.onCheck, children: tr('update.btnCheck') }), _jsx("button", { type: "button", "data-up": "changelog", disabled: props.busy, onClick: props.onToggleChangelog, children: props.changelogOpen ? tr('update.btnChangelogHide') : tr('update.btnChangelog') }), _jsx("button", { type: "button", className: "primary", "data-up": "update", disabled: updateDisabled, onClick: props.onUpdate, children: tr('update.btnUpdate') }), _jsx("button", { type: "button", "data-up": "restart", disabled: props.busy, onClick: props.onRestart, children: tr('update.btnRestart') })] }), props.changelogOpen ? (_jsx(ChangelogPanel, { changelog: props.changelog, ok: props.changelogOk, rateLimited: props.changelogRateLimited, releasesUrl: props.releasesUrl })) : null, props.message ? _jsx("p", { className: `oncall-status ${props.message.cls ?? ''}`, children: props.message.text }) : null] }));
440
+ inner = (_jsxs(_Fragment, { children: [_jsxs("p", { className: "update-version", children: [_jsx("span", { className: "st-update-label", children: tr('update.current') }), _jsxs("strong", { className: "st-update-ver", children: ["v", s.current] }), _jsx(UpdateBadge, { status: s })] }), !s.node.ok ? _jsx("p", { className: "hint-warn", children: tr('update.nodeWarn', { version: s.node.version, required: s.node.required }) }) : null, s.localDevInstall ? _jsx("p", { className: "hint-warn", children: tr('update.localDev') }) : null, s.installs.multiple ? _jsx(MultiInstallWarning, { entries: s.installs.entries }) : null, _jsxs("div", { className: "update-actions", children: [_jsx("button", { type: "button", "data-up": "check", disabled: props.busy, onClick: props.onCheck, children: tr('update.btnCheck') }), _jsx("button", { type: "button", "data-up": "changelog", disabled: props.busy, onClick: props.onToggleChangelog, children: props.changelogOpen ? tr('update.btnChangelogHide') : tr('update.btnChangelog') }), _jsx("button", { type: "button", className: "primary", "data-up": "update", disabled: updateDisabled, onClick: props.onUpdate, children: tr('update.btnUpdate') }), _jsx("button", { type: "button", "data-up": "restart", disabled: props.busy, onClick: props.onRestart, children: tr('update.btnRestart') })] }), props.changelogOpen ? (_jsx(ChangelogPanel, { changelog: props.changelog, ok: props.changelogOk, rateLimited: props.changelogRateLimited, releasesUrl: props.releasesUrl })) : null, props.message ? _jsx("p", { className: `oncall-status ${props.message.cls ?? ''}`, children: props.message.text }) : null] }));
352
441
  }
353
- return (_jsx("div", { className: "settings-grid", children: _jsx("article", { className: "bd-card settings-card", children: _jsxs("section", { className: "bd-section", children: [_jsx("h3", { className: "bd-section-title", children: tr('update.section') }), inner] }) }) }));
442
+ return (_jsx(SectionCard, { icon: "update", title: tr('update.section'), children: inner }));
354
443
  }
355
444
  function UpdateBadge(props) {
356
445
  const tr = useT();