botmux 2.61.0 → 2.63.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 (173) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/bot-registry.d.ts +15 -0
  4. package/dist/bot-registry.d.ts.map +1 -1
  5. package/dist/bot-registry.js +14 -0
  6. package/dist/bot-registry.js.map +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +28 -31
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts +12 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +12 -0
  13. package/dist/config.js.map +1 -1
  14. package/dist/core/command-handler.d.ts.map +1 -1
  15. package/dist/core/command-handler.js +14 -8
  16. package/dist/core/command-handler.js.map +1 -1
  17. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  18. package/dist/core/dashboard-ipc-server.js +2 -1
  19. package/dist/core/dashboard-ipc-server.js.map +1 -1
  20. package/dist/core/dashboard-rows.d.ts +13 -1
  21. package/dist/core/dashboard-rows.d.ts.map +1 -1
  22. package/dist/core/dashboard-rows.js +10 -4
  23. package/dist/core/dashboard-rows.js.map +1 -1
  24. package/dist/core/session-activity.d.ts +16 -0
  25. package/dist/core/session-activity.d.ts.map +1 -1
  26. package/dist/core/session-activity.js +35 -0
  27. package/dist/core/session-activity.js.map +1 -1
  28. package/dist/core/trigger-session.d.ts.map +1 -1
  29. package/dist/core/trigger-session.js +9 -10
  30. package/dist/core/trigger-session.js.map +1 -1
  31. package/dist/core/worker-pool.d.ts.map +1 -1
  32. package/dist/core/worker-pool.js +6 -0
  33. package/dist/core/worker-pool.js.map +1 -1
  34. package/dist/daemon.d.ts.map +1 -1
  35. package/dist/daemon.js +10 -2
  36. package/dist/daemon.js.map +1 -1
  37. package/dist/dashboard/auth.d.ts +6 -0
  38. package/dist/dashboard/auth.d.ts.map +1 -1
  39. package/dist/dashboard/auth.js +33 -12
  40. package/dist/dashboard/auth.js.map +1 -1
  41. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  42. package/dist/dashboard/bot-onboarding.js +10 -13
  43. package/dist/dashboard/bot-onboarding.js.map +1 -1
  44. package/dist/dashboard/connector-api.d.ts.map +1 -1
  45. package/dist/dashboard/connector-api.js +22 -17
  46. package/dist/dashboard/connector-api.js.map +1 -1
  47. package/dist/dashboard/public-redact.d.ts +16 -0
  48. package/dist/dashboard/public-redact.d.ts.map +1 -0
  49. package/dist/dashboard/public-redact.js +62 -0
  50. package/dist/dashboard/public-redact.js.map +1 -0
  51. package/dist/dashboard/web/app.d.ts +1 -0
  52. package/dist/dashboard/web/app.d.ts.map +1 -1
  53. package/dist/dashboard/web/app.js +171 -25
  54. package/dist/dashboard/web/app.js.map +1 -1
  55. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  56. package/dist/dashboard/web/bot-defaults.js +136 -64
  57. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  58. package/dist/dashboard/web/connectors.d.ts.map +1 -1
  59. package/dist/dashboard/web/connectors.js +120 -25
  60. package/dist/dashboard/web/connectors.js.map +1 -1
  61. package/dist/dashboard/web/cyber-fx.d.ts +6 -0
  62. package/dist/dashboard/web/cyber-fx.d.ts.map +1 -0
  63. package/dist/dashboard/web/cyber-fx.js +289 -0
  64. package/dist/dashboard/web/cyber-fx.js.map +1 -0
  65. package/dist/dashboard/web/groups.d.ts.map +1 -1
  66. package/dist/dashboard/web/groups.js +6 -1
  67. package/dist/dashboard/web/groups.js.map +1 -1
  68. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  69. package/dist/dashboard/web/i18n.js +146 -8
  70. package/dist/dashboard/web/i18n.js.map +1 -1
  71. package/dist/dashboard/web/overview.d.ts.map +1 -1
  72. package/dist/dashboard/web/overview.js +206 -48
  73. package/dist/dashboard/web/overview.js.map +1 -1
  74. package/dist/dashboard/web/preferences.d.ts +16 -0
  75. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  76. package/dist/dashboard/web/preferences.js +72 -1
  77. package/dist/dashboard/web/preferences.js.map +1 -1
  78. package/dist/dashboard/web/roles.js +3 -3
  79. package/dist/dashboard/web/roles.js.map +1 -1
  80. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  81. package/dist/dashboard/web/sessions.js +404 -64
  82. package/dist/dashboard/web/sessions.js.map +1 -1
  83. package/dist/dashboard/web/settings.d.ts +2 -0
  84. package/dist/dashboard/web/settings.d.ts.map +1 -0
  85. package/dist/dashboard/web/settings.js +135 -0
  86. package/dist/dashboard/web/settings.js.map +1 -0
  87. package/dist/dashboard/web/skin-intro.d.ts +4 -0
  88. package/dist/dashboard/web/skin-intro.d.ts.map +1 -0
  89. package/dist/dashboard/web/skin-intro.js +49 -0
  90. package/dist/dashboard/web/skin-intro.js.map +1 -0
  91. package/dist/dashboard/web/team-federation.js +4 -4
  92. package/dist/dashboard/web/team-federation.js.map +1 -1
  93. package/dist/dashboard/web/theme-menu.d.ts +3 -0
  94. package/dist/dashboard/web/theme-menu.d.ts.map +1 -0
  95. package/dist/dashboard/web/theme-menu.js +97 -0
  96. package/dist/dashboard/web/theme-menu.js.map +1 -0
  97. package/dist/dashboard/web/ui.d.ts +16 -2
  98. package/dist/dashboard/web/ui.d.ts.map +1 -1
  99. package/dist/dashboard/web/ui.js +137 -7
  100. package/dist/dashboard/web/ui.js.map +1 -1
  101. package/dist/dashboard/webhook-routes.d.ts +1 -5
  102. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  103. package/dist/dashboard/webhook-routes.js +127 -76
  104. package/dist/dashboard/webhook-routes.js.map +1 -1
  105. package/dist/dashboard-web/app.js +704 -512
  106. package/dist/dashboard-web/index.html +19 -14
  107. package/dist/dashboard-web/skins/bluearchive-hero.webp +0 -0
  108. package/dist/dashboard-web/skins/dragonball-goku.webp +0 -0
  109. package/dist/dashboard-web/skins/dragonball-wukong.webp +0 -0
  110. package/dist/dashboard-web/skins/fallout-vaultboy.webp +0 -0
  111. package/dist/dashboard-web/skins/genshin-breeze.webp +0 -0
  112. package/dist/dashboard-web/skins/ikun-hero.webp +0 -0
  113. package/dist/dashboard-web/skins/prts-priestess.webp +0 -0
  114. package/dist/dashboard-web/skins/zzz-hero.webp +0 -0
  115. package/dist/dashboard-web/skins/zzz-pattern.svg +25 -0
  116. package/dist/dashboard-web/style.css +2870 -16
  117. package/dist/dashboard.js +91 -31
  118. package/dist/dashboard.js.map +1 -1
  119. package/dist/global-config.d.ts +15 -0
  120. package/dist/global-config.d.ts.map +1 -1
  121. package/dist/global-config.js +51 -2
  122. package/dist/global-config.js.map +1 -1
  123. package/dist/im/lark/card-builder.d.ts.map +1 -1
  124. package/dist/im/lark/card-builder.js +17 -3
  125. package/dist/im/lark/card-builder.js.map +1 -1
  126. package/dist/im/lark/card-handler.d.ts.map +1 -1
  127. package/dist/im/lark/card-handler.js +5 -0
  128. package/dist/im/lark/card-handler.js.map +1 -1
  129. package/dist/im/lark/client.d.ts.map +1 -1
  130. package/dist/im/lark/client.js +7 -5
  131. package/dist/im/lark/client.js.map +1 -1
  132. package/dist/im/lark/event-dispatcher.d.ts +2 -1
  133. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  134. package/dist/im/lark/event-dispatcher.js +15 -9
  135. package/dist/im/lark/event-dispatcher.js.map +1 -1
  136. package/dist/im/lark/lark-hosts.d.ts +44 -0
  137. package/dist/im/lark/lark-hosts.d.ts.map +1 -0
  138. package/dist/im/lark/lark-hosts.js +49 -0
  139. package/dist/im/lark/lark-hosts.js.map +1 -0
  140. package/dist/services/connector-store.d.ts +2 -3
  141. package/dist/services/connector-store.d.ts.map +1 -1
  142. package/dist/services/connector-store.js.map +1 -1
  143. package/dist/services/trigger-types.d.ts +1 -0
  144. package/dist/services/trigger-types.d.ts.map +1 -1
  145. package/dist/services/trigger-types.js.map +1 -1
  146. package/dist/services/webhook-lifecycle-extractors.d.ts +4 -13
  147. package/dist/services/webhook-lifecycle-extractors.d.ts.map +1 -1
  148. package/dist/services/webhook-lifecycle-extractors.js +8 -23
  149. package/dist/services/webhook-lifecycle-extractors.js.map +1 -1
  150. package/dist/setup/verify-permissions.d.ts +2 -1
  151. package/dist/setup/verify-permissions.d.ts.map +1 -1
  152. package/dist/setup/verify-permissions.js +5 -8
  153. package/dist/setup/verify-permissions.js.map +1 -1
  154. package/dist/types.d.ts +1 -0
  155. package/dist/types.d.ts.map +1 -1
  156. package/dist/utils/lark-upload.d.ts +2 -1
  157. package/dist/utils/lark-upload.d.ts.map +1 -1
  158. package/dist/utils/lark-upload.js +11 -7
  159. package/dist/utils/lark-upload.js.map +1 -1
  160. package/dist/utils/screen-analyzer.d.ts +8 -0
  161. package/dist/utils/screen-analyzer.d.ts.map +1 -1
  162. package/dist/utils/screen-analyzer.js +32 -11
  163. package/dist/utils/screen-analyzer.js.map +1 -1
  164. package/dist/utils/user-token.d.ts +12 -4
  165. package/dist/utils/user-token.d.ts.map +1 -1
  166. package/dist/utils/user-token.js +64 -25
  167. package/dist/utils/user-token.js.map +1 -1
  168. package/dist/worker.js +4 -1
  169. package/dist/worker.js.map +1 -1
  170. package/dist/workflows/trigger-from-envelope.d.ts.map +1 -1
  171. package/dist/workflows/trigger-from-envelope.js +1 -0
  172. package/dist/workflows/trigger-from-envelope.js.map +1 -1
  173. package/package.json +2 -2
