From 37111435490e3378303c01a1f8dc3ff35211edec Mon Sep 17 00:00:00 2001 From: Shakker Date: Mon, 2 Feb 2026 16:41:49 +0000 Subject: [PATCH] chore: fix formatting and CI --- CHANGELOG.md | 2 +- docs/docs.json | 20 +++----------------- docs/zh-CN/concepts/typebox.md | 2 +- docs/zh-CN/gateway/troubleshooting.md | 26 +++++++++++++------------- docs/zh-CN/platforms/fly.md | 2 +- docs/zh-CN/platforms/gcp.md | 24 ++++++++++++------------ docs/zh-CN/platforms/hetzner.md | 24 ++++++++++++------------ docs/zh-CN/web/control-ui.md | 1 + ui/src/ui/app-scroll.test.ts | 14 ++++++++------ ui/src/ui/app.ts | 5 ++++- 10 files changed, 56 insertions(+), 64 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e1e6d494c..04da4f5826 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,7 +45,7 @@ Docs: https://docs.openclaw.ai - Streaming: stabilize partial streaming filters. - Auto-reply: avoid referencing workspace files in /new greeting prompt. (#5706) Thanks @bravostation. - Tools: align tool execute adapters/signatures (legacy + parameter order + arg normalization). -- Tools: treat "*" tool allowlist entries as valid to avoid spurious unknown-entry warnings. +- Tools: treat "\*" tool allowlist entries as valid to avoid spurious unknown-entry warnings. - Skills: update session-logs paths from .clawdbot to .openclaw. (#4502) - Slack: harden media fetch limits and Slack file URL validation. (#6639) Thanks @davidiach. - Lint: satisfy curly rule after import sorting. (#6310) diff --git a/docs/docs.json b/docs/docs.json index b92f1069ea..f740b3be07 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -865,11 +865,7 @@ }, { "group": "Help", - "pages": [ - "help/index", - "help/troubleshooting", - "help/faq" - ] + "pages": ["help/index", "help/troubleshooting", "help/faq"] }, { "group": "Install & Updates", @@ -1002,13 +998,7 @@ }, { "group": "Web & Interfaces", - "pages": [ - "web/index", - "web/control-ui", - "web/dashboard", - "web/webchat", - "tui" - ] + "pages": ["web/index", "web/control-ui", "web/dashboard", "web/webchat", "tui"] }, { "group": "Channels", @@ -1186,11 +1176,7 @@ }, { "group": "Help", - "pages": [ - "zh-CN/help/index", - "zh-CN/help/troubleshooting", - "zh-CN/help/faq" - ] + "pages": ["zh-CN/help/index", "zh-CN/help/troubleshooting", "zh-CN/help/faq"] }, { "group": "Install & Updates", diff --git a/docs/zh-CN/concepts/typebox.md b/docs/zh-CN/concepts/typebox.md index d4f7c56a7c..4ac107f8be 100644 --- a/docs/zh-CN/concepts/typebox.md +++ b/docs/zh-CN/concepts/typebox.md @@ -49,7 +49,7 @@ Client Gateway网关 | 消息 | `send`、`poll`、`agent`、`agent.wait` | 有副作用的操作需要 `idempotencyKey` | | 聊天 | `chat.history`、`chat.send`、`chat.abort`、`chat.inject` | WebChat 使用这些 | | 会话 | `sessions.list`、`sessions.patch`、`sessions.delete` | 会话管理 | -| 节点 | `node.list`、`node.invoke`、`node.pair.*` | Gateway网关 WS + 节点操作 | +| 节点 | `node.list`、`node.invoke`、`node.pair.*` | Gateway网关 WS + 节点操作 | | 事件 | `tick`、`presence`、`agent`、`chat`、`health`、`shutdown` | 服务器推送 | 权威列表位于 `src/gateway/server.ts`(`METHODS`、`EVENTS`)。 diff --git a/docs/zh-CN/gateway/troubleshooting.md b/docs/zh-CN/gateway/troubleshooting.md index 848e148306..cee923f736 100644 --- a/docs/zh-CN/gateway/troubleshooting.md +++ b/docs/zh-CN/gateway/troubleshooting.md @@ -24,15 +24,15 @@ x-i18n: 快速分诊命令(按顺序执行): -| 命令 | 告诉你什么 | 何时使用 | -| ---------------------------------- | --------------------------------------------------------------------------------- | -------------------------------- | +| 命令 | 告诉你什么 | 何时使用 | +| ---------------------------------- | ------------------------------------------------------------------------------------ | -------------------------------- | | `openclaw status` | 本地摘要:操作系统 + 更新、Gateway网关可达性/模式、服务、智能体/会话、提供商配置状态 | 首次检查,快速概览 | -| `openclaw status --all` | 完整本地诊断(只读、可粘贴、基本安全)包含日志尾部 | 需要分享调试报告时 | -| `openclaw status --deep` | 运行 Gateway网关健康检查(包括提供商探测;需要 Gateway网关可达) | 当"已配置"不等于"正常工作"时 | -| `openclaw gateway probe` | Gateway网关发现 + 可达性(本地 + 远程目标) | 怀疑探测了错误的 Gateway网关时 | -| `openclaw channels status --probe` | 向运行中的 Gateway网关查询渠道状态(可选探测) | Gateway网关可达但渠道异常时 | +| `openclaw status --all` | 完整本地诊断(只读、可粘贴、基本安全)包含日志尾部 | 需要分享调试报告时 | +| `openclaw status --deep` | 运行 Gateway网关健康检查(包括提供商探测;需要 Gateway网关可达) | 当"已配置"不等于"正常工作"时 | +| `openclaw gateway probe` | Gateway网关发现 + 可达性(本地 + 远程目标) | 怀疑探测了错误的 Gateway网关时 | +| `openclaw channels status --probe` | 向运行中的 Gateway网关查询渠道状态(可选探测) | Gateway网关可达但渠道异常时 | | `openclaw gateway status` | 管理器状态(launchd/systemd/schtasks)、运行时 PID/退出码、最后一次 Gateway网关错误 | 服务"看起来已加载"但实际未运行时 | -| `openclaw logs --follow` | 实时日志(运行时问题的最佳信号源) | 需要查看实际失败原因时 | +| `openclaw logs --follow` | 实时日志(运行时问题的最佳信号源) | 需要查看实际失败原因时 | **分享输出:** 优先使用 `openclaw status --all`(它会脱敏令牌)。如果粘贴 `openclaw status` 的输出,建议先设置 `OPENCLAW_SHOW_SECRETS=0`(令牌预览)。 @@ -685,13 +685,13 @@ openclaw channels login --verbose ## 日志位置 -| 日志 | 位置 | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Gateway网关文件日志(结构化) | `/tmp/openclaw/openclaw-YYYY-MM-DD.log`(或 `logging.file`) | +| 日志 | 位置 | +| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Gateway网关文件日志(结构化) | `/tmp/openclaw/openclaw-YYYY-MM-DD.log`(或 `logging.file`) | | Gateway网关服务日志(管理器) | macOS:`$OPENCLAW_STATE_DIR/logs/gateway.log` + `gateway.err.log`(默认:`~/.openclaw/logs/...`;profile 使用 `~/.openclaw-/logs/...`)
Linux:`journalctl --user -u openclaw-gateway[-].service -n 200 --no-pager`
Windows:`schtasks /Query /TN "OpenClaw Gateway网关 ()" /V /FO LIST` | -| 会话文件 | `$OPENCLAW_STATE_DIR/agents//sessions/` | -| 媒体缓存 | `$OPENCLAW_STATE_DIR/media/` | -| 凭据 | `$OPENCLAW_STATE_DIR/credentials/` | +| 会话文件 | `$OPENCLAW_STATE_DIR/agents//sessions/` | +| 媒体缓存 | `$OPENCLAW_STATE_DIR/media/` | +| 凭据 | `$OPENCLAW_STATE_DIR/credentials/` | ## 健康检查 diff --git a/docs/zh-CN/platforms/fly.md b/docs/zh-CN/platforms/fly.md index 4a5cfa950e..04e95fab30 100644 --- a/docs/zh-CN/platforms/fly.md +++ b/docs/zh-CN/platforms/fly.md @@ -87,7 +87,7 @@ primary_region = "iad" | 设置 | 原因 | | ------------------------------ | ------------------------------------------------------------------------- | -| `--bind lan` | 绑定到 `0.0.0.0`,使 Fly 的代理能够访问 Gateway网关 | +| `--bind lan` | 绑定到 `0.0.0.0`,使 Fly 的代理能够访问 Gateway网关 | | `--allow-unconfigured` | 无需配置文件即可启动(之后再创建) | | `internal_port = 3000` | 必须与 `--port 3000`(或 `OPENCLAW_GATEWAY_PORT`)匹配,用于 Fly 健康检查 | | `memory = "2048mb"` | 512MB 太小;推荐 2GB | diff --git a/docs/zh-CN/platforms/gcp.md b/docs/zh-CN/platforms/gcp.md index 42adc02da7..9409ceee2c 100644 --- a/docs/zh-CN/platforms/gcp.md +++ b/docs/zh-CN/platforms/gcp.md @@ -414,18 +414,18 @@ gcloud compute ssh openclaw-gateway --zone=us-central1-a -- -L 18789:127.0.0.1:1 OpenClaw 在 Docker 中运行,但 Docker 并非数据来源。 所有长期状态必须在重启、重建和重启动后仍然存在。 -| 组件 | 位置 | 持久化机制 | 备注 | -| -------------- | --------------------------------- | --------------- | --------------------------- | -| Gateway网关配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | 包含 `openclaw.json`、令牌 | -| 模型认证配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | OAuth 令牌、API 密钥 | -| Skills配置 | `/home/node/.openclaw/skills/` | 宿主机卷挂载 | Skills 级别状态 | -| 智能体工作区 | `/home/node/.openclaw/workspace/` | 宿主机卷挂载 | 代码和智能体产物 | -| WhatsApp 会话 | `/home/node/.openclaw/` | 宿主机卷挂载 | 保留二维码登录 | -| Gmail 密钥环 | `/home/node/.openclaw/` | 宿主机卷 + 密码 | 需要 `GOG_KEYRING_PASSWORD` | -| 外部二进制文件 | `/usr/local/bin/` | Docker 镜像 | 必须在构建时内置 | -| Node 运行时 | 容器文件系统 | Docker 镜像 | 每次镜像构建时重建 | -| 操作系统软件包 | 容器文件系统 | Docker 镜像 | 请勿在运行时安装 | -| Docker 容器 | 临时性 | 可重启 | 可安全销毁 | +| 组件 | 位置 | 持久化机制 | 备注 | +| --------------- | --------------------------------- | --------------- | --------------------------- | +| Gateway网关配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | 包含 `openclaw.json`、令牌 | +| 模型认证配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | OAuth 令牌、API 密钥 | +| Skills配置 | `/home/node/.openclaw/skills/` | 宿主机卷挂载 | Skills 级别状态 | +| 智能体工作区 | `/home/node/.openclaw/workspace/` | 宿主机卷挂载 | 代码和智能体产物 | +| WhatsApp 会话 | `/home/node/.openclaw/` | 宿主机卷挂载 | 保留二维码登录 | +| Gmail 密钥环 | `/home/node/.openclaw/` | 宿主机卷 + 密码 | 需要 `GOG_KEYRING_PASSWORD` | +| 外部二进制文件 | `/usr/local/bin/` | Docker 镜像 | 必须在构建时内置 | +| Node 运行时 | 容器文件系统 | Docker 镜像 | 每次镜像构建时重建 | +| 操作系统软件包 | 容器文件系统 | Docker 镜像 | 请勿在运行时安装 | +| Docker 容器 | 临时性 | 可重启 | 可安全销毁 | --- diff --git a/docs/zh-CN/platforms/hetzner.md b/docs/zh-CN/platforms/hetzner.md index 1b94e3c28b..3e3b5f76e4 100644 --- a/docs/zh-CN/platforms/hetzner.md +++ b/docs/zh-CN/platforms/hetzner.md @@ -323,15 +323,15 @@ ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP OpenClaw 在 Docker 中运行,但 Docker 不是数据源。 所有长期状态必须能在重启、重建和重启后保留。 -| 组件 | 位置 | 持久化机制 | 备注 | -| -------------- | --------------------------------- | --------------- | --------------------------- | -| Gateway网关配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | 包含 `openclaw.json`、令牌 | -| 模型认证配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | OAuth 令牌、API 密钥 | -| Skills配置 | `/home/node/.openclaw/skills/` | 宿主机卷挂载 | Skills 级别状态 | -| 智能体工作区 | `/home/node/.openclaw/workspace/` | 宿主机卷挂载 | 代码和智能体产物 | -| WhatsApp 会话 | `/home/node/.openclaw/` | 宿主机卷挂载 | 保留二维码登录状态 | -| Gmail 密钥环 | `/home/node/.openclaw/` | 宿主机卷 + 密码 | 需要 `GOG_KEYRING_PASSWORD` | -| 外部二进制文件 | `/usr/local/bin/` | Docker 镜像 | 必须在构建时内置 | -| Node 运行时 | 容器文件系统 | Docker 镜像 | 每次构建镜像时重建 | -| 操作系统软件包 | 容器文件系统 | Docker 镜像 | 不要在运行时安装 | -| Docker 容器 | 临时性 | 可重启 | 可安全销毁 | +| 组件 | 位置 | 持久化机制 | 备注 | +| --------------- | --------------------------------- | --------------- | --------------------------- | +| Gateway网关配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | 包含 `openclaw.json`、令牌 | +| 模型认证配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | OAuth 令牌、API 密钥 | +| Skills配置 | `/home/node/.openclaw/skills/` | 宿主机卷挂载 | Skills 级别状态 | +| 智能体工作区 | `/home/node/.openclaw/workspace/` | 宿主机卷挂载 | 代码和智能体产物 | +| WhatsApp 会话 | `/home/node/.openclaw/` | 宿主机卷挂载 | 保留二维码登录状态 | +| Gmail 密钥环 | `/home/node/.openclaw/` | 宿主机卷 + 密码 | 需要 `GOG_KEYRING_PASSWORD` | +| 外部二进制文件 | `/usr/local/bin/` | Docker 镜像 | 必须在构建时内置 | +| Node 运行时 | 容器文件系统 | Docker 镜像 | 每次构建镜像时重建 | +| 操作系统软件包 | 容器文件系统 | Docker 镜像 | 不要在运行时安装 | +| Docker 容器 | 临时性 | 可重启 | 可安全销毁 | diff --git a/docs/zh-CN/web/control-ui.md b/docs/zh-CN/web/control-ui.md index f834e8768f..fa47e7c235 100644 --- a/docs/zh-CN/web/control-ui.md +++ b/docs/zh-CN/web/control-ui.md @@ -176,6 +176,7 @@ pnpm ui:dev # 首次运行时自动安装 UI 依赖 然后将 UI 指向你的 Gateway网关 WS URL(例如 `ws://127.0.0.1:18789`)。 ## 调试/测试:开发服务器 + 远程 Gateway网关控制界面是静态文件;WebSocket 目标可配置,可以 + 与 HTTP 源不同。当你想在本地使用 Vite 开发服务器但 Gateway网关运行在其他地方时,这很方便。 1. 启动 UI 开发服务器:`pnpm ui:dev` diff --git a/ui/src/ui/app-scroll.test.ts b/ui/src/ui/app-scroll.test.ts index b75fd3ce7f..b199f9c137 100644 --- a/ui/src/ui/app-scroll.test.ts +++ b/ui/src/ui/app-scroll.test.ts @@ -6,12 +6,14 @@ import { handleChatScroll, scheduleChatScroll, resetChatScroll } from "./app-scr /* ------------------------------------------------------------------ */ /** Minimal ScrollHost stub for unit tests. */ -function createScrollHost(overrides: { - scrollHeight?: number; - scrollTop?: number; - clientHeight?: number; - overflowY?: string; -} = {}) { +function createScrollHost( + overrides: { + scrollHeight?: number; + scrollTop?: number; + clientHeight?: number; + overflowY?: string; + } = {}, +) { const { scrollHeight = 2000, scrollTop = 1500, diff --git a/ui/src/ui/app.ts b/ui/src/ui/app.ts index 8a81b21dff..8f7698672b 100644 --- a/ui/src/ui/app.ts +++ b/ui/src/ui/app.ts @@ -323,7 +323,10 @@ export class OpenClawApp extends LitElement { scrollToBottom() { resetChatScrollInternal(this as unknown as Parameters[0]); - scheduleChatScrollInternal(this as unknown as Parameters[0], true); + scheduleChatScrollInternal( + this as unknown as Parameters[0], + true, + ); } async loadAssistantIdentity() {