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.
Files changed (205) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/adapters/cli/genius.d.ts +4 -0
  4. package/dist/adapters/cli/genius.d.ts.map +1 -0
  5. package/dist/adapters/cli/genius.js +216 -0
  6. package/dist/adapters/cli/genius.js.map +1 -0
  7. package/dist/adapters/cli/registry.d.ts +2 -1
  8. package/dist/adapters/cli/registry.d.ts.map +1 -1
  9. package/dist/adapters/cli/registry.js +3 -1
  10. package/dist/adapters/cli/registry.js.map +1 -1
  11. package/dist/adapters/cli/types.d.ts +1 -1
  12. package/dist/adapters/cli/types.d.ts.map +1 -1
  13. package/dist/core/dashboard-rows.d.ts +1 -1
  14. package/dist/core/dashboard-rows.d.ts.map +1 -1
  15. package/dist/core/dashboard-rows.js +2 -1
  16. package/dist/core/dashboard-rows.js.map +1 -1
  17. package/dist/dashboard/session-card-model.d.ts +2 -2
  18. package/dist/dashboard/session-card-model.d.ts.map +1 -1
  19. package/dist/dashboard/session-card-model.js +5 -2
  20. package/dist/dashboard/session-card-model.js.map +1 -1
  21. package/dist/dashboard/web/app.d.ts.map +1 -1
  22. package/dist/dashboard/web/app.js +28 -63
  23. package/dist/dashboard/web/app.js.map +1 -1
  24. package/dist/dashboard/web/bot-defaults-page.d.ts +3 -0
  25. package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -0
  26. package/dist/dashboard/web/bot-defaults-page.js +23 -0
  27. package/dist/dashboard/web/bot-defaults-page.js.map +1 -0
  28. package/dist/dashboard/web/bot-defaults.d.ts +2 -1
  29. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  30. package/dist/dashboard/web/bot-defaults.js +30 -30
  31. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  32. package/dist/dashboard/web/connectors-page.d.ts +14 -0
  33. package/dist/dashboard/web/connectors-page.d.ts.map +1 -0
  34. package/dist/dashboard/web/connectors-page.js +303 -0
  35. package/dist/dashboard/web/connectors-page.js.map +1 -0
  36. package/dist/dashboard/web/connectors.d.ts +1 -12
  37. package/dist/dashboard/web/connectors.d.ts.map +1 -1
  38. package/dist/dashboard/web/connectors.js +1 -325
  39. package/dist/dashboard/web/connectors.js.map +1 -1
  40. package/dist/dashboard/web/dashboard-routes.d.ts +14 -0
  41. package/dist/dashboard/web/dashboard-routes.d.ts.map +1 -0
  42. package/dist/dashboard/web/dashboard-routes.js +176 -0
  43. package/dist/dashboard/web/dashboard-routes.js.map +1 -0
  44. package/dist/dashboard/web/groups-page.d.ts +3 -0
  45. package/dist/dashboard/web/groups-page.d.ts.map +1 -0
  46. package/dist/dashboard/web/groups-page.js +26 -0
  47. package/dist/dashboard/web/groups-page.js.map +1 -0
  48. package/dist/dashboard/web/groups.d.ts +1 -1
  49. package/dist/dashboard/web/groups.d.ts.map +1 -1
  50. package/dist/dashboard/web/groups.js +113 -52
  51. package/dist/dashboard/web/groups.js.map +1 -1
  52. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  53. package/dist/dashboard/web/i18n.js +18 -0
  54. package/dist/dashboard/web/i18n.js.map +1 -1
  55. package/dist/dashboard/web/insights-page.d.ts +3 -0
  56. package/dist/dashboard/web/insights-page.d.ts.map +1 -0
  57. package/dist/dashboard/web/insights-page.js +26 -0
  58. package/dist/dashboard/web/insights-page.js.map +1 -0
  59. package/dist/dashboard/web/insights.d.ts +18 -1
  60. package/dist/dashboard/web/insights.d.ts.map +1 -1
  61. package/dist/dashboard/web/insights.js +25 -61
  62. package/dist/dashboard/web/insights.js.map +1 -1
  63. package/dist/dashboard/web/office-page.d.ts +3 -0
  64. package/dist/dashboard/web/office-page.d.ts.map +1 -0
  65. package/dist/dashboard/web/office-page.js +149 -0
  66. package/dist/dashboard/web/office-page.js.map +1 -0
  67. package/dist/dashboard/web/office.d.ts +1 -1
  68. package/dist/dashboard/web/office.d.ts.map +1 -1
  69. package/dist/dashboard/web/office.js +1 -139
  70. package/dist/dashboard/web/office.js.map +1 -1
  71. package/dist/dashboard/web/overview-page.d.ts +3 -0
  72. package/dist/dashboard/web/overview-page.d.ts.map +1 -0
  73. package/dist/dashboard/web/overview-page.js +149 -0
  74. package/dist/dashboard/web/overview-page.js.map +1 -0
  75. package/dist/dashboard/web/overview.d.ts +2 -2
  76. package/dist/dashboard/web/overview.d.ts.map +1 -1
  77. package/dist/dashboard/web/overview.js +14 -3
  78. package/dist/dashboard/web/overview.js.map +1 -1
  79. package/dist/dashboard/web/react-hooks.d.ts +8 -0
  80. package/dist/dashboard/web/react-hooks.d.ts.map +1 -0
  81. package/dist/dashboard/web/react-hooks.js +43 -0
  82. package/dist/dashboard/web/react-hooks.js.map +1 -0
  83. package/dist/dashboard/web/react-mount.d.ts +4 -0
  84. package/dist/dashboard/web/react-mount.d.ts.map +1 -0
  85. package/dist/dashboard/web/react-mount.js +7 -0
  86. package/dist/dashboard/web/react-mount.js.map +1 -0
  87. package/dist/dashboard/web/roles-page.d.ts +4 -0
  88. package/dist/dashboard/web/roles-page.d.ts.map +1 -0
  89. package/dist/dashboard/web/roles-page.js +26 -0
  90. package/dist/dashboard/web/roles-page.js.map +1 -0
  91. package/dist/dashboard/web/roles.d.ts +1 -2
  92. package/dist/dashboard/web/roles.d.ts.map +1 -1
  93. package/dist/dashboard/web/roles.js +189 -135
  94. package/dist/dashboard/web/roles.js.map +1 -1
  95. package/dist/dashboard/web/route-lifecycle.d.ts +14 -0
  96. package/dist/dashboard/web/route-lifecycle.d.ts.map +1 -0
  97. package/dist/dashboard/web/route-lifecycle.js +29 -0
  98. package/dist/dashboard/web/route-lifecycle.js.map +1 -0
  99. package/dist/dashboard/web/schedules-page.d.ts +14 -0
  100. package/dist/dashboard/web/schedules-page.d.ts.map +1 -0
  101. package/dist/dashboard/web/schedules-page.js +84 -0
  102. package/dist/dashboard/web/schedules-page.js.map +1 -0
  103. package/dist/dashboard/web/schedules.d.ts +1 -1
  104. package/dist/dashboard/web/schedules.d.ts.map +1 -1
  105. package/dist/dashboard/web/schedules.js +1 -115
  106. package/dist/dashboard/web/schedules.js.map +1 -1
  107. package/dist/dashboard/web/sessions-page.d.ts +3 -0
  108. package/dist/dashboard/web/sessions-page.d.ts.map +1 -0
  109. package/dist/dashboard/web/sessions-page.js +28 -0
  110. package/dist/dashboard/web/sessions-page.js.map +1 -0
  111. package/dist/dashboard/web/sessions.d.ts +4 -1
  112. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  113. package/dist/dashboard/web/sessions.js +43 -10
  114. package/dist/dashboard/web/sessions.js.map +1 -1
  115. package/dist/dashboard/web/settings-page.d.ts +3 -0
  116. package/dist/dashboard/web/settings-page.d.ts.map +1 -0
  117. package/dist/dashboard/web/settings-page.js +387 -0
  118. package/dist/dashboard/web/settings-page.js.map +1 -0
  119. package/dist/dashboard/web/settings.d.ts +1 -1
  120. package/dist/dashboard/web/settings.d.ts.map +1 -1
  121. package/dist/dashboard/web/settings.js +1 -534
  122. package/dist/dashboard/web/settings.js.map +1 -1
  123. package/dist/dashboard/web/skills-page.d.ts +33 -0
  124. package/dist/dashboard/web/skills-page.d.ts.map +1 -0
  125. package/dist/dashboard/web/skills-page.js +515 -0
  126. package/dist/dashboard/web/skills-page.js.map +1 -0
  127. package/dist/dashboard/web/skills.d.ts +1 -1
  128. package/dist/dashboard/web/skills.d.ts.map +1 -1
  129. package/dist/dashboard/web/skills.js +1 -711
  130. package/dist/dashboard/web/skills.js.map +1 -1
  131. package/dist/dashboard/web/store.d.ts +9 -0
  132. package/dist/dashboard/web/store.d.ts.map +1 -1
  133. package/dist/dashboard/web/store.js +19 -2
  134. package/dist/dashboard/web/store.js.map +1 -1
  135. package/dist/dashboard/web/team-federation-page.d.ts +4 -0
  136. package/dist/dashboard/web/team-federation-page.d.ts.map +1 -0
  137. package/dist/dashboard/web/team-federation-page.js +47 -0
  138. package/dist/dashboard/web/team-federation-page.js.map +1 -0
  139. package/dist/dashboard/web/team-federation.d.ts +2 -2
  140. package/dist/dashboard/web/team-federation.d.ts.map +1 -1
  141. package/dist/dashboard/web/team-federation.js +104 -97
  142. package/dist/dashboard/web/team-federation.js.map +1 -1
  143. package/dist/dashboard/web/v3-page.d.ts +3 -0
  144. package/dist/dashboard/web/v3-page.d.ts.map +1 -0
  145. package/dist/dashboard/web/v3-page.js +27 -0
  146. package/dist/dashboard/web/v3-page.js.map +1 -0
  147. package/dist/dashboard/web/v3.d.ts +2 -1
  148. package/dist/dashboard/web/v3.d.ts.map +1 -1
  149. package/dist/dashboard/web/v3.js +18 -43
  150. package/dist/dashboard/web/v3.js.map +1 -1
  151. package/dist/dashboard/web/whiteboards-page.d.ts +3 -0
  152. package/dist/dashboard/web/whiteboards-page.d.ts.map +1 -0
  153. package/dist/dashboard/web/whiteboards-page.js +203 -0
  154. package/dist/dashboard/web/whiteboards-page.js.map +1 -0
  155. package/dist/dashboard/web/whiteboards.d.ts +1 -1
  156. package/dist/dashboard/web/whiteboards.d.ts.map +1 -1
  157. package/dist/dashboard/web/whiteboards.js +1 -275
  158. package/dist/dashboard/web/whiteboards.js.map +1 -1
  159. package/dist/dashboard-web/app.js +36 -2550
  160. package/dist/dashboard-web/chunks/bot-defaults-page-3EV7K6LJ.js +358 -0
  161. package/dist/dashboard-web/chunks/chunk-5E3MJJL4.js +1 -0
  162. package/dist/dashboard-web/chunks/chunk-76J7PNZI.js +1 -0
  163. package/dist/dashboard-web/chunks/chunk-7SZRL6FY.js +1 -0
  164. package/dist/dashboard-web/chunks/chunk-JTSE5VP6.js +54 -0
  165. package/dist/dashboard-web/chunks/chunk-JXLHRRJD.js +31 -0
  166. package/dist/dashboard-web/chunks/chunk-NASYW5FD.js +1 -0
  167. package/dist/dashboard-web/chunks/connectors-XPZKEHF6.js +1 -0
  168. package/dist/dashboard-web/chunks/groups-page-C54PVKYP.js +207 -0
  169. package/dist/dashboard-web/chunks/insights-page-BBQYR7WY.js +309 -0
  170. package/dist/dashboard-web/chunks/office-page-6DXYOG55.js +1 -0
  171. package/dist/dashboard-web/chunks/overview-page-5PJCAMID.js +1 -0
  172. package/dist/dashboard-web/chunks/roles-page-APUDLPVM.js +98 -0
  173. package/dist/dashboard-web/chunks/schedules-WG2UKHSO.js +1 -0
  174. package/dist/dashboard-web/chunks/sessions-page-F3U5NFPD.js +238 -0
  175. package/dist/dashboard-web/chunks/settings-page-OSBZNCXL.js +2 -0
  176. package/dist/dashboard-web/chunks/skills-page-Y3VUAOYG.js +2 -0
  177. package/dist/dashboard-web/chunks/team-federation-page-CRH3WZPH.js +10 -0
  178. package/dist/dashboard-web/chunks/v3-page-FVPUL665.js +149 -0
  179. package/dist/dashboard-web/chunks/whiteboards-page-HLCTYSSV.js +1 -0
  180. package/dist/dashboard-web/chunks/workflows-UB7OPYGI.js +184 -0
  181. package/dist/dashboard-web/index.html +1 -1
  182. package/dist/dashboard-web/style.css +82 -1
  183. package/dist/dashboard.js +5 -6
  184. package/dist/dashboard.js.map +1 -1
  185. package/dist/i18n/en.d.ts.map +1 -1
  186. package/dist/i18n/en.js +1 -0
  187. package/dist/i18n/en.js.map +1 -1
  188. package/dist/i18n/zh.d.ts.map +1 -1
  189. package/dist/i18n/zh.js +1 -0
  190. package/dist/i18n/zh.js.map +1 -1
  191. package/dist/im/lark/card-builder.d.ts.map +1 -1
  192. package/dist/im/lark/card-builder.js +1 -0
  193. package/dist/im/lark/card-builder.js.map +1 -1
  194. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  195. package/dist/im/lark/event-dispatcher.js +7 -0
  196. package/dist/im/lark/event-dispatcher.js.map +1 -1
  197. package/dist/im/lark/sessions-card.d.ts.map +1 -1
  198. package/dist/im/lark/sessions-card.js +4 -1
  199. package/dist/im/lark/sessions-card.js.map +1 -1
  200. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  201. package/dist/setup/bot-config-editor.js +16 -14
  202. package/dist/setup/bot-config-editor.js.map +1 -1
  203. package/dist/worker.js +1 -1
  204. package/dist/worker.js.map +1 -1
  205. package/package.json +8 -2
@@ -1,535 +1,2 @@
1
- import { escapeHtml, t } from './ui.js';
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"}