@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 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.13] — 2026-03-16
7
+ ## [0.8.1] — 2026-03-17
8
8
 
9
9
  ### Fixed
10
10
 
11
- - **`openclaw shield` commands missing after auto-update** the auto-updater was deleting the `integrity` field from `openclaw.json` without recomputing it. OpenClaw 2026.3.13+ requires this field to wire plugin CLI commands; without it the plugin loads but `openclaw shield status` and all shield commands fail with "unknown command". The updater now computes the correct SRI `sha512` integrity hash from the downloaded tarball and writes it to the install record.
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
- - **Standalone `shield-bridge` binary removed** the plugin now runs exclusively as an OpenClaw gateway plugin. Running `npx @upx-us/shield` directly shows a clear message with installation instructions. This eliminates a source of divergent behavior that caused the v0.7.7 incident.
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.7.9] — 2026-03-16
21
+ ## [0.8.0] — 2026-03-17
50
22
 
51
23
  ### Fixed
52
24
 
53
- - **Bug causing the plugin to repeatedly reinstall itself to the same version** — After a self-update, the plugin could enter a loop installing the already-installed version (e.g. 0.7.8 0.7.8) because the cached update state was not cleared correctly. The updater now verifies that the candidate version is strictly newer than the running version before proceeding with any install.
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
- ### Notes
143
- - Fully backward compatible. Existing deployments continue to work without any configuration changes. Authorship context is captured automatically on upgrade.
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.6.10] — 2026-03-12
36
+ ## [0.7 series] — 2026-03-13 to 2026-03-16
148
37
 
