@fidacy/openclaw-plugin 0.5.7 → 0.5.8

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
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.8
4
+
5
+ ### Patch Changes
6
+
7
+ - 59bd236: Complete and reconcile the privacy disclosure. The ClawHub security audit put this plugin in Review for "inconsistent privacy disclosures about local storage and outbound metadata", and it was right on both counts.
8
+
9
+ - **Local storage.** The README claimed local state was `config.json` plus `audit/audit.log` and ended with "Nothing else". `~/.fidacy/pending-anchors.jsonl` was never disclosed. A separate line promised a session log at `~/.fidacy/sessions/`, which belongs to the MCP-plus-hooks install and not to this plugin. Both are now stated once, accurately, as a complete list.
10
+ - **Outbound metadata.** The README named two network calls. The plugin makes five: `/v1/telemetry`, `/v1/provision`, `/v1/artifacts`, `/v1/assess` and `/v1/register`. All five are now listed with what each one sends and what turns it off, in one place instead of two copies that had drifted apart.
11
+ - **The static-analysis flag.** `suspicious.env_credential_access` is described accurately now: reading your key and sending it to your engine is what a bearer token is, and every tool that accepts an API key matches that pattern. The old text gave a different and wrong reason ("the identifier is named like a secret"), in a second copy that contradicted the first.
12
+ - The "verify it yourself" pointer aimed at a mirror repo while releases are provenance-linked to `lucaslubi/fidacy`. It now points where the code actually is, so the instruction works.
13
+
14
+ No behaviour changed. This release is documentation only, and every claim in it was checked against the code rather than against the previous README.
15
+
3
16
  ## 0.5.7
4
17
 
5
18
  ### Patch Changes
package/README.md CHANGED
@@ -15,16 +15,35 @@ a hash digest anyone can recompute.
15
15
  Stays on your machine, always:
16
16
 
17
17
  - the command, file path and arguments of every tool call
18
- - the full session log (`~/.fidacy/sessions/`), which is yours to delete
19
- - your mandate and config (`~/.fidacy/`)
20
-
21
- Leaves your machine:
22
-
23
- - per-category counts (for example `shell: 9, file: 4`) and the session digest,
24
- anchored via the Fidacy engine when the install is activated
25
- - anonymous telemetry events (install, session, decision counts; a random UUID,
26
- never a name or hostname). Disable with `FIDACY_DISABLE_TELEMETRY=1`.
27
- - your email, only if you set `operatorEmail`, which is opt-in and removable
18
+ - your mandate and config (`~/.fidacy/`), which is yours to delete
19
+
20
+ Written to disk, and this is the complete list:
21
+
22
+ - `~/.fidacy/config.json` (mode 0600): the anonymous install id, tier, and your
23
+ mandate rules
24
+ - `~/.fidacy/audit/audit.log`: the hash-chained decision log
25
+ - `~/.fidacy/pending-anchors.jsonl`: session digests waiting to be anchored,
26
+ written only while an anchor is queued and cleared once it lands
27
+
28
+ Leaves your machine, and this is the complete list of hosts and paths. Every one
29
+ goes to your configured engine (`https://api.fidacy.com` by default) and nowhere
30
+ else:
31
+
32
+ - `/v1/telemetry`: anonymous usage events (install, session, decision counts; a
33
+ random UUID, never a name or hostname). Off with `FIDACY_DISABLE_TELEMETRY=1`.
34
+ - `/v1/provision`: a background free-key request. Off with
35
+ `FIDACY_DISABLE_PROVISION=1`.
36
+ - `/v1/artifacts`: per-category counts (for example `shell: 9, file: 4`) and the
37
+ session digest, plus any hash you anchor with `anchor_artifact`. Hashes and
38
+ counts only; no file content and no command text.
39
+ - `/v1/assess`: only when you call `assess_action` yourself, and only if you set
40
+ an engine API key. Sends the action you passed to the tool.
41
+ - `/v1/register`: only if you set `operatorEmail`, which is opt-in and removable.
42
+ Sends that email and nothing else.
43
+
44
+ With `FIDACY_DISABLE_TELEMETRY=1`, `FIDACY_DISABLE_PROVISION=1`, no engine key
45
+ and no `operatorEmail`, the plugin makes no network calls at all and gates
46
+ payments entirely offline.
28
47
 
29
48
  ## The tools
30
49
 
@@ -103,22 +122,32 @@ Verify any verdict yourself: https://api.fidacy.com/.well-known/jwks.json
103
122
 
104
123
  This is a payment-control plugin, so audit it like one. What it actually does:
105
124
 