@@ -8,14 +8,28 @@ import { renderBotDefaultsPage } from './bot-defaults.js';
8
8
  import { renderRolesPage } from './roles.js';
9
9
  import { renderTeamFederationPage, renderTeamManagePage } from './team-federation.js';
10
10
  import { renderConnectorsPage } from './connectors.js';
11
+ import { renderSettingsPage } from './settings.js';
11
12
  import { renderWorkflowsPage } from './workflows.js';
12
13
  import { renderWorkflowCatalogPage } from './workflow-catalog.js';
13
14
  import { wireBotOnboardingButton } from './bot-onboarding.js';
14
- import { t, ui } from './ui.js';
15
+ import { attentionReason, botDisplayName, escapeHtml, loadNameMaps, relTime, t, ui } from './ui.js';
16
+ import { initThemeMenu, paintThemeMenu } from './theme-menu.js';
15
17
  const root = document.getElementById('root');
18
+ // Resolved once at bootstrap from GET /api/settings:
19
+ // - `isAuthed` → gates the management nav + route guards
20
+ // - `publicReadOnly` → decides whether a read 401 is a hard lockout (token
21
+ // rotated → blocking overlay) or just a read-only
22
+ // visitor touching a token-gated page (soft toast).
23
+ // Defaults keep the authed / legacy UX if the probe fails.
24
+ let isAuthed = true;
25
+ let publicReadOnly = false;
26
+ // Management pages are token-gated end-to-end (no public GET) — a read-only
27
+ // visitor must not reach them. `data-route` values from index.html's nav.
28
+ const MANAGE_ROUTES = ['roles', 'bot-defaults', 'team', 'connectors'];
16
29
  // ── Auth-expiry overlay ──────────────────────────────────────────────────────