149
- ### Fixed
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
- ### Changed
153
- - **Local event buffer default increased to 250** was 123. Provides better forensic coverage (~24h of normal activity) without significant storage impact. `SHIELD_LOCAL_EVENT_LIMIT` env var still overrides this. README and config updated (#148).
154
- - **Version corrected from 1.3.0 0.6.10**the 1.3.0 version in `package.json` was premature; this release re-anchors versioning at the correct next increment after 0.6.8.
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
- ### Added
157
- - **`openclaw.message_length_bytes` enrichment field** message events now include the byte length of the message body as `openclaw.message_length_bytes`. Enables detection rules based on message size thresholds (#152).
158
- - **Event buffer diagnostics in `shield.status`** `shield.status` RPC now includes an `eventBuffer` section showing: `enabled`, `path`, `total` events buffered, `oldest`/`newest` timestamps, and `redactedCount`. Makes it immediately diagnosable if the local log is empty or disabled (#148).
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
- ### Docs
161
- - **Case investigation workflow in SKILL.md**documents the standard 4-step forensic procedure: cases + logs + vault correlation for complete incident context. Covers correlating case timestamps, log event windows, and redaction vault lookups (#148, #151).
162
- - **Expanded uninstall documentation in README** step-by-step uninstall guide covering plugin removal, local data cleanup (with file-by-file breakdown), and platform instance deactivation. Includes redaction vault retention warning (#151).
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 summary] — 2026-03-06 to 2026-03-10
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
- - **Transformer gap fields** (0.6.0) 7 new enrichment fields unblocking ~20 SIEM detection rules: `openclaw.secret_in_command`, `openclaw.channel`, `openclaw.chat_type`, `openclaw.message_content`, `openclaw.browser_action`, `openclaw.config_change`, `openclaw.file_size_bytes`
172
- - **Plugin lifecycle events** (0.6.6) startup, update failure, integrity drift, and check-failing signals forwarded to the platform via `PUT /v1/instance`
173
- - **Smart degradation detection in `shield status`** (0.6.5) three-gate algorithm (count + time + sticky recovery) eliminating false-positive DEGRADED alerts
174
- - **`_skill_hint` in RPC responses** (0.6.0) machine-readable hint in all Shield RPC replies
175
- - **Postinstall guidance** (0.6.7) clear warning when plugin is installed outside OpenClaw
176
- - **First event confirmation log** (0.6.7) `✅ First event delivered` emitted once per process lifetime
177
- - **Vault summary in `shield.status`** (0.6.7) redaction vault breakdown by category
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
- - **Auto-update restart resilience** (0.6.1) `pendingRestart` tracked in state, retried for 5 cycles then rolls back to backup
181
- - **ANSI field prefix** (0.6.2) `ansi_content_detected`/`ansi_sequences` now correctly namespaced as `openclaw.*`
182
- - **Version normalization** (0.6.3) messy `openclaw --version` strings normalized to clean semver
183
- - **Missing public IP in telemetry** (0.6.3) `PUT /v1/instance` always includes `public_ip` (sends `""` instead of omitting)
184
- - **Case monitor exclusions crash** (0.6.4)soft dependency: if exclusions not initialized, cases forwarded unfiltered instead of throwing
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.38] — 2026-03-06
83
+ ## [0.5 series] — 2026-03-06
192
84
 
193
- ### Added
194
- - `_skill_hint` field in all RPC responses (agent-facing, invisible to users)
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.5.18] — 2026-03-06
91
+ ## [0.4 series] — 2026-03-05
199
92
 
200
- ### Added
201
- - **User-friendly case notifications** — notifications now use plain language summaries when available, with technical details (rule title, MITRE technique) as a `📎` footnote.
202
- - **False positive exclusions** — mark a case as false positive and Shield auto-suppresses identical future alerts for your instance.
203
- - `openclaw shield exclusions`list active exclusions.
204
- - `openclaw shield exclusions remove <ID>` re-enable alerts by removing an exclusion.
205
- - RPCs: `shield.exclusions_list`, `shield.exclusion_add`, `shield.exclusion_remove`.
206
- - Pattern normalization: IPs, UUIDs, timestamps, and hashes are generalized so the same type of event matches regardless of specific values.
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
- - Campaign URLs updated to English (`/en/` instead of `/pt/`).
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.4.36] — 2026-03-05
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
- ### Fixed
235
- - Auto-update no longer kills bridge when gateway restart fails continues running with old version in memory.
236
- - Stale PID detection in `shield status` warns when daemon PID is no longer running.
237
- - OpenClaw version detection: replaced hardcoded macOS paths with platform-independent `require.resolve` + `execSync` fallback.
238
- - HMAC signing in RPC client aligned with sender format (`fingerprint:nonce`).
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
- ### Changed
241
- - Installation instructions rewritten: three options (Quick Install, Agent Configure, Agent Full) with command reference table and agent refusal guidance.
242
- - CHANGELOG.md now bundled with npm package.
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 30-day trial** at [upx.com/en/lp/openclaw-shield-upx](https://www.upx.com/en/lp/openclaw-shield-upx).
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
- Real-time security monitoring for your OpenClaw agents — powered by the UPX Shield detection platform.
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 (analysis, alerts, detections)
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.3.x (5s ago)
205
+ OpenClaw Shield — v0.8.x (5s ago)
187
206
 
188
- ── Plugin Health ─────────────────────────────
189
- Connection: ✅ Connected
190
- Version: 0.3.x
207
+ ── Status ────────────────────────────────────
208
+ Running · Connected
209
+ Version: 0.8.x
191
210
  Instance: a1b2c3d4…
192
- Last poll: 5s ago
193
- Last capture: 5s ago
194
- Events sent: 3 (all-time)
195
- Quarantine: 0 (all-time)
196
- Failures: 0 (consecutive)
197
- Daemon PID: 12345
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 capture` time means Shield is working correctly. Events accumulate as your agent uses tools.
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.3.x (5s ago)
226
+ OpenClaw Shield — v0.8.x (5s ago)
209
227
 
210
- ── Plugin Health ─────────────────────────────
211
- Connection: ✅ Connected
212
- Version: 0.3.x
228
+ ── Status ────────────────────────────────────
229
+ Running · Connected
230
+ Version: 0.8.x
213
231
  Instance: a1b2c3d4…
214
- Last poll: 5s ago
215
- Last capture: 14s ago
216
- Events sent: 1,842 (all-time)
217
- Quarantine: 0 (all-time)
218
- Failures: 0 (consecutive)
219
- Daemon PID: 12345
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.3.x
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/cursors.json` — Shield reinitializes on next poll
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. Stop transmitting events **events are dropped, not queued**
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
- Events generated during an expiry or quota period are permanently lost. Renew your subscription at [uss.upx.com](https://uss.upx.com) and restart the gateway to resume.
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?: Record<string, unknown>;
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;