106
- - **Network calls it makes:** anonymous usage telemetry to `api.fidacy.com/v1/telemetry`
107
- (an install UUID plus event enums; never payee, amount, currency, or content) and a
108
- background free-key provision to `/v1/provision`. Both are opt-out:
109
- `FIDACY_DISABLE_TELEMETRY=1` and `FIDACY_DISABLE_PROVISION=1`. Neither is ever on
110
- the decision path; payment gating works fully offline.
111
- - **Local state:** `~/.fidacy/config.json` (0600; anon id, tier, your mandate rules)
112
- and `~/.fidacy/audit/audit.log` (the hash-chained decision log). Nothing else.
125
+ - **Network calls it makes:** the five endpoints listed under "what leaves your
126
+ machine" above, all on your configured engine and nowhere else. That list is
127
+ stated once, at the top, on purpose: this section used to carry a second,
128
+ shorter copy naming only two of them, and a privacy disclosure that
129
+ contradicts itself is worse than a long one. None of the five is ever on the
130
+ decision path; payment gating works fully offline.
131
+ - **Local state:** the three files listed above, and nothing else. This bullet
132
+ used to name two of them and end with "Nothing else", which was not true:
133
+ `pending-anchors.jsonl` was never disclosed. Delete `~/.fidacy` to clear all
134
+ of it.
113
135
  - **`FIDACY_SIGNING_KEY_B64`:** an OPTIONAL env var the operator sets to pin a
114
136
  stable local Ed25519 signing key for grants. If unset, a per-session key is
115
137
  generated. The plugin reads it; it never writes or transmits it.
116
138
  - **API keys:** read from your plugin config (`engineApiKey`) or the
117
139
  `FIDACY_ENGINE_API_KEY` env var, sent only to your configured engine URL
118
140
  (default `api.fidacy.com`) as a bearer token. There are no hardcoded keys or
