@upx-us/shield 0.7.12 → 0.8.0

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,261 +4,103 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ---
6
6
 
7
- ## [0.7.12] — 2026-03-16
7
+ ## [0.8.0] — 2026-03-17
8
8
 
9
9
  ### Fixed
10
10
 
11
- - **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.
12
-
13
- ---
14
-
15
- ## [0.7.11] — 2026-03-16
16
-
17
- ### Added
18
-
19
- - **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.
20
-
21
- ---
22
-
23
- ## [0.7.10] — 2026-03-16
24
-
25
- ### Added
26
-
27
- - **`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.
28
-
29
- ### Fixed
30
-
31
- - **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.
32
- - **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.
33
-
34
- ### Changed
35
-
36
- - **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.
37
- - `bridge` terminology removed from all customer-visible log output and internal comments.
38
-
39
- ---
40
-
41
- ## [0.7.9] — 2026-03-16
42
-
43
- ### Fixed
44
-
45
- - **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.
46
-
47
- ---
48
-
49
- ## [0.7.8] — 2026-03-16
50
-
51
- ### Fixed
52
-
53
- - **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.
54
-
55
- ---
56
-
57
- ## [0.7.7] — 2026-03-16
58
-
59
- ### Fixed
60
-
61
- - **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.
62
- - **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.
63
-
64
- ---
65
-
66
- ## [0.7.6] — 2026-03-13
67
-
68
- ### Security
69
- - **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.
70
-
71
- ---
72
-
73
- ## [0.7.5] — 2026-03-13
74
-
75
- ### Security
76
- - **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.
77
- - **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`).
78
-
79
- ---
80
- ## [0.7.4] — 2026-03-13
11
+ - **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.
12
+ - **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.
13
+ - **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.
81
14
 
82
15
  ### Changed
83
- - 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.
84
- - Removed `--mine` flag from `shield cases` and `shield cases list` — no longer needed since all returned cases belong to this instance.
85
- - Removed `[mine]` / `[sibling]` per-case tags from list output.
86
- - Removed sibling instance notice from `shield cases show`.
87
- - Removed mixed-ownership attribution summary from case list output.
88
16
 
