@qingchencloud/openclaw-zh 2026.1.29-zh.20260130 → 2026.1.30-zh.1

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.
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" type="image/svg+xml" href="./favicon.svg" />
9
9
  <link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
10
10
  <link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png" />
11
- <script type="module" crossorigin src="./assets/index-DFDgq9AK.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-CNKLKKXX.js"></script>
12
12
  <link rel="stylesheet" crossorigin href="./assets/index-BKPyesll.css">
13
13
  </head>
14
14
  <body>
@@ -22,27 +22,27 @@ export function parseCommand(input) {
22
22
  export function getSlashCommands(options = {}) {
23
23
  const thinkLevels = listThinkingLevelLabels(options.provider, options.model);
24
24
  const commands = [
25
- { name: "help", description: "Show slash command help" },
26
- { name: "status", description: "Show gateway status summary" },
27
- { name: "agent", description: "Switch agent (or open picker)" },
28
- { name: "agents", description: "Open agent picker" },
29
- { name: "session", description: "Switch session (or open picker)" },
30
- { name: "sessions", description: "Open session picker" },
25
+ { name: "help", description: "显示斜杠命令帮助" },
26
+ { name: "status", description: "显示网关状态摘要" },
27
+ { name: "agent", description: "切换 Agent(或打开选择器)" },
28
+ { name: "agents", description: "打开 Agent 选择器" },
29
+ { name: "session", description: "切换会话(或打开选择器)" },
30
+ { name: "sessions", description: "打开会话选择器" },
31
31
  {
32
32
  name: "model",
33
- description: "Set model (or open picker)",
33
+ description: "设置模型(或打开选择器)",
34
34
  },
35
- { name: "models", description: "Open model picker" },
35
+ { name: "models", description: "打开模型选择器" },
36
36
  {
37
37
  name: "think",
38
- description: "Set thinking level",
38
+ description: "设置思考等级",
39
39
  getArgumentCompletions: (prefix) => thinkLevels
40
40
  .filter((v) => v.startsWith(prefix.toLowerCase()))
41
41
  .map((value) => ({ value, label: value })),
42
42
  },
43
43
  {
44
44
  name: "verbose",
45
- description: "Set verbose on/off",
45
+ description: "开关详细模式",
46
46
  getArgumentCompletions: (prefix) => VERBOSE_LEVELS.filter((v) => v.startsWith(prefix.toLowerCase())).map((value) => ({
47
47
  value,
48
48
  label: value,
@@ -50,7 +50,7 @@ export function getSlashCommands(options = {}) {
50
50
  },
51
51
  {
52
52
  name: "reasoning",
53
- description: "Set reasoning on/off",
53
+ description: "开关推理模式",
54
54
  getArgumentCompletions: (prefix) => REASONING_LEVELS.filter((v) => v.startsWith(prefix.toLowerCase())).map((value) => ({
55
55
  value,
56
56
  label: value,
@@ -58,7 +58,7 @@ export function getSlashCommands(options = {}) {
58
58
  },
59
59
  {
60
60
  name: "usage",
61
- description: "Toggle per-response usage line",
61
+ description: "切换每条回复的用量显示",
62
62
  getArgumentCompletions: (prefix) => USAGE_FOOTER_LEVELS.filter((v) => v.startsWith(prefix.toLowerCase())).map((value) => ({
63
63
  value,
64
64
  label: value,
@@ -66,7 +66,7 @@ export function getSlashCommands(options = {}) {
66
66
  },
67
67
  {
68
68
  name: "elevated",
69
- description: "Set elevated on/off/ask/full",
69
+ description: "设置提权级别 on/off/ask/full",
70
70
  getArgumentCompletions: (prefix) => ELEVATED_LEVELS.filter((v) => v.startsWith(prefix.toLowerCase())).map((value) => ({
71
71
  value,
72
72
  label: value,
@@ -74,7 +74,7 @@ export function getSlashCommands(options = {}) {
74
74
  },
75
75
  {
76
76
  name: "elev",
77
- description: "Alias for /elevated",
77
+ description: "/elevated 的别名",
78
78
  getArgumentCompletions: (prefix) => ELEVATED_LEVELS.filter((v) => v.startsWith(prefix.toLowerCase())).map((value) => ({
79
79
  value,
80
80
  label: value,
@@ -82,18 +82,18 @@ export function getSlashCommands(options = {}) {
82
82
  },
83
83
  {
84
84
  name: "activation",
85
- description: "Set group activation",
85
+ description: "设置群组激活模式",
86
86
  getArgumentCompletions: (prefix) => ACTIVATION_LEVELS.filter((v) => v.startsWith(prefix.toLowerCase())).map((value) => ({
87
87
  value,
88
88
  label: value,
89
89
  })),
90
90
  },
91
- { name: "abort", description: "Abort active run" },
92
- { name: "new", description: "Reset the session" },
93
- { name: "reset", description: "Reset the session" },
94
- { name: "settings", description: "Open settings" },
95
- { name: "exit", description: "Exit the TUI" },
96
- { name: "quit", description: "Exit the TUI" },
91
+ { name: "abort", description: "中止当前运行" },
92
+ { name: "new", description: "重置会话" },
93
+ { name: "reset", description: "重置会话" },
94
+ { name: "settings", description: "打开设置" },
95
+ { name: "exit", description: "退出 TUI" },
96
+ { name: "quit", description: "退出 TUI" },
97
97
  ];
98
98
  const seen = new Set(commands.map((command) => command.name));
99
99
  const gatewayCommands = options.cfg ? listChatCommandsForConfig(options.cfg) : listChatCommands();
@@ -112,7 +112,7 @@ export function getSlashCommands(options = {}) {
112
112
  export function helpText(options = {}) {
113
113
  const thinkLevels = formatThinkingLevels(options.provider, options.model, "|");
114
114
  return [
115
- "Slash commands:",
115
+ "斜杠命令列表:",
116
116
  "/help",
117
117
  "/commands",
118
118
  "/status",
@@ -1,14 +1,14 @@
1
1
  export const defaultWaitingPhrases = [
2
- "flibbertigibbeting",
3
- "kerfuffling",
4
- "dillydallying",
5
- "twiddling thumbs",
6
- "noodling",
7
- "bamboozling",
8
- "moseying",
9
- "hobnobbing",
10
- "pondering",
11
- "conjuring",
2
+ "神游八方中",
3
+ "思绪翻涌中",
4
+ "慢悠悠思考",
5
+ "摸鱼划水中",
6
+ "脑洞大开中",
7
+ "绞尽脑汁中",
8
+ "闲庭信步中",
9
+ "神机妙算中",
10
+ "沉思冥想中",
11
+ "施展魔法中",
12
12
  ];
13
13
  export function pickWaitingPhrase(tick, phrases = defaultWaitingPhrases) {
14
14
  const idx = Math.floor(tick / 10) % phrases.length;
@@ -344,11 +344,11 @@ export async function finalizeOnboardingWizard(options) {
344
344
  "",
345
345
  "Alternative: set BRAVE_API_KEY in the Gateway environment (no config changes).",
346
346
  "Docs: https://docs.openclaw.ai/tools/web",
347
- ].join("\n"), "Web search (optional)");
348
- await prompter.note('What now: https://openclaw.ai/showcase ("What People Are Building").', "What now");
347
+ ].join("\n"), "网页搜索(可选)");
348
+ await prompter.note('接下来做什么:查看 https://openclaw.ai/showcase ("大家都在用 OpenClaw 做什么")\n\n💡 汉化版更新:https://openclaw.qt.cool/', "接下来");
349
349
  await prompter.outro(controlUiOpened
350
- ? "Onboarding complete. Dashboard opened with your token; keep that tab to control OpenClaw."
350
+ ? "初始化完成!已打开控制面板;保持该标签页以控制 OpenClaw。\n\n🔗 汉化版官网:https://openclaw.qt.cool/"
351
351
  : seededInBackground
352
- ? "Onboarding complete. Web UI seeded in the background; open it anytime with the tokenized link above."
353
- : "Onboarding complete. Use the tokenized dashboard link above to control OpenClaw.");
352
+ ? "初始化完成!Web UI 已在后台准备就绪;随时可用上面的链接打开。\n\n🔗 汉化版官网:https://openclaw.qt.cool/"
353
+ : "初始化完成!使用上面的链接打开控制面板。\n\n🔗 汉化版官网:https://openclaw.qt.cool/");
354
354
  }
@@ -205,11 +205,11 @@ export async function runOnboardingWizard(opts, runtime = defaultRuntime, prompt
205
205
  "直接连接聊天频道。",
206
206
  ]
207
207
  : [
208
- `Gateway port: ${DEFAULT_GATEWAY_PORT}`,
208
+ `网关端口: ${DEFAULT_GATEWAY_PORT}`,
209
209
  "网关绑定: 回环地址 (127.0.0.1)",
210
210
  "网关认证: 令牌 (默认)",
211
211
  "Tailscale 暴露: 关闭",
212
- "Direct to chat channels.",
212
+ "直接连接聊天频道。",
213
213
  ];
214
214
  await prompter.note(quickstartLines.join("\n"), "QuickStart");
215
215
  }
@@ -246,7 +246,7 @@ export async function runOnboardingWizard(opts, runtime = defaultRuntime, prompt
246
246
  hint: !remoteUrl
247
247
  ? "尚未配置远程 URL"
248
248
  : remoteProbe?.ok
249
- ? `Gateway reachable (${remoteUrl})`
249
+ ? `网关可达 (${remoteUrl})`
250
250
  : `已配置但无法访问 (${remoteUrl})`,
251
251
  },
252
252
  ],
@@ -4,6 +4,7 @@ import {
4
4
  LineConfigSchema,
5
5
  processLineMessage,
6
6
  type ChannelPlugin,
7
+ type ChannelStatusIssue,
7
8
  type OpenClawConfig,
8
9
  type LineConfig,
9
10
  type LineChannelData,
@@ -560,19 +561,26 @@ export const linePlugin: ChannelPlugin<ResolvedLineAccount> = {
560
561
  lastStopAt: null,
561
562
  lastError: null,
562
563
  },
563
- collectStatusIssues: ({ account }) => {
564
- const issues: Array<{ level: "error" | "warning"; message: string }> = [];
565
- if (!account.channelAccessToken?.trim()) {
566
- issues.push({
567
- level: "error",
568
- message: "LINE channel access token not configured",
569
- });
570
- }
571
- if (!account.channelSecret?.trim()) {
572
- issues.push({
573
- level: "error",
574
- message: "LINE channel secret not configured",
575
- });
564
+ collectStatusIssues: (accounts) => {
565
+ const issues: ChannelStatusIssue[] = [];
566
+ for (const account of accounts) {
567
+ const accountId = account.accountId ?? DEFAULT_ACCOUNT_ID;
568
+ if (!account.channelAccessToken?.trim()) {
569
+ issues.push({
570
+ channel: "line",
571
+ accountId,
572
+ kind: "config",
573
+ message: "LINE channel access token not configured",
574
+ });
575
+ }
576
+ if (!account.channelSecret?.trim()) {
577
+ issues.push({
578
+ channel: "line",
579
+ accountId,
580
+ kind: "config",
581
+ message: "LINE channel secret not configured",
582
+ });
583
+ }
576
584
  }
577
585
  return issues;
578
586
  },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@qingchencloud/openclaw-zh",
3
- "version": "2026.1.29-zh.20260130",
4
- "description": "OpenClaw 汉化发行版 - 武汉晴辰天下网络科技有限公司",
3
+ "version": "2026.1.30-zh.1",
4
+ "description": "OpenClaw 汉化发行版(稳定版)- 武汉晴辰天下网络科技有限公司",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "exports": {