Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c789e3471 | ||
|
|
85a2178a80 | ||
|
|
532a605e58 | ||
|
|
149620dc1a | ||
|
|
ba3ef27766 | ||
|
|
373d8bda27 | ||
|
|
d7274f6c88 | ||
|
|
f9375ebf89 | ||
|
|
79fa8b35ca | ||
|
|
3bd82c5892 | ||
|
|
18b1b9529b | ||
|
|
428e92baa6 | ||
|
|
e08c782559 | ||
|
|
8e9b07a01e | ||
|
|
8c20735ff5 |
@@ -22,6 +22,14 @@ git pull --ff-only
|
||||
```
|
||||
|
||||
Open [http://localhost:3333](http://localhost:3333) in your browser. For remote access, use `bash start.sh --host 0.0.0.0`.
|
||||
## Docs
|
||||
|
||||
- English guide: docs/USAGE_GUIDE.en.md
|
||||
- 中文使用说明: docs/USAGE_GUIDE.zh-CN.md
|
||||
- FAQ: docs/FAQ.md
|
||||
- Security notes: docs/SECURITY.md
|
||||
- Changelog: docs/CHANGELOG.md
|
||||
|
||||
|
||||
## Features
|
||||
|
||||
@@ -41,6 +49,8 @@ Open [http://localhost:3333](http://localhost:3333) in your browser. For remote
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
**Agent Management** — Add main agents and sub-agents through a guided setup flow. View all agents in a tree structure with model selection, workspace browsing, and inline configuration.
|
||||
|
||||
@@ -48,7 +58,11 @@ Open [http://localhost:3333](http://localhost:3333) in your browser. For remote
|
||||
|
||||
**Model & Auth** — Configure models from your registered provider list. Follow built-in guides for provider authentication setup.
|
||||
|
||||
**Built-in CLI** — Run any `openclaw` command with real-time streaming output. Preset commands, favorites, and tab completion included.
|
||||
**Built-in CLI** — Available from any page (top-right **Terminal** + bottom dock). Run OpenClaw commands with **real-time streaming output**, **Tab completion**, built-in presets, and your own saved favorites (no more memorizing commands).
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
**Ops Panel** — Restart gateway, view logs, run health checks, manage backups (local + NAS via SFTP/rsync), and handle cron tasks.
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# Changelog
|
||||
|
||||
This is a user-facing summary derived from `DEVLOG.md`.
|
||||
|
||||
## v0.7.6
|
||||
- Docs: annotated screenshots with arrows for key UI controls.
|
||||
|
||||
## v0.7.5
|
||||
- Docs: built-in CLI terminal instructions + screenshot (tab completion, favorites, streaming output).
|
||||
|
||||
## v0.7.4
|
||||
- Docs: English + Chinese usage guides with redacted screenshots.
|
||||
|
||||
## v0.7.1
|
||||
- Dashboard guidance block for Telegram-first workflow + safety checklist.
|
||||
- Model dropdown options sourced from `openclaw models list`.
|
||||
|
||||
## v0.7.0
|
||||
- Dashboard redesign with circular CPU/RAM/DISK gauges and auto-refresh.
|
||||
- Sub-agent creation flow rewritten (BotFather → group → group id → form) including allowlist helper.
|
||||
|
||||
## v0.6.6
|
||||
- Fix: sub-agents correctly grouped under main for older config formats.
|
||||
|
||||
## v0.6.5
|
||||
- New Dashboard tab + cache-busting headers and version checks.
|
||||
@@ -0,0 +1,53 @@
|
||||
# OCM FAQ
|
||||
|
||||
## Q: Telegram 群里经常显示 typing,但不回消息?
|
||||
|
||||
Most common cause is **BotFather Group Privacy** being ON.
|
||||
|
||||
Fix:
|
||||
- BotFather → Your bot → Bot Settings → **Group Privacy** → **Turn off**
|
||||
|
||||
Also check:
|
||||
- `openclaw status` (gateway healthy?)
|
||||
- provider auth/rate limits (OCM → Auth page, and gateway logs)
|
||||
|
||||
## Q: 如何获取 Telegram Group ID(Peer ID / -100...)?
|
||||
|
||||
Typical workflow:
|
||||
|
||||
```bash
|
||||
openclaw gateway logs --follow
|
||||
```
|
||||
|
||||
Send a message in the target group; the gateway logs usually contain the peer id.
|
||||
|
||||
## Q: 模型下拉列表为什么没有我想要的模型?
|
||||
|
||||
OCM sources model options from the real CLI output:
|
||||
|
||||
```bash
|
||||
openclaw models list
|
||||
```
|
||||
|
||||
So if it doesn't show up in OCM, make sure it's registered/available in your OpenClaw environment.
|
||||
|
||||
## Q: Dashboard 里 Gateway HTTP Ping 显示 Unreachable?
|
||||
|
||||
Common reasons:
|
||||
- Gateway not running
|
||||
- Gateway binds to a different interface/port than OCM expects
|
||||
- Local firewall/proxy interference
|
||||
|
||||
Try:
|
||||
- `openclaw status`
|
||||
- `openclaw gateway restart`
|
||||
|
||||
## Q: OCM 会把我的 token/个人信息上传出去吗?
|
||||
|
||||
OCM is designed as a **local** dashboard.
|
||||
|
||||
That said, your local OpenClaw config contains sensitive information. Follow the safety guidance:
|
||||
- keep agent Telegram groups private
|
||||
- don't share raw screenshots without redaction
|
||||
|
||||
See: `docs/SECURITY.md`.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Security Notes
|
||||
|
||||
OCM is a **local web UI** for managing OpenClaw. Security depends heavily on how you run OpenClaw and how you use Telegram.
|
||||
|
||||
## Recommended defaults
|
||||
|
||||
- **Run locally** and restrict host binding unless you intentionally expose it.
|
||||
- Treat OpenClaw config as secrets: tokens, provider keys, account ids.
|
||||
- Prefer separate workspaces for each agent/sub-agent.
|
||||
|
||||
## Telegram safety
|
||||
|
||||
Strongly recommended:
|
||||
|
||||
- **One Telegram group = one agent boundary** (context + purpose + workspace)
|
||||
- Keep each agent group **private**: only you + the bot (and optionally your second account)
|
||||
- Do **not** invite other people (cost + security risk)
|
||||
|
||||
Critical BotFather settings:
|
||||
- Allow Groups = ON
|
||||
- Group Privacy = OFF
|
||||
|
||||
## Sharing screenshots
|
||||
|
||||
If you share screenshots publicly:
|
||||
- blur personal paths (e.g. `/Users/<name>/...`)
|
||||
- blur Telegram group/peer IDs (e.g. `-100xxxxxxxxxx`)
|
||||
- blur any tokens/keys if visible
|
||||
|
||||
This repo contains **redacted + annotated** screenshots under `docs/annotated-screenshots/`.
|
||||
@@ -223,6 +223,20 @@ OCM parses usage from OpenClaw session JSONL files.
|
||||
|
||||
---
|
||||
|
||||
## 10) Actions menu (ops shortcuts)
|
||||
|
||||
The **⚡ Actions** dropdown in the top-right provides common operational shortcuts:
|
||||
- Restart Gateway
|
||||
- Live Logs
|
||||
- Manual Backup / Backups & Rollback
|
||||
- NAS Backup Setup
|
||||
- Health Check
|
||||
- Open Config Dir / Switch OpenClaw Dir
|
||||
|
||||
Screenshot:
|
||||
|
||||

|
||||
|
||||
## 10) Cron jobs (Cron)
|
||||
|
||||
Go to **Cron**:
|
||||
@@ -236,6 +250,24 @@ You can:
|
||||
|
||||
---
|
||||
|
||||
## 11) Built-in CLI Terminal
|
||||
|
||||
OCM includes a built-in terminal panel to run OpenClaw CLI commands directly (for example: `openclaw status`, `openclaw gateway logs --follow`, `openclaw doctor`).
|
||||
|
||||
How to open: click **⌨️ Terminal** in the top navigation, or use the bottom CLI panel.
|
||||
|
||||
Highlights:
|
||||
- **Tab completion** while typing commands
|
||||
- **Common commands** dropdown to insert templates quickly
|
||||
- **Favorites**: save frequently used commands and run them with one click
|
||||
- **Streaming output** (stdout/stderr) for faster debugging
|
||||
|
||||
Screenshot:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 11) Fast troubleshooting
|
||||
|
||||
### “Typing…” but no reply in a Telegram group
|
||||
|
||||
@@ -208,6 +208,38 @@ OCM 的表单里可以填 “Your Telegram User ID”,让它自动把你的 us
|
||||
|
||||
---
|
||||
|
||||
## 9) CLI 终端(内置)
|
||||
|
||||
OCM 内置一个 CLI 面板,用来直接运行 OpenClaw 命令(例如:`openclaw status`、`openclaw gateway logs --follow`、`openclaw doctor`)。
|
||||
|
||||
入口:点击顶部导航栏的 **⌨️ 终端**,或使用页面底部的 CLI 区域。
|
||||
|
||||
功能要点:
|
||||
- **Tab 补全**:输入命令时按 Tab 进行补全/提示(适合 `openclaw ...` 子命令)
|
||||
- **常用命令**:可从下拉选择,一键填充常用命令模板
|
||||
- **收藏(Favorites)**:把常用命令保存为收藏,后续一键执行
|
||||
- **实时输出**:执行后会流式显示 stdout/stderr,方便排错
|
||||
|
||||
截图示例:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 9) Actions 菜单(运维快捷入口)
|
||||
|
||||
右上角 **⚡ Actions** 下拉菜单提供常用运维操作:
|
||||
- Restart Gateway(重启网关)
|
||||
- Live Logs(实时日志)
|
||||
- Manual Backup / Backups & Rollback(备份/回滚)
|
||||
- NAS Backup Setup(NAS 备份配置)
|
||||
- Health Check(健康检查)
|
||||
- Open Config Dir / Switch OpenClaw Dir(打开/切换配置目录)
|
||||
|
||||
截图示例:
|
||||
|
||||

|
||||
|
||||
## 9) Cron(定时任务)
|
||||
|
||||
进入 **Cron**:
|
||||
|
||||
|
After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 226 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 207 KiB After Width: | Height: | Size: 29 KiB |
@@ -2484,7 +2484,9 @@ const LS = {
|
||||
set(k, v) { try { localStorage.setItem(k, v); } catch(e) {} },
|
||||
del(k) { try { localStorage.removeItem(k); } catch(e) {} },
|
||||
};
|
||||
let lang = LS.get('ocm_lang', 'zh');
|
||||
// Default UI language. Users can toggle and we persist in localStorage.
|
||||
// Prefer English by default for broader sharing/promotions.
|
||||
let lang = LS.get('ocm_lang', 'en');
|
||||
function t(k) { return I18N[lang][k] || I18N.zh[k] || k; }
|
||||
function applyLang() {
|
||||
document.querySelectorAll('[data-i18n]').forEach(el => { el.textContent = t(el.dataset.i18n); });
|
||||
|
||||