89
- ---
90
-
91
- ## [0.7.3] — 2026-03-13
92
-
93
- ### Fixed
94
- - 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
95
- - 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()`
96
- - `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
17
+ - **`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.
18
+ - **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.
97
19
 
98
20
  ---
99
21
 
100
- ## [0.7.2] — 2026-03-13
22
+ ## [0.7 series] — 2026-03-13 to 2026-03-16
101
23
 
102
- ### Fixed
103
- - Events now always include a meaningful `trigger.type` field — previously, unresolved sessions silently omitted the field; they now report `unknown` for full visibility
104
- - Attribution correctly handles sessions where the first user message contains non-text content blocks (images, structured context)
105
- - 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
106
- - Gateway restart is now blocked if critical plugin files are missing or empty after install, preventing boot loops from incomplete updates
24
+ > Versions 0.7.0–0.7.13. Individual patch notes consolidated below.
107
25
 
108
- ### Improved
109
- - `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
110
- - 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
111
- - New `src/utils.ts` shared module`trunc()` and `urlHost()` helpers consolidated with full unit test coverage
26
+ ### Added across 0.7 series
27
+ - **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.
28
+ - **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.
29
+ - **`openclaw shield restart` command** (0.7.10)restarts Shield monitoring without a full gateway restart. Use `--verbose` for step-by-step output.
30
+ - **Debug logging mode** (0.7.11) — opt-in detailed startup and runtime logs written to `~/.openclaw/shield/logs/shield-debug.log`. Off by default.
31
+ - **Instance-scoped cases** (0.7.4) — each instance only sees its own security cases; no cross-instance notification flooding in multi-instance orgs.
32
+ - **`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.
112
33
 
113
- ---
34
+ ### Fixed across 0.7 series
35
+ - **Plugin commands disappearing after auto-update** (0.7.13) — `openclaw shield status` and all shield commands returned "unknown command" after an update. Fixed.
36
+ - **Permanent "Disconnected" status after gateway reload** (0.7.12) — a race condition between shutdown and startup left the plugin in a broken state. Fixed.
37
+ - **Plugin silently stalling on repeated telemetry failures** (0.7.10) — after 10 consecutive failures, the plugin now deactivates cleanly with a clear log message.
38
+ - **Update loop installing the same version repeatedly** (0.7.9) — the updater now verifies the candidate version is strictly newer before proceeding.
39
+ - **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.
40
+ - **Trigger attribution silently skipped in plugin mode** (0.7.3) — attribution fields were missing from all events on plugin-mode installations. Fixed.
41
+ - **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.
114
42
 
115
- ## [0.7.1] — 2026-03-13
116
-
117
- ### Added
118
- - Case ownership awareness: `shield cases` now shows which cases belong to this instance vs other instances in the org
119
- - `--mine` flag for `shield cases` and `shield cases list` to filter to locally-owned cases
120
- - 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
121
- - Attribution summary line when listing mixed-ownership cases
43
+ ### Changed across 0.7 series
44
+ - **Standalone `shield-bridge` binary removed** (0.7.10) — the plugin now runs exclusively as an OpenClaw gateway plugin. Running it directly shows installation instructions.
45
+ - **`--mine` flag removed from `shield cases`** (0.7.4) — no longer needed; all returned cases already belong to this instance.
122
46
 
123
47
  ---
124
48
 
125
- ## [0.7.0] — 2026-03-13
126
-
127
- ### Added
128
- - **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.
129
- - **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`).
130
-
131
- ### Changed
132
- - **README updated** — new "Authorship & Event Source" section documents the authorship categories available in the dashboard.
133
-
134
- ### Notes
135
- - Fully backward compatible. Existing deployments continue to work without any configuration changes. Authorship context is captured automatically on upgrade.
136
-
137
- ---
138
-
139
- ## [0.6.10] — 2026-03-12
140
-
141
- ### Fixed
142
- - **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).
143
-
144
- ### Changed
145
- - **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).
146
- - **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.
147
-
148
- ### Added
149
- - **`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).
150
- - **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).
151
-
152
- ### Docs
153
- - **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).
154
- - **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).
155
-
156
- ---
157
-
158
- ## [0.6 series summary] — 2026-03-06 to 2026-03-10
159
-
160
- > Versions 0.6.0–0.6.8 are superseded by 0.6.10. Individual release notes consolidated below.
49
+ ## [0.6 series] — 2026-03-06 to 2026-03-12
161
50
 
162
51
  ### Added across 0.6 series
163
- - **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`
164
- - **Plugin lifecycle events** (0.6.6) startup, update failure, integrity drift, and check-failing signals forwarded to the platform via `PUT /v1/instance`
165
- - **Smart degradation detection in `shield status`** (0.6.5) three-gate algorithm (count + time + sticky recovery) eliminating false-positive DEGRADED alerts
166
- - **`_skill_hint` in RPC responses** (0.6.0) machine-readable hint in all Shield RPC replies
167
- - **Postinstall guidance** (0.6.7) clear warning when plugin is installed outside OpenClaw
168
- - **First event confirmation log** (0.6.7) `✅ First event delivered` emitted once per process lifetime
169
- - **Vault summary in `shield.status`** (0.6.7) redaction vault breakdown by category
52
+ - **`openclaw shield logs`**view recent events captured by Shield directly from the command line, with filtering by type, time window, and JSON output
53
+ - **Event context in logs** — each log entry now shows the file, command, or URL involved alongside what triggered the session
54
+ - **`openclaw shield vault show`** — inspect the local agent and workspace inventory with redaction token summary
55
+ - **Status diagnostics** — `shield status` now shows event buffer health, redaction counts by category, and clearer degradation signals
56
+ - **Plugin lifecycle signals** — Shield reports startup, update failures, and integrity changes to the platform for visibility in the dashboard
57
+ - **Message size tracking** — message events include the byte size of the message body, enabling size-based detection rules
58
+ - **Redaction coverage expanded** — credentials in `curl` commands (`-u`, `--user`, `Authorization: Basic`) are now redacted; npm package references no longer trigger false positives
170
59
 
171
60
  ### Fixed across 0.6 series
