@upx-us/shield 0.7.13 → 0.8.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.
- package/CHANGELOG.md +68 -220
- package/README.md +47 -30
- package/dist/index.d.ts +64 -1
- package/dist/index.js +495 -133
- package/dist/src/case-monitor.d.ts +10 -1
- package/dist/src/case-monitor.js +50 -10
- package/dist/src/config.js +1 -1
- package/dist/src/events/browser/validations.js +8 -4
- package/dist/src/sender.d.ts +4 -0
- package/dist/src/sender.js +17 -12
- package/dist/src/updater.d.ts +7 -0
- package/dist/src/updater.js +66 -10
- package/openclaw.plugin.json +3 -3
- package/package.json +2 -2
- package/skills/shield/SKILL.md +14 -6
package/CHANGELOG.md
CHANGED
|
@@ -4,269 +4,117 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## [0.
|
|
7
|
+
## [0.8.1] — 2026-03-17
|
|
8
8
|
|
|
9
9
|
### Fixed
|
|
10
10
|
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
## [0.7.12] — 2026-03-16
|
|
16
|
-
|
|
17
|
-
### Fixed
|
|
18
|
-
|
|
19
|
-
- **Plugin showing permanently "Disconnected" after gateway hot-reload** — when the OpenClaw gateway reloaded the plugin module, a race condition between teardown and startup caused new startup attempts to silently abort. The previous instance's timers kept running but were invisible to the status command, resulting in permanent "Disconnected" status and missed telemetry cycles. The teardown is now properly awaited before startup proceeds.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## [0.7.11] — 2026-03-16
|
|
24
|
-
|
|
25
|
-
### Added
|
|
26
|
-
|
|
27
|
-
- **Debug logging mode** (`debugLog: true`) — writes timestamped logs to `~/.openclaw/shield/logs/shield-debug.log`. Captures the full startup sequence with numbered checkpoints (1–11 + SIGTERM) so disconnection issues can be pinpointed exactly. Off by default — safe on all existing installs.
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## [0.7.10] — 2026-03-16
|
|
32
|
-
|
|
33
|
-
### Added
|
|
34
|
-
|
|
35
|
-
- **`openclaw shield restart` command** — restarts Shield monitoring without a full gateway restart. Checks credentials, clears any stale update state, resets the session, and cycles the runtime. Use `--verbose` for step-by-step diagnostic output.
|
|
36
|
-
|
|
37
|
-
### Fixed
|
|
38
|
-
|
|
39
|
-
- **Plugin no longer silently stalls when telemetry consistently fails** — after 10 consecutive failed `reportInstance` calls, the plugin deactivates with a clear log message instead of running indefinitely with no output.
|
|
40
|
-
- **Update cycle cleanup after successful auto-update** — the periodic update check now properly stops all activity after calling a successful gateway restart, preventing a window where both the old and new instance could be active simultaneously.
|
|
11
|
+
- **Disconnected status after failed startup no longer wipes prior healthy activity** — when a new plugin runtime starts but fails before completing its first sync, Shield now preserves the last known-good state (poll time, sync time, session activity) instead of replacing it with a blank slate. Instances that appeared disconnected after a gateway reload now show accurate prior activity.
|
|
12
|
+
- **Plugin no longer advances into startup with partially-formed credentials** — a change in v0.7.5 caused the canonical ingest URL to be treated as a valid credential even when instance ID and HMAC secret were missing, allowing startup to proceed further than it should before failing and writing zero-state. Credential validation now requires all three fields.
|
|
13
|
+
- **Rapid version bumps no longer trigger multiple zero-state writes** — consecutive `openclaw.plugin.json` version changes (as seen in the v0.7.3→v0.7.6 series) could trigger multiple gateway hot-reload cycles, each writing a blank initial state before credential checks failed. The startup guard now prevents redundant state resets during re-registration.
|
|
41
14
|
|
|
42
15
|
### Changed
|
|
43
16
|
|
|
44
|
-
- **
|
|
45
|
-
- `bridge` terminology removed from all customer-visible log output and internal comments.
|
|
17
|
+
- **Status output shows last known-good activity when current runtime is disconnected** — if Shield is not running, the status command now surfaces when the last healthy poll and sync occurred, giving a clearer picture of what happened before the disconnect.
|
|
46
18
|
|
|
47
19
|
---
|
|
48
20
|
|
|
49
|
-
## [0.
|
|
21
|
+
## [0.8.0] — 2026-03-17
|
|
50
22
|
|
|
51
23
|
### Fixed
|
|
52
24
|
|
|
53
|
-
- **
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
## [0.7.8] — 2026-03-16
|
|
58
|
-
|
|
59
|
-
### Fixed
|
|
60
|
-
|
|
61
|
-
- **Bug causing the plugin to be repeatedly terminated by the gateway after updating** — The same boot-loop fix from v0.7.7 was missing from the gateway plugin entrypoint. When running as an OpenClaw plugin (the normal mode), the gateway would spawn the plugin, the plugin would trigger a new update check, send itself a restart signal, and get killed — silently repeating on every boot.
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## [0.7.7] — 2026-03-16
|
|
66
|
-
|
|
67
|
-
### Fixed
|
|
68
|
-
|
|
69
|
-
- **Bug preventing the plugin from starting after an auto-update** (#177): In certain conditions following an auto-update, the plugin would crash on every boot before processing any events. A gateway restart is sufficient to recover affected instances.
|
|
70
|
-
- **Bug causing incorrect plugin version to be reported in the dashboard** (#175): Some instances were reporting a stale version number in the platform dashboard instead of the currently installed version.
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## [0.7.6] — 2026-03-13
|
|
75
|
-
|
|
76
|
-
### Security
|
|
77
|
-
- **URL enforcement switched to allowlist** — plugin traffic is restricted to the Shield ingest endpoint. Any other URL is rejected and replaced with the default. No infrastructure details are disclosed in source.
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## [0.7.5] — 2026-03-13
|
|
82
|
-
|
|
83
|
-
### Security
|
|
84
|
-
- **Block direct platform backend calls** — `loadCredentials()` now detects and overrides any `SHIELD_API_URL` pointing to a platform backend (legacy Replit URLs, `uss.upx.com`). Plugin traffic is enforced to only reach the Shield ingest proxy. A second-layer check in the RPC client rejects blocked URLs even if config loading is bypassed.
|
|
85
|
-
- **Fix RPC `apiUrl` resolution** — RPC handlers now use the validated `apiUrl` from credentials instead of a non-existent config field (which silently fell through to `null`).
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
## [0.7.4] — 2026-03-13
|
|
89
|
-
|
|
90
|
-
### Changed
|
|
91
|
-
- Cases are now instance-scoped by default — the platform API filters cases so each instance only sees its own cases. This eliminates cross-instance notification flooding when multiple instances share an org.
|
|
92
|
-
- Removed `--mine` flag from `shield cases` and `shield cases list` — no longer needed since all returned cases belong to this instance.
|
|
93
|
-
- Removed `[mine]` / `[sibling]` per-case tags from list output.
|
|
94
|
-
- Removed sibling instance notice from `shield cases show`.
|
|
95
|
-
- Removed mixed-ownership attribution summary from case list output.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## [0.7.3] — 2026-03-13
|
|
100
|
-
|
|
101
|
-
### Fixed
|
|
102
|
-
- Trigger attribution (`trigger_type`, `author_name`, `trigger_type` fields) now works correctly in OpenClaw plugin mode — the plugin entry point was calling `transformEntries` without forwarding `sessionDirs`, so attribution was silently skipped on every event for all plugin-mode installations
|
|
103
|
-
- Session directory discovery is now robust when the plugin process is spawned with a different `HOME` environment variable than the main OpenClaw process (common on VPS and Docker deployments) — discovery now walks up from the plugin install path to find the `agents/` directory rather than relying solely on `homedir()`
|
|
104
|
-
- `trigger.type` is now always written to `tool_metadata` (as `"unknown"`) even when session directory lookup fails entirely, ensuring the field is never silently absent from SIEM events
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## [0.7.2] — 2026-03-13
|
|
109
|
-
|
|
110
|
-
### Fixed
|
|
111
|
-
- Events now always include a meaningful `trigger.type` field — previously, unresolved sessions silently omitted the field; they now report `unknown` for full visibility
|
|
112
|
-
- Attribution correctly handles sessions where the first user message contains non-text content blocks (images, structured context)
|
|
113
|
-
- Auto-updater no longer prunes the previous version backup during the install window — the safety net is preserved until the new version is confirmed running
|
|
114
|
-
- Gateway restart is now blocked if critical plugin files are missing or empty after install, preventing boot loops from incomplete updates
|
|
115
|
-
|
|
116
|
-
### Improved
|
|
117
|
-
- `shield logs` entries now include a `details` line (file path, command, or URL) and a `[trigger_type]` tag per event — significantly more useful for case investigation
|
|
118
|
-
- Each event type generates a meaningful one-line summary (`read: path/to/file`, `exec: npm test`, `fetch: example.com/api`) instead of just the tool name
|
|
119
|
-
- New `src/utils.ts` shared module — `trunc()` and `urlHost()` helpers consolidated with full unit test coverage
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## [0.7.1] — 2026-03-13
|
|
124
|
-
|
|
125
|
-
### Added
|
|
126
|
-
- Case ownership awareness: `shield cases` now shows which cases belong to this instance vs other instances in the org
|
|
127
|
-
- `--mine` flag for `shield cases` and `shield cases list` to filter to locally-owned cases
|
|
128
|
-
- Sibling case detail view: `shield cases show <ID>` notes when a case belongs to another org instance and clarifies that remote investigation requires direct platform access
|
|
129
|
-
- Attribution summary line when listing mixed-ownership cases
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## [0.7.0] — 2026-03-13
|
|
134
|
-
|
|
135
|
-
### Added
|
|
136
|
-
- **Event authorship & source attribution** — Shield now captures the source of every monitored agent action: who or what triggered it. Each event is tagged with an authorship category — a user via a messaging channel (Telegram, Discord, WhatsApp, etc.), a scheduled job, a periodic health check, a spawned sub-agent, or an autonomous agent action. This context appears alongside every event in your security dashboard, enabling "who caused this?" forensics on any alert or case.
|
|
137
|
-
- **Sender identity captured when available** — when an action is triggered by a user via a messaging channel, the user's display name and channel are captured in plain text for human-readable alerting. The raw user identifier is stored as a reversible token (recoverable locally via `openclaw shield vault show`).
|
|
25
|
+
- **Plugin could stay partially active after losing platform authorization** — when the platform revoked an instance's registration, Shield now fully shuts down all background activity immediately instead of only stopping event delivery. Prevents a state where the plugin appeared stopped but was still running internally.
|
|
26
|
+
- **Diagnostic state could be lost on unexpected crashes** — Shield now saves error details to disk immediately when a poll cycle fails, so the information is preserved even if the process exits right after.
|
|
27
|
+
- **Silent crash after first successful sync on certain Linux environments** — fixed an issue where Shield would start correctly, deliver the first batch of events, then crash silently without any log output. Affected VPS and containerized deployments.
|
|
138
28
|
|
|
139
29
|
### Changed
|
|
140
|
-
- **README updated** — new "Authorship & Event Source" section documents the authorship categories available in the dashboard.
|
|
141
30
|
|
|
142
|
-
|
|
143
|
-
-
|
|
31
|
+
- **`shield restart` is more reliable** — the restart sequence now uses a consistent reset path, reducing the chance of leftover state from a previous session affecting the new one.
|
|
32
|
+
- **Failed batch retries no longer skip already-delivered events** — when a sync cycle partially succeeds, Shield retries only what failed. Events already accepted by the platform are not re-sent.
|
|
144
33
|
|
|
145
34
|
---
|
|
146
35
|
|
|
147
|
-
## [0.
|
|
36
|
+
## [0.7 series] — 2026-03-13 to 2026-03-16
|
|
148
37
|
|
|
149
|
-
|
|
150
|
-
- **Local event buffer not populated in plugin mode** — `appendEvents` and `initEventStore` were implemented in the standalone bridge (`src/index.ts`) but never wired into the plugin-mode poll loop (`index.ts`). As a result, `openclaw shield logs` always returned "No events found" even when events were being sent successfully to the platform. Fixed by wiring the event store into the plugin-mode startup and poll cycle (#148).
|
|
38
|
+
> Versions 0.7.0–0.7.13. Individual patch notes consolidated below.
|
|
151
39
|
|
|
152
|
-
###
|
|
153
|
-
- **
|
|
154
|
-
- **
|
|
40
|
+
### Added across 0.7 series
|
|
41
|
+
- **Event authorship & source attribution** (0.7.0) — every monitored event is now tagged with its source: a user via a messaging channel, a scheduled job, a health check, a sub-agent, or an autonomous agent action. Enables "who caused this?" forensics on any alert or case.
|
|
42
|
+
- **Sender identity captured when available** (0.7.0) — when triggered by a user via a messaging channel, the user's display name and channel are captured for human-readable alerting.
|
|
43
|
+
- **`openclaw shield restart` command** (0.7.10) — restarts Shield monitoring without a full gateway restart. Use `--verbose` for step-by-step output.
|
|
44
|
+
- **Debug logging mode** (0.7.11) — opt-in detailed startup and runtime logs written to `~/.openclaw/shield/logs/shield-debug.log`. Off by default.
|
|
45
|
+
- **Instance-scoped cases** (0.7.4) — each instance only sees its own security cases; no cross-instance notification flooding in multi-instance orgs.
|
|
46
|
+
- **`shield logs` now includes event details and trigger context** (0.7.2) — each log entry shows the file path, command, or URL involved and what triggered the session.
|
|
155
47
|
|
|
156
|
-
###
|
|
157
|
-
-
|
|
158
|
-
- **
|
|
48
|
+
### Fixed across 0.7 series
|
|
49
|
+
- **Plugin commands disappearing after auto-update** (0.7.13) — `openclaw shield status` and all shield commands returned "unknown command" after an update. Fixed.
|
|
50
|
+
- **Permanent "Disconnected" status after gateway reload** (0.7.12) — a race condition between shutdown and startup left the plugin in a broken state. Fixed.
|
|
51
|
+
- **Plugin silently stalling on repeated telemetry failures** (0.7.10) — after 10 consecutive failures, the plugin now deactivates cleanly with a clear log message.
|
|
52
|
+
- **Update loop installing the same version repeatedly** (0.7.9) — the updater now verifies the candidate version is strictly newer before proceeding.
|
|
53
|
+
- **Boot loop after auto-update in plugin mode** (0.7.7, 0.7.8) — fixed a crash-on-boot cycle affecting gateway-loaded plugin mode.
|
|
54
|
+
- **Trigger attribution silently skipped in plugin mode** (0.7.3) — attribution fields were missing from all events on plugin-mode installations. Fixed.
|
|
55
|
+
- **Session directory discovery failing on VPS and Docker** (0.7.3) — discovery now works regardless of how `HOME` is set when the plugin process starts.
|
|
159
56
|
|
|
160
|
-
###
|
|
161
|
-
- **
|
|
162
|
-
-
|
|
57
|
+
### Changed across 0.7 series
|
|
58
|
+
- **Standalone `shield-bridge` binary removed** (0.7.10) — the plugin now runs exclusively as an OpenClaw gateway plugin. Running it directly shows installation instructions.
|
|
59
|
+
- **`--mine` flag removed from `shield cases`** (0.7.4) — no longer needed; all returned cases already belong to this instance.
|
|
163
60
|
|
|
164
61
|
---
|
|
165
62
|
|
|
166
|
-
## [0.6 series
|
|
167
|
-
|
|
168
|
-
> Versions 0.6.0–0.6.8 are superseded by 0.6.10. Individual release notes consolidated below.
|
|
63
|
+
## [0.6 series] — 2026-03-06 to 2026-03-12
|
|
169
64
|
|
|
170
65
|
### Added across 0.6 series
|
|
171
|
-
-
|
|
172
|
-
- **
|
|
173
|
-
-
|
|
174
|
-
-
|
|
175
|
-
- **
|
|
176
|
-
- **
|
|
177
|
-
- **
|
|
66
|
+
- **`openclaw shield logs`** — view recent events captured by Shield directly from the command line, with filtering by type, time window, and JSON output
|
|
67
|
+
- **Event context in logs** — each log entry now shows the file, command, or URL involved alongside what triggered the session
|
|
68
|
+
- **`openclaw shield vault show`** — inspect the local agent and workspace inventory with redaction token summary
|
|
69
|
+
- **Status diagnostics** — `shield status` now shows event buffer health, redaction counts by category, and clearer degradation signals
|
|
70
|
+
- **Plugin lifecycle signals** — Shield reports startup, update failures, and integrity changes to the platform for visibility in the dashboard
|
|
71
|
+
- **Message size tracking** — message events include the byte size of the message body, enabling size-based detection rules
|
|
72
|
+
- **Redaction coverage expanded** — credentials in `curl` commands (`-u`, `--user`, `Authorization: Basic`) are now redacted; npm package references no longer trigger false positives
|
|
178
73
|
|
|
179
74
|
### Fixed across 0.6 series
|
|
180
|
-
-
|
|
181
|
-
- **
|
|
182
|
-
- **
|
|
183
|
-
-
|
|
184
|
-
- **
|
|
185
|
-
- **npm redaction false positive** (0.6.7) — `@scope/package@version` no longer matched by SSH `user@host` regex
|
|
186
|
-
- **curl credential redaction** (0.6.8) — `curl -u`, `--user`, and `Authorization: Basic` all redacted as `secret:HASH`
|
|
187
|
-
- **`SHIELD_AUTO_UPDATE=false` ignored** (0.6.6) — env var now correctly parsed as boolean
|
|
75
|
+
- **`openclaw shield logs` always showing empty** — event capture was never connected to the local log store in plugin mode. Fixed.
|
|
76
|
+
- **Auto-update sometimes failing to recover after a bad restart** — the update state is now tracked persistently and retried before falling back to the previous version
|
|
77
|
+
- **Plugin reporting wrong version in the dashboard** — version detection is now reliable across macOS, Linux, and containerized environments
|
|
78
|
+
- **`SHIELD_AUTO_UPDATE=false` being ignored** — the environment variable is now parsed correctly
|
|
79
|
+
- **False-positive DEGRADED status in `shield status`** — a three-condition check now prevents transient failures from incorrectly marking the plugin as degraded
|
|
188
80
|
|
|
189
81
|
---
|
|
190
82
|
|
|
191
|
-
## [0.5
|
|
83
|
+
## [0.5 series] — 2026-03-06
|
|
192
84
|
|
|
193
|
-
### Added
|
|
194
|
-
-
|
|
85
|
+
### Added across 0.5 series
|
|
86
|
+
- **Plain language case notifications** — alerts now lead with a human-readable summary; technical rule details are available as a footnote
|
|
87
|
+
- **False positive exclusions** — mark a case as a false positive and Shield suppresses identical future alerts automatically. Manage via `openclaw shield exclusions`
|
|
195
88
|
|
|
196
89
|
---
|
|
197
90
|
|
|
198
|
-
## [0.
|
|
91
|
+
## [0.4 series] — 2026-03-05
|
|
199
92
|
|
|
200
|
-
### Added
|
|
201
|
-
- **
|
|
202
|
-
- **
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
93
|
+
### Added across 0.4 series
|
|
94
|
+
- **Case management** — `openclaw shield cases` to list open security cases; `cases show <ID>` for full detail including events and remediation playbook; `cases resolve <ID>` to close a case with resolution notes
|
|
95
|
+
- **Case notifications** — Shield polls for new cases and notifies you automatically
|
|
96
|
+
- **`openclaw shield logs`** — local rolling store of recent events for offline inspection and debugging, with filtering options
|
|
97
|
+
- **Agent and workspace inventory** — Shield discovers all agents running on the machine and surfaces cross-workspace activity in the dashboard
|
|
98
|
+
- **Auto-update** — Shield keeps itself up to date automatically. Patch and minor versions install with a rollback safety net; major versions notify only
|
|
99
|
+
- **Resilient local storage** — local state files recover automatically from corruption instead of causing crashes
|
|
207
100
|
|
|
208
|
-
### Fixed
|
|
209
|
-
-
|
|
101
|
+
### Fixed across 0.4 series
|
|
102
|
+
- **Auto-update continuing to run after a failed gateway restart** — Shield now holds at the previous version until the restart succeeds
|
|
103
|
+
- **Stale process warnings in `shield status`** — the status command now detects when a previously recorded process is no longer running and reports it clearly
|
|
210
104
|
|
|
211
105
|
---
|
|
212
106
|
|
|
213
|
-
## [0.
|
|
214
|
-
|
|
215
|
-
Consolidated from 0.4.0–0.4.12.
|
|
216
|
-
|
|
217
|
-
### Added
|
|
218
|
-
- **Case management** — `openclaw shield cases` CLI command to list open security cases, `cases show <ID>` for full detail with events, rule info, and playbook, `cases resolve <ID>` with `--resolution`, `--root-cause`, and `--comment` flags.
|
|
219
|
-
- **Case notification system** — agent polls platform for new cases and notifies users. Case monitor with pending notification queue and acknowledgment.
|
|
220
|
-
- 4 case RPCs: `shield.cases_list`, `shield.case_detail`, `shield.case_resolve`, `shield.cases_ack`.
|
|
221
|
-
- **Local event buffer** — rolling store of recently sent events for offline inspection and debugging. `openclaw shield logs` command with `--last`, `--type`, `--since`, and `--format` options. `shield.events_recent` and `shield.events_summary` RPCs now return local data. Configurable via `SHIELD_LOCAL_EVENT_BUFFER` and `SHIELD_LOCAL_EVENT_LIMIT`.
|
|
222
|
-
- **Host agent/workspace inventory** — scans agents on startup, persists to local vault. Cross-workspace access detection enriches events. New token categories: `agent:HASH`, `workspace:HASH`. `openclaw shield vault show` displays inventory with hashed IDs and redaction token summary.
|
|
223
|
-
- **Auto-update** — plugin checks for updates on gateway restart and every 6 hours. Patch and minor versions install automatically with backup and rollback safety. Major versions notify only.
|
|
224
|
-
- **Chained command detection** — exec events parse shell chains (`&&`, `||`, `;`) to detect destructive commands regardless of position.
|
|
225
|
-
- **Atomic file writes** (`writeJsonSafe`) for status, stats, vault, updater state, and IP cache — prevents corruption on crash or disk-full.
|
|
226
|
-
- **Corrupt JSON recovery** (`readJsonSafe`) — auto-recovers from corrupted state files instead of crash-looping.
|
|
227
|
-
- Skill validation tests (26 tests) to prevent infrastructure leaks in ClawHub-published content.
|
|
228
|
-
- ClawHub frontmatter metadata, gating via `requires.config`, cross-references between npm/ClawHub/dashboard.
|
|
229
|
-
- `callPlatformApi` now supports GET and POST methods.
|
|
230
|
-
- Platform attribution in case detail responses.
|
|
231
|
-
- Tarball shasum preserved in `openclaw.json` after self-update.
|
|
232
|
-
- Plugin metadata sync prevents OpenClaw core updates from removing the plugin.
|
|
107
|
+
## [0.3 series] — 2026-02-26 to 2026-03-03
|
|
233
108
|
|
|
234
|
-
###
|
|
235
|
-
- Auto-update
|
|
236
|
-
-
|
|
237
|
-
-
|
|
238
|
-
-
|
|
109
|
+
### Added across 0.3 series
|
|
110
|
+
- **Auto-update** — Shield checks for newer versions on startup and installs them automatically with backup and rollback safety
|
|
111
|
+
- **Chained command detection** — Shell chains (`&&`, `||`, `;`) are parsed so detection rules can match commands regardless of their position in a sequence
|
|
112
|
+
- **Quick Install** — terminal-based setup flow that doesn't require agent involvement
|
|
113
|
+
- Location and identity data included in telemetry for geo-correlation in the dashboard
|
|
239
114
|
|
|
240
|
-
###
|
|
241
|
-
-
|
|
242
|
-
-
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## [0.3.29] — 2026-03-03
|
|
247
|
-
|
|
248
|
-
Consolidated from 0.3.0–0.3.28.
|
|
249
|
-
|
|
250
|
-
### Added
|
|
251
|
-
- **Auto-update** — Shield checks for newer versions and installs them automatically. Patch and minor versions install with backup and rollback safety. Major versions notify only. Configure via `autoUpdate` in plugin config.
|
|
252
|
-
- **Chained command detection** — exec events parse chained commands (`&&`, `||`, `;`) to extract all commands in a chain.
|
|
253
|
-
- Public IP and instance name included in telemetry for geo-enrichment and display.
|
|
254
|
-
- Update check on gateway startup — no longer need to wait for the 6-hour cycle.
|
|
255
|
-
- Commands reference table in README.
|
|
256
|
-
- Quick Install section for terminal-based setup (no agent needed).
|
|
257
|
-
|
|
258
|
-
### Fixed
|
|
259
|
-
- Plugin no longer deactivates on transient registration failures at startup. Retries up to 10 times before exiting.
|
|
260
|
-
- Auto-update now wired into the plugin entry point (the file OpenClaw actually loads).
|
|
261
|
-
- Auto-update now syncs `plugins.installs.shield` metadata in `openclaw.json` after self-updating — prevents OpenClaw core updates from removing the plugin.
|
|
262
|
-
- Auto-update now computes and preserves tarball shasum in `openclaw.json` metadata after self-update.
|
|
263
|
-
- Detection rules can now match destructive commands embedded after chain operators.
|
|
264
|
-
|
|
265
|
-
### Changed
|
|
266
|
-
- README installation section fully rewritten: three clear options (Quick Install, Agent Configure, Agent Full), command reference table, concern table, manual steps.
|
|
267
|
-
- Agent refusal guidance added with explicit trust confirmation prompt and concern-by-concern explanation table.
|
|
268
|
-
- Quick Start prompt rewritten to address agent security concerns (redaction model, npm scope trust, installation key purpose).
|
|
269
|
-
- CHANGELOG.md now bundled with the npm package.
|
|
115
|
+
### Fixed across 0.3 series
|
|
116
|
+
- Plugin no longer stops monitoring on transient registration failures at startup — retries before giving up
|
|
117
|
+
- Auto-update now correctly preserves plugin registration in OpenClaw after installing a new version
|
|
270
118
|
|
|
271
119
|
---
|
|
272
120
|
|
package/README.md
CHANGED
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
# OpenClaw Shield
|
|
2
2
|
|
|
3
3
|
> **OpenClaw Shield is a paid security service by UPX.**
|
|
4
|
-
> Start your **free
|
|
4
|
+
> Start your **free 60-day trial (no credit card required)** at [upx.com/en/lp/openclaw-shield-upx](https://www.upx.com/en/lp/openclaw-shield-upx).
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
**OpenClaw Shield** is the first SIEM-powered security solution built for AI agents — not to control what they *can* do, but to detect what they *did*.
|
|
7
|
+
|
|
8
|
+
While agent sandboxes block at the gate, Shield watches from inside: every tool call, file read, command execution, and outbound request is ingested, enriched, and matched against behavioral detection rules in real time. Anomalies become cases. Cases get playbooks.
|
|
9
|
+
|
|
10
|
+
**What you get:**
|
|
11
|
+
- 🔍 **90+ detection rules** tuned for OpenClaw agents — continuously curated and expanded by UPX security experts
|
|
12
|
+
- 📋 Automated case generation with remediation playbooks
|
|
13
|
+
- 🔒 Cryptographic event integrity (HMAC-SHA256, AES-256-GCM)
|
|
14
|
+
- 🏷️ Full trigger attribution — who prompted what, when, and why
|
|
15
|
+
- 🧹 Built-in data redaction before events leave the host
|
|
16
|
+
- ☁️ **Powered by Google SecOps (Chronicle)** — the same enterprise SIEM trusted by security teams worldwide
|
|
17
|
+
|
|
18
|
+
> Shield is designed to complement the security controls built into OpenClaw and any Claw-based solution — not replace them. Zero-trust policies, sandboxed execution, and private routing control what your agent *can* do. Shield adds what they can't: a continuous forensic record of what it *did*, with behavioral detection and automated case management on top.
|
|
19
|
+
>
|
|
20
|
+
> Works alongside any hardening strategy, out of the box.
|
|
21
|
+
> *For example, solutions like NemoClaw control the perimeter. Shield owns the forensics.*
|
|
22
|
+
|
|
23
|
+
---
|
|
7
24
|
|
|
8
25
|
**Shield is a local collector.** It captures agent activity, redacts sensitive data, and forwards clean telemetry to the UPX platform at [uss.upx.com](https://uss.upx.com) — where security rules, correlation, alerting, playbooks, and case management give your team full visibility. The plugin itself stays lean and transparent; all the heavy lifting happens on the platform side.
|
|
9
26
|
|
|
10
27
|
```
|
|
11
|
-
Your Agent → Shield (local: capture + redact) → UPX Platform (
|
|
28
|
+
Your Agent → Shield (local: capture + redact) → UPX Platform → Google SecOps (detection, cases, forensics)
|
|
12
29
|
```
|
|
13
30
|
|
|
14
31
|
---
|
|
@@ -176,6 +193,8 @@ openclaw gateway restart
|
|
|
176
193
|
|
|
177
194
|
## What to expect after activation
|
|
178
195
|
|
|
196
|
+
Shield's agent skill communicates with you in your language. Alerts, case summaries, and recommendations are presented in whichever language you use — raw command output and technical identifiers (rule names, case IDs, field names) are always kept as-is.
|
|
197
|
+
|
|
179
198
|
After restart, Shield exchanges your key for permanent credentials — this takes a few seconds. You should see your first events within the first poll cycle (~30 seconds). Within 1–2 minutes, those events will appear on the platform at [uss.upx.com](https://uss.upx.com).
|
|
180
199
|
|
|
181
200
|
Run `openclaw shield status` to confirm:
|
|
@@ -183,41 +202,39 @@ Run `openclaw shield status` to confirm:
|
|
|
183
202
|
**Just activated (first minute):**
|
|
184
203
|
|
|
185
204
|
```
|
|
186
|
-
OpenClaw Shield — v0.
|
|
205
|
+
OpenClaw Shield — v0.8.x (5s ago)
|
|
187
206
|
|
|
188
|
-
──
|
|
189
|
-
|
|
190
|
-
Version: 0.
|
|
207
|
+
── Status ────────────────────────────────────
|
|
208
|
+
✅ Running · Connected
|
|
209
|
+
Version: 0.8.x
|
|
191
210
|
Instance: a1b2c3d4…
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
Events sent
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
Session: 0m
|
|
211
|
+
|
|
212
|
+
── Monitoring ────────────────────────────────
|
|
213
|
+
Events: 3 sent · 0 quarantined
|
|
214
|
+
Failures: 0 poll · 0 telemetry
|
|
215
|
+
Session: 0m active
|
|
216
|
+
Last data: poll 5s ago · capture 5s ago
|
|
199
217
|
```
|
|
200
218
|
|
|
201
|
-
A low event count and a recent `Last
|
|
219
|
+
A low event count and a recent `Last data` time means Shield is working correctly. Events accumulate as your agent uses tools.
|
|
202
220
|
|
|
203
221
|
> **Note:** The Activity and Redactions sections appear after your first sync cycle (~30s). If your status looks shorter than the "extended use" example below, that's normal — they'll populate automatically.
|
|
204
222
|
|
|
205
223
|
**After extended use:**
|
|
206
224
|
|
|
207
225
|
```
|
|
208
|
-
OpenClaw Shield — v0.
|
|
226
|
+
OpenClaw Shield — v0.8.x (5s ago)
|
|
209
227
|
|
|
210
|
-
──
|
|
211
|
-
|
|
212
|
-
Version: 0.
|
|
228
|
+
── Status ────────────────────────────────────
|
|
229
|
+
✅ Running · Connected
|
|
230
|
+
Version: 0.8.x
|
|
213
231
|
Instance: a1b2c3d4…
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
Events
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
Session: 4h 12m
|
|
232
|
+
|
|
233
|
+
── Monitoring ────────────────────────────────
|
|
234
|
+
Events: 1,842 sent · 0 quarantined
|
|
235
|
+
Failures: 0 poll · 0 telemetry
|
|
236
|
+
Session: 4h 12m active
|
|
237
|
+
Last data: poll 5s ago · capture 14s ago
|
|
221
238
|
|
|
222
239
|
── Activity ──────────────────────────────────
|
|
223
240
|
|
|
@@ -238,7 +255,7 @@ OpenClaw Shield — v0.3.x (5s ago)
|
|
|
238
255
|
**When not activated:**
|
|
239
256
|
|
|
240
257
|
```
|
|
241
|
-
OpenClaw Shield — v0.
|
|
258
|
+
OpenClaw Shield — v0.8.x
|
|
242
259
|
|
|
243
260
|
Status: Loaded (not activated)
|
|
244
261
|
|
|
@@ -473,7 +490,7 @@ When `autoUpdate` is `true`, Shield backs up the current version before installi
|
|
|
473
490
|
→ Increase poll interval: `"pollIntervalMs": 60000` in plugin config (default: 30000ms)
|
|
474
491
|
|
|
475
492
|
**Cursor file issues**
|
|
476
|
-
→ To reset: `rm ~/.openclaw/shield/data/
|
|
493
|
+
→ To reset: `rm ~/.openclaw/shield/data/cursor.json` — Shield reinitializes on next poll
|
|
477
494
|
|
|
478
495
|
**Dry-run mode (no events sent)**
|
|
479
496
|
→ Add `"dryRun": true` to plugin config — events are processed and logged but never transmitted
|
|
@@ -507,10 +524,10 @@ See CHANGELOG.md included with the plugin.
|
|
|
507
524
|
When a subscription lapses or the monthly event quota is exhausted, Shield detects this on the next ingest call and will:
|
|
508
525
|
|
|
509
526
|
1. Log a clear warning
|
|
510
|
-
2.
|
|
527
|
+
2. Pause delivery and retain cursor position so events can be retried after service is restored
|
|
511
528
|
3. Show elevated consecutive failures in `openclaw shield status`
|
|
512
529
|
|
|
513
|
-
|
|
530
|
+
Renew your subscription at [uss.upx.com](https://uss.upx.com) and restart the gateway to resume delivery.
|
|
514
531
|
|
|
515
532
|
---
|
|
516
533
|
|
package/dist/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ interface StatusWarningInput {
|
|
|
21
21
|
}
|
|
22
22
|
export declare function getStatusWarnings(input: StatusWarningInput): string[];
|
|
23
23
|
interface OpenClawPluginAPI {
|
|
24
|
-
config?:
|
|
24
|
+
config?: OpenClawConfig;
|
|
25
25
|
pluginConfig?: Record<string, unknown>;
|
|
26
26
|
logger: {
|
|
27
27
|
info(msg: string): void;
|
|
@@ -42,7 +42,70 @@ interface OpenClawPluginAPI {
|
|
|
42
42
|
}) => void, opts?: {
|
|
43
43
|
commands: string[];
|
|
44
44
|
}): void;
|
|
45
|
+
runtime?: OpenClawRuntime;
|
|
46
|
+
registerCommand?: (definition: {
|
|
47
|
+
name: string;
|
|
48
|
+
description: string;
|
|
49
|
+
requireAuth?: boolean;
|
|
50
|
+
handler: () => {
|
|
51
|
+
text: string;
|
|
52
|
+
} | Promise<{
|
|
53
|
+
text: string;
|
|
54
|
+
}>;
|
|
55
|
+
}) => void;
|
|
45
56
|
}
|
|
57
|
+
interface OpenClawSystemRuntime {
|
|
58
|
+
enqueueSystemEvent?: (text: string, options: {
|
|
59
|
+
sessionKey: string;
|
|
60
|
+
contextKey?: string | null;
|
|
61
|
+
}) => boolean;
|
|
62
|
+
requestHeartbeatNow?: (opts?: {
|
|
63
|
+
reason?: string;
|
|
64
|
+
agentId?: string;
|
|
65
|
+
sessionKey?: string;
|
|
66
|
+
}) => void;
|
|
67
|
+
}
|
|
68
|
+
interface OpenClawChannelRuntime {
|
|
69
|
+
telegram?: {
|
|
70
|
+
sendMessageTelegram?: (to: string, text: string, opts?: Record<string, unknown>) => Promise<unknown>;
|
|
71
|
+
};
|
|
72
|
+
discord?: {
|
|
73
|
+
sendMessageDiscord?: (to: string, text: string, opts?: Record<string, unknown>) => Promise<unknown>;
|
|
74
|
+
};
|
|
75
|
+
whatsapp?: {
|
|
76
|
+
sendMessageWhatsApp?: (to: string, text: string, opts?: Record<string, unknown>) => Promise<unknown>;
|
|
77
|
+
};
|
|
78
|
+
slack?: {
|
|
79
|
+
sendMessageSlack?: (to: string, text: string, opts?: Record<string, unknown>) => Promise<unknown>;
|
|
80
|
+
};
|
|
81
|
+
signal?: {
|
|
82
|
+
sendMessageSignal?: (to: string, text: string, opts?: Record<string, unknown>) => Promise<unknown>;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
interface OpenClawRuntime {
|
|
86
|
+
system?: OpenClawSystemRuntime;
|
|
87
|
+
channel?: OpenClawChannelRuntime;
|
|
88
|
+
}
|
|
89
|
+
interface OpenClawAgentConfig {
|
|
90
|
+
default?: string;
|
|
91
|
+
}
|
|
92
|
+
interface OpenClawChannelAccountConfig {
|
|
93
|
+
enabled?: boolean;
|
|
94
|
+
allowFrom?: string[];
|
|
95
|
+
defaultTo?: string;
|
|
96
|
+
}
|
|
97
|
+
interface OpenClawChannelsConfig {
|
|
98
|
+
telegram?: OpenClawChannelAccountConfig;
|
|
99
|
+
discord?: OpenClawChannelAccountConfig;
|
|
100
|
+
whatsapp?: OpenClawChannelAccountConfig;
|
|
101
|
+
slack?: OpenClawChannelAccountConfig;
|
|
102
|
+
signal?: OpenClawChannelAccountConfig;
|
|
103
|
+
}
|
|
104
|
+
interface OpenClawConfig {
|
|
105
|
+
agents?: OpenClawAgentConfig;
|
|
106
|
+
channels?: OpenClawChannelsConfig;
|
|
107
|
+
}
|
|
108
|
+
export declare function _resetForTesting(): void;
|
|
46
109
|
declare const _default: {
|
|
47
110
|
id: string;
|
|
48
111
|
name: string;
|