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
|
@@ -1,535 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
let settings = null;
|
|
3
|
-
let loadError = null;
|
|
4
|
-
// 只读访客(无有效 token 进来的 public-read 连接)看得到设置值但不能改——
|
|
5
|
-
// 开关直接禁用并给提示,而不是点了 401 再回滚。
|
|
6
|
-
let canWrite = true;
|
|
7
|
-
// 本机是否已绑定中心化平台。仅当 bound 时才显示「远程访问」开关
|
|
8
|
-
// (未绑定时中心化 URL 无意义)。
|
|
9
|
-
let bound = false;
|
|
10
|
-
function parseSettings(s) {
|
|
11
|
-
return {
|
|
12
|
-
publicReadOnly: s?.publicReadOnly === true,
|
|
13
|
-
openTerminalInFeishu: s?.openTerminalInFeishu === true,
|
|
14
|
-
chatBotDiscovery: s?.chatBotDiscovery !== false, // default ON
|
|
15
|
-
repoPickerMode: s?.repoPickerMode === 'repos' ? 'repos' : 'all',
|
|
16
|
-
maintenance: (s?.maintenance && typeof s.maintenance === 'object') ? s.maintenance : {},
|
|
17
|
-
localDevInstall: s?.localDevInstall === true,
|
|
18
|
-
whiteboard: { enabled: s?.whiteboard?.enabled === true },
|
|
19
|
-
remoteAccess: s?.remoteAccess === true,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
/** Current enabled/time for a task, with a sensible default time. */
|
|
23
|
-
function taskUi(m, key) {
|
|
24
|
-
const task = m?.[key] ?? {};
|
|
25
|
-
return { enabled: task.enabled === true, time: typeof task.time === 'string' ? task.time : '04:00' };
|
|
26
|
-
}
|
|
27
|
-
function pageHtml() {
|
|
28
|
-
return `<section class="page">
|
|
29
|
-
<div class="page-heading">
|
|
30
|
-
<div>
|
|
31
|
-
<p class="eyebrow">${t('nav.settings')}</p>
|
|
32
|
-
<h1>${t('settings.title')}</h1>
|
|
33
|
-
<p>${t('settings.subtitle')}</p>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
<div id="settings-body"></div>
|
|
37
|
-
<div id="update-body"></div>
|
|
38
|
-
</section>`;
|
|
39
|
-
}
|
|
40
|
-
// Auto-update drives the schedule: toggle + a daily HH:MM time.
|
|
41
|
-
function autoUpdateRow(disabled) {
|
|
42
|
-
const { enabled, time } = taskUi(settings.maintenance, 'autoUpdate');
|
|
43
|
-
const dis = disabled ? 'disabled' : '';
|
|
44
|
-
return `<label class="toggle-row">
|
|
45
|
-
<input type="checkbox" data-maint="autoUpdate" ${enabled ? 'checked' : ''} ${dis}>
|
|
46
|
-
<span class="switch" aria-hidden="true"></span>
|
|
47
|
-
<span class="toggle-tx"><strong>${t('settings.autoUpdate')}</strong>
|
|
48
|
-
<small>${t('settings.autoUpdateHelp')}</small></span>
|
|
49
|
-
</label>
|
|
50
|
-
<div class="maint-time">
|
|
51
|
-
<label>${t('settings.maintenanceTime')}
|
|
52
|
-
<input type="time" data-maint-time="autoUpdate" value="${escapeHtml(time)}" ${dis}>
|
|
53
|
-
</label>
|
|
54
|
-
</div>`;
|
|
55
|
-
}
|
|
56
|
-
// Auto-restart is a dependent toggle (no time of its own): restart to apply an
|
|
57
|
-
// auto-update. Disabled unless auto-update is on.
|
|
58
|
-
function autoRestartRow(disabled) {
|
|
59
|
-
const enabled = settings.maintenance.autoRestart?.enabled === true;
|
|
60
|
-
const dis = disabled ? 'disabled' : '';
|
|
61
|
-
return `<label class="toggle-row">
|
|
62
|
-
<input type="checkbox" data-maint="autoRestart" ${enabled ? 'checked' : ''} ${dis}>
|
|
63
|
-
<span class="switch" aria-hidden="true"></span>
|
|
64
|
-
<span class="toggle-tx"><strong>${t('settings.autoRestart')}</strong>
|
|
65
|
-
<small>${t('settings.autoRestartHelp')}</small></span>
|
|
66
|
-
</label>`;
|
|
67
|
-
}
|
|
68
|
-
function renderSettingsBody() {
|
|
69
|
-
if (loadError) {
|
|
70
|
-
return `<p class="hint-warn">${t('settings.loadFailed')}: ${escapeHtml(loadError)}</p>`;
|
|
71
|
-
}
|
|
72
|
-
if (!settings)
|
|
73
|
-
return `<p class="empty">${t('settings.loading')}</p>`;
|
|
74
|
-
const dis = canWrite ? '' : 'disabled';
|
|
75
|
-
const updDisabled = !canWrite || settings.localDevInstall;
|
|
76
|
-
return `<div class="settings-grid">
|
|
77
|
-
<article class="bd-card settings-card">
|
|
78
|
-
${canWrite ? '' : `<p class="hint-warn">${t('settings.readOnlyVisitor')}</p>`}
|
|
79
|
-
<section class="bd-section">
|
|
80
|
-
<h3 class="bd-section-title">${t('settings.sectionAccess')}</h3>
|
|
81
|
-
<label class="toggle-row">
|
|
82
|
-
<input type="checkbox" data-setting="publicReadOnly" ${settings.publicReadOnly ? 'checked' : ''} ${dis}>
|
|
83
|
-
<span class="switch" aria-hidden="true"></span>
|
|
84
|
-
<span class="toggle-tx"><strong>${t('settings.publicReadOnly')}</strong>
|
|
85
|
-
<small>${t('settings.publicReadOnlyHelp')}</small></span>
|
|
86
|
-
</label>
|
|
87
|
-
${bound ? `<label class="toggle-row">
|
|
88
|
-
<input type="checkbox" data-setting="remoteAccess" ${settings.remoteAccess ? 'checked' : ''} ${dis}>
|
|
89
|
-
<span class="switch" aria-hidden="true"></span>
|
|
90
|
-
<span class="toggle-tx"><strong>${t('settings.remoteAccess')}</strong>
|
|
91
|
-
<small>${t('settings.remoteAccessHelp')}</small></span>
|
|
92
|
-
</label>` : ''}
|
|
93
|
-
</section>
|
|
94
|
-
<section class="bd-section">
|
|
95
|
-
<h3 class="bd-section-title">${t('settings.sectionCards')}</h3>
|
|
96
|
-
<label class="toggle-row">
|
|
97
|
-
<input type="checkbox" data-setting="openTerminalInFeishu" ${settings.openTerminalInFeishu ? 'checked' : ''} ${dis}>
|
|
98
|
-
<span class="switch" aria-hidden="true"></span>
|
|
99
|
-
<span class="toggle-tx"><strong>${t('settings.openTerminalInFeishu')}</strong>
|
|
100
|
-
<small>${t('settings.openTerminalInFeishuHelp')}</small></span>
|
|
101
|
-
</label>
|
|
102
|
-
</section>
|
|
103
|
-
<section class="bd-section">
|
|
104
|
-
<h3 class="bd-section-title">${t('settings.sectionExperimental')}</h3>
|
|
105
|
-
<label class="toggle-row">
|
|
106
|
-
<input type="checkbox" data-setting="chatBotDiscovery" ${settings.chatBotDiscovery ? 'checked' : ''} ${dis}>
|
|
107
|
-
<span class="switch" aria-hidden="true"></span>
|
|
108
|
-
<span class="toggle-tx"><strong>${t('settings.chatBotDiscovery')}</strong>
|
|
109
|
-
<small>${t('settings.chatBotDiscoveryHelp')}</small></span>
|
|
110
|
-
</label>
|
|
111
|
-
</section>
|
|
112
|
-
<section class="bd-section">
|
|
113
|
-
<h3 class="bd-section-title">本地白板</h3>
|
|
114
|
-
<label class="toggle-row">
|
|
115
|
-
<input type="checkbox" data-whiteboard-enabled ${settings.whiteboard.enabled ? 'checked' : ''} ${dis}>
|
|
116
|
-
<span class="switch" aria-hidden="true"></span>
|
|
117
|
-
<span class="toggle-tx"><strong>启用项目白板</strong>
|
|
118
|
-
<small>默认关闭。开启只启用能力,不会立即创建白板;首次需要时才按群+项目 ensure。</small></span>
|
|
119
|
-
</label>
|
|
120
|
-
</section>
|
|
121
|
-
<section class="bd-section">
|
|
122
|
-
<h3 class="bd-section-title">${t('settings.sectionRepoPicker')}</h3>
|
|
123
|
-
<label class="form-row">
|
|
124
|
-
<span>${t('settings.repoPickerMode')}</span>
|
|
125
|
-
<select data-select-setting="repoPickerMode" ${dis}>
|
|
126
|
-
<option value="all" ${settings.repoPickerMode === 'all' ? 'selected' : ''}>${t('settings.repoPickerModeAll')}</option>
|
|
127
|
-
<option value="repos" ${settings.repoPickerMode === 'repos' ? 'selected' : ''}>${t('settings.repoPickerModeRepos')}</option>
|
|
128
|
-
</select>
|
|
129
|
-
<small>${t('settings.repoPickerModeHelp')}</small>
|
|
130
|
-
</label>
|
|
131
|
-
</section>
|
|
132
|
-
<section class="bd-section">
|
|
133
|
-
<h3 class="bd-section-title">${t('settings.sectionMaintenance')}</h3>
|
|
134
|
-
${autoUpdateRow(updDisabled)}
|
|
135
|
-
${settings.localDevInstall ? `<p class="hint-warn">${t('settings.autoUpdateLocalDev')}</p>` : ''}
|
|
136
|
-
${autoRestartRow(!canWrite || settings.maintenance.autoUpdate?.enabled !== true)}
|
|
137
|
-
</section>
|
|
138
|
-
<div class="actions settings-actions">
|
|
139
|
-
<span class="oncall-status" data-settings-status></span>
|
|
140
|
-
</div>
|
|
141
|
-
</article>
|
|
142
|
-
</div>`;
|
|
143
|
-
}
|
|
144
|
-
let upStatus = null;
|
|
145
|
-
let upStatusError = null;
|
|
146
|
-
let upChangelog = null; // null = not loaded yet (loading)
|
|
147
|
-
let upChangelogOpen = false;
|
|
148
|
-
let upChangelogOk = true; // false = fetch failed (offline / rate-limited)
|
|
149
|
-
let upChangelogRateLimited = false;
|
|
150
|
-
let upReleasesUrl = '';
|
|
151
|
-
let upBusy = false;
|
|
152
|
-
let upMsg = null;
|
|
153
|
-
function installKindLabel(kind) {
|
|
154
|
-
if (kind === 'npm-global')
|
|
155
|
-
return t('update.kindNpm');
|
|
156
|
-
if (kind === 'source-checkout')
|
|
157
|
-
return t('update.kindSource');
|
|
158
|
-
return t('update.kindUnknown');
|
|
159
|
-
}
|
|
160
|
-
function renderChangelogPanel() {
|
|
161
|
-
if (upChangelog === null)
|
|
162
|
-
return `<p class="empty">${t('update.changelogLoading')}</p>`;
|
|
163
|
-
if (!upChangelogOk) {
|
|
164
|
-
const reason = upChangelogRateLimited ? t('update.changelogRateLimited') : t('update.changelogFailed');
|
|
165
|
-
const link = upReleasesUrl
|
|
166
|
-
? ` <a href="${escapeHtml(upReleasesUrl)}" target="_blank" rel="noopener">${t('update.changelogViewOnGitHub')}</a>`
|
|
167
|
-
: '';
|
|
168
|
-
return `<p class="hint-warn-inline">${reason}${link}</p>`;
|
|
169
|
-
}
|
|
170
|
-
if (upChangelog.length === 0)
|
|
171
|
-
return `<p class="empty">${t('update.changelogEmpty')}</p>`;
|
|
172
|
-
return `<div class="update-changelog">${upChangelog.map(r => {
|
|
173
|
-
const title = r.name && r.name !== `v${r.version}` ? r.name : '';
|
|
174
|
-
const date = r.publishedAt ? new Date(r.publishedAt).toLocaleDateString() : '';
|
|
175
|
-
return `<details class="update-release" open>
|
|
176
|
-
<summary><strong>v${escapeHtml(r.version)}</strong> ${escapeHtml(title)} <small>${escapeHtml(date)}</small>
|
|
177
|
-
<a href="${escapeHtml(r.url)}" target="_blank" rel="noopener">↗</a></summary>
|
|
178
|
-
<pre class="update-release-body">${escapeHtml(r.body || '')}</pre>
|
|
179
|
-
</details>`;
|
|
180
|
-
}).join('')}</div>`;
|
|
181
|
-
}
|
|
182
|
-
function renderUpdateCard(canWrite) {
|
|
183
|
-
let inner;
|
|
184
|
-
if (!canWrite) {
|
|
185
|
-
inner = `<p class="hint-warn">${t('update.loginRequired')}</p>`;
|
|
186
|
-
}
|
|
187
|
-
else if (upStatusError) {
|
|
188
|
-
inner = `<p class="hint-warn">${t('update.checkFailed')}: ${escapeHtml(upStatusError)}</p>
|
|
189
|
-
<div class="update-actions"><button type="button" data-up="check">${t('update.btnCheck')}</button></div>`;
|
|
190
|
-
}
|
|
191
|
-
else if (!upStatus) {
|
|
192
|
-
inner = `<p class="empty">${t('update.loading')}</p>`;
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
const s = upStatus;
|
|
196
|
-
const badge = s.latest
|
|
197
|
-
? (s.behind
|
|
198
|
-
? `<span class="update-badge update-badge-new">${t('update.newAvailable', { version: `v${s.latest}` })}</span>`
|
|
199
|
-
: `<span class="update-badge update-badge-ok">${t('update.upToDate')}</span>`)
|
|
200
|
-
: `<span class="hint-warn-inline">${t('update.checkUnavailable')}</span>`;
|
|
201
|
-
const versionLine = `<p class="update-version"><span>${t('update.current')}: <strong>v${escapeHtml(s.current)}</strong></span> ${badge}</p>`;
|
|
202
|
-
const warnings = [];
|
|
203
|
-
if (!s.node.ok)
|
|
204
|
-
warnings.push(`<p class="hint-warn">${t('update.nodeWarn', { version: s.node.version, required: s.node.required })}</p>`);
|
|
205
|
-
if (s.localDevInstall)
|
|
206
|
-
warnings.push(`<p class="hint-warn">${t('update.localDev')}</p>`);
|
|
207
|
-
if (s.installs.multiple) {
|
|
208
|
-
const list = s.installs.entries
|
|
209
|
-
.map(e => `<li><code>${escapeHtml(e.binPath)}</code> → ${installKindLabel(e.kind)} <small>${escapeHtml(e.root)}</small></li>`)
|
|
210
|
-
.join('');
|
|
211
|
-
warnings.push(`<div class="hint-warn"><p>${t('update.multiInstallWarn')}</p><ul class="update-install-list">${list}</ul></div>`);
|
|
212
|
-
}
|
|
213
|
-
const updateDisabled = s.localDevInstall || upBusy;
|
|
214
|
-
const buttons = `<div class="update-actions">
|
|
215
|
-
<button type="button" data-up="check" ${upBusy ? 'disabled' : ''}>${t('update.btnCheck')}</button>
|
|
216
|
-
<button type="button" data-up="changelog" ${upBusy ? 'disabled' : ''}>${upChangelogOpen ? t('update.btnChangelogHide') : t('update.btnChangelog')}</button>
|
|
217
|
-
<button type="button" class="primary" data-up="update" ${updateDisabled ? 'disabled' : ''}>${t('update.btnUpdate')}</button>
|
|
218
|
-
<button type="button" data-up="restart" ${upBusy ? 'disabled' : ''}>${t('update.btnRestart')}</button>
|
|
219
|
-
</div>`;
|
|
220
|
-
const changelog = upChangelogOpen ? renderChangelogPanel() : '';
|
|
221
|
-
const msg = upMsg ? `<p class="oncall-status ${escapeHtml(upMsg.cls)}">${escapeHtml(upMsg.text)}</p>` : '';
|
|
222
|
-
inner = versionLine + warnings.join('') + buttons + changelog + msg;
|
|
223
|
-
}
|
|
224
|
-
return `<div class="settings-grid">
|
|
225
|
-
<article class="bd-card settings-card">
|
|
226
|
-
<section class="bd-section">
|
|
227
|
-
<h3 class="bd-section-title">${t('update.section')}</h3>
|
|
228
|
-
${inner}
|
|
229
|
-
</section>
|
|
230
|
-
</article>
|
|
231
|
-
</div>`;
|
|
232
|
-
}
|
|
233
|
-
function mountUpdateCard(container, canWrite) {
|
|
234
|
-
function rerender() {
|
|
235
|
-
container.innerHTML = renderUpdateCard(canWrite);
|
|
236
|
-
wire();
|
|
237
|
-
}
|
|
238
|
-
function setMsg(text, cls = '') { upMsg = { text, cls }; }
|
|
239
|
-
async function fetchStatus() {
|
|
240
|
-
try {
|
|
241
|
-
const r = await fetch('/api/update/status');
|
|
242
|
-
const body = await r.json().catch(() => ({}));
|
|
243
|
-
if (!r.ok) {
|
|
244
|
-
upStatus = null;
|
|
245
|
-
upStatusError = body?.error ?? `HTTP ${r.status}`;
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
upStatus = body;
|
|
249
|
-
upStatusError = null;
|
|
250
|
-
}
|
|
251
|
-
catch (e) {
|
|
252
|
-
upStatus = null;
|
|
253
|
-
upStatusError = e?.message ?? String(e);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
async function loadChangelog() {
|
|
257
|
-
upChangelog = null;
|
|
258
|
-
upChangelogOk = true;
|
|
259
|
-
upChangelogRateLimited = false;
|
|
260
|
-
rerender();
|
|
261
|
-
try {
|
|
262
|
-
const r = await fetch('/api/update/changelog');
|
|
263
|
-
const body = await r.json().catch(() => ({}));
|
|
264
|
-
upReleasesUrl = typeof body?.releasesUrl === 'string' ? body.releasesUrl : '';
|
|
265
|
-
if (!r.ok) {
|
|
266
|
-
upChangelog = [];
|
|
267
|
-
upChangelogOk = false;
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
upChangelog = Array.isArray(body.releases) ? body.releases : [];
|
|
271
|
-
upChangelogOk = body.ok !== false;
|
|
272
|
-
upChangelogRateLimited = body.rateLimited === true;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
catch {
|
|
276
|
-
upChangelog = [];
|
|
277
|
-
upChangelogOk = false;
|
|
278
|
-
}
|
|
279
|
-
rerender();
|
|
280
|
-
}
|
|
281
|
-
function pollReconnect() {
|
|
282
|
-
const start = Date.now();
|
|
283
|
-
const tick = async () => {
|
|
284
|
-
if (Date.now() - start > 90_000) {
|
|
285
|
-
upBusy = false;
|
|
286
|
-
setMsg(t('update.restartSlow'), 'hint-warn-inline');
|
|
287
|
-
rerender();
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
try {
|
|
291
|
-
const r = await fetch('/__health', { cache: 'no-store' });
|
|
292
|
-
if (r.ok) {
|
|
293
|
-
location.reload();
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
catch { /* still down → keep polling */ }
|
|
298
|
-
setTimeout(() => void tick(), 2000);
|
|
299
|
-
};
|
|
300
|
-
// Give the old dashboard a moment to actually go down before polling.
|
|
301
|
-
setTimeout(() => void tick(), 3000);
|
|
302
|
-
}
|
|
303
|
-
async function doRestart(updatePayload) {
|
|
304
|
-
upBusy = true;
|
|
305
|
-
setMsg(t('update.restarting'));
|
|
306
|
-
rerender();
|
|
307
|
-
try {
|
|
308
|
-
await fetch('/api/update/restart', {
|
|
309
|
-
method: 'POST',
|
|
310
|
-
headers: { 'content-type': 'application/json' },
|
|
311
|
-
body: JSON.stringify(updatePayload ? { update: updatePayload } : {}),
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
catch (e) {
|
|
315
|
-
upBusy = false;
|
|
316
|
-
setMsg(t('update.restartFailed', { detail: e?.message ?? e }), 'hint-warn-inline');
|
|
317
|
-
rerender();
|
|
318
|
-
return;
|
|
319
|
-
}
|
|
320
|
-
pollReconnect();
|
|
321
|
-
}
|
|
322
|
-
async function doUpdate() {
|
|
323
|
-
const s = upStatus;
|
|
324
|
-
if (!s)
|
|
325
|
-
return;
|
|
326
|
-
if (!s.node.ok) {
|
|
327
|
-
window.alert(t('update.nodeTooOldAlert', { version: s.node.version, required: s.node.required }));
|
|
328
|
-
return;
|
|
329
|
-
}
|
|
330
|
-
if (s.installs.multiple) {
|
|
331
|
-
const paths = s.installs.entries.map(e => `• ${e.binPath} (${installKindLabel(e.kind)})`).join('\n');
|
|
332
|
-
if (!window.confirm(t('update.confirmMultiInstall', { paths })))
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
const confirmMsg = s.latest ? t('update.confirmUpdate', { version: `v${s.latest}` }) : t('update.confirmUpdateNoVer');
|
|
336
|
-
if (!window.confirm(confirmMsg))
|
|
337
|
-
return;
|
|
338
|
-
upBusy = true;
|
|
339
|
-
setMsg(t('update.updating'));
|
|
340
|
-
rerender();
|
|
341
|
-
try {
|
|
342
|
-
const r = await fetch('/api/update/run', { method: 'POST' });
|
|
343
|
-
const body = await r.json().catch(() => ({}));
|
|
344
|
-
if (!r.ok || body.ok === false) {
|
|
345
|
-
const detail = body?.detail ?? body?.error ?? `HTTP ${r.status}`;
|
|
346
|
-
upBusy = false;
|
|
347
|
-
setMsg(t('update.updateFailed', { detail }), 'hint-warn-inline');
|
|
348
|
-
rerender();
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
if (body.changed) {
|
|
352
|
-
upBusy = false;
|
|
353
|
-
setMsg(t('update.updatedChanged', { old: `v${body.oldVersion}`, new: `v${body.newVersion}` }), 'hint-ok');
|
|
354
|
-
rerender();
|
|
355
|
-
if (window.confirm(t('update.confirmRestart'))) {
|
|
356
|
-
await doRestart({ oldVersion: body.oldVersion, newVersion: body.newVersion });
|
|
357
|
-
}
|
|
358
|
-
else {
|
|
359
|
-
setMsg(t('update.noRestartHint'), 'hint-ok');
|
|
360
|
-
rerender();
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
upBusy = false;
|
|
365
|
-
setMsg(t('update.alreadyLatestRun', { version: `v${body.newVersion}` }), 'hint-ok');
|
|
366
|
-
await fetchStatus();
|
|
367
|
-
rerender();
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
catch (e) {
|
|
371
|
-
upBusy = false;
|
|
372
|
-
setMsg(t('update.updateFailed', { detail: e?.message ?? e }), 'hint-warn-inline');
|
|
373
|
-
rerender();
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
function wire() {
|
|
377
|
-
container.querySelectorAll('button[data-up]').forEach(btn => {
|
|
378
|
-
btn.addEventListener('click', () => {
|
|
379
|
-
const act = btn.dataset.up;
|
|
380
|
-
if (act === 'check') {
|
|
381
|
-
upStatus = null;
|
|
382
|
-
upChangelog = null;
|
|
383
|
-
upChangelogOpen = false;
|
|
384
|
-
upMsg = null;
|
|
385
|
-
upStatusError = null;
|
|
386
|
-
rerender();
|
|
387
|
-
void fetchStatus().then(rerender);
|
|
388
|
-
}
|
|
389
|
-
else if (act === 'changelog') {
|
|
390
|
-
upChangelogOpen = !upChangelogOpen;
|
|
391
|
-
if (upChangelogOpen && upChangelog === null)
|
|
392
|
-
void loadChangelog();
|
|
393
|
-
else
|
|
394
|
-
rerender();
|
|
395
|
-
}
|
|
396
|
-
else if (act === 'update') {
|
|
397
|
-
void doUpdate();
|
|
398
|
-
}
|
|
399
|
-
else if (act === 'restart') {
|
|
400
|
-
if (window.confirm(t('update.confirmPlainRestart')))
|
|
401
|
-
void doRestart(null);
|
|
402
|
-
}
|
|
403
|
-
});
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
rerender();
|
|
407
|
-
if (canWrite)
|
|
408
|
-
void fetchStatus().then(rerender);
|
|
409
|
-
}
|
|
410
|
-
async function fetchSettings() {
|
|
411
|
-
try {
|
|
412
|
-
const r = await fetch('/api/settings');
|
|
413
|
-
const body = await r.json().catch(() => ({}));
|
|
414
|
-
if (!r.ok) {
|
|
415
|
-
settings = null;
|
|
416
|
-
loadError = body?.error ?? `HTTP ${r.status}`;
|
|
417
|
-
return;
|
|
418
|
-
}
|
|
419
|
-
settings = parseSettings(body.settings);
|
|
420
|
-
canWrite = body.authed === true;
|
|
421
|
-
bound = body.bound === true;
|
|
422
|
-
loadError = null;
|
|
423
|
-
}
|
|
424
|
-
catch (e) {
|
|
425
|
-
settings = null;
|
|
426
|
-
loadError = e?.message ?? String(e);
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
export async function renderSettingsPage(root) {
|
|
430
|
-
root.innerHTML = pageHtml();
|
|
431
|
-
const bodyEl = root.querySelector('#settings-body');
|
|
432
|
-
function rerender() {
|
|
433
|
-
bodyEl.innerHTML = renderSettingsBody();
|
|
434
|
-
wireSettings();
|
|
435
|
-
}
|
|
436
|
-
function statusEl() {
|
|
437
|
-
return bodyEl.querySelector('[data-settings-status]');
|
|
438
|
-
}
|
|
439
|
-
async function putSettings(payload, revert, input) {
|
|
440
|
-
if (!settings)
|
|
441
|
-
return;
|
|
442
|
-
input.disabled = true;
|
|
443
|
-
const st = statusEl();
|
|
444
|
-
if (st) {
|
|
445
|
-
st.textContent = t('settings.saving');
|
|
446
|
-
st.className = 'oncall-status';
|
|
447
|
-
}
|
|
448
|
-
try {
|
|
449
|
-
const r = await fetch('/api/settings', {
|
|
450
|
-
method: 'PUT',
|
|
451
|
-
headers: { 'content-type': 'application/json' },
|
|
452
|
-
body: JSON.stringify(payload),
|
|
453
|
-
});
|
|
454
|
-
const body = await r.json().catch(() => ({}));
|
|
455
|
-
if (!r.ok || body.ok === false)
|
|
456
|
-
throw new Error(body?.error ?? `HTTP ${r.status}`);
|
|
457
|
-
settings = parseSettings(body.settings);
|
|
458
|
-
if (st) {
|
|
459
|
-
st.textContent = t('settings.saved');
|
|
460
|
-
st.classList.add('hint-ok');
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
catch (e) {
|
|
464
|
-
revert();
|
|
465
|
-
if (st) {
|
|
466
|
-
st.textContent = `${t('settings.saveFailed')}: ${e?.message ?? e}`;
|
|
467
|
-
st.classList.add('hint-warn-inline');
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
finally {
|
|
471
|
-
input.disabled = false;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
function wireSettings() {
|
|
475
|
-
// Flat boolean settings.
|
|
476
|
-
bodyEl.querySelectorAll('input[data-setting]').forEach(input => {
|
|
477
|
-
input.addEventListener('change', () => {
|
|
478
|
-
const key = input.dataset.setting;
|
|
479
|
-
const before = !input.checked;
|
|
480
|
-
void putSettings({ [key]: input.checked }, () => { input.checked = before; }, input);
|
|
481
|
-
});
|
|
482
|
-
});
|
|
483
|
-
bodyEl.querySelector('input[data-whiteboard-enabled]')?.addEventListener('change', (ev) => {
|
|
484
|
-
const input = ev.currentTarget;
|
|
485
|
-
const before = !input.checked;
|
|
486
|
-
void putSettings({ whiteboard: { enabled: input.checked } }, () => { input.checked = before; }, input);
|
|
487
|
-
});
|
|
488
|
-
bodyEl.querySelectorAll('select[data-select-setting]').forEach(input => {
|
|
489
|
-
input.addEventListener('change', () => {
|
|
490
|
-
const key = input.dataset.selectSetting;
|
|
491
|
-
const before = settings?.[key] ?? 'all';
|
|
492
|
-
void putSettings({ [key]: input.value }, () => { input.value = before; }, input);
|
|
493
|
-
});
|
|
494
|
-
});
|
|
495
|
-
// Maintenance: auto-update sends {enabled,time}; auto-restart is a toggle ({enabled}).
|
|
496
|
-
const sendMaint = (key, input, revert) => {
|
|
497
|
-
const toggle = bodyEl.querySelector(`input[data-maint="${key}"]`);
|
|
498
|
-
const enabled = toggle?.checked ?? false;
|
|
499
|
-
let task;
|
|
500
|
-
if (key === 'autoUpdate') {
|
|
501
|
-
const timeEl = bodyEl.querySelector('input[data-maint-time="autoUpdate"]');
|
|
502
|
-
task = { enabled, time: timeEl?.value || '04:00' };
|
|
503
|
-
}
|
|
504
|
-
else {
|
|
505
|
-
task = { enabled };
|
|
506
|
-
}
|
|
507
|
-
void putSettings({ maintenance: { [key]: task } }, revert, input).then(() => rerender());
|
|
508
|
-
};
|
|
509
|
-
bodyEl.querySelectorAll('input[data-maint]').forEach(input => {
|
|
510
|
-
input.addEventListener('change', () => {
|
|
511
|
-
const key = input.dataset.maint;
|
|
512
|
-
const before = !input.checked;
|
|
513
|
-
sendMaint(key, input, () => { input.checked = before; });
|
|
514
|
-
});
|
|
515
|
-
});
|
|
516
|
-
bodyEl.querySelectorAll('input[data-maint-time]').forEach(input => {
|
|
517
|
-
input.addEventListener('change', () => {
|
|
518
|
-
const key = input.dataset.maintTime;
|
|
519
|
-
const before = input.defaultValue;
|
|
520
|
-
sendMaint(key, input, () => { input.value = before; });
|
|
521
|
-
});
|
|
522
|
-
});
|
|
523
|
-
}
|
|
524
|
-
rerender();
|
|
525
|
-
await fetchSettings();
|
|
526
|
-
rerender();
|
|
527
|
-
// Mount the version & update card (separate lifecycle from the settings PUT
|
|
528
|
-
// form, so a maintenance toggle re-render doesn't wipe its loaded state).
|
|
529
|
-
upBusy = false;
|
|
530
|
-
upMsg = null;
|
|
531
|
-
upChangelogOpen = false;
|
|
532
|
-
const updateEl = root.querySelector('#update-body');
|
|
533
|
-
mountUpdateCard(updateEl, canWrite);
|
|
534
|
-
}
|
|
1
|
+
export { renderSettingsPage } from './settings-page.js';
|
|
535
2
|
//# sourceMappingURL=settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/dashboard/web/settings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/dashboard/web/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type PageDisposer } from './react-mount.js';
|
|
2
|
+
interface SkillRow {
|
|
3
|
+
name: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
tags?: string[];
|
|
6
|
+
source?: Record<string, any>;
|
|
7
|
+
rootDir?: string;
|
|
8
|
+
}
|
|
9
|
+
interface BotRow {
|
|
10
|
+
larkAppId: string;
|
|
11
|
+
botName?: string;
|
|
12
|
+
online?: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
skills?: SkillPolicy | null;
|
|
15
|
+
}
|
|
16
|
+
interface SkillPolicy {
|
|
17
|
+
include?: string[];
|
|
18
|
+
}
|
|
19
|
+
type StatusMessage = {
|
|
20
|
+
text: string;
|
|
21
|
+
ok: boolean;
|
|
22
|
+
} | null;
|
|
23
|
+
export declare function BotPolicyCard(props: {
|
|
24
|
+
bot: BotRow;
|
|
25
|
+
installedNames: Set<string>;
|
|
26
|
+
skills: SkillRow[];
|
|
27
|
+
status: StatusMessage;
|
|
28
|
+
busyKey: string | null;
|
|
29
|
+
onUpdate(appId: string, action: 'attach' | 'detach', name: string): Promise<void>;
|
|
30
|
+
}): import("react").JSX.Element;
|
|
31
|
+
export declare function renderSkillsPage(root: HTMLElement): PageDisposer;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=skills-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/skills-page.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErE,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD,UAAU,MAAM;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAaD,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC;AA2tB1D,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF,+BA8EA;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAEhE"}
|