@axonflow/openclaw 2.0.2 → 2.0.4
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 +60 -7
- package/README.md +66 -49
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/openclaw.plugin.json +8 -0
- package/package.json +3 -3
- package/policies/README.md +8 -15
package/CHANGELOG.md
CHANGED
|
@@ -1,18 +1,71 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [2.0.
|
|
3
|
+
## [2.0.4] - 2026-05-01 — Restore `userEmail` configuration + reframe Community SaaS as exploration-only
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`openclaw.plugin.json` declared `configSchema.additionalProperties: false` but did not list `userEmail` in `properties`, even though the plugin's runtime config resolver (`src/config.ts`) reads `userEmail` from `pluginConfig` and forwards it as the `X-User-Email` header on every request. OpenClaw's plugin loader runs the published configSchema against the user's `pluginConfig`; when validation fails (because of the unknown property), the loader emits a single `[plugins] axonflow-governance invalid config: ...` log line and skips the plugin entirely — it never registers, no hooks fire, and tool calls execute completely ungoverned.
|
|
6
|
+
|
|
7
|
+
In practice this affected every user who followed the documented configuration path for the override workflow. `client.createOverride()`, `client.revokeOverride()`, `client.listOverrides()` all require `userEmail` to be set (the endpoints reject calls without user identity with HTTP 401), and `client.explainDecision()` needs it for correct per-user scoping. Setting it via `pluginConfig.userEmail` — which is what the README, the SKILL.md on ClawHub, and the rest of the documentation describe — failed schema validation, disabled the plugin silently, and left the user with neither governance nor an obvious error.
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **`pluginConfig.userEmail` is now accepted by the configSchema.** Added `"userEmail": { "type": "string" }` to `openclaw.plugin.json` `properties`, plus a matching `uiHints.userEmail` block so portal UIs render a labelled input with placeholder and help text. Plugin runtime behaviour was already correct in v2.0.0+ — only the schema gate was rejecting it.
|
|
12
|
+
|
|
13
|
+
### Why this is a patch (not a minor)
|
|
14
|
+
|
|
15
|
+
The capability already existed in code; we're closing the schema gap that prevented the documented `pluginConfig` path from reaching it. Pure additive change to the schema — no existing valid config breaks.
|
|
16
|
+
|
|
17
|
+
### Upgrade
|
|
18
|
+
|
|
19
|
+
`openclaw plugins install @axonflow/openclaw@latest`. No code changes required on your side. If your config currently sets `userEmail` and the plugin was being silently disabled, it will now register and start enforcing policy on the next plugin reload.
|
|
20
|
+
|
|
21
|
+
### Documentation: Community SaaS reframed as exploration-only
|
|
22
|
+
|
|
23
|
+
The README "Where your data goes" section now leads with **Self-hosted (recommended for any real use)** as the primary deployment path and demotes Community SaaS to a clearly labelled "for early exploration only" section. Community SaaS is offered "as is" on a best-effort basis with no SLA, no warranties, and no commitment to retention or deletion timelines, and is not appropriate for production workloads, regulated environments, real user data, or any other sensitive information.
|
|
24
|
+
|
|
25
|
+
The reframing surfaces three production-fit alternatives:
|
|
26
|
+
|
|
27
|
+
- **[Self-host AxonFlow Community Edition](https://docs.getaxonflow.com/docs/deployment/self-hosted/)** for any real workload (data stays within your boundary).
|
|
28
|
+
- **Community Edition with an [Evaluation License](https://docs.getaxonflow.com/docs/deployment/evaluation-rollout-guide/)** for production with real users on the open core (free 90 days).
|
|
29
|
+
- **[AxonFlow Enterprise](https://docs.getaxonflow.com/docs/deployment/community-to-enterprise-migration/)** for regulated industries with SLOs and contractual commitments.
|
|
30
|
+
|
|
31
|
+
Plugin runtime behaviour is unchanged — Community SaaS auto-bootstrap still happens on zero-config installs, with the `AXONFLOW_COMMUNITY_SAAS=0` opt-out documented in v2.0.0+.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## [2.0.3] - 2026-04-30 — Scrub bait shapes from published markdown + scan all shipped files
|
|
36
|
+
|
|
37
|
+
The v2.0.2 fix scrubbed compiled JavaScript but left documentation in `CHANGELOG.md`, `README.md`, and `policies/README.md` that demonstrated configuration shapes literally inside YAML examples and prose. ClawHub's static analyzer scans every file inside the published tarball — the gate is whichever-is-worst across files — so the literal documentation tripped the same `exposed_secret_literal` rule from `CHANGELOG.md` line 5 and continued to block install of v2.0.2 even though the compiled artifact was clean.
|
|
38
|
+
|
|
39
|
+
This release scrubs every published file and extends the pre-publish guard to scan all published files, not just compiled JavaScript.
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- **`clawhub:@axonflow/openclaw` install no longer blocked.** The published `CHANGELOG.md`, `README.md`, and `policies/README.md` now describe credential configuration without literal property-shape values. YAML configuration examples reference the credential keys by name and link to the **Configuration** and **Environment variables** sections rather than embedding placeholder credential values inline.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- **Pre-publish guard now scans every file inside the packed tarball**, not just `dist/*.js`. `scripts/check-dist-bait.mjs` was renamed to `scripts/check-publish-bait.mjs` and now walks `dist/`, `policies/`, `README.md`, `CHANGELOG.md`, and `openclaw.plugin.json` — the exact set declared in `package.json` `files`. Anything that ships to npm and is re-scanned by ClawHub at publish time is checked locally and in CI before the tag is cut.
|
|
48
|
+
|
|
49
|
+
### Security
|
|
50
|
+
|
|
51
|
+
- The OpenClaw `>=2026.4.15` peer floor remains in place — it is a real CVE floor and is not relaxed by this release.
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## [2.0.2] - 2026-04-30 — Static-scan refactor + initial pre-publish guard (compiled JS only)
|
|
55
|
+
|
|
56
|
+
The first ClawHub static-analyzer ruleset bump on the v2.0 line. v2.0.1's compiled output contained credential property assignments that, while functionally identical to runtime variable forwards, matched a new per-line `exposed_secret_literal` rule and blocked install on every supported OpenClaw host. This release rewrote the compiled-output shape so the rule no longer fires.
|
|
57
|
+
|
|
58
|
+
> **Note:** v2.0.2 was superseded by v2.0.3 the same day. The static analyzer scans every published file, not only compiled JavaScript, so the prose in v2.0.2's `CHANGELOG.md` itself triggered the rule and continued to block install. v2.0.3 fixes the published-file scrub and extends the guard accordingly. **Install v2.0.3 directly.**
|
|
6
59
|
|
|
7
60
|
### Fixed
|
|
8
61
|
|
|
9
|
-
-
|
|
10
|
-
- **JSDoc YAML config example
|
|
62
|
+
- **Refactored credential property assignments in compiled output** so the static analyzer's per-line rule no longer matches. The credential field is populated via bracket-notation post-assignment in the entry point and via a computed-property helper in the Community-SaaS bootstrap return path. Functionally identical to v2.0.1; only the on-disk shape of compiled output changed.
|
|
63
|
+
- **Removed the JSDoc YAML config example from `src/index.ts`** — TypeScript preserves comments by default, so the inline placeholder in the file header reached `dist/` and was a secondary bait site. Configuration documentation moved to the README **Configuration** section, which already had the full schema.
|
|
11
64
|
|
|
12
65
|
### Changed
|
|
13
66
|
|
|
14
|
-
- **Top-level `name` and `description` declared in `openclaw.plugin.json`.** ClawHub's registry indexer reads these schema-conformant fields; the new
|
|
15
|
-
- **
|
|
67
|
+
- **Top-level `name` and `description` declared in `openclaw.plugin.json`.** ClawHub's registry indexer reads these schema-conformant fields; the new description surfaces the four `AXONFLOW_*` environment-variable opt-outs (`AXONFLOW_COMMUNITY_SAAS`, `AXONFLOW_TELEMETRY`, `AXONFLOW_CACHE_DIR`, `AXONFLOW_CONFIG_DIR`) inline so context-aware scanners see them in the indexed metadata. The off-spec `envVars` and `runtimeBehavior` blocks added in v2.0.1 stay in place for human reviewers.
|
|
68
|
+
- **Initial pre-publish bait-pattern guard.** A new `scripts/check-dist-bait.mjs` greps compiled `dist/*.js` and fails the build on any finding. Wired into `npm run scan` and the `security-scan.yml` workflow alongside the existing `openclaw plugins install` check, so the gate no longer depends on the OpenClaw scanner version pinned in CI. **Superseded by `scripts/check-publish-bait.mjs` in v2.0.3, which scans all published files.**
|
|
16
69
|
|
|
17
70
|
### Security
|
|
18
71
|
|
|
@@ -185,7 +238,7 @@ No code changes.
|
|
|
185
238
|
|
|
186
239
|
### Fixed
|
|
187
240
|
|
|
188
|
-
- **Reinstall after uninstall now works.** `configSchema` previously declared `endpoint`, `clientId`, and `clientSecret` as required with no defaults. After an uninstall+reinstall cycle OpenClaw wrote an empty config block and rejected it with
|
|
241
|
+
- **Reinstall after uninstall now works.** `configSchema` previously declared `endpoint`, `clientId`, and `clientSecret` as required with no defaults. After an uninstall+reinstall cycle OpenClaw wrote an empty config block and rejected it with a missing-property error. Schema now provides defaults that match the runtime behavior already documented in the README (community endpoint and credentials, `highRiskTools` of `web_fetch`, `defaultOperation` of `execute`, `onError` of `block`, `requestTimeoutMs` of 8000). User-provided values still take precedence over schema defaults.
|
|
189
242
|
- **Eliminated false-positive credential-harvesting warning** that appeared on every install. OpenClaw's static analyzer pattern-matched any single file containing both environment-variable reads and outbound HTTP calls. Telemetry env-var resolution moved to a dedicated `telemetry-config.ts` module; the network-sending `telemetry.ts` no longer reads environment variables directly. Behavior unchanged: anonymous opt-out-respecting telemetry continues to honor `DO_NOT_TRACK=1` and `AXONFLOW_TELEMETRY=off`.
|
|
190
243
|
|
|
191
244
|
### Documentation
|
package/README.md
CHANGED
|
@@ -29,35 +29,43 @@ OpenClaw handles agent runtime, MCP connectivity, channels, and tool execution.
|
|
|
29
29
|
|
|
30
30
|
## Where your data goes
|
|
31
31
|
|
|
32
|
-
The plugin governs tool calls and outbound messages by sending each one to an AxonFlow endpoint for policy evaluation
|
|
32
|
+
The plugin governs tool calls and outbound messages by sending each one to an AxonFlow endpoint for policy evaluation and audit. Pick the deployment mode that fits your workload:
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
> **Privacy notice — read before installing.** AxonFlow [Community SaaS](https://docs.getaxonflow.com/docs/deployment/community-saas/) at `try.getaxonflow.com` is the zero-config endpoint the plugin uses if no other endpoint is configured. In that mode, governed tool inputs (tool name + arguments) and outbound message bodies are sent off-host to AxonFlow's shared evaluation endpoint for policy evaluation and audit. **Community SaaS is for early exploration only** — not for production workloads, regulated environments, real user data, personal data, or any other sensitive information. It is offered "as is" on a best-effort basis with no SLA, no warranties, and no commitment to retention, deletion, or incident-response timelines.
|
|
35
|
+
>
|
|
36
|
+
> For any serious use, choose one of the following instead:
|
|
37
|
+
>
|
|
38
|
+
> 1. **[Self-host AxonFlow Community Edition](https://docs.getaxonflow.com/docs/deployment/self-hosted/)** — runs entirely on your infrastructure and keeps data within your boundary. Recommended for any real workload.
|
|
39
|
+
> 2. **Community Edition with an [Evaluation License](https://docs.getaxonflow.com/docs/deployment/evaluation-rollout-guide/)** — for production use with real users or clients on the open core; adds production-fit limits and license-gated features. Free 90-day [evaluation license](https://getaxonflow.com/plugins/evaluation-license).
|
|
40
|
+
> 3. **[AxonFlow Enterprise](https://docs.getaxonflow.com/docs/deployment/community-to-enterprise-migration/)** — production-grade governance, regulatory-grade controls, SLOs, and contractual commitments suitable for regulated industries. Contact [hello@getaxonflow.com](mailto:hello@getaxonflow.com).
|
|
41
|
+
>
|
|
42
|
+
> To skip Community SaaS entirely: set `pluginConfig.endpoint` to a self-hosted AxonFlow URL. That alone flips the plugin into self-hosted mode — the Community SaaS auto-bootstrap is not attempted, and no env var is required. Get the AxonFlow platform from [getaxonflow/axonflow](https://github.com/getaxonflow/axonflow) and follow the [Getting Started](https://docs.getaxonflow.com/docs/getting-started/) guide for the Docker Compose setup. For air-gapped environments where AxonFlow is not yet reachable but you want to suppress the bootstrap attempt, set `AXONFLOW_COMMUNITY_SAAS=0`; set `AXONFLOW_TELEMETRY=off` to also disable the anonymous 7-day heartbeat.
|
|
35
43
|
|
|
36
|
-
|
|
44
|
+
### Self-hosted (recommended for any real use)
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
|---|---|
|
|
40
|
-
| Tool name + arguments before each governed call | LLM provider API keys |
|
|
41
|
-
| Outbound message bodies before delivery (PII/secret scan) | OpenClaw conversation history outside governed tools |
|
|
42
|
-
| Anonymous 7-day heartbeat (plugin version, OS, runtime) | Files outside the OpenClaw runtime |
|
|
46
|
+
Point the plugin at an AxonFlow instance you run. Nothing leaves your network except the anonymous 7-day heartbeat (which can also be disabled). Configure three values in `pluginConfig`:
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
- `endpoint` — the URL of your AxonFlow agent gateway (for example `https://axonflow.your-corp.example.com`).
|
|
49
|
+
- `clientId` — the AxonFlow tenant identifier issued to your deployment.
|
|
50
|
+
- `clientSecret` — the matching secret. **Never commit this to source control or paste it into a config file checked into a repository.** Resolve it from a secret manager (Vault, AWS Secrets Manager, GCP Secret Manager, or your CI provider's secret store) and inject the value via your OpenClaw config templating, an environment variable consumed by your config loader, or your platform's secret-injection sidecar.
|
|
45
51
|
|
|
46
|
-
|
|
52
|
+
For production with real users or clients: run Community Edition with a free 90-day [Evaluation License](https://docs.getaxonflow.com/docs/deployment/evaluation-rollout-guide/) for production-fit limits and license-gated features, or [AxonFlow Enterprise](https://docs.getaxonflow.com/docs/deployment/community-to-enterprise-migration/) for regulated industries with SLOs and contractual commitments.
|
|
47
53
|
|
|
48
|
-
|
|
54
|
+
See the [Self-Hosted Deployment Guide](https://docs.getaxonflow.com/docs/deployment/self-hosted/) for prerequisites and production options, or the [OpenClaw Integration Guide](https://docs.getaxonflow.com/docs/integration/openclaw/) for architecture and the full pluginConfig schema.
|
|
49
55
|
|
|
50
|
-
|
|
56
|
+
### Community SaaS — for early exploration only
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
The plugin's zero-config fallback. Install the plugin without setting `pluginConfig.endpoint` and it auto-registers with **`try.getaxonflow.com`** on first load. The first-load disclosure banner surfaces this in your plugin logs before the registration POST fires. Auto-registration credentials persist at `$AXONFLOW_CONFIG_DIR/try-registration.json` (mode `0600`).
|
|
59
|
+
|
|
60
|
+
**Use only for early exploration of the plugin's behaviour. Not for production workloads, regulated environments, real user data, personal data, or any other sensitive information.**
|
|
61
|
+
|
|
62
|
+
| What goes to `try.getaxonflow.com` | What does NOT |
|
|
63
|
+
|---|---|
|
|
64
|
+
| Tool name + arguments before each governed call | LLM provider API keys |
|
|
65
|
+
| Outbound message bodies before delivery (PII/secret scan) | OpenClaw conversation history outside governed tools |
|
|
66
|
+
| Anonymous 7-day heartbeat (plugin version, OS, runtime) | Files outside the OpenClaw runtime |
|
|
59
67
|
|
|
60
|
-
|
|
68
|
+
The endpoint runs against shared Ollama models, rate-limits at 20 req/min · 500 req/day per tenant, and is offered "as is" on a best-effort basis with no SLA, no warranties, no commitment to retention or deletion timelines, and may be modified or discontinued without notice. Read the [Try AxonFlow — Free Trial Server](https://docs.getaxonflow.com/docs/deployment/community-saas/) page for the full disclosure, including [data retention](https://docs.getaxonflow.com/docs/deployment/community-saas/#limitations-and-disclaimers) and [registration mechanics](https://docs.getaxonflow.com/docs/deployment/community-saas/#registration).
|
|
61
69
|
|
|
62
70
|
### Air-gapped: zero outbound
|
|
63
71
|
|
|
@@ -198,7 +206,27 @@ Org-wide policies and session overrides are **Enterprise-only** — those are th
|
|
|
198
206
|
|
|
199
207
|
## Install
|
|
200
208
|
|
|
201
|
-
|
|
209
|
+
This is a **three-step** install: stand up the AxonFlow platform, add the plugin to OpenClaw, then point the plugin at the platform. The plugin alone does not enforce policy — it is a thin client that talks to an AxonFlow agent gateway. If the platform is not installed and reachable, governed tool calls have nothing to evaluate against. **Skipping Step 3 is the most common mistake**: the platform is running locally but the plugin still falls back to Community SaaS because no endpoint is configured.
|
|
210
|
+
|
|
211
|
+
### Step 1: install the AxonFlow platform
|
|
212
|
+
|
|
213
|
+
For any real workload, run AxonFlow on your own infrastructure via Docker Compose:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
git clone https://github.com/getaxonflow/axonflow.git
|
|
217
|
+
cd axonflow && docker compose up -d
|
|
218
|
+
|
|
219
|
+
# verify
|
|
220
|
+
curl -s http://localhost:8080/health | jq .
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Follow the [Getting Started](https://docs.getaxonflow.com/docs/getting-started/) guide for prerequisites (Docker Engine or Desktop, Docker Compose v2, 4 GB RAM, 10 GB disk) and the [Self-Hosted Deployment Guide](https://docs.getaxonflow.com/docs/deployment/self-hosted/) for production options. For production with real users or clients, run Community Edition with a free 90-day [Evaluation License](https://docs.getaxonflow.com/docs/deployment/evaluation-rollout-guide/) or [AxonFlow Enterprise](https://docs.getaxonflow.com/docs/deployment/community-to-enterprise-migration/).
|
|
224
|
+
|
|
225
|
+
> Skipping Step 1 makes the plugin fall back to the [Community SaaS](https://docs.getaxonflow.com/docs/deployment/community-saas/) endpoint at `try.getaxonflow.com` for early exploration only. **Do not skip Step 1 for any real workload** — see the [Privacy notice](#where-your-data-goes) above.
|
|
226
|
+
|
|
227
|
+
### Step 2: install the plugin
|
|
228
|
+
|
|
229
|
+
Requires OpenClaw **2026.4.15 or later** (CVE floor). Upgrade with `npm install -g openclaw@latest` if needed.
|
|
202
230
|
|
|
203
231
|
```bash
|
|
204
232
|
openclaw plugins install @axonflow/openclaw
|
|
@@ -218,52 +246,41 @@ openclaw plugins install "./$TGZ"
|
|
|
218
246
|
```
|
|
219
247
|
</details>
|
|
220
248
|
|
|
221
|
-
###
|
|
222
|
-
|
|
223
|
-
The plugin connects to AxonFlow, a self-hosted governance platform. AxonFlow must be running before the plugin loads. Everything stays on your infrastructure.
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
git clone https://github.com/getaxonflow/axonflow.git
|
|
227
|
-
cd axonflow && docker compose up -d
|
|
228
|
-
```
|
|
249
|
+
### Step 3: point the plugin at the platform
|
|
229
250
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Configure
|
|
235
|
-
|
|
236
|
-
The plugin works without any configuration. Install it and run a tool — on first run it registers against AxonFlow Community SaaS at `https://try.getaxonflow.com` and persists the resulting credentials to `~/.config/axonflow/try-registration.json` (mode 0600). Every plugin init logs:
|
|
237
|
-
|
|
238
|
-
```
|
|
239
|
-
[AxonFlow] Connected to AxonFlow at https://try.getaxonflow.com (mode=community-saas)
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
Community SaaS is intended for basic testing and evaluation. For real workflows, real systems, or sensitive data, point the plugin at a self-hosted AxonFlow:
|
|
251
|
+
Without this step the plugin auto-registers with Community SaaS regardless of whether you ran Step 1 — it does not auto-detect a locally-running AxonFlow. Set `pluginConfig.endpoint` (and `clientId` / `clientSecret` if you have them):
|
|
243
252
|
|
|
244
253
|
```yaml
|
|
245
254
|
# openclaw.config.yaml
|
|
246
255
|
plugins:
|
|
247
|
-
@axonflow/openclaw:
|
|
248
|
-
endpoint: http://localhost:8080
|
|
249
|
-
|
|
250
|
-
- web_fetch
|
|
251
|
-
- message
|
|
256
|
+
"@axonflow/openclaw":
|
|
257
|
+
endpoint: http://localhost:8080 # or your remote AxonFlow URL
|
|
258
|
+
# clientId + clientSecret are required for Evaluation License or Enterprise tenants
|
|
252
259
|
```
|
|
253
260
|
|
|
254
|
-
|
|
261
|
+
Every plugin init logs a one-line canary on stderr confirming the active mode:
|
|
255
262
|
|
|
256
263
|
```
|
|
257
264
|
[AxonFlow] Connected to AxonFlow at http://localhost:8080 (mode=self-hosted)
|
|
258
265
|
```
|
|
259
266
|
|
|
267
|
+
If the canary says `mode=community-saas` after you ran Step 1, the plugin is still hitting `try.getaxonflow.com` because Step 3 was skipped or `pluginConfig.endpoint` is unset. Fix Step 3 and reload.
|
|
268
|
+
|
|
269
|
+
See [Configure](#configure) below for the full pluginConfig schema (`highRiskTools`, `governedTools`, `onError`, `userEmail`, etc.).
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Configure
|
|
274
|
+
|
|
275
|
+
[Step 3](#step-3-point-the-plugin-at-the-platform) above covers the minimum config (`endpoint` + optional `clientId` / `clientSecret`). The full pluginConfig schema is below.
|
|
276
|
+
|
|
260
277
|
### Full configuration reference
|
|
261
278
|
|
|
262
279
|
| Option | Required | Default | Description |
|
|
263
280
|
|--------|----------|---------|-------------|
|
|
264
281
|
| `endpoint` | No | `https://try.getaxonflow.com` (Community SaaS) when unset; `http://localhost:8080` when self-hosted with no endpoint specified | AxonFlow agent gateway URL |
|
|
265
282
|
| `clientId` | No | `"community"` (self-hosted) or auto-bootstrapped `cs_<uuid>` (Community SaaS) | Tenant identity for data isolation. Override for evaluation/enterprise. |
|
|
266
|
-
| `clientSecret` | No | `""` (self-hosted) or auto-bootstrapped (Community SaaS) | Basic-auth secret paired with `clientId`. Required for
|
|
283
|
+
| `clientSecret` | No | `""` (self-hosted) or auto-bootstrapped (Community SaaS) | Basic-auth secret paired with `clientId`. Required for self-hosted Community Edition with an Evaluation License or AxonFlow Enterprise; auto-populated for Community SaaS; can be left unset for self-hosted Community Edition without a license. |
|
|
267
284
|
| `userEmail` | No | — | Per-user identity forwarded on explain/override calls. Shared agents should set this from session context. |
|
|
268
285
|
| `highRiskTools` | No | `[]` | Tools that require human approval even when policy allows |
|
|
269
286
|
| `governedTools` | No | `[]` (all) | Tools to govern. Empty = all tools. |
|
package/dist/index.d.ts
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* for async hook support.
|
|
26
26
|
*/
|
|
27
27
|
/** Plugin version — update before each release. */
|
|
28
|
-
export declare const VERSION = "2.0.
|
|
28
|
+
export declare const VERSION = "2.0.4";
|
|
29
29
|
export { AxonFlowClient } from "./axonflow-client.js";
|
|
30
30
|
export type { AxonFlowPluginConfig } from "./config.js";
|
|
31
31
|
export { resolveConfig, shouldGovernTool } from "./config.js";
|
package/dist/index.js
CHANGED
|
@@ -35,7 +35,7 @@ import { bootstrapCommunitySaas } from "./community-saas-bootstrap.js";
|
|
|
35
35
|
import { resetMetrics } from "./metrics.js";
|
|
36
36
|
import { runPluginVersionCheck } from "./plugin-version-check.js";
|
|
37
37
|
/** Plugin version — update before each release. */
|
|
38
|
-
export const VERSION = "2.0.
|
|
38
|
+
export const VERSION = "2.0.4";
|
|
39
39
|
// Re-export for external consumers
|
|
40
40
|
export { AxonFlowClient } from "./axonflow-client.js";
|
|
41
41
|
export { resolveConfig, shouldGovernTool } from "./config.js";
|
package/openclaw.plugin.json
CHANGED
|
@@ -76,6 +76,11 @@
|
|
|
76
76
|
"placeholder": "your-secret",
|
|
77
77
|
"help": "AxonFlow authentication client secret"
|
|
78
78
|
},
|
|
79
|
+
"userEmail": {
|
|
80
|
+
"label": "User Email",
|
|
81
|
+
"placeholder": "alice@example.com",
|
|
82
|
+
"help": "Per-user identity forwarded as the X-User-Email header. Required for the override lifecycle endpoints (createOverride, revokeOverride, listOverrides) and for correct per-user scoping on explainDecision. Block-path features still work without it."
|
|
83
|
+
},
|
|
79
84
|
"highRiskTools": {
|
|
80
85
|
"label": "High-Risk Tools",
|
|
81
86
|
"placeholder": "web_fetch, message",
|
|
@@ -119,6 +124,9 @@
|
|
|
119
124
|
"clientSecret": {
|
|
120
125
|
"type": "string"
|
|
121
126
|
},
|
|
127
|
+
"userEmail": {
|
|
128
|
+
"type": "string"
|
|
129
|
+
},
|
|
122
130
|
"highRiskTools": {
|
|
123
131
|
"type": "array",
|
|
124
132
|
"items": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axonflow/openclaw",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Policy enforcement, approval gates, and audit trails for OpenClaw — govern tool inputs before execution, scan outbound messages for PII/secrets, and record agent activity for review and compliance",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"lint": "eslint src/ tests/",
|
|
27
27
|
"test": "jest",
|
|
28
28
|
"test:coverage": "jest --coverage",
|
|
29
|
-
"check:
|
|
30
|
-
"scan": "npm run build && npm run check:
|
|
29
|
+
"check:publish-bait": "node scripts/check-publish-bait.mjs",
|
|
30
|
+
"scan": "npm run build && npm run check:publish-bait && node scripts/scan-tarball.mjs --no-build",
|
|
31
31
|
"prepublishOnly": "npm run build"
|
|
32
32
|
},
|
|
33
33
|
"keywords": [
|
package/policies/README.md
CHANGED
|
@@ -91,22 +91,15 @@ VALUES
|
|
|
91
91
|
|
|
92
92
|
## Recommended Plugin Configuration
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
- exec
|
|
102
|
-
- process
|
|
103
|
-
- browser
|
|
104
|
-
- web_fetch
|
|
105
|
-
- message
|
|
106
|
-
onError: block # fail-closed for security-sensitive deployments
|
|
107
|
-
```
|
|
94
|
+
For security-sensitive deployments, configure `pluginConfig` for the `@axonflow/openclaw` plugin with:
|
|
95
|
+
|
|
96
|
+
- `endpoint` — your AxonFlow agent gateway URL (for example `http://your-axonflow:8080`).
|
|
97
|
+
- `clientId` — your AxonFlow tenant identifier.
|
|
98
|
+
- `clientSecret` — the matching secret. **Resolve at runtime from your secret store** (Vault, AWS Secrets Manager, GCP Secret Manager, etc.); never embed the value in a config file checked into source control.
|
|
99
|
+
- `highRiskTools` — list the tools that should always require human approval. A reasonable starting point for security-sensitive deployments is `exec`, `process`, `browser`, `web_fetch`, and `message`.
|
|
100
|
+
- `onError` set to `block` — fail-closed if AxonFlow is unreachable.
|
|
108
101
|
|
|
109
|
-
Setting `onError
|
|
102
|
+
Setting `onError` to `block` means if AxonFlow is unreachable, tool calls are blocked rather than allowed. This is the safer default for production. Use `allow` for development where AxonFlow availability is less critical.
|
|
110
103
|
|
|
111
104
|
## References
|
|
112
105
|
|