17
- // Any 401 from an API call means the dashboard token was rotated (a new access
18
- // link was generated). Show a blocking overlay so the user knows to switch tabs.
30
+ // Shown only when the dashboard token was rotated WHILE public read-only is off
31
+ // (a real hard lockout). Under public read-only a 401 is a soft toast instead
32
+ // (see patchedFetch) — so this no longer fires for read-only visitors.
19
33
  let _expiredShown = false;
20
34
  export function showAuthExpiredOverlay() {
21
35
  if (_expiredShown)
@@ -27,37 +41,169 @@ export function showAuthExpiredOverlay() {
27
41
  'position:fixed;inset:0;background:rgba(0,0,0,.65);display:flex;' +
28
42
  'align-items:center;justify-content:center;z-index:9999';
29
43
  el.innerHTML =
30
- '<div style="background:var(--card,#fff);color:var(--text,#1f2329);border-radius:12px;' +
44
+ '<div style="background:var(--surface);color:var(--fg);border:1px solid var(--border);border-radius:12px;' +
31
45
  'padding:36px 40px;max-width:460px;width:90vw;text-align:center;' +
32
46
  'box-shadow:0 12px 40px rgba(0,0,0,.35)">' +
33
- '<h2 style="margin:0 0 14px;font-size:19px">访问链接已失效</h2>' +
47
+ '<h2 style="margin:0 0 14px;font-size:19px;color:var(--fg)">访问链接已失效</h2>' +
34
48
  '<p style="margin:0 0 24px;line-height:1.7;color:var(--muted,#8f959e);font-size:14px">' +
35
- '当前链接/访问已失效,请使用最新授权链接重新进入。<br>最好关闭当前页。</p>' +
36
- '<button onclick="window.close()" ' +
37
- 'style="padding:8px 22px;background:var(--accent,#3370ff);color:#fff;border:none;' +
38
- 'border-radius:8px;cursor:pointer;font-size:14px">关闭此页</button>' +
49
+ '当前链接/访问已失效,请使用最新授权链接重新进入(运行 botmux dashboard 获取)。</p>' +
50
+ '<button id="auth-expired-dismiss" type="button" ' +
51
+ 'style="padding:8px 22px;background:var(--accent);color:var(--on-accent);border:none;' +
52
+ 'border-radius:8px;cursor:pointer;font-size:14px">知道了</button>' +
39
53
  '</div>';
40
54
  document.body.appendChild(el);
55
+ // `window.close()` can't close a tab the user opened, so the old inline
56
+ // onclick was a dead button (overlay got stuck). Dismiss the overlay instead,
57
+ // and let it reappear on the next genuine 401.
58
+ const dismiss = () => { el.remove(); _expiredShown = false; };
59
+ el.querySelector('#auth-expired-dismiss')?.addEventListener('click', dismiss);
60
+ el.addEventListener('click', (e) => { if (e.target === el)
61
+ dismiss(); });
41
62
  }
42
- // Patch the global fetch so every 401 from any API call triggers the overlay.
43
- // Public routes (static shell, read-only workflow API) never return 401, so any
44
- // 401 we see means the session token was rotated while this tab was open.
63
+ // ── Read-only toast (write attempt without a valid token) ───────────────────
64
+ // In public read-only mode browsing GETs never 401, but a write action
65
+ // (close session, cancel run, …) without the active token does. That's not
66
+ // "your link died" — it's "you're a read-only visitor", so show a transient
67
+ // toast instead of the blocking overlay.
68
+ let _roToastTimer;
69
+ export function showReadOnlyToast() {
70
+ let el = document.getElementById('readonly-toast');
71
+ if (!el) {
72
+ el = document.createElement('div');
73
+ el.id = 'readonly-toast';
74
+ el.style.cssText =
75
+ 'position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:9999;' +
76
+ 'background:var(--fg,#1f2329);color:var(--bg,#fff);padding:10px 18px;' +
77
+ 'border-radius:8px;font-size:13px;box-shadow:0 8px 24px rgba(0,0,0,.25)';
78
+ document.body.appendChild(el);
79
+ }
80
+ el.textContent = '当前是只读访问,此操作需要授权链接(运行 botmux dashboard 获取)';
81
+ el.style.display = 'block';
82
+ if (_roToastTimer)
83
+ window.clearTimeout(_roToastTimer);
84
+ _roToastTimer = window.setTimeout(() => { el.style.display = 'none'; }, 4000);
85
+ }
86
+ // Patch the global fetch to route 401s: a read (GET/HEAD) 401 means the token
87
+ // was rotated while this tab was open (only possible when public read-only
88
+ // mode is off) → blocking overlay; a write 401 means "read-only visitor" →
89
+ // transient toast.
45
90
  const _origFetch = window.fetch.bind(window);
46
91
  window.fetch = async function patchedFetch(...args) {
47
92
  const res = await _origFetch(...args);
48
- if (res.status === 401)
49
- showAuthExpiredOverlay();
93
+ if (res.status === 401) {
94
+ const method = (args[1]?.method ?? 'GET').toUpperCase();
95
+ const isRead = method === 'GET' || method === 'HEAD';
96
+ // A read 401 is a hard lockout (token rotated → blocking overlay) ONLY when
97
+ // public read-only is off. Under public read-only a read 401 just means a
98
+ // tokenless visitor touched a token-gated page → soft toast, never the
99
+ // stuck overlay. Writes are always a soft "needs the active token".
100
+ if (isRead && !publicReadOnly)
101
+ showAuthExpiredOverlay();
102
+ else
103
+ showReadOnlyToast();
104
+ }
50
105
  return res;
51
106
  };
107
+ // ── 全局 attention strip ─────────────────────────────────────────────────────
108
+ // 「需要你」是全局最高优先级:不管在哪个页面,待处理数和最久等待项都常驻
109
+ // 顶部一条琥珀色 strip,点「立即处理」跳到会话页(needs-you 列置顶)。
110
+ let lastStripHtml = '';
111
+ function paintAttentionStrip() {
112
+ const el = document.getElementById('attention-strip');
113
+ if (!el)
114
+ return;
115
+ const pending = [...store.sessions.values()]
116
+ .map(s => ({ s, reason: attentionReason(s) }))
117
+ .filter((x) => !!x.reason)
118
+ .sort((a, b) => Number(a.s.lastMessageAt ?? 0) - Number(b.s.lastMessageAt ?? 0));
119
+ if (pending.length === 0) {
120
+ el.hidden = true;
121
+ el.innerHTML = '';
122
+ lastStripHtml = '';
123
+ return;
124
+ }
125
+ const longest = pending[0];
126
+ const html = `
127
+ <span class="attention-strip-ic" aria-hidden="true">!</span>
128
+ <b>${escapeHtml(t('strip.pending', { count: pending.length }))}</b>
129
+ <span class="attention-strip-longest">${escapeHtml(t('strip.longest', {
130
+ time: relTime(longest.s.lastMessageAt),
131
+ bot: botDisplayName(longest.s),
132
+ reason: longest.reason,
133
+ }))}</span>
134
+ <a class="attention-strip-go" href="#/sessions">${escapeHtml(t('strip.handle'))}</a>`;
135
+ el.hidden = false;
136
+ // 内容没变就不重写 — innerHTML 重建会把 strip-pulse 动画打回起点(视觉跳变)
137
+ if (html === lastStripHtml)
138
+ return;
139
+ lastStripHtml = html;
140
+ el.innerHTML = html;
141
+ }
142
+ store.on(paintAttentionStrip);
143
+ // bot 友好名异步解析回来后刷一次 strip(页面级重绘由各 mount 自己处理)
144
+ void loadNameMaps().then(paintAttentionStrip);
145
+ // Resolve the read-only/authed state from /api/settings (authed reflects the
146
+ // cookie; publicReadOnly is the global toggle). Errors keep the authed default
147
+ // so a transient probe failure never hides nav from a real token holder.
148
+ async function loadAuthState() {
149
+ try {
150
+ const r = await fetch('/api/settings');
151
+ if (r.ok) {
152
+ const j = await r.json();
153
+ isAuthed = !!j.authed;
154
+ publicReadOnly = !!(j.settings && j.settings.publicReadOnly);
155
+ }
156
+ }
157
+ catch { /* keep defaults */ }
158
+ }
159
+ // Read-only visitors can't use the management pages (all token-gated), so hide
160
+ // their nav entries + the add-bot action instead of luring them into a 401.
161
+ function applyAuthVisibility() {
162
+ for (const r of MANAGE_ROUTES) {
163
+ const a = document.querySelector(`.sidebar-nav a[data-route="${r}"]`);
164
+ if (a)
165
+ a.style.display = isAuthed ? '' : 'none';
166
+ }
167
+ const addBot = document.getElementById('add-bot-btn');
168
+ if (addBot)
169
+ addBot.style.display = isAuthed ? '' : 'none';
170
+ }
171
+ function renderAuthRequiredPage(host) {
172
+ host.innerHTML =
173
+ '<section class="auth-required" style="max-width:520px;margin:64px auto;text-align:center;' +
174
+ 'background:var(--surface);color:var(--fg);border:1px solid var(--border);border-radius:14px;' +
175
+ 'padding:40px 36px;box-shadow:0 8px 28px rgba(0,0,0,.12)">' +
176
+ '<h2 style="margin:0 0 12px;font-size:20px;color:var(--fg)">此页需要授权链接</h2>' +
177
+ '<p style="margin:0 0 24px;line-height:1.7;color:var(--muted);font-size:14px">' +
178
+ '你当前是只读访问,管理页(角色 / Bot 配置 / 团队 / 接入点)需要授权链接。' +
179
+ '运行 <code>botmux dashboard</code> 获取最新链接后即可管理。</p>' +
180
+ '<a href="#/" style="display:inline-block;padding:8px 22px;background:var(--accent);' +
181
+ 'color:var(--on-accent);border-radius:8px;text-decoration:none;font-size:14px">返回总览</a>' +
182
+ '</section>';
183
+ }
52
184
  // Pages that own a polling loop / cleanup return a disposer; we run it
53
185
  // on the next route switch so timers don't leak across navigations.
54
186
  let pageDispose = null;
187
+ function highlightNav(hash) {
188
+ for (const a of document.querySelectorAll('.sidebar-nav a')) {
189
+ const href = a.getAttribute('href') ?? '#/';
190
+ a.classList.toggle('active', href === (hash || '#/'));
191
+ }
192
+ }
55
193
  function route() {
56
194
  if (pageDispose) {
57
195
  pageDispose();
58
196
  pageDispose = null;
59
197
  }
60
198
  const hash = location.hash || '#/';
199
+ // Read-only hard-guard: a tokenless visitor hitting a management route gets a
200
+ // friendly notice instead of a page that fires a 401 (which used to pop a
201
+ // stuck "link expired" overlay).
202
+ if (!isAuthed && MANAGE_ROUTES.some(r => hash.startsWith('#/' + r))) {
203
+ renderAuthRequiredPage(root);
204
+ highlightNav(hash);
205
+ return;
206
+ }
61
207
  // Catalog is a sub-route under Workflows now (`#/workflows/catalog[/<id>]`)
62
208
  // so the top nav has a single "Workflows (beta)" entry. Legacy
63
209
  // `#/workflows-catalog[*]` URLs are kept working for any external links
@@ -70,6 +216,8 @@ function route() {
70
216
  pageDispose = renderWorkflowsPage(root);
71
217
  else if (hash.startsWith('#/groups'))
72
218
  renderGroupsPage(root);
219
+ else if (hash.startsWith('#/settings'))
220
+ void renderSettingsPage(root);
73
221
  else if (hash.startsWith('#/bot-defaults'))
74
222
  renderBotDefaultsPage(root);
75
223
  else if (hash.startsWith('#/connectors'))
@@ -86,11 +234,7 @@ function route() {
86
234
  renderSessionsPage(root);
87
235
  else
88
236
  void renderOverviewPage(root);
89
- // active nav highlighting
90
- for (const a of document.querySelectorAll('.sidebar-nav a')) {
91
- const href = a.getAttribute('href') ?? '#/';
92
- a.classList.toggle('active', href === (hash || '#/'));
93
- }
237
+ highlightNav(hash);
94
238
  }
95
239
  const statusEl = document.getElementById('status');
96
240
  function paintStatus() {
@@ -107,18 +251,14 @@ function paintChrome() {
107
251
  document.querySelectorAll('[data-locale]').forEach(btn => {
108
252
  btn.classList.toggle('active', btn.dataset.locale === ui.locale);
109
253
  });
110
- document.querySelectorAll('[data-theme-mode]').forEach(btn => {
111
- btn.classList.toggle('active', btn.dataset.themeMode === ui.themeMode);
112
- });
254
+ paintThemeMenu();
113
255
  paintStatus();
114
256
  }
115
257
  function wireChromeControls() {
116
258
  document.querySelectorAll('[data-locale]').forEach(btn => {
117
259
  btn.onclick = () => ui.setLocale(btn.dataset.locale);
118
260
  });
119
- document.querySelectorAll('[data-theme-mode]').forEach(btn => {
120
- btn.onclick = () => ui.setThemeMode(btn.dataset.themeMode);
121
- });
261
+ initThemeMenu();
122
262
  }
123
263
  // esbuild's IIFE bundle does not support top-level await — use an async IIFE.
124
264
  void (async () => {
@@ -127,9 +267,15 @@ void (async () => {
127
267
  wireBotOnboardingButton();
128
268
  ui.on(() => {
129
269
  paintChrome();
270
+ paintAttentionStrip();
130
271
  route();
131
272
  });
132
273
  paintChrome();
274
+ paintAttentionStrip();
275
+ // Resolve authed/publicReadOnly BEFORE first render so the management nav is
276
+ // hidden and route guards are active for read-only visitors from frame one.
277
+ await loadAuthState();
278
+ applyAuthVisibility();
133
279
  try {
134
280
  await bootstrap();
135
281
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/dashboard/web/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/dashboard/web/app.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bot-defaults.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/bot-defaults.ts"],"names":[],"mappings":"AA8DA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,iBAinB5D"}
1
+ {"version":3,"file":"bot-defaults.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/bot-defaults.ts"],"names":[],"mappings":"AA8EA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,iBA0qB5D"}