botmux 2.98.4-canary.2 → 2.99.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.
- package/README.en.md +2 -2
- package/README.md +2 -2
- package/dist/adapters/cli/genius.d.ts +4 -0
- package/dist/adapters/cli/genius.d.ts.map +1 -0
- package/dist/adapters/cli/genius.js +216 -0
- package/dist/adapters/cli/genius.js.map +1 -0
- package/dist/adapters/cli/registry.d.ts +2 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +3 -1
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +1 -1
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/core/dashboard-rows.d.ts +1 -1
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +2 -1
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/dashboard/session-card-model.d.ts +2 -2
- package/dist/dashboard/session-card-model.d.ts.map +1 -1
- package/dist/dashboard/session-card-model.js +5 -2
- package/dist/dashboard/session-card-model.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +28 -63
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +3 -0
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -0
- package/dist/dashboard/web/bot-defaults-page.js +23 -0
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -0
- package/dist/dashboard/web/bot-defaults.d.ts +2 -1
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +30 -30
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/connectors-page.d.ts +14 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -0
- package/dist/dashboard/web/connectors-page.js +303 -0
- package/dist/dashboard/web/connectors-page.js.map +1 -0
- package/dist/dashboard/web/connectors.d.ts +1 -12
- package/dist/dashboard/web/connectors.d.ts.map +1 -1
- package/dist/dashboard/web/connectors.js +1 -325
- package/dist/dashboard/web/connectors.js.map +1 -1
- package/dist/dashboard/web/dashboard-routes.d.ts +14 -0
- package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -0
- package/dist/dashboard/web/dashboard-routes.js +176 -0
- package/dist/dashboard/web/dashboard-routes.js.map +1 -0
- package/dist/dashboard/web/groups-page.d.ts +3 -0
- package/dist/dashboard/web/groups-page.d.ts.map +1 -0
- package/dist/dashboard/web/groups-page.js +26 -0
- package/dist/dashboard/web/groups-page.js.map +1 -0
- package/dist/dashboard/web/groups.d.ts +1 -1
- package/dist/dashboard/web/groups.d.ts.map +1 -1
- package/dist/dashboard/web/groups.js +113 -52
- package/dist/dashboard/web/groups.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +18 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/insights-page.d.ts +3 -0
- package/dist/dashboard/web/insights-page.d.ts.map +1 -0
- package/dist/dashboard/web/insights-page.js +26 -0
- package/dist/dashboard/web/insights-page.js.map +1 -0
- package/dist/dashboard/web/insights.d.ts +18 -1
- package/dist/dashboard/web/insights.d.ts.map +1 -1
- package/dist/dashboard/web/insights.js +25 -61
- package/dist/dashboard/web/insights.js.map +1 -1
- package/dist/dashboard/web/office-page.d.ts +3 -0
- package/dist/dashboard/web/office-page.d.ts.map +1 -0
- package/dist/dashboard/web/office-page.js +149 -0
- package/dist/dashboard/web/office-page.js.map +1 -0
- package/dist/dashboard/web/office.d.ts +1 -1
- package/dist/dashboard/web/office.d.ts.map +1 -1
- package/dist/dashboard/web/office.js +1 -139
- package/dist/dashboard/web/office.js.map +1 -1
- package/dist/dashboard/web/overview-page.d.ts +3 -0
- package/dist/dashboard/web/overview-page.d.ts.map +1 -0
- package/dist/dashboard/web/overview-page.js +149 -0
- package/dist/dashboard/web/overview-page.js.map +1 -0
- package/dist/dashboard/web/overview.d.ts +2 -2
- package/dist/dashboard/web/overview.d.ts.map +1 -1
- package/dist/dashboard/web/overview.js +14 -3
- package/dist/dashboard/web/overview.js.map +1 -1
- package/dist/dashboard/web/react-hooks.d.ts +8 -0
- package/dist/dashboard/web/react-hooks.d.ts.map +1 -0
- package/dist/dashboard/web/react-hooks.js +43 -0
- package/dist/dashboard/web/react-hooks.js.map +1 -0
- package/dist/dashboard/web/react-mount.d.ts +4 -0
- package/dist/dashboard/web/react-mount.d.ts.map +1 -0
- package/dist/dashboard/web/react-mount.js +7 -0
- package/dist/dashboard/web/react-mount.js.map +1 -0
- package/dist/dashboard/web/roles-page.d.ts +4 -0
- package/dist/dashboard/web/roles-page.d.ts.map +1 -0
- package/dist/dashboard/web/roles-page.js +26 -0
- package/dist/dashboard/web/roles-page.js.map +1 -0
- package/dist/dashboard/web/roles.d.ts +1 -2
- package/dist/dashboard/web/roles.d.ts.map +1 -1
- package/dist/dashboard/web/roles.js +189 -135
- package/dist/dashboard/web/roles.js.map +1 -1
- package/dist/dashboard/web/route-lifecycle.d.ts +14 -0
- package/dist/dashboard/web/route-lifecycle.d.ts.map +1 -0
- package/dist/dashboard/web/route-lifecycle.js +29 -0
- package/dist/dashboard/web/route-lifecycle.js.map +1 -0
- package/dist/dashboard/web/schedules-page.d.ts +14 -0
- package/dist/dashboard/web/schedules-page.d.ts.map +1 -0
- package/dist/dashboard/web/schedules-page.js +84 -0
- package/dist/dashboard/web/schedules-page.js.map +1 -0
- package/dist/dashboard/web/schedules.d.ts +1 -1
- package/dist/dashboard/web/schedules.d.ts.map +1 -1
- package/dist/dashboard/web/schedules.js +1 -115
- package/dist/dashboard/web/schedules.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts +3 -0
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -0
- package/dist/dashboard/web/sessions-page.js +28 -0
- package/dist/dashboard/web/sessions-page.js.map +1 -0
- package/dist/dashboard/web/sessions.d.ts +4 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +43 -10
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/settings-page.d.ts +3 -0
- package/dist/dashboard/web/settings-page.d.ts.map +1 -0
- package/dist/dashboard/web/settings-page.js +387 -0
- package/dist/dashboard/web/settings-page.js.map +1 -0
- package/dist/dashboard/web/settings.d.ts +1 -1
- package/dist/dashboard/web/settings.d.ts.map +1 -1
- package/dist/dashboard/web/settings.js +1 -534
- package/dist/dashboard/web/settings.js.map +1 -1
- package/dist/dashboard/web/skills-page.d.ts +33 -0
- package/dist/dashboard/web/skills-page.d.ts.map +1 -0
- package/dist/dashboard/web/skills-page.js +515 -0
- package/dist/dashboard/web/skills-page.js.map +1 -0
- package/dist/dashboard/web/skills.d.ts +1 -1
- package/dist/dashboard/web/skills.d.ts.map +1 -1
- package/dist/dashboard/web/skills.js +1 -711
- package/dist/dashboard/web/skills.js.map +1 -1
- package/dist/dashboard/web/store.d.ts +9 -0
- package/dist/dashboard/web/store.d.ts.map +1 -1
- package/dist/dashboard/web/store.js +19 -2
- package/dist/dashboard/web/store.js.map +1 -1
- package/dist/dashboard/web/team-federation-page.d.ts +4 -0
- package/dist/dashboard/web/team-federation-page.d.ts.map +1 -0
- package/dist/dashboard/web/team-federation-page.js +47 -0
- package/dist/dashboard/web/team-federation-page.js.map +1 -0
- package/dist/dashboard/web/team-federation.d.ts +2 -2
- package/dist/dashboard/web/team-federation.d.ts.map +1 -1
- package/dist/dashboard/web/team-federation.js +104 -97
- package/dist/dashboard/web/team-federation.js.map +1 -1
- package/dist/dashboard/web/v3-page.d.ts +3 -0
- package/dist/dashboard/web/v3-page.d.ts.map +1 -0
- package/dist/dashboard/web/v3-page.js +27 -0
- package/dist/dashboard/web/v3-page.js.map +1 -0
- package/dist/dashboard/web/v3.d.ts +2 -1
- package/dist/dashboard/web/v3.d.ts.map +1 -1
- package/dist/dashboard/web/v3.js +18 -43
- package/dist/dashboard/web/v3.js.map +1 -1
- package/dist/dashboard/web/whiteboards-page.d.ts +3 -0
- package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -0
- package/dist/dashboard/web/whiteboards-page.js +203 -0
- package/dist/dashboard/web/whiteboards-page.js.map +1 -0
- package/dist/dashboard/web/whiteboards.d.ts +1 -1
- package/dist/dashboard/web/whiteboards.d.ts.map +1 -1
- package/dist/dashboard/web/whiteboards.js +1 -275
- package/dist/dashboard/web/whiteboards.js.map +1 -1
- package/dist/dashboard-web/app.js +36 -2550
- package/dist/dashboard-web/chunks/bot-defaults-page-3EV7K6LJ.js +358 -0
- package/dist/dashboard-web/chunks/chunk-5E3MJJL4.js +1 -0
- package/dist/dashboard-web/chunks/chunk-76J7PNZI.js +1 -0
- package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +1 -0
- package/dist/dashboard-web/chunks/chunk-JTSE5VP6.js +54 -0
- package/dist/dashboard-web/chunks/chunk-JXLHRRJD.js +31 -0
- package/dist/dashboard-web/chunks/chunk-NASYW5FD.js +1 -0
- package/dist/dashboard-web/chunks/connectors-XPZKEHF6.js +1 -0
- package/dist/dashboard-web/chunks/groups-page-C54PVKYP.js +207 -0
- package/dist/dashboard-web/chunks/insights-page-BBQYR7WY.js +309 -0
- package/dist/dashboard-web/chunks/office-page-6DXYOG55.js +1 -0
- package/dist/dashboard-web/chunks/overview-page-5PJCAMID.js +1 -0
- package/dist/dashboard-web/chunks/roles-page-APUDLPVM.js +98 -0
- package/dist/dashboard-web/chunks/schedules-WG2UKHSO.js +1 -0
- package/dist/dashboard-web/chunks/sessions-page-F3U5NFPD.js +238 -0
- package/dist/dashboard-web/chunks/settings-page-OSBZNCXL.js +2 -0
- package/dist/dashboard-web/chunks/skills-page-Y3VUAOYG.js +2 -0
- package/dist/dashboard-web/chunks/team-federation-page-CRH3WZPH.js +10 -0
- package/dist/dashboard-web/chunks/v3-page-FVPUL665.js +149 -0
- package/dist/dashboard-web/chunks/whiteboards-page-HLCTYSSV.js +1 -0
- package/dist/dashboard-web/chunks/workflows-UB7OPYGI.js +184 -0
- package/dist/dashboard-web/index.html +1 -1
- package/dist/dashboard-web/style.css +82 -1
- package/dist/dashboard.js +5 -6
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +1 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +1 -0
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +7 -0
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/sessions-card.d.ts.map +1 -1
- package/dist/im/lark/sessions-card.js +4 -1
- package/dist/im/lark/sessions-card.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +16 -14
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/worker.js +1 -1
- package/dist/worker.js.map +1 -1
- package/package.json +8 -2
|
@@ -73,6 +73,26 @@ function kanbanStatusIcon(id) {
|
|
|
73
73
|
function cssToken(value) {
|
|
74
74
|
return String(value ?? 'unknown').toLowerCase().replace(/[^a-z0-9_-]/g, '-');
|
|
75
75
|
}
|
|
76
|
+
export const SESSION_STATUS_OPTIONS = [
|
|
77
|
+
'starting',
|
|
78
|
+
'working',
|
|
79
|
+
'idle',
|
|
80
|
+
'dormant',
|
|
81
|
+
'analyzing',
|
|
82
|
+
'active',
|
|
83
|
+
'limited',
|
|
84
|
+
'closed',
|
|
85
|
+
];
|
|
86
|
+
export function sessionStatusText(status) {
|
|
87
|
+
const raw = String(status ?? 'unknown');
|
|
88
|
+
const key = `sessions.status.${raw}`;
|
|
89
|
+
const label = t(key);
|
|
90
|
+
return label === key ? raw : label;
|
|
91
|
+
}
|
|
92
|
+
function statusBadgeHtml(status) {
|
|
93
|
+
const raw = String(status ?? 'unknown');
|
|
94
|
+
return `<span class="status status-${escapeHtml(cssToken(raw))}">${escapeHtml(sessionStatusText(raw))}</span>`;
|
|
95
|
+
}
|
|
76
96
|
function repoBasename(workingDir) {
|
|
77
97
|
const value = String(workingDir ?? '').trim();
|
|
78
98
|
if (!value)
|
|
@@ -183,6 +203,8 @@ function deriveSessionBoardColumn(s) {
|
|
|
183
203
|
return 'starting';
|
|
184
204
|
if (s.status === 'working' || s.status === 'analyzing' || s.status === 'active')
|
|
185
205
|
return 'working';
|
|
206
|
+
if (s.status === 'dormant')
|
|
207
|
+
return 'idle';
|
|
186
208
|
return 'idle';
|
|
187
209
|
}
|
|
188
210
|
// CLI 多选收进一个下拉 chip:默认全选时只占一个胶囊位,点开才展开
|
|
@@ -207,7 +229,7 @@ export function restartConfirmMessage(s) {
|
|
|
207
229
|
return [
|
|
208
230
|
t('sessions.restartConfirmIntro'),
|
|
209
231
|
'',
|
|
210
|
-
`${t('sessions.restartConfirmStatus')}${sep}${status}`,
|
|
232
|
+
`${t('sessions.restartConfirmStatus')}${sep}${sessionStatusText(status)}`,
|
|
211
233
|
`${t('sessions.restartConfirmCli')}${sep}${cli}`,
|
|
212
234
|
'',
|
|
213
235
|
t('sessions.restartConfirmQuestion'),
|
|
@@ -244,8 +266,7 @@ function pageHtml() {
|
|
|
244
266
|
<input type="search" name="q" placeholder="${t('sessions.search')}" />
|
|
245
267
|
<select name="status">
|
|
246
268
|
<option value="">${t('sessions.anyStatus')}</option>
|
|
247
|
-
|
|
248
|
-
<option>analyzing</option><option>active</option><option>closed</option>
|
|
269
|
+
${SESSION_STATUS_OPTIONS.map(status => `<option value="${escapeHtml(status)}">${escapeHtml(sessionStatusText(status))}</option>`).join('')}
|
|
249
270
|
</select>
|
|
250
271
|
<select name="adopt">
|
|
251
272
|
<option value="">${t('sessions.adoptAny')}</option>
|
|
@@ -502,6 +523,9 @@ function renderCreateSessionSuccess(modal, body) {
|
|
|
502
523
|
}
|
|
503
524
|
export function renderSessionsPage(root) {
|
|
504
525
|
root.innerHTML = pageHtml();
|
|
526
|
+
return wireSessionsPage(root);
|
|
527
|
+
}
|
|
528
|
+
export function wireSessionsPage(root) {
|
|
505
529
|
const tbody = root.querySelector('#sessions-table tbody');
|
|
506
530
|
const filtersForm = root.querySelector('#filters');
|
|
507
531
|
const drawer = root.querySelector('#drawer');
|
|
@@ -849,7 +873,7 @@ export function renderSessionsPage(root) {
|
|
|
849
873
|
<td><input type="checkbox" class="row-select" ${checked} ${closed ? 'disabled' : ''}></td>
|
|
850
874
|
<td>${escapeHtml(botDisplayName(s))}</td>
|
|
851
875
|
<td><span class="badge cli-${cssToken(s.cliId)}">${escapeHtml(s.cliId ?? 'unknown')}</span></td>
|
|
852
|
-
<td
|
|
876
|
+
<td>${statusBadgeHtml(s.status)}${lockChipHtml(s)}</td>
|
|
853
877
|
<td class="token-cell">${formatTokenCount(s.tokenUsage?.in)}</td>
|
|
854
878
|
<td class="token-cell">${formatTokenCount(s.tokenUsage?.out)}</td>
|
|
855
879
|
<td title="${escapeHtml(String(s.title ?? ''))}">${escapeHtml(stripMentionPrefix(s.title ?? '').slice(0, 48))}</td>
|
|
@@ -901,7 +925,7 @@ export function renderSessionsPage(root) {
|
|
|
901
925
|
<span>${escapeHtml(botName)} · ${escapeHtml(chatTitle ?? s.cliId ?? 'unknown')}</span>
|
|
902
926
|
</div>
|
|
903
927
|
<span class="session-card-status-group">
|
|
904
|
-
|
|
928
|
+
${statusBadgeHtml(s.status)}
|
|
905
929
|
${lockChipHtml(s)}
|
|
906
930
|
</span>
|
|
907
931
|
</div>
|
|
@@ -995,7 +1019,7 @@ export function renderSessionsPage(root) {
|
|
|
995
1019
|
${lockChipHtml(s)}
|
|
996
1020
|
${remote ? `<span class="badge kanban-remote-badge" title="${escapeHtml(t('sessions.kanban.remoteHint', { name: remote }))}">${escapeHtml(remote)}</span>` : ''}
|
|
997
1021
|
<span class="kanban-card-top-right">
|
|
998
|
-
<span class="kanban-card-dot" data-status="${escapeHtml(status)}" title="${escapeHtml(status)}"></span>
|
|
1022
|
+
<span class="kanban-card-dot" data-status="${escapeHtml(cssToken(status))}" title="${escapeHtml(sessionStatusText(status))}"></span>
|
|
999
1023
|
${remote ? '' : `<button type="button" class="card-act kanban-card-act" data-action="history" title="${escapeHtml(t('sessions.history.title'))}" aria-label="${escapeHtml(t('sessions.history.title'))}">${ICON.history}</button>
|
|
1000
1024
|
${s.feishuChatLink ? `<a class="card-act kanban-card-act" href="${escapeHtml(s.feishuChatLink)}" target="_blank" rel="noopener" title="${escapeHtml(t('sessions.kanban.openFeishu'))}" aria-label="${escapeHtml(t('sessions.kanban.openFeishu'))}">${ICON.feishu}</a>` : ''}
|
|
1001
1025
|
<button type="button" class="card-act kanban-card-act${s.locked ? ' locked' : ''}" data-action="lock" title="${escapeHtml(lockActionLabel(s))}" aria-label="${escapeHtml(lockActionLabel(s))}">${s.locked ? ICON.unlock : ICON.lock}</button>
|
|
@@ -1454,7 +1478,7 @@ export function renderSessionsPage(root) {
|
|
|
1454
1478
|
${botAvatarHtml({ name: botDisplayName(s), larkAppId: s.larkAppId, size: 'sm' })}
|
|
1455
1479
|
<strong class="term-modal-name" title="${escapeHtml(String(s.title ?? title))}">${escapeHtml(String(title).slice(0, 60))}</strong>
|
|
1456
1480
|
<button type="button" id="term-modal-edit" class="card-act" title="${escapeHtml(t('sessions.kanban.rename'))}" aria-label="${escapeHtml(t('sessions.kanban.rename'))}">${ICON.edit}</button>
|
|
1457
|
-
|
|
1481
|
+
${statusBadgeHtml(s.status)}
|
|
1458
1482
|
</span>
|
|
1459
1483
|
<span class="term-modal-actions">
|
|
1460
1484
|
${feishu}
|
|
@@ -1843,7 +1867,7 @@ export function renderSessionsPage(root) {
|
|
|
1843
1867
|
<header>
|
|
1844
1868
|
<h3>${escapeHtml(stripMentionPrefix(s.title) || s.sessionId)}</h3>
|
|
1845
1869
|
<span class="drawer-status-line">
|
|
1846
|
-
|
|
1870
|
+
${statusBadgeHtml(s.status)}
|
|
1847
1871
|
${lockChipHtml(s)}
|
|
1848
1872
|
</span>
|
|
1849
1873
|
<p><code>${escapeHtml(s.sessionId)}</code> <button data-copy="${escapeHtml(s.sessionId)}">${t('sessions.copy')}</button></p>
|
|
@@ -1933,7 +1957,7 @@ export function renderSessionsPage(root) {
|
|
|
1933
1957
|
lockBtn.textContent = lockActionLabel(s);
|
|
1934
1958
|
const line = drawer.querySelector('.drawer-status-line');
|
|
1935
1959
|
if (line) {
|
|
1936
|
-
line.innerHTML =
|
|
1960
|
+
line.innerHTML = `${statusBadgeHtml(s.status)}${lockChipHtml(s)}`;
|
|
1937
1961
|
}
|
|
1938
1962
|
}
|
|
1939
1963
|
};
|
|
@@ -2564,7 +2588,7 @@ export function renderSessionsPage(root) {
|
|
|
2564
2588
|
});
|
|
2565
2589
|
});
|
|
2566
2590
|
filtersForm.addEventListener('input', rerender);
|
|
2567
|
-
store.on(rerender);
|
|
2591
|
+
const unsubscribeStore = store.on(rerender);
|
|
2568
2592
|
// 团队看板 30s 软刷新(拉对方部署的会话快照与共享编排);页面切走后
|
|
2569
2593
|
// kanban 脱离 DOM,定时器自清。
|
|
2570
2594
|
const teamBoardTimer = setInterval(() => {
|
|
@@ -2580,5 +2604,14 @@ export function renderSessionsPage(root) {
|
|
|
2580
2604
|
rerender();
|
|
2581
2605
|
// bot 友好名 / 群聊标题异步解析,回来后补一次重绘(首帧先显示原值)
|
|
2582
2606
|
void loadNameMaps().then(rerender);
|
|
2607
|
+
return () => {
|
|
2608
|
+
unsubscribeStore();
|
|
2609
|
+
clearInterval(teamBoardTimer);
|
|
2610
|
+
cancelKanbanOpen();
|
|
2611
|
+
drawer.close();
|
|
2612
|
+
termModal.close();
|
|
2613
|
+
historyModal.close();
|
|
2614
|
+
createSessionModal.close();
|
|
2615
|
+
};
|
|
2583
2616
|
}
|
|
2584
2617
|
//# sourceMappingURL=sessions.js.map
|