stswangzhiping
29c158f837
feat: headscale mesh integration - auto-join on bind, logout on unbind
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-03 19:39:16 +08:00
stswangzhiping
1a7e0a9738
feat: SSH STCP key generation and frp tunnel registration
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-02 18:07:33 +08:00
stswangzhiping
b4e0388c71
feat: report version, handle remote upgrade via update-clawd.sh
...
Made-with: Cursor
2026-04-30 18:18:30 +08:00
stswangzhiping
a1c9cc9657
feat: report local network types
2026-04-26 17:29:58 +08:00
stswangzhiping
4cf0e4e948
feat: 重连时 MD5 校验模型列表,有变化才更新 openclaw.json
...
- 新增 computeModelsMd5():对模型 id 列表排序后取 MD5
- 新增 refreshModelsIfChanged():读现有 provider 配置拉新模型,MD5 不同才写盘
- client.js: 重连(active + 无完整 provider)时调用 refreshModelsIfChanged,而非直接跳过
Made-with: Cursor
2026-04-23 07:53:49 +08:00
stswangzhiping
46dae37079
feat: 启动和连接时设置 hostname 为 claw-<claw_id>
...
- start(): 有 claw_id 时立即设置(重启恢复)
- _onConnected(): 每次连上 VPS 后设置(首次注册或重连确认)
- 用 exec 异步执行,不阻塞启动流程
Made-with: Cursor
2026-04-03 22:58:14 +08:00
stswangzhiping
c28bf53217
fix: WS 多次失败时统一显示 AP,移除 Err0 分支
...
WS 失败 ≥ 3 次无论是否有网络均显示 showAP,
不再区分"有网但 VPS 不可达"时显示 showErr0。
Made-with: Cursor
2026-04-03 16:06:34 +08:00
stswangzhiping
7c9a6e913e
fix: 确保 origin 更新后再重启 gateway
...
active+full provider 路径:
addProviderSync → onDone(写 origin) → restartGateway 一次
之前顺序错误导致 gateway 用旧 origin 重启后再重启一次。
_updateOpenClawOrigin 只负责写盘,不再调 pkill。
移除 client.js 中已无用的 execSync 引入。
Made-with: Cursor
2026-04-03 10:53:05 +08:00
stswangzhiping
701251f19b
fix: 写盘 openclaw.json 后自动重启 gateway
...
- openclaw-provider.js: 新增 restartGateway(),在 removeProviderByName
和 applyFullProviderFromVps 写盘成功后均调用,确保 inactive/active
两路都能触发重启
- client.js: _updateOpenClawOrigin 去掉 CLAWD_OPENCLAW_GATEWAY_PKILL
env var 门控,origin 变更后默认重启
Made-with: Cursor
2026-04-03 10:50:29 +08:00
stswangzhiping
12aedaaf85
feat(net): late uplink poll + faster provision monitor (15s)
...
- client: while !_connectionStarted, poll every 3s for hasInternet or
hasWiredInternetProbe (e.g. Ethernet after AP); start _proceedWithConnection
once; clear poll on network-ready/stop. Avoids provision-level emit spam.
- provisioning: MONITOR_INTERVAL_MS 30s -> 15s for quicker WiFi/AP UI.
Made-with: Cursor
2026-04-02 12:40:41 +08:00
stswangzhiping
389b2b09ae
fix(openclaw): seed gateway.controlUi when no claw.cutos.ai URL in config
...
If openclaw.json has no https://*.claw.cutos.ai string, set controlUi
allowedOrigins (loopback + newOrigin), allowInsecureAuth, and
dangerouslyDisableDeviceAuth so factory images need no manual edit.
Otherwise keep replaceOriginStrings behavior.
Made-with: Cursor
2026-04-01 17:42:32 +08:00
stswangzhiping
4cfdaa46e5
feat: apply VPS provider to OpenClaw on status_update (fetch models, merge config)
...
- Add openclaw-provider: fetch /v1/models, merge provider/auth, remove by name
- Wire client _applyStatus: inactive removes provider; active applies full provider then origin
- Single-flight _busy to ignore concurrent apply/remove; isFullProvider uses base-url key
Made-with: Cursor
2026-03-31 14:32:50 +08:00
stswangzhiping
5a56e0015c
chore(openclaw): skip gateway pkill by default; opt-in CLAWD_OPENCLAW_GATEWAY_PKILL=1
2026-03-31 14:09:10 +08:00
stswangzhiping
a6e2f7ab8f
fix(client): default off BtMonitor unless CLAWD_ENABLE_BT (no env line needed)
2026-03-29 08:20:08 +08:00
stswangzhiping
b25bc58a3b
fix(client): honor CLAWD_DISABLE_BT and skip BtMonitor without hci
2026-03-29 08:16:13 +08:00
stswangzhiping
2ec02d71bb
fix(client): start LAN carrier polling (led.lan was never started)
2026-03-28 22:53:11 +08:00
stswangzhiping
8f5a8ec896
fix(led): swap WiFi(play)/LAN(wifi+eth), LAN carrier via CLAWD_ETH_IFACE, faster alarm
...
- WifiLed drives play; LanLed drives wifi+eth pair (matches panel silkscreen)
- hasLanCableCarrier(): CLAWD_ETH_IFACE-only carrier when set (reliable unplug)
- LAN poll 1s; config.activated persisted for immediate setApps on boot/reconnect
- setApps double vfdOn alarm after 50ms for slow OpenVFD
- Clear activated + setSetup on credential errors
- install.sh env comment for CLAWD_ETH_IFACE
Made-with: Cursor
2026-03-28 21:50:56 +08:00
stswangzhiping
347b19a0c9
feat(led): OpenVFD sysfs (wifi+eth, alarm, play/lan), skip BT without hci
...
- Write /sys/class/leds/openvfd led_on/led_off (CLAWD_OPENVFD_PATH)
- WiFi product LED: wifi+eth together; SETUP/APPS -> alarm off/on
- LanLed polls hasWiredCarrier -> play; export led.lan, start/stop from client
- BT monitor only if CLAWD_DISABLE_BT unset and hci* exists (RK3528)
- Display strings remain debug-only (数码管暂不驱动)
- install.sh env template: CLAWD_DISABLE_BT, CLAWD_OPENVFD_PATH comments
Made-with: Cursor
2026-03-28 21:35:38 +08:00
stswangzhiping
abd123b3dd
fix(client): remove AP net monitor WS terminate (scheme A)
...
AP mode no longer periodically terminates WebSocket when hasInternet and
hasWiredInternetProbe both fail; avoids false positives with hotspot + wired
uplink. Reconnect and offline detection rely on Pong, peer close, and TCP.
_connect() still defers new WS when AP and no uplink; close handler UI unchanged.
Made-with: Cursor
2026-03-28 17:18:36 +08:00
stswangzhiping
06d06fdd1e
fix(systemd): use systemd-notify + NotifyAccess=all for watchdog
...
unix_dgram to NOTIFY_SOCKET failed on rk3528 (embedded Node), so WATCHDOG=1 never
reached systemd despite WATCHDOG_USEC fallback. Switch to exec systemd-notify with
NOTIFY_SOCKET in child env; unit sets NotifyAccess=all so cgroup may notify.
Users must reload unit (re-run install.sh or add NotifyAccess=all manually).
Made-with: Cursor
2026-03-28 14:54:56 +08:00
stswangzhiping
fdc1e9fbd3
fix(systemd): pet watchdog when WATCHDOG_USEC missing; StartLimitInterval for old systemd
...
Embedded units may set WatchdogSec but omit WATCHDOG_USEC; SD_NOTIFY_INTERVAL was 0 so no
WATCHDOG=1 was sent and systemd killed the main process after ~60s.
Replace StartLimitIntervalSec with StartLimitInterval= for older systemd (journal warning).
Made-with: Cursor
2026-03-28 14:49:07 +08:00
stswangzhiping
04dd1017bb
fix(network): wired ping probe, AP/WS and systemd notify hardening
...
- Add hasWiredInternetProbe and export; AP mode uses it with hasInternet
- systemd-env: strip NOTIFY_SOCKET from env early; client uses unix_dgram
- Strip NOTIFY_SOCKET from frpc/ttyd spawn env in watchdog and frpc
- WS: pong miss debounce; AP net monitor consecutive-fail debounce
Made-with: Cursor
2026-03-28 14:37:56 +08:00
stswangzhiping
6ad573e272
Revert "fix(openclaw): always set gateway.origin when updating claw subdomain"
...
This reverts commit 69ac075e8c .
2026-03-27 14:42:53 +08:00
stswangzhiping
69ac075e8c
fix(openclaw): always set gateway.origin when updating claw subdomain
...
- Regex-only replace missed empty/new JSON without existing *.claw.cutos.ai URL
- Also replace wss://*.claw.cutos.ai in string fields
Made-with: Cursor
2026-03-27 14:42:05 +08:00
stswangzhiping
12366790d2
fix(network): auto-detect wired iface and ping via -I for hasInternet
...
- Scan sysfs for carrier when CLAWD_ETH_IFACE unset (end0/enp* etc.)
- Explicit CLAWD_ETH_IFACE still pins a single interface
- Ping fallback uses -I wired iface when default route fails (e.g. AP on wlan)
- Exclude can/docker/veth/wl* and similar from auto scan
- Clarify client log when waiting for WAN
Made-with: Cursor
2026-03-27 14:30:23 +08:00
stswangzhiping
884b0dc50a
feat(openclaw): persist config as ~/.openclaw/openclaw.json
...
- Read gateway token/port via JSON.parse (same structure as former YAML)
- Update claw.cutos.ai origin by replacing URLs in JSON string fields
- Export resolveOpenclawConfigFile() for frpc + client
- Drop js-yaml dependency
- install: ExecStartPre touches openvfd only if nodes exist (3528-friendly)
- Add tools/deploy-rsync.sh for syncing /opt/clawd over SSH
Made-with: Cursor
2026-03-27 13:49:23 +08:00
stswangzhiping
837cb8865f
feat: BtMonitor 监控 bluetoothctl 状态驱动 BT 指示灯
...
新增 lib/bt-monitor.js:
- 每 3 秒轮询 bluetoothctl show + hcitool con
- connected(ACL 连接存在)→ 常亮
- scanning/connecting(Discovering: yes)→ 闪烁
- 无 adapter / Powered: no / 静止 → 熄灭
client.js:启动时开启 BtMonitor,stop() 时清理
provisioning.js:移除所有 led.bt 调用,BT 灯统一由 BtMonitor 管理
Made-with: Cursor
2026-03-24 23:14:02 +08:00
stswangzhiping
7c03a59c57
refactor: 重构 OpenClaw config.yaml 更新逻辑
...
- _configureOpenClaw 改名为 _updateOpenClawOrigin(targetId)
- active 时传真实 claw_id,inactive 时传 '0000'
- 每次 _applyStatus(含 status_update)都调用,文件无变化则幂等跳过
- 有变化时 pkill -9 -x openclaw-gateway,不再依赖 openclaw CLI 或 systemctl --user
- 移除 _openClawConfigured 标志位
Made-with: Cursor
2026-03-24 16:22:05 +08:00
stswangzhiping
4a1a2de300
fix: only run configureOpenClaw once per clawId, not on every WS reconnect
...
Made-with: Cursor
2026-03-24 14:31:31 +08:00
stswangzhiping
029f7fe0a9
fix: edit openclaw config.yaml directly and restart as sts user
...
Made-with: Cursor
2026-03-24 14:07:22 +08:00
stswangzhiping
1a63e90055
fix: use full path to find openclaw binary for root service
...
Made-with: Cursor
2026-03-24 13:13:00 +08:00
stswangzhiping
cefbab28b7
feat: configure openclaw allowedOrigins on activation
...
Made-with: Cursor
2026-03-24 11:38:58 +08:00
stswangzhiping
86859a5e0d
fix: 过滤AP热点IP,改用checkip.amazonaws.com获取外网IP,新增ipplus360地理位置
...
Made-with: Cursor
2026-03-21 09:20:00 +08:00
stswangzhiping
878f3592bf
feat: connect 消息上报 local_ip 和 external_ip
...
Made-with: Cursor
2026-03-21 08:18:27 +08:00
stswangzhiping
108bea4ed7
fix: use fixed 5s retry on cert-not-yet-valid to avoid 70s exponential backoff before NTP sync
...
Made-with: Cursor
2026-03-20 08:34:53 +08:00
stswangzhiping
e94e2bb10c
fix: add AP net monitor to detect cable unplug within 5s, reduce ping interval to 10s
...
Made-with: Cursor
2026-03-20 08:14:31 +08:00
stswangzhiping
08fa4eefaa
feat: skip WS in AP+no-internet, poll every 5s until network available
...
Made-with: Cursor
2026-03-20 07:43:51 +08:00
stswangzhiping
c13ed3ba6d
fix(vfd): use isApMode() instead of hasInternet() to decide AP vs Err0
...
Made-with: Cursor
2026-03-19 23:45:16 +08:00
stswangzhiping
8f158eeeb2
fix: turn off LEDs on service start, suppress Err0 before first WS success
...
Made-with: Cursor
2026-03-19 23:27:42 +08:00
stswangzhiping
9b4287db1d
feat(vfd): showConn blink on WS connecting, showErr0 on VPS unreachable
...
Made-with: Cursor
2026-03-19 23:17:08 +08:00
stswangzhiping
53b9804c72
feat(led): showErr(code) + WS fail>=3 shows ERRa or AP on VFD
...
Made-with: Cursor
2026-03-19 22:44:56 +08:00
stswangzhiping
e36bec8660
refactor(led): startup all-off, AP shows VFD, WS close no VFD change
...
Made-with: Cursor
2026-03-19 22:08:47 +08:00
stswangzhiping
d68d673cdc
perf(heartbeat): 10s interval, collect metrics every 3rd beat (30s)
...
Made-with: Cursor
2026-03-19 09:58:48 +08:00
stswangzhiping
5824cf089a
feat(ws): unified status_update handler, extract _applyStatus()
...
Made-with: Cursor
2026-03-19 09:43:29 +08:00
stswangzhiping
16f82d6ab8
feat(ws): handle activated message from server, switch to APPS+time
...
Made-with: Cursor
2026-03-19 09:24:10 +08:00
stswangzhiping
b4fa850445
feat(display): PIN 改为 4 位,showPinMiddle4 → showPin
...
Made-with: Cursor
2026-03-19 08:57:44 +08:00
stswangzhiping
e887f5b8e2
fix(display): 不在 ws.open 时 showTime,避免覆盖未激活时的 PIN 显示
...
Made-with: Cursor
2026-03-19 07:44:28 +08:00
stswangzhiping
57c0a1b6f8
feat(display): 未激活+连网时 VFD 显示 PIN 码中间4位
...
Made-with: Cursor
2026-03-19 07:37:57 +08:00
stswangzhiping
959a2b67f2
refactor(display): tie VFD display to WS connection state only
...
Made-with: Cursor
2026-03-18 21:17:36 +08:00
stswangzhiping
90bba5f348
feat: add SETUP/APPS status LEDs (b2/b1), toggle on activation
...
Made-with: Cursor
2026-03-18 20:25:54 +08:00