You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update release links, project inventory, connection architecture, MCP mode, Windows node testing, and test coverage docs to match current app behavior.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copy file name to clipboardExpand all lines: AGENTS.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,6 +13,8 @@ Required steps:
13
13
3. Run tray tests:
14
14
-`dotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restore`
15
15
16
+
This is the required local closeout subset for agents. CI also builds and runs additional connection, setup, CLI, UI, integration, and E2E suites; see `docs/TEST_COVERAGE.md` for the broader inventory.
|**OpenClaw.Connection**| Gateway registry, credential resolution, and connection manager |
25
+
|**OpenClaw.Shared**| Shared gateway client library, capabilities, and MCP bridge |
26
+
|**OpenClaw.Chat**| Native chat model and timeline reducer |
25
27
|**OpenClaw.Cli**| CLI validator for WebSocket connect/send/probe using tray settings |
28
+
|**OpenClaw.WinNode.Cli**|`winnode` CLI for invoking local Windows node/MCP capabilities |
29
+
|**OpenClaw.SetupEngine**| Local gateway setup, WSL installation, and setup-code support |
26
30
27
31
## 🚀 Quick Start
28
32
29
33
> **End-user installer?** Download the latest stable x64 or ARM64 installer from the [OpenClaw Windows docs](https://docs.openclaw.ai/platforms/windows), or see [docs/SETUP.md](docs/SETUP.md) for step-by-step installation (no build required).
30
34
>
31
35
> **Managed WSL gateway?** Local setup creates a locked-down app-owned `OpenClawGateway` distro. See [docs/WSL_GATEWAY_ADMIN.md](docs/WSL_GATEWAY_ADMIN.md) for editing `openclaw.json` as the `openclaw` user and using root for protected-file administration.
32
36
33
-
Direct downloads from the latest OpenClaw release:
37
+
Direct downloads from the latest OpenClaw Windows release:
12. Ensure NodeService exists before gateway initialization
86
+
13. Call InitializeGatewayClient() → connects to active gateway
83
87
```
84
88
85
89
Settings changes are classified by `SettingsChangeClassifier.Classify()` which compares `ConnectionSettingsSnapshot` before/after to determine the minimum reconnect action:
Each `GatewayRecord` contains: `Id`, `Url`, `FriendlyName`, `SharedGatewayToken`, `BootstrapToken`, `LastConnected`, `SshTunnel` config, and an `IdentityDirName`.
133
+
Each `GatewayRecord` contains: `Id`, `Url`, `FriendlyName`, `SharedGatewayToken`, `BootstrapToken`, `LastConnected`, `SshTunnel` config, `IsLocal`, `RequiresV2Signature`, `SetupManagedDistroName`, and `BrowserControlPort`. The `IdentityDirName` property is computed from `Id`.
130
134
131
135
`SettingsManager` still owns general tray settings (node mode, MCP mode, SSH tunnel toggles, notifications, UI preferences). It may read legacy `Token` / `BootstrapToken` JSON fields into memory for migration, but save must not write those legacy credential fields back.
132
136
@@ -143,6 +147,13 @@ The invariant is that a paired device token always wins. Do not downgrade a pair
143
147
144
148
**`CredentialResolver`** implements the precedence for WebSocket connections (operator and node roles).
145
149
150
+
Node credential precedence follows the same invariant with a distinct stored token:
151
+
152
+
1.**Stored node device token** in the per-gateway identity directory.
153
+
2.**`GatewayRecord.SharedGatewayToken`** — shared token fallback when no paired node token exists.
4.**No credential** — caller logs and skips node client init.
156
+
146
157
**`InteractiveGatewayCredentialResolver`** resolves credentials for HTTP surfaces (chat URL `?token=` auth). It **prefers SharedGatewayToken** over DeviceToken because HTTP endpoints expect the shared token, not the per-device WebSocket token.
147
158
148
159
## Client instance lifecycle
@@ -176,7 +187,7 @@ When **another** device or node requests pairing, the gateway broadcasts `device
176
187
177
188
## SSH tunnel integration
178
189
179
-
`SshTunnelService` manages an SSH local port-forward process. `SshTunnelManager` wraps it behind `ISshTunnelManager` for the connection manager.
190
+
`SshTunnelService` manages an SSH local port-forward process and implements `ISshTunnelManager` directly for the connection manager.
180
191
181
192
When a `GatewayRecord` has `SshTunnel` config, the connection manager starts the tunnel before connecting the WebSocket client to `ws://localhost:<localPort>`. The config stores the SSH daemon port (`sshPort`, default `22`) separately from the remote gateway port forwarded by `-L`.
182
193
@@ -200,8 +211,9 @@ The `EnableMcpServer=true`, `EnableNodeMode=false` path creates a local-only `No
200
211
Tray actions should never silently no-op on common pairing/configuration issues:
201
212
202
213
- Chat resolves credentials from the active registry record and per-gateway identity. If no usable credential exists, it opens Connection settings instead.
203
-
- Canvas opens only when the Windows node is initializedand paired; otherwise it opens Connection settings.
214
+
- Canvas opens only when the Windows node is initialized, paired, and the Canvas capability is enabled in settings; otherwise it opens Connection settings.
204
215
- Quick Send uses the live operator client and surfaces scope/pairing errors from gateway calls.
216
+
-`system.run` and `system.run.prepare` are gated by `NodeSystemRunEnabled` (default `true` for backward compatibility). When disabled, those commands are dropped from advertised capabilities and invocations are rejected.
Copy file name to clipboardExpand all lines: docs/MCP_MODE.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -100,12 +100,12 @@ public bool EnableNodeMode { get; set; } // open WebSocket to gateway
100
100
publicboolEnableMcpServer { get; set; } // run local MCP HTTP server
101
101
```
102
102
103
-
|`EnableNodeMode`|`EnableMcpServer`|Result|
103
+
|`EnableNodeMode`|`EnableMcpServer`|Behavior|
104
104
|---|---|---|
105
-
|off|off| Operator-only (legacy default) |
106
-
|off|on|**MCP server only, no gateway**|
107
-
|on|off| Gateway node, no MCP |
108
-
|on|on| Gateway node + MCP |
105
+
|false|false| Operator-only (legacy default) |
106
+
|false|true|**MCP server only, no gateway**|
107
+
|true|false| Gateway node, no MCP |
108
+
|true|true| Gateway node + MCP |
109
109
110
110
Settings UI exposes both toggles in the Advanced section, with the live MCP endpoint URL and current status (`Listening` / `Stopped — save and restart to start` / `Disabled`).
@@ -188,7 +188,7 @@ Settings are stored at `%APPDATA%\OpenClawTray\settings.json`. If this file is c
188
188
189
189
## Updating
190
190
191
-
OpenClaw Companion checks for updates automatically and shows a notification when a new version is available. Click **Update** to download and apply the update. You can also manually check by re-downloading from the [OpenClaw Windows docs](https://docs.openclaw.ai/platforms/windows) or the [latest OpenClaw release](https://github.com/openclaw/openclaw/releases/latest).
191
+
OpenClaw Companion checks for updates automatically and shows a notification when a new version is available. Click **Update** to download and apply the update. You can also manually check by re-downloading from the [OpenClaw Windows docs](https://docs.openclaw.ai/platforms/windows) or the [latest OpenClaw Windows release](https://github.com/openclaw/openclaw-windows-node/releases/latest).
0 commit comments