172
- - **Auto-update restart resilience** (0.6.1) `pendingRestart` tracked in state, retried for 5 cycles then rolls back to backup
173
- - **ANSI field prefix** (0.6.2) `ansi_content_detected`/`ansi_sequences` now correctly namespaced as `openclaw.*`
174
- - **Version normalization** (0.6.3) messy `openclaw --version` strings normalized to clean semver
175
- - **Missing public IP in telemetry** (0.6.3) `PUT /v1/instance` always includes `public_ip` (sends `""` instead of omitting)
176
- - **Case monitor exclusions crash** (0.6.4)soft dependency: if exclusions not initialized, cases forwarded unfiltered instead of throwing
177
- - **npm redaction false positive** (0.6.7) — `@scope/package@version` no longer matched by SSH `user@host` regex
178
- - **curl credential redaction** (0.6.8) — `curl -u`, `--user`, and `Authorization: Basic` all redacted as `secret:HASH`
179
- - **`SHIELD_AUTO_UPDATE=false` ignored** (0.6.6) — env var now correctly parsed as boolean
180
-
181
- ---
182
-
183
- ## [0.5.38] — 2026-03-06
184
-
185
- ### Added
186
- - `_skill_hint` field in all RPC responses (agent-facing, invisible to users)
61
+ - **`openclaw shield logs` always showing empty** — event capture was never connected to the local log store in plugin mode. Fixed.
62
+ - **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
63
+ - **Plugin reporting wrong version in the dashboard** — version detection is now reliable across macOS, Linux, and containerized environments
64
+ - **`SHIELD_AUTO_UPDATE=false` being ignored** — the environment variable is now parsed correctly
65
+ - **False-positive DEGRADED status in `shield status`** a three-condition check now prevents transient failures from incorrectly marking the plugin as degraded
187
66
 
188
67
  ---
189
68
 
190
- ## [0.5.18] — 2026-03-06
69
+ ## [0.5 series] — 2026-03-06
191
70
 
192
- ### Added
193
- - **User-friendly case notifications** — notifications now use plain language summaries when available, with technical details (rule title, MITRE technique) as a `📎` footnote.
194
- - **False positive exclusions** — mark a case as false positive and Shield auto-suppresses identical future alerts for your instance.
195
- - `openclaw shield exclusions` — list active exclusions.
196
- - `openclaw shield exclusions remove <ID>` — re-enable alerts by removing an exclusion.
197
- - RPCs: `shield.exclusions_list`, `shield.exclusion_add`, `shield.exclusion_remove`.
198
- - Pattern normalization: IPs, UUIDs, timestamps, and hashes are generalized so the same type of event matches regardless of specific values.
199
-
200
- ### Fixed
201
- - Campaign URLs updated to English (`/en/` instead of `/pt/`).
71
+ ### Added across 0.5 series
72
+ - **Plain language case notifications** — alerts now lead with a human-readable summary; technical rule details are available as a footnote
73
+ - **False positive exclusions** — mark a case as a false positive and Shield suppresses identical future alerts automatically. Manage via `openclaw shield exclusions`
202
74
 
203
75
  ---
204
76
 
205
- ## [0.4.36] — 2026-03-05
206
-
207
- Consolidated from 0.4.0–0.4.12.
77
+ ## [0.4 series] — 2026-03-05
208
78
 
