@fidacy/openclaw-plugin 0.5.7 → 0.5.9

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,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.9
4
+
5
+ ### Patch Changes
6
+
7
+ - 5090ab4: Closes the two gaps the 0.5.8 scan named: "material disclosure gaps around session logs and outbound anchoring".
8
+
9
+ - **Session logs.** 0.5.8 deleted a wrong claim (a `~/.fidacy/sessions/` directory this plugin never creates) without replacing it, which left the loudest question unanswered: the plugin sees the command, path and arguments of every tool call, so where does that go? It is held in memory for the life of the process and never written to disk. What survives is the digest plus per-category counts. The readable session log belongs to the separate MCP-plus-hooks install, which is now named so the difference is explicit.
10
+ - **Outbound anchoring.** The endpoint was listed but not its trigger, and the trigger is the non-obvious part: when an engine key is set, queued session digests are drained on the first tool call of a LATER session, not at the end of the session that produced them, and nothing asks first. Now stated, along with how to stop it.
11
+ - A fourth local file, the `pending-anchors.taking` lock, was still undisclosed. The list now names all four.
12
+
13
+ Documentation only. Every claim checked against the code: the plugin imports `queuePending`, `sessionLabel`, `sessionSummary` and `takePending` from the shared evidence module, and never `writeSessionLog`.
14
+
15
+ ## 0.5.8
16
+
17
+ ### Patch Changes
18
+
19
+ - 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.
20
+
21
+ - **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.
22
+ - **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.
23
+ - **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.
24
+ - 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.
25
+
26
+ No behaviour changed. This release is documentation only, and every claim in it was checked against the code rather than against the previous README.
27
+
3
28
  ## 0.5.7
4
29
 
5
30
  ### Patch Changes
package/README.md CHANGED
@@ -12,19 +12,49 @@ Read this before installing. Since 0.5.0 the plugin is not payment-only: it
12
12
  hooks every agent tool call to build a session report, and each session ends in
13
13
  a hash digest anyone can recompute.
14
14
 
15
- Stays on your machine, always:
16
-
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
15
+ **The session log is never written to disk by this plugin.** The plugin sees the
16
+ command, file path and arguments of every tool call, and keeps that record in
17
+ memory for the life of the process only. It is not persisted, not on shutdown,
18
+ not anywhere. What survives a session is the hash digest of that record plus
19
+ per-category counts (for example `shell: 9, file: 4`), and nothing else from it.
20
+ If you want the readable session log on disk, that is the separate MCP-plus-hooks
21
+ install (`npx @fidacy/mcp install-hooks`), which writes `~/.fidacy/sessions/`.
22
+ This plugin does not: it never calls the function that writes them.
23
+
24
+ Written to disk, and this is the complete list:
25
+
26
+ - `~/.fidacy/config.json` (mode 0600): the anonymous install id, tier, and your
27
+ mandate rules
28
+ - `~/.fidacy/audit/audit.log`: the hash-chained decision log
29
+ - `~/.fidacy/pending-anchors.jsonl` (directory mode 0700): one line per finished
30
+ session holding its digest, id, timestamp and per-category counts. No command,
31
+ path or argument. Lines are removed once anchored.
32
+ - `~/.fidacy/pending-anchors.taking`: a lock file, present only while that queue
33
+ is being drained
34
+
35
+ Leaves your machine, and this is the complete list of hosts and paths. Every one
36
+ goes to your configured engine (`https://api.fidacy.com` by default) and nowhere
37
+ else:
38
+
39
+ - `/v1/telemetry`: anonymous usage events (install, session, decision counts; a
40
+ random UUID, never a name or hostname). Off with `FIDACY_DISABLE_TELEMETRY=1`.
41
+ - `/v1/provision`: a background free-key request. Off with
42
+ `FIDACY_DISABLE_PROVISION=1`.
43
+ - `/v1/artifacts`: per-category counts and the session digest, plus any hash you
44
+ anchor with `anchor_artifact`. Hashes and counts only; no file content and no
45
+ command text. **This one is automatic, so be clear on when it fires:** if an
46
+ engine key is set, the queued digests are drained on the first tool call of a
47
+ LATER session, not at the end of the session that produced them. Nobody
48
+ confirms it. With no engine key nothing is ever sent and the queue simply
49
+ sits on your disk; delete `~/.fidacy/pending-anchors.jsonl` to discard it.
50
+ - `/v1/assess`: only when you call `assess_action` yourself, and only if you set
51
+ an engine API key. Sends the action you passed to the tool.
52
+ - `/v1/register`: only if you set `operatorEmail`, which is opt-in and removable.
53
+ Sends that email and nothing else.
54
+
55
+ With `FIDACY_DISABLE_TELEMETRY=1`, `FIDACY_DISABLE_PROVISION=1`, no engine key
56
+ and no `operatorEmail`, the plugin makes no network calls at all and gates
57
+ payments entirely offline.
28
58
 
