@wu529778790/open-im 1.9.3-beta.11 → 1.9.3-beta.12

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.
@@ -15,7 +15,7 @@ export declare const PAGE_TEXTS: {
15
15
  readonly mode: "Flow";
16
16
  readonly dashboardTitle: "Dashboard";
17
17
  readonly dashboardSubtitle: "Platform health status";
18
- readonly dashboardSubtitleFull: "Platform status and setup progress";
18
+ readonly dashboardSubtitleFull: "Platform and service status";
19
19
  readonly quickActionsTitle: "Quick Actions";
20
20
  readonly serviceTitle: "Service Control";
21
21
  readonly serviceHint: "Validate, save, start, and stop the local bridge from one place.";
@@ -47,7 +47,7 @@ export declare const PAGE_TEXTS: {
47
47
  readonly openImConfigCardHint: "Full open-im configuration. Use Format, then Save. Invalid JSON is rejected.";
48
48
  readonly claudeSettingsCardHint: "Claude SDK environment (ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL, ANTHROPIC_MODEL, etc.). Set API access here without shell exports.";
49
49
  readonly claudeJsonShortcutHint: "Edit ~/.claude/settings.json in the sidebar «Config files» section below.";
50
- readonly platformsHint: "Follow the setup checklist on Overview first. Disabled platforms still keep saved values.";
50
+ readonly platformsHint: "Disabled platforms keep their saved values.";
51
51
  readonly enabled: "Enabled";
52
52
  readonly readyState: "Ready";
53
53
  readonly setupRequired: "Setup required";
@@ -141,28 +141,10 @@ export declare const PAGE_TEXTS: {
141
141
  readonly saveBtn: "Save";
142
142
  readonly jsonValid: "Valid JSON";
143
143
  readonly jsonInvalid: "Invalid JSON: {error}";
144
- readonly wizardTitle: "First-time setup";
145
- readonly wizardStep1Title: "Connect an IM channel";
146
- readonly wizardStep1Desc: "Enable at least one platform below and fill every required field. Use Check config when available.";
147
- readonly wizardStep2Title: "Set the default AI tool";
148
- readonly wizardStep2Desc: "Claude SDK: edit ~/.claude/settings.json under sidebar Config files. Codex / CodeBuddy: set the CLI path in the AI section.";
149
- readonly wizardStep3Title: "Validate and save";
150
- readonly wizardStep3Desc: "Click Validate, then Save config. Fix any errors shown in the banner above.";
151
- readonly wizardStep4Title: "Start the bridge";
152
- readonly wizardStep4Desc: "Open Service and click Start bridge. If it exits, read ~/.open-im/logs.";
153
- readonly wizardStatusDone: "Done";
154
- readonly wizardStatusTodo: "To do";
155
- readonly wizardJumpPlatforms: "Open Platforms";
156
- readonly wizardJumpAi: "Open AI";
157
- readonly wizardJumpService: "Open Service";
158
144
  readonly validationNoPlatformEnabled: "Enable at least one IM platform and fill its required credentials before saving.";
159
145
  readonly validationPlatformIncomplete: "Platform \"{platform}\" is enabled but these required fields are empty: {fields}";
160
146
  readonly validationAiCodexNoCli: "Default AI is Codex but Codex CLI path is empty. Set it under AI Tooling or change the default tool.";
161
147
  readonly validationAiCodebuddyNoCli: "Default AI is CodeBuddy but CodeBuddy CLI path is empty. Set it under AI Tooling or change the default tool.";
162
- readonly onboardingTitle: "Welcome to open-im";
163
- readonly onboardingDismiss: "Got it";
164
- readonly onboardingReadme: "README (setup)";
165
- readonly onboardingBody: "<p><strong>open-im</strong> bridges Telegram, Feishu, QQ, WeWork, DingTalk, and WorkBuddy to Claude / Codex / CodeBuddy on your machine.</p><ol style=\"margin:12px 0 12px 18px;line-height:1.65\"><li>Pick <strong>one</strong> chat app in <strong>Platforms</strong> and paste credentials (see hints under each field).</li><li>Set the <strong>default AI</strong> under AI Tooling; for Claude SDK, put API keys in sidebar <strong>Config files</strong> → <strong>~/.claude/settings.json</strong>.</li><li>Edit <strong>~/.open-im/config.json</strong> in the same <strong>Config files</strong> section when you need raw JSON.</li><li>Use <strong>Validate</strong> then <strong>Save config</strong>, then <strong>Start bridge</strong> under Service.</li><li>CLI alternative: run <code style=\"background:var(--bg-tertiary);padding:2px 6px;border-radius:4px\">open-im init</code> in a terminal.</li></ol>";
166
148
  readonly tipTelegramToken: "From Telegram, open <a href=\"https://t.me/BotFather\" target=\"_blank\" rel=\"noopener\">@BotFather</a> → /newbot → copy the token.";
167
149
  readonly tipFeishuAppId: "Feishu Open Platform → your app → Credentials → App ID.";
168
150
  readonly tipFeishuSecret: "Same page → App Secret (click show / reset if needed).";
@@ -188,7 +170,7 @@ export declare const PAGE_TEXTS: {
188
170
  readonly mode: "模式";
189
171
  readonly dashboardTitle: "概览";
190
172
  readonly dashboardSubtitle: "平台健康状态";
191
- readonly dashboardSubtitleFull: "平台状态与接入进度";
173
+ readonly dashboardSubtitleFull: "平台与服务状态";
192
174
  readonly quickActionsTitle: "快捷操作";
193
175
  readonly refreshHealth: "刷新健康状态";
194
176
  readonly viewConfig: "查看配置";
@@ -218,7 +200,7 @@ export declare const PAGE_TEXTS: {
218
200
  readonly openImConfigCardHint: "open-im 完整配置。先格式化再保存;JSON 不合法时无法写入。";
219
201
  readonly claudeSettingsCardHint: "Claude SDK 环境变量(ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL、ANTHROPIC_MODEL 等)。在此配置 API,无需在终端 export。";
220
202
  readonly claudeJsonShortcutHint: "提示:请在左侧栏「配置文件」分区编辑 ~/.claude/settings.json。";
221
- readonly platformsHint: "建议先在概览页按引导步骤操作。禁用的平台仍保留已保存的值。";
203
+ readonly platformsHint: "禁用的平台仍保留已保存的值。";
222
204
  readonly enabled: "启用";
223
205
  readonly readyState: "已就绪";
224
206
  readonly setupRequired: "需要完成配置";
@@ -308,28 +290,10 @@ export declare const PAGE_TEXTS: {
308
290
  readonly saveBtn: "保存";
309
291
  readonly jsonValid: "JSON 有效";
310
292
  readonly jsonInvalid: "JSON 无效:{error}";
311
- readonly wizardTitle: "首次使用引导";
312
- readonly wizardStep1Title: "接入一个 IM 渠道";
313
- readonly wizardStep1Desc: "在下方启用至少一个平台,并填写所有必填项。有条件时用「校验配置」测试凭证。";
314
- readonly wizardStep2Title: "设置默认 AI 工具";
315
- readonly wizardStep2Desc: "Claude SDK:在左侧栏「配置文件」编辑 ~/.claude/settings.json。Codex / CodeBuddy:在 AI 区填 CLI 路径。";
316
- readonly wizardStep3Title: "校验并保存";
317
- readonly wizardStep3Desc: "先点「校验」,再点「保存配置」。按顶部提示修复错误。";
318
- readonly wizardStep4Title: "启动桥接";
319
- readonly wizardStep4Desc: "到「服务」区点「启动桥接」。若马上退出,查 ~/.open-im/logs 日志。";
320
- readonly wizardStatusDone: "已完成";
321
- readonly wizardStatusTodo: "待完成";
322
- readonly wizardJumpPlatforms: "打开平台配置";
323
- readonly wizardJumpAi: "打开 AI 配置";
324
- readonly wizardJumpService: "打开服务控制";
325
293
  readonly validationNoPlatformEnabled: "保存前请至少启用一个 IM 平台,并填完必填凭证。";
326
294
  readonly validationPlatformIncomplete: "平台「{platform}」已启用,但以下必填项为空:{fields}";
327
295
  readonly validationAiCodexNoCli: "默认 AI 为 Codex,但 Codex CLI 路径为空。请在 AI 区填写,或改默认工具。";
328
296
  readonly validationAiCodebuddyNoCli: "默认 AI 为 CodeBuddy,但 CodeBuddy CLI 路径为空。请在 AI 区填写,或改默认工具。";
329
- readonly onboardingTitle: "欢迎使用 open-im";
330
- readonly onboardingDismiss: "知道了";
331
- readonly onboardingReadme: "README(部署说明)";
332
- readonly onboardingBody: "<p><strong>open-im</strong> 在本机把 Telegram、飞书、QQ、企微、钉钉、WorkBuddy 等渠道连到 Claude / Codex / CodeBuddy。</p><ol style=\"margin:12px 0 12px 18px;line-height:1.65\"><li>在<strong>平台配置</strong>选一个聊天应用,按字段下方提示填凭证。</li><li>在<strong>AI 工具配置</strong>设默认 AI;用 Claude SDK 时在左侧<strong>配置文件</strong>分区编辑<strong>~/.claude/settings.json</strong>。</li><li>同一<strong>配置文件</strong>分区可编辑<strong>~/.open-im/config.json</strong>。</li><li>先<strong>校验</strong>再<strong>保存配置</strong>,然后到<strong>服务</strong>启动桥接。</li><li>也可在终端运行 <code style=\"background:var(--bg-tertiary);padding:2px 6px;border-radius:4px\">open-im init</code> 交互配置。</li></ol>";
333
297
  readonly tipTelegramToken: "在 Telegram 搜 <a href=\"https://t.me/BotFather\" target=\"_blank\" rel=\"noopener\">@BotFather</a>,发 /newbot 创建机器人后复制 Token。";
334
298
  readonly tipFeishuAppId: "飞书开放平台 → 应用 → 凭证与基础信息 → App ID。";
335
299
  readonly tipFeishuSecret: "同一页 App Secret(可重置后查看)。";
@@ -15,7 +15,7 @@ export const PAGE_TEXTS = {
15
15
  mode: "Flow",
16
16
  dashboardTitle: "Dashboard",
17
17
  dashboardSubtitle: "Platform health status",
18
- dashboardSubtitleFull: "Platform status and setup progress",
18
+ dashboardSubtitleFull: "Platform and service status",
19
19
  quickActionsTitle: "Quick Actions",
20
20
  serviceTitle: "Service Control",
21
21
  serviceHint: "Validate, save, start, and stop the local bridge from one place.",
@@ -47,7 +47,7 @@ export const PAGE_TEXTS = {
47
47
  openImConfigCardHint: "Full open-im configuration. Use Format, then Save. Invalid JSON is rejected.",
48
48
  claudeSettingsCardHint: "Claude SDK environment (ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL, ANTHROPIC_MODEL, etc.). Set API access here without shell exports.",
49
49
  claudeJsonShortcutHint: "Edit ~/.claude/settings.json in the sidebar «Config files» section below.",
50
- platformsHint: "Follow the setup checklist on Overview first. Disabled platforms still keep saved values.",
50
+ platformsHint: "Disabled platforms keep their saved values.",
51
51
  enabled: "Enabled",
52
52
  readyState: "Ready",
53
53
  setupRequired: "Setup required",
@@ -141,28 +141,10 @@ export const PAGE_TEXTS = {
141
141
  saveBtn: "Save",
142
142
  jsonValid: "Valid JSON",
143
143
  jsonInvalid: "Invalid JSON: {error}",
144
- wizardTitle: "First-time setup",
145
- wizardStep1Title: "Connect an IM channel",
146
- wizardStep1Desc: "Enable at least one platform below and fill every required field. Use Check config when available.",
147
- wizardStep2Title: "Set the default AI tool",
148
- wizardStep2Desc: "Claude SDK: edit ~/.claude/settings.json under sidebar Config files. Codex / CodeBuddy: set the CLI path in the AI section.",
149
- wizardStep3Title: "Validate and save",
150
- wizardStep3Desc: "Click Validate, then Save config. Fix any errors shown in the banner above.",
151
- wizardStep4Title: "Start the bridge",
152
- wizardStep4Desc: "Open Service and click Start bridge. If it exits, read ~/.open-im/logs.",
153
- wizardStatusDone: "Done",
154
- wizardStatusTodo: "To do",
155
- wizardJumpPlatforms: "Open Platforms",
156
- wizardJumpAi: "Open AI",
157
- wizardJumpService: "Open Service",
158
144
  validationNoPlatformEnabled: "Enable at least one IM platform and fill its required credentials before saving.",
159
145
  validationPlatformIncomplete: "Platform \"{platform}\" is enabled but these required fields are empty: {fields}",
160
146
  validationAiCodexNoCli: "Default AI is Codex but Codex CLI path is empty. Set it under AI Tooling or change the default tool.",
161
147
  validationAiCodebuddyNoCli: "Default AI is CodeBuddy but CodeBuddy CLI path is empty. Set it under AI Tooling or change the default tool.",
162
- onboardingTitle: "Welcome to open-im",
163
- onboardingDismiss: "Got it",
164
- onboardingReadme: "README (setup)",
165
- onboardingBody: "<p><strong>open-im</strong> bridges Telegram, Feishu, QQ, WeWork, DingTalk, and WorkBuddy to Claude / Codex / CodeBuddy on your machine.</p><ol style=\"margin:12px 0 12px 18px;line-height:1.65\"><li>Pick <strong>one</strong> chat app in <strong>Platforms</strong> and paste credentials (see hints under each field).</li><li>Set the <strong>default AI</strong> under AI Tooling; for Claude SDK, put API keys in sidebar <strong>Config files</strong> → <strong>~/.claude/settings.json</strong>.</li><li>Edit <strong>~/.open-im/config.json</strong> in the same <strong>Config files</strong> section when you need raw JSON.</li><li>Use <strong>Validate</strong> then <strong>Save config</strong>, then <strong>Start bridge</strong> under Service.</li><li>CLI alternative: run <code style=\"background:var(--bg-tertiary);padding:2px 6px;border-radius:4px\">open-im init</code> in a terminal.</li></ol>",
166
148
  tipTelegramToken: 'From Telegram, open <a href="https://t.me/BotFather" target="_blank" rel="noopener">@BotFather</a> → /newbot → copy the token.',
167
149
  tipFeishuAppId: "Feishu Open Platform → your app → Credentials → App ID.",
168
150
  tipFeishuSecret: "Same page → App Secret (click show / reset if needed).",
@@ -188,7 +170,7 @@ export const PAGE_TEXTS = {
188
170
  mode: "\u6a21\u5f0f",
189
171
  dashboardTitle: "\u6982\u89c8",
190
172
  dashboardSubtitle: "\u5e73\u53f0\u5065\u5eb7\u72b6\u6001",
191
- dashboardSubtitleFull: "\u5e73\u53f0\u72b6\u6001\u4e0e\u63a5\u5165\u8fdb\u5ea6",
173
+ dashboardSubtitleFull: "\u5e73\u53f0\u4e0e\u670d\u52a1\u72b6\u6001",
192
174
  quickActionsTitle: "\u5feb\u6377\u64cd\u4f5c",
193
175
  refreshHealth: "\u5237\u65b0\u5065\u5eb7\u72b6\u6001",
194
176
  viewConfig: "\u67e5\u770b\u914d\u7f6e",
@@ -218,7 +200,7 @@ export const PAGE_TEXTS = {
218
200
  openImConfigCardHint: "open-im \u5b8c\u6574\u914d\u7f6e\u3002\u5148\u683c\u5f0f\u5316\u518d\u4fdd\u5b58\uff1bJSON \u4e0d\u5408\u6cd5\u65f6\u65e0\u6cd5\u5199\u5165\u3002",
219
201
  claudeSettingsCardHint: "Claude SDK \u73af\u5883\u53d8\u91cf\uff08ANTHROPIC_API_KEY\u3001ANTHROPIC_BASE_URL\u3001ANTHROPIC_MODEL \u7b49\uff09\u3002\u5728\u6b64\u914d\u7f6e API\uff0c\u65e0\u9700\u5728\u7ec8\u7aef export\u3002",
220
202
  claudeJsonShortcutHint: "\u63d0\u793a\uff1a\u8bf7\u5728\u5de6\u4fa7\u680f\u300c\u914d\u7f6e\u6587\u4ef6\u300d\u5206\u533a\u7f16\u8f91 ~/.claude/settings.json\u3002",
221
- platformsHint: "\u5efa\u8bae\u5148\u5728\u6982\u89c8\u9875\u6309\u5f15\u5bfc\u6b65\u9aa4\u64cd\u4f5c\u3002\u7981\u7528\u7684\u5e73\u53f0\u4ecd\u4fdd\u7559\u5df2\u4fdd\u5b58\u7684\u503c\u3002",
203
+ platformsHint: "\u7981\u7528\u7684\u5e73\u53f0\u4ecd\u4fdd\u7559\u5df2\u4fdd\u5b58\u7684\u503c\u3002",
222
204
  enabled: "\u542f\u7528",
223
205
  readyState: "\u5df2\u5c31\u7eea",
224
206
  setupRequired: "\u9700\u8981\u5b8c\u6210\u914d\u7f6e",
@@ -308,28 +290,10 @@ export const PAGE_TEXTS = {
308
290
  saveBtn: "\u4fdd\u5b58",
309
291
  jsonValid: "JSON \u6709\u6548",
310
292
  jsonInvalid: "JSON \u65e0\u6548\uff1a{error}",
311
- wizardTitle: "\u9996\u6b21\u4f7f\u7528\u5f15\u5bfc",
312
- wizardStep1Title: "\u63a5\u5165\u4e00\u4e2a IM \u6e20\u9053",
313
- wizardStep1Desc: "\u5728\u4e0b\u65b9\u542f\u7528\u81f3\u5c11\u4e00\u4e2a\u5e73\u53f0\uff0c\u5e76\u586b\u5199\u6240\u6709\u5fc5\u586b\u9879\u3002\u6709\u6761\u4ef6\u65f6\u7528\u300c\u6821\u9a8c\u914d\u7f6e\u300d\u6d4b\u8bd5\u51ed\u8bc1\u3002",
314
- wizardStep2Title: "\u8bbe\u7f6e\u9ed8\u8ba4 AI \u5de5\u5177",
315
- wizardStep2Desc: "Claude SDK\uff1a\u5728\u5de6\u4fa7\u680f\u300c\u914d\u7f6e\u6587\u4ef6\u300d\u7f16\u8f91 ~/.claude/settings.json\u3002Codex / CodeBuddy\uff1a\u5728 AI \u533a\u586b CLI \u8def\u5f84\u3002",
316
- wizardStep3Title: "\u6821\u9a8c\u5e76\u4fdd\u5b58",
317
- wizardStep3Desc: "\u5148\u70b9\u300c\u6821\u9a8c\u300d\uff0c\u518d\u70b9\u300c\u4fdd\u5b58\u914d\u7f6e\u300d\u3002\u6309\u9876\u90e8\u63d0\u793a\u4fee\u590d\u9519\u8bef\u3002",
318
- wizardStep4Title: "\u542f\u52a8\u6865\u63a5",
319
- wizardStep4Desc: "\u5230\u300c\u670d\u52a1\u300d\u533a\u70b9\u300c\u542f\u52a8\u6865\u63a5\u300d\u3002\u82e5\u9a6c\u4e0a\u9000\u51fa\uff0c\u67e5 ~/.open-im/logs \u65e5\u5fd7\u3002",
320
- wizardStatusDone: "\u5df2\u5b8c\u6210",
321
- wizardStatusTodo: "\u5f85\u5b8c\u6210",
322
- wizardJumpPlatforms: "\u6253\u5f00\u5e73\u53f0\u914d\u7f6e",
323
- wizardJumpAi: "\u6253\u5f00 AI \u914d\u7f6e",
324
- wizardJumpService: "\u6253\u5f00\u670d\u52a1\u63a7\u5236",
325
293
  validationNoPlatformEnabled: "\u4fdd\u5b58\u524d\u8bf7\u81f3\u5c11\u542f\u7528\u4e00\u4e2a IM \u5e73\u53f0\uff0c\u5e76\u586b\u5b8c\u5fc5\u586b\u51ed\u8bc1\u3002",
326
294
  validationPlatformIncomplete: "\u5e73\u53f0\u300c{platform}\u300d\u5df2\u542f\u7528\uff0c\u4f46\u4ee5\u4e0b\u5fc5\u586b\u9879\u4e3a\u7a7a\uff1a{fields}",
327
295
  validationAiCodexNoCli: "\u9ed8\u8ba4 AI \u4e3a Codex\uff0c\u4f46 Codex CLI \u8def\u5f84\u4e3a\u7a7a\u3002\u8bf7\u5728 AI \u533a\u586b\u5199\uff0c\u6216\u6539\u9ed8\u8ba4\u5de5\u5177\u3002",
328
296
  validationAiCodebuddyNoCli: "\u9ed8\u8ba4 AI \u4e3a CodeBuddy\uff0c\u4f46 CodeBuddy CLI \u8def\u5f84\u4e3a\u7a7a\u3002\u8bf7\u5728 AI \u533a\u586b\u5199\uff0c\u6216\u6539\u9ed8\u8ba4\u5de5\u5177\u3002",
329
- onboardingTitle: "\u6b22\u8fce\u4f7f\u7528 open-im",
330
- onboardingDismiss: "\u77e5\u9053\u4e86",
331
- onboardingReadme: "README\uff08\u90e8\u7f72\u8bf4\u660e\uff09",
332
- onboardingBody: "<p><strong>open-im</strong> \u5728\u672c\u673a\u628a Telegram\u3001\u98de\u4e66\u3001QQ\u3001\u4f01\u5fae\u3001\u9489\u9489\u3001WorkBuddy \u7b49\u6e20\u9053\u8fde\u5230 Claude / Codex / CodeBuddy\u3002</p><ol style=\"margin:12px 0 12px 18px;line-height:1.65\"><li>\u5728<strong>\u5e73\u53f0\u914d\u7f6e</strong>\u9009\u4e00\u4e2a\u804a\u5929\u5e94\u7528\uff0c\u6309\u5b57\u6bb5\u4e0b\u65b9\u63d0\u793a\u586b\u51ed\u8bc1\u3002</li><li>\u5728<strong>AI \u5de5\u5177\u914d\u7f6e</strong>\u8bbe\u9ed8\u8ba4 AI\uff1b\u7528 Claude SDK \u65f6\u5728\u5de6\u4fa7<strong>\u914d\u7f6e\u6587\u4ef6</strong>\u5206\u533a\u7f16\u8f91<strong>~/.claude/settings.json</strong>\u3002</li><li>\u540c\u4e00<strong>\u914d\u7f6e\u6587\u4ef6</strong>\u5206\u533a\u53ef\u7f16\u8f91<strong>~/.open-im/config.json</strong>\u3002</li><li>\u5148<strong>\u6821\u9a8c</strong>\u518d<strong>\u4fdd\u5b58\u914d\u7f6e</strong>\uff0c\u7136\u540e\u5230<strong>\u670d\u52a1</strong>\u542f\u52a8\u6865\u63a5\u3002</li><li>\u4e5f\u53ef\u5728\u7ec8\u7aef\u8fd0\u884c <code style=\"background:var(--bg-tertiary);padding:2px 6px;border-radius:4px\">open-im init</code> \u4ea4\u4e92\u914d\u7f6e\u3002</li></ol>",
333
297
  tipTelegramToken: '\u5728 Telegram \u641c <a href="https://t.me/BotFather" target="_blank" rel="noopener">@BotFather</a>\uff0c\u53d1 /newbot \u521b\u5efa\u673a\u5668\u4eba\u540e\u590d\u5236 Token\u3002',
334
298
  tipFeishuAppId: "\u98de\u4e66\u5f00\u653e\u5e73\u53f0 \u2192 \u5e94\u7528 \u2192 \u51ed\u8bc1\u4e0e\u57fa\u7840\u4fe1\u606f \u2192 App ID\u3002",
335
299
  tipFeishuSecret: "\u540c\u4e00\u9875 App Secret\uff08\u53ef\u91cd\u7f6e\u540e\u67e5\u770b\uff09\u3002",
@@ -10,8 +10,6 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
10
10
  const aiTools = ["claude", "codex", "codebuddy"];
11
11
  const STORAGE_KEY_LANG = "open-im-web-lang";
12
12
  const STORAGE_KEY_DARK_MODE = "open-im-web-dark-mode";
13
- const STORAGE_KEY_ONBOARDING = "open-im-dashboard-onboarding-v1";
14
- const STORAGE_KEY_SAVED_SESSION = "open-im-setup-saved-session";
15
13
  const POLLING_INTERVAL = 10000;
16
14
  const toolLabels = { claude: "Claude", codex: "Codex", codebuddy: "CodeBuddy" };
17
15
 
@@ -156,7 +154,6 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
156
154
  const LANGUAGE_UPDATES = {
157
155
  simpleText: [
158
156
  { id: "mainTitle", key: "dashboardTitle" },
159
- { id: "mainSubtitle", key: "dashboardSubtitleFull" },
160
157
  { id: "navOverviewText", key: "dashboardTitle" },
161
158
  { id: "navPlatformsText", key: "platformsTitle" },
162
159
  { id: "navConfigFilesText", key: "navConfigFiles" },
@@ -185,22 +182,6 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
185
182
  { id: "resetJsonButtonText", key: "resetJson" },
186
183
  { id: "saveClaudeSettingsBtnText", key: "saveBtn" },
187
184
  { id: "saveOpenImConfigBtnText", key: "saveBtn" },
188
- { id: "wizardTitle", key: "wizardTitle" },
189
- { id: "wizardStep1Title", key: "wizardStep1Title" },
190
- { id: "wizardStep1Desc", key: "wizardStep1Desc" },
191
- { id: "wizardStep2Title", key: "wizardStep2Title" },
192
- { id: "wizardStep2Desc", key: "wizardStep2Desc" },
193
- { id: "wizardStep3Title", key: "wizardStep3Title" },
194
- { id: "wizardStep3Desc", key: "wizardStep3Desc" },
195
- { id: "wizardStep4Title", key: "wizardStep4Title" },
196
- { id: "wizardStep4Desc", key: "wizardStep4Desc" },
197
- { id: "wizardJumpPlatforms", key: "wizardJumpPlatforms" },
198
- { id: "wizardJumpAi", key: "wizardJumpAi" },
199
- { id: "wizardJumpService", key: "wizardJumpService" },
200
- { id: "wizardJumpService2", key: "wizardJumpService" },
201
- { id: "onboardingTitle", key: "onboardingTitle" },
202
- { id: "onboardingDismiss", key: "onboardingDismiss" },
203
- { id: "onboardingReadme", key: "onboardingReadme" },
204
185
  ],
205
186
  platformLabels: {
206
187
  enabled: { suffix: "-label", key: "enabled" },
@@ -328,9 +309,6 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
328
309
  if (tipEl) tipEl.innerHTML = t(tipKey);
329
310
  });
330
311
 
331
- const onboardBody = el("onboardingBody");
332
- if (onboardBody) onboardBody.innerHTML = t("onboardingBody");
333
-
334
312
  // AI labels
335
313
  LANGUAGE_UPDATES.aiLabels.forEach(({ id, key }) => {
336
314
  const label = el(id + "-label");
@@ -360,14 +338,6 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
360
338
 
361
339
  const headerToolbar = el("headerToolbar");
362
340
  if (headerToolbar) headerToolbar.setAttribute("aria-label", t("headerToolbarAria"));
363
-
364
- const readmeLink = el("onboardingReadmeLink");
365
- if (readmeLink && readmeLink instanceof HTMLAnchorElement) {
366
- readmeLink.href = isZh
367
- ? "https://github.com/wu529778790/open-im/blob/main/README.zh-CN.md"
368
- : "https://github.com/wu529778790/open-im/blob/main/README.md";
369
- }
370
- updateSetupWizard();
371
341
  }
372
342
 
373
343
  // AI tool switcher
@@ -399,34 +369,6 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
399
369
  const liveSummary = el("liveSummary");
400
370
  if (liveSummary) liveSummary.textContent = summary;
401
371
  updateAiToolVisibility();
402
- updateSetupWizard();
403
- }
404
-
405
- function hasReadyPlatform() {
406
- return platformDefinitions.some((platform) => {
407
- if (!getChecked(platform.key + "-enabled")) return false;
408
- return platform.requiredFields.every((field) => getValue(platform.key + "-" + field).trim().length > 0);
409
- });
410
- }
411
-
412
- function aiStepComplete() {
413
- const cmd = getValue("ai-aiCommand");
414
- if (cmd === "codex") return getValue("ai-codexCliPath").trim().length > 0;
415
- if (cmd === "codebuddy") return getValue("ai-codebuddyCliPath").trim().length > 0;
416
- return true;
417
- }
418
-
419
- function updateSetupWizard() {
420
- const s1 = hasReadyPlatform();
421
- const s2 = aiStepComplete();
422
- const s3 = sessionStorage.getItem(STORAGE_KEY_SAVED_SESSION) === "1";
423
- const s4 = Boolean(lastHealthPayload && lastHealthPayload.serviceStatus && lastHealthPayload.serviceStatus.running);
424
- const done = [s1, s2, s3, s4];
425
- for (let i = 0; i < 4; i += 1) {
426
- const step = el("wizard-step-" + (i + 1));
427
- if (step) step.classList.toggle("wizard-step--done", done[i]);
428
- setText("wizardStep" + (i + 1) + "Status", done[i] ? t("wizardStatusDone") : t("wizardStatusTodo"));
429
- }
430
372
  }
431
373
 
432
374
  function collectClientValidationErrors() {
@@ -515,7 +457,6 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
515
457
  el("statServiceValue").textContent = serviceStatus.running ? t("serviceRunningShort") : t("serviceIdleShort");
516
458
 
517
459
  lastHealthPayload = data;
518
- updateSetupWizard();
519
460
 
520
461
  return data;
521
462
  } catch (error) {
@@ -801,26 +742,6 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
801
742
  el("navAiBtn").onclick = () => scrollToSection("aiSection", "navAiBtn");
802
743
  el("navServiceBtn").onclick = () => scrollToSection("serviceSection", "navServiceBtn");
803
744
 
804
- document.querySelectorAll(".wizard-jump").forEach((jumpBtn) => {
805
- jumpBtn.addEventListener("click", () => {
806
- const sec = jumpBtn.getAttribute("data-section");
807
- const nav = jumpBtn.getAttribute("data-nav");
808
- if (sec && nav) scrollToSection(sec, nav);
809
- });
810
- });
811
-
812
- const onboardBackdrop = el("onboardingBackdrop");
813
- const onboardDismiss = el("onboardingDismiss");
814
- if (onboardBackdrop && onboardDismiss) {
815
- if (!localStorage.getItem(STORAGE_KEY_ONBOARDING)) {
816
- onboardBackdrop.classList.remove("hidden");
817
- }
818
- onboardDismiss.onclick = () => {
819
- localStorage.setItem(STORAGE_KEY_ONBOARDING, "1");
820
- onboardBackdrop.classList.add("hidden");
821
- };
822
- }
823
-
824
745
  // Language toggle
825
746
  el("langButton").onclick = () => {
826
747
  currentLang = currentLang === "zh" ? "en" : "zh";
@@ -886,9 +807,7 @@ export const PAGE_SCRIPT = String.raw ` const platformDefinitions = [
886
807
  await saveOpenImConfig();
887
808
  // Then save form data
888
809
  await request("/api/config/save?final=1", { method: "POST", body: JSON.stringify(payload()) });
889
- sessionStorage.setItem(STORAGE_KEY_SAVED_SESSION, "1");
890
810
  setMessage(t("saveOk"), "success");
891
- updateSetupWizard();
892
811
  } catch (error) {
893
812
  setMessage(error.message || String(error), "error");
894
813
  } finally {
@@ -250,12 +250,6 @@ export const PAGE_HTML_PREFIX = String.raw `<!doctype html>
250
250
  color: var(--text-primary);
251
251
  }
252
252
 
253
- .main-subtitle {
254
- font-size: 13px;
255
- color: var(--text-secondary);
256
- margin-top: 2px;
257
- }
258
-
259
253
  .header-actions {
260
254
  display: flex;
261
255
  gap: 12px;
@@ -383,88 +377,6 @@ export const PAGE_HTML_PREFIX = String.raw `<!doctype html>
383
377
  line-height: 1;
384
378
  }
385
379
 
386
- /* Setup wizard (overview) */
387
- .setup-wizard-card {
388
- background: var(--bg-card);
389
- border: 1px solid var(--border-subtle);
390
- border-radius: var(--radius-lg);
391
- padding: 20px 24px;
392
- margin-bottom: 24px;
393
- box-shadow: var(--shadow-sm);
394
- }
395
- .setup-wizard-card h2 {
396
- margin: 0 0 16px;
397
- font-size: 16px;
398
- font-weight: 600;
399
- color: var(--text-primary);
400
- }
401
- .wizard-steps {
402
- display: grid;
403
- gap: 12px;
404
- }
405
- @media (min-width: 900px) {
406
- .wizard-steps {
407
- grid-template-columns: repeat(2, 1fr);
408
- }
409
- }
410
- .wizard-step {
411
- display: flex;
412
- gap: 14px;
413
- align-items: flex-start;
414
- padding: 14px 16px;
415
- border-radius: var(--radius-md);
416
- border: 1px solid var(--border-subtle);
417
- background: var(--bg-secondary);
418
- transition: border-color var(--transition-fast), background var(--transition-fast);
419
- }
420
- .wizard-step--done {
421
- border-color: var(--success-border);
422
- background: var(--success-bg);
423
- }
424
- .wizard-step-badge {
425
- flex-shrink: 0;
426
- width: 28px;
427
- height: 28px;
428
- border-radius: 999px;
429
- display: flex;
430
- align-items: center;
431
- justify-content: center;
432
- font-size: 13px;
433
- font-weight: 700;
434
- background: var(--bg-tertiary);
435
- color: var(--text-secondary);
436
- }
437
- .wizard-step--done .wizard-step-badge {
438
- background: var(--success-text);
439
- color: #fff;
440
- }
441
- .wizard-step-body {
442
- flex: 1;
443
- min-width: 0;
444
- }
445
- .wizard-step-title {
446
- font-weight: 600;
447
- font-size: 14px;
448
- color: var(--text-primary);
449
- margin-bottom: 4px;
450
- }
451
- .wizard-step-desc {
452
- font-size: 13px;
453
- color: var(--text-secondary);
454
- line-height: 1.5;
455
- margin-bottom: 8px;
456
- }
457
- .wizard-step-status {
458
- font-size: 11px;
459
- font-weight: 600;
460
- text-transform: uppercase;
461
- letter-spacing: 0.04em;
462
- margin-bottom: 6px;
463
- color: var(--text-tertiary);
464
- }
465
- .wizard-step--done .wizard-step-status {
466
- color: var(--success-text);
467
- }
468
380
  .field-inline-tip {
469
381
  font-size: 12px;
470
382
  color: var(--text-tertiary);
@@ -481,51 +393,6 @@ export const PAGE_HTML_PREFIX = String.raw `<!doctype html>
481
393
  border-radius: var(--radius-xs);
482
394
  }
483
395
 
484
- /* First-visit onboarding */
485
- .onboarding-backdrop {
486
- position: fixed;
487
- inset: 0;
488
- background: rgba(15, 23, 42, 0.45);
489
- z-index: 100;
490
- display: flex;
491
- align-items: center;
492
- justify-content: center;
493
- padding: 24px;
494
- }
495
- .onboarding-backdrop.hidden {
496
- display: none;
497
- }
498
- .onboarding-card {
499
- background: var(--bg-card);
500
- color: var(--text-primary);
501
- border-radius: var(--radius-xl);
502
- max-width: 520px;
503
- width: 100%;
504
- padding: 28px 28px 24px;
505
- box-shadow: var(--shadow-lg);
506
- border: 1px solid var(--border-subtle);
507
- }
508
- .onboarding-card h2 {
509
- margin: 0 0 12px;
510
- font-size: 20px;
511
- font-weight: 700;
512
- }
513
- .onboarding-card .onboarding-body {
514
- font-size: 14px;
515
- color: var(--text-secondary);
516
- line-height: 1.55;
517
- }
518
- .onboarding-card .onboarding-body p {
519
- margin: 0 0 8px;
520
- }
521
- .onboarding-actions {
522
- display: flex;
523
- flex-wrap: wrap;
524
- gap: 10px;
525
- margin-top: 20px;
526
- align-items: center;
527
- }
528
-
529
396
  .config-files-stack {
530
397
  display: flex;
531
398
  flex-direction: column;
@@ -983,7 +850,6 @@ export const PAGE_HTML_PREFIX = String.raw `<!doctype html>
983
850
  <div class="main-header-top">
984
851
  <div>
985
852
  <h1 class="main-title" id="mainTitle">Dashboard</h1>
986
- <p class="main-subtitle" id="mainSubtitle">Platform status and setup progress</p>
987
853
  </div>
988
854
  <div class="header-actions">
989
855
  <a href="https://github.com/wu529778790/open-im" target="_blank" class="btn btn-ghost btn-sm">
@@ -1040,48 +906,6 @@ export const PAGE_HTML_PREFIX = String.raw `<!doctype html>
1040
906
  <div class="stat-value" id="statServiceValue">Idle</div>
1041
907
  </div>
1042
908
  </div>
1043
-
1044
- <div class="setup-wizard-card">
1045
- <h2 id="wizardTitle">First-time setup</h2>
1046
- <div class="wizard-steps" id="wizardSteps">
1047
- <div class="wizard-step" id="wizard-step-1">
1048
- <div class="wizard-step-badge">1</div>
1049
- <div class="wizard-step-body">
1050
- <div class="wizard-step-status" id="wizardStep1Status">To do</div>
1051
- <div class="wizard-step-title" id="wizardStep1Title">Connect an IM channel</div>
1052
- <div class="wizard-step-desc" id="wizardStep1Desc"></div>
1053
- <button type="button" class="btn btn-secondary btn-sm wizard-jump" data-section="configSection" data-nav="navPlatformsBtn" id="wizardJumpPlatforms">Open Platforms</button>
1054
- </div>
1055
- </div>
1056
- <div class="wizard-step" id="wizard-step-2">
1057
- <div class="wizard-step-badge">2</div>
1058
- <div class="wizard-step-body">
1059
- <div class="wizard-step-status" id="wizardStep2Status">To do</div>
1060
- <div class="wizard-step-title" id="wizardStep2Title">Set the default AI tool</div>
1061
- <div class="wizard-step-desc" id="wizardStep2Desc"></div>
1062
- <button type="button" class="btn btn-secondary btn-sm wizard-jump" data-section="aiSection" data-nav="navAiBtn" id="wizardJumpAi">Open AI</button>
1063
- </div>
1064
- </div>
1065
- <div class="wizard-step" id="wizard-step-3">
1066
- <div class="wizard-step-badge">3</div>
1067
- <div class="wizard-step-body">
1068
- <div class="wizard-step-status" id="wizardStep3Status">To do</div>
1069
- <div class="wizard-step-title" id="wizardStep3Title">Validate and save</div>
1070
- <div class="wizard-step-desc" id="wizardStep3Desc"></div>
1071
- <button type="button" class="btn btn-secondary btn-sm wizard-jump" data-section="serviceSection" data-nav="navServiceBtn" id="wizardJumpService">Open Service</button>
1072
- </div>
1073
- </div>
1074
- <div class="wizard-step" id="wizard-step-4">
1075
- <div class="wizard-step-badge">4</div>
1076
- <div class="wizard-step-body">
1077
- <div class="wizard-step-status" id="wizardStep4Status">To do</div>
1078
- <div class="wizard-step-title" id="wizardStep4Title">Start the bridge</div>
1079
- <div class="wizard-step-desc" id="wizardStep4Desc"></div>
1080
- <button type="button" class="btn btn-secondary btn-sm wizard-jump" data-section="serviceSection" data-nav="navServiceBtn" id="wizardJumpService2">Open Service</button>
1081
- </div>
1082
- </div>
1083
- </div>
1084
- </div>
1085
909
  </section>
1086
910
 
1087
911
  <!-- Platforms Section -->
@@ -1527,17 +1351,6 @@ export const PAGE_HTML_PREFIX = String.raw `<!doctype html>
1527
1351
  </div>
1528
1352
  </section>
1529
1353
 
1530
- <div id="onboardingBackdrop" class="onboarding-backdrop hidden" role="dialog" aria-modal="true" aria-labelledby="onboardingTitle">
1531
- <div class="onboarding-card">
1532
- <h2 id="onboardingTitle">Welcome</h2>
1533
- <div id="onboardingBody" class="onboarding-body"></div>
1534
- <div class="onboarding-actions">
1535
- <button type="button" class="btn btn-primary" id="onboardingDismiss">Got it</button>
1536
- <a href="https://github.com/wu529778790/open-im/blob/main/README.zh-CN.md" target="_blank" rel="noopener" class="btn btn-ghost" id="onboardingReadmeLink"><span id="onboardingReadme">README</span></a>
1537
- </div>
1538
- </div>
1539
- </div>
1540
-
1541
1354
  </div>
1542
1355
  </main>
1543
1356
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wu529778790/open-im",
3
- "version": "1.9.3-beta.11",
3
+ "version": "1.9.3-beta.12",
4
4
  "description": "Multi-platform IM bridge for AI CLI tools (Claude, Codex, CodeBuddy)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",