209
- ### Added
210
- - **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.
211
- - **Case notification system** — agent polls platform for new cases and notifies users. Case monitor with pending notification queue and acknowledgment.
212
- - 4 case RPCs: `shield.cases_list`, `shield.case_detail`, `shield.case_resolve`, `shield.cases_ack`.
213
- - **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`.
214
- - **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.
215
- - **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.
216
- - **Chained command detection** — exec events parse shell chains (`&&`, `||`, `;`) to detect destructive commands regardless of position.
217
- - **Atomic file writes** (`writeJsonSafe`) for status, stats, vault, updater state, and IP cache — prevents corruption on crash or disk-full.
218
- - **Corrupt JSON recovery** (`readJsonSafe`) — auto-recovers from corrupted state files instead of crash-looping.
219
- - Skill validation tests (26 tests) to prevent infrastructure leaks in ClawHub-published content.
220
- - ClawHub frontmatter metadata, gating via `requires.config`, cross-references between npm/ClawHub/dashboard.
221
- - `callPlatformApi` now supports GET and POST methods.
222
- - Platform attribution in case detail responses.
223
- - Tarball shasum preserved in `openclaw.json` after self-update.
224
- - Plugin metadata sync prevents OpenClaw core updates from removing the plugin.
225
-
226
- ### Fixed
227
- - Auto-update no longer kills bridge when gateway restart fails — continues running with old version in memory.
228
- - Stale PID detection in `shield status` — warns when daemon PID is no longer running.
229
- - OpenClaw version detection: replaced hardcoded macOS paths with platform-independent `require.resolve` + `execSync` fallback.
230
- - HMAC signing in RPC client aligned with sender format (`fingerprint:nonce`).
79
+ ### Added across 0.4 series
80
+ - **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
81
+ - **Case notifications** — Shield polls for new cases and notifies you automatically
82
+ - **`openclaw shield logs`** local rolling store of recent events for offline inspection and debugging, with filtering options
83
+ - **Agent and workspace inventory** — Shield discovers all agents running on the machine and surfaces cross-workspace activity in the dashboard
84
+ - **Auto-update** — Shield keeps itself up to date automatically. Patch and minor versions install with a rollback safety net; major versions notify only
85
+ - **Resilient local storage** — local state files recover automatically from corruption instead of causing crashes
231
86
 
232
- ### Changed
233
- - Installation instructions rewritten: three options (Quick Install, Agent Configure, Agent Full) with command reference table and agent refusal guidance.
234
- - CHANGELOG.md now bundled with npm package.
87
+ ### Fixed across 0.4 series
88
+ - **Auto-update continuing to run after a failed gateway restart** Shield now holds at the previous version until the restart succeeds
89
+ - **Stale process warnings in `shield status`** — the status command now detects when a previously recorded process is no longer running and reports it clearly
235
90
 
236
91
  ---
237
92
 
238
- ## [0.3.29] — 2026-03-03
239
-
240
- Consolidated from 0.3.0–0.3.28.
93
+ ## [0.3 series] — 2026-02-26 to 2026-03-03
241
94
 
242
- ### Added
243
- - **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.
244
- - **Chained command detection** — exec events parse chained commands (`&&`, `||`, `;`) to extract all commands in a chain.
245
- - Public IP and instance name included in telemetry for geo-enrichment and display.
246
- - Update check on gateway startup no longer need to wait for the 6-hour cycle.
247
- - Commands reference table in README.
248
- - Quick Install section for terminal-based setup (no agent needed).
95
+ ### Added across 0.3 series
96
+ - **Auto-update** — Shield checks for newer versions on startup and installs them automatically with backup and rollback safety
97
+ - **Chained command detection** — Shell chains (`&&`, `||`, `;`) are parsed so detection rules can match commands regardless of their position in a sequence
98
+ - **Quick Install** terminal-based setup flow that doesn't require agent involvement
99
+ - Location and identity data included in telemetry for geo-correlation in the dashboard
249
100
 
250
- ### Fixed
251
- - Plugin no longer deactivates on transient registration failures at startup. Retries up to 10 times before exiting.
252
- - Auto-update now wired into the plugin entry point (the file OpenClaw actually loads).
253
- - Auto-update now syncs `plugins.installs.shield` metadata in `openclaw.json` after self-updating — prevents OpenClaw core updates from removing the plugin.
254
- - Auto-update now computes and preserves tarball shasum in `openclaw.json` metadata after self-update.
255
- - Detection rules can now match destructive commands embedded after chain operators.
256
-
257
- ### Changed
258
- - README installation section fully rewritten: three clear options (Quick Install, Agent Configure, Agent Full), command reference table, concern table, manual steps.
259
- - Agent refusal guidance added with explicit trust confirmation prompt and concern-by-concern explanation table.
260
- - Quick Start prompt rewritten to address agent security concerns (redaction model, npm scope trust, installation key purpose).
261
- - CHANGELOG.md now bundled with the npm package.
101
+ ### Fixed across 0.3 series
102
+ - Plugin no longer stops monitoring on transient registration failures at startup retries before giving up
103
+ - Auto-update now correctly preserves plugin registration in OpenClaw after installing a new version
262
104
 
263
105
  ---
264
106
 
package/README.md CHANGED
@@ -473,7 +473,7 @@ When `autoUpdate` is `true`, Shield backs up the current version before installi
473
473
  → Increase poll interval: `"pollIntervalMs": 60000` in plugin config (default: 30000ms)
474
474
 
475
475
  **Cursor file issues**
476
- → To reset: `rm ~/.openclaw/shield/data/cursors.json` — Shield reinitializes on next poll
476
+ → To reset: `rm ~/.openclaw/shield/data/cursor.json` — Shield reinitializes on next poll
477
477
 
478
478
  **Dry-run mode (no events sent)**
479
479
  → Add `"dryRun": true` to plugin config — events are processed and logged but never transmitted
@@ -507,10 +507,10 @@ See CHANGELOG.md included with the plugin.
507
507
  When a subscription lapses or the monthly event quota is exhausted, Shield detects this on the next ingest call and will:
508
508
 
509
509
  1. Log a clear warning
510
- 2. Stop transmitting events **events are dropped, not queued**
510
+ 2. Pause delivery and retain cursor position so events can be retried after service is restored
511
511
  3. Show elevated consecutive failures in `openclaw shield status`
512
512
 
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.
513
+ Renew your subscription at [uss.upx.com](https://uss.upx.com) and restart the gateway to resume delivery.
514
514
 
515
515
  ---
516
516
 
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;