29
59
  ## The tools
30
60
 
@@ -103,22 +133,32 @@ Verify any verdict yourself: https://api.fidacy.com/.well-known/jwks.json
103
133
 
104
134
  This is a payment-control plugin, so audit it like one. What it actually does:
105
135
 
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.
136
+ - **Network calls it makes:** the five endpoints listed under "what leaves your
137
+ machine" above, all on your configured engine and nowhere else. That list is
138
+ stated once, at the top, on purpose: this section used to carry a second,
139
+ shorter copy naming only two of them, and a privacy disclosure that
140
+ contradicts itself is worse than a long one. None of the five is ever on the
141
+ decision path; payment gating works fully offline.
142
+ - **Local state:** the four files listed above, and nothing else. This bullet
143
+ used to name two of them and end with "Nothing else", which was not true:
144
+ `pending-anchors.jsonl` was never disclosed. Delete `~/.fidacy` to clear all
145
+ of it.
113
146
  - **`FIDACY_SIGNING_KEY_B64`:** an OPTIONAL env var the operator sets to pin a
114
147
  stable local Ed25519 signing key for grants. If unset, a per-session key is
115
148
  generated. The plugin reads it; it never writes or transmits it.
116
149
  - **API keys:** read from your plugin config (`engineApiKey`) or the
117
150
  `FIDACY_ENGINE_API_KEY` env var, sent only to your configured engine URL
118
151
  (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/).
152
+ secrets in the published bundle. A static analyser will flag this as
153
+ `suspicious.env_credential_access` ("environment variable access combined with
154
+ network send"), and that description is accurate: reading your key and sending
155
+ it to your engine is what a bearer token IS, and every tool that takes an API
156
+ key matches the same pattern. What the rule cannot tell you is WHOSE key and
157
+ WHICH host, so check both yourself: the bundle ships unminified, the source is
158
+ at github.com/lucaslubi/fidacy (`packages/openclaw-plugin`), and every release
159
+ is provenance-linked to the commit it was built from. The command below settles
160
+ the "hardcoded secret" question in one line, and the test suite fails the build
161
+ if a literal ever gets in.
122
162
  - **Verify our signatures, not our word:** every verdict checks against the public
123
163
  JWKS at `api.fidacy.com/.well-known/jwks.json` with the open-source
124
164
  [`@fidacy/verify`](https://www.npmjs.com/package/@fidacy/verify).
@@ -141,15 +181,14 @@ published package, in any version. Check it yourself:
141
181
  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
182
  ```
143
183
 
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.
184
+ On the `suspicious.env_credential_access` finding a static analyser reports here, see
185
+ the "API keys" bullet above. It is stated in one place rather than two, because the
186
+ two copies had drifted into giving different reasons for the same flag.
149
187
 
150
188
  **Turning the network off.** `FIDACY_DISABLE_TELEMETRY=1` stops anonymous install and
151
189
  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.
190
+ With both set, no engine credential and no `operatorEmail`, the plugin decides locally
191
+ and contacts nothing: those four switches cover all five endpoints listed at the top.
153
192
 
154
193
  **Where the history lives.** Decisions go to a hash-chained log under `~/.fidacy` on your
155
194
  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.9" : "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.9" : "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.9" : "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.9",
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.9",
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)",