119
- secrets in the published bundle; scanner hits on those lines are pattern matches
120
- on the env/config reads above, and you can verify yourself: the bundle is
121
- unminified on npm and mirrored at github.com/lucaslubi/fidacy-mcp (plugin-native/).
141
+ secrets in the published bundle. A static analyser will flag this as
142
+ `suspicious.env_credential_access` ("environment variable access combined with
143
+ network send"), and that description is accurate: reading your key and sending
144
+ it to your engine is what a bearer token IS, and every tool that takes an API
145
+ key matches the same pattern. What the rule cannot tell you is WHOSE key and
146
+ WHICH host, so check both yourself: the bundle ships unminified, the source is
147
+ at github.com/lucaslubi/fidacy (`packages/openclaw-plugin`), and every release
148
+ is provenance-linked to the commit it was built from. The command below settles
149
+ the "hardcoded secret" question in one line, and the test suite fails the build
150
+ if a literal ever gets in.
122
151
  - **Verify our signatures, not our word:** every verdict checks against the public
123
152
  JWKS at `api.fidacy.com/.well-known/jwks.json` with the open-source
124
153
  [`@fidacy/verify`](https://www.npmjs.com/package/@fidacy/verify).
@@ -141,15 +170,14 @@ published package, in any version. Check it yourself:
141
170
  cd $(mktemp -d) && curl -sL $(npm view @fidacy/openclaw-plugin dist.tarball) | tar xz && grep -rE "fky_(live|test)_[A-Za-z0-9]{8,}|BEGIN [A-Z ]*PRIVATE KEY" package/ || echo "no credential literals found"
142
171
  ```
143
172
 
144
- A static scanner may flag the line that resolves your credential as a hardcoded secret,
145
- because the identifier on the right of the assignment is named like one. It reads your
146
- config and falls back to the environment, defaulting to the empty string. The command
147
- above is what settles the question, and the test suite fails the build if a literal ever
148
- does get in.
173
+ On the `suspicious.env_credential_access` finding a static analyser reports here, see
174
+ the "API keys" bullet above. It is stated in one place rather than two, because the
175
+ two copies had drifted into giving different reasons for the same flag.
149
176
 
150
177
  **Turning the network off.** `FIDACY_DISABLE_TELEMETRY=1` stops anonymous install and
151
178
  usage telemetry. `FIDACY_DISABLE_PROVISION=1` stops the background free-key provisioning.
152
- With both set and no engine credential, the plugin decides locally and contacts nothing.
179
+ With both set, no engine credential and no `operatorEmail`, the plugin decides locally
180
+ and contacts nothing: those four switches cover all five endpoints listed at the top.
153
181
 
154
182
  **Where the history lives.** Decisions go to a hash-chained log under `~/.fidacy` on your
155
183
  machine. That local chain is what makes `spend_summary`, `list_decisions` and
package/dist/index.js CHANGED
@@ -5102,7 +5102,7 @@ var FileAuditStore = class {
5102
5102
  import { statSync } from "node:fs";
5103
5103
 
5104
5104
  // ../mcp/src/telemetry.ts
5105
- var CLIENT_VERSION = true ? "0.5.7" : "dev";
5105
+ var CLIENT_VERSION = true ? "0.5.8" : "dev";
5106
5106
  function bandOf(amount) {
5107
5107
  if (typeof amount !== "number" || !Number.isFinite(amount) || amount <= 0) return void 0;
5108
5108
  if (amount < 10) return "lt10";
@@ -5317,7 +5317,7 @@ function requestUpgrade() {
5317
5317
  }
5318
5318
 
5319
5319
  // ../mcp/src/provision.ts
5320
- var CLIENT_VERSION2 = true ? "0.5.7" : "dev";
5320
+ var CLIENT_VERSION2 = true ? "0.5.8" : "dev";
5321
5321
  function provisionEnabled() {
5322
5322
  const v = (process.env.FIDACY_DISABLE_PROVISION ?? "").trim().toLowerCase();
5323
5323
  return !(v === "1" || v === "true" || v === "yes");
@@ -5460,7 +5460,7 @@ function trialCountdownLine(keyOverride) {
5460
5460
  }
5461
5461
 
5462
5462
  // ../mcp/src/register.ts
5463
- var CLIENT_VERSION3 = true ? "0.5.7" : "dev";
5463
+ var CLIENT_VERSION3 = true ? "0.5.8" : "dev";
5464
5464
  function endpoint3() {
5465
5465
  const base = (process.env.FIDACY_ENGINE_URL ?? "https://api.fidacy.com").replace(/\/$/, "");
5466
5466
  return `${base}/v1/register`;
@@ -3,7 +3,7 @@
3
3
  "name": "Fidacy AI Agent Firewall",
4
4
  "description": "Firewall for AI agents. Watches every action the agent takes and ends each session in a digest anyone can recompute; commands, paths and arguments never leave your machine, only counts and a hash. Blocks wrong/lookalike payee, over-cap and duplicate-invoice fraud before money moves. Non-custodial, local-first, deny-by-default. Anonymous telemetry (counts only) can be disabled with FIDACY_DISABLE_TELEMETRY=1.",
5
5
  "icon": "https://fidacy.com/logo.png",
6
- "version": "0.5.7",
6
+ "version": "0.5.8",
7
7
  "contracts": {
8
8
  "tools": [
9
9
  "request_payment",
@@ -25,19 +25,19 @@
25
25
  "properties": {
26
26
  "operatorEmail": {
27
27
  "type": "string",
28
- "description": "Your email (optional). Ties this agent's protection history to you so it can move into a free account, and lets Fidacy reach you about this install. Never shared; remove any time. Your email (optional) Ties this agent's protection history to you so it can move into a free account, and lets Fidacy reach you about this install. Optional — the firewall works without it."
28
+ "description": "Your email (optional). Ties this agent's protection history to you so it can move into a free account, and lets Fidacy reach you about this install. Never shared; remove any time."
29
29
  },
30
30
  "engineApiKey": {
31
31
  "type": "string",
32
- "description": "Fidacy engine API key (fky_live_/fky_test_) enabling signed verdicts via assess_action. Falls back to FIDACY_ENGINE_API_KEY. Engine API key Free key at app.fidacy.com/signup. Enables signed trust verdicts (assess_action) and keeps the firewall active past the 20-decision anonymous trial."
32
+ "description": "Fidacy engine API key (fky_live_/fky_test_) enabling signed verdicts via assess_action. Falls back to FIDACY_ENGINE_API_KEY."
33
33
  },
34
34
  "engineUrl": {
35
35
  "type": "string",
36
- "description": "Fidacy engine base URL. Defaults to https://api.fidacy.com (or FIDACY_ENGINE_URL). Engine URL"
36
+ "description": "Fidacy engine base URL. Defaults to https://api.fidacy.com (or FIDACY_ENGINE_URL)."
37
37
  },
38
38
  "subject": {
39
39
  "type": "string",
40
- "description": "Mandate subject identity for this agent. Defaults to agent:demo (or FIDACY_SUBJECT). Agent subject"
40
+ "description": "Mandate subject identity for this agent. Defaults to agent:demo (or FIDACY_SUBJECT)."
41
41
  }
42
42
  }
43
43
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fidacy/openclaw-plugin",
3
- "version": "0.5.7",
3
+ "version": "0.5.8",
4
4
  "description": "Fidacy payment firewall as a native OpenClaw plugin: signed, verifiable verdicts on every money-moving agent action, in-process (no MCP subprocess).",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Fidacy (ZeepCode Group Technology LLC) <hello@fidacy.com> (https://fidacy.com)",