@fidacy/openclaw-plugin 0.5.3 → 0.5.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 +12 -0
- package/README.md +41 -14
- package/dist/index.js +25 -3
- package/openclaw.plugin.json +2 -2
- package/package.json +10 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Scope disclosure. A ClawHub security audit of 0.5.3 flagged that the plugin "observes all agent tool calls and stores or anchors session metadata beyond the clearly advertised payment scope". Correct: since 0.5.0 the plugin hooks every tool call to build the session report, while the manifest description still promised only signed verdicts on money-moving actions. Anyone installing read a smaller promise than the software keeps.
|
|
8
|
+
|
|
9
|
+
The manifest description now leads with the observer and names what stays on the machine (command, file path, arguments) versus what leaves (per-category counts and a hash), plus FIDACY_DISABLE_TELEMETRY. The README opens with that split, before any pitch, and includes the opt-in operatorEmail.
|
|
10
|
+
|
|
11
|
+
No behaviour change: same code as 0.5.3, honest labelling.
|
|
12
|
+
|
|
13
|
+
On the static-analysis hit for FIDACY_ENGINE_API_KEY plus a network call: that is your own credential going only to the engineUrl you configured, the shape of any API client. The README already carries the command that proves no credential literal ships in the package, and it passes.
|
|
14
|
+
|
|
3
15
|
## 0.2.10
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -2,26 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
Fidacy
|
|
6
|
-
in-process (no MCP subprocess, no
|
|
5
|
+
Fidacy firewall for AI agents as a **native OpenClaw plugin**: the payment
|
|
6
|
+
firewall plus a session observer, registered in-process (no MCP subprocess, no
|
|
7
|
+
`npx` spawn).
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
## What this plugin observes, and what leaves your machine
|
|
10
|
+
|
|
11
|
+
Read this before installing. Since 0.5.0 the plugin is not payment-only: it
|
|
12
|
+
hooks every agent tool call to build a session report, and each session ends in
|
|
13
|
+
a hash digest anyone can recompute.
|
|
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
|
|
28
|
+
|
|
29
|
+
## The tools
|
|
30
|
+
|
|
31
|
+
- `request_payment`: authorize a payment against the active signed mandate.
|
|
9
32
|
ALLOW returns a short-lived Ed25519 grant the executor requires; DENY returns the
|
|
10
33
|
violated rule and no grant.
|
|
11
|
-
- `verify_mandate
|
|
12
|
-
- `get_audit_proof
|
|
13
|
-
- `assess_action
|
|
34
|
+
- `verify_mandate`: the active mandate envelope + Fidacy's public key.
|
|
35
|
+
- `get_audit_proof`: tamper-evident, hash-chained proof for any decision.
|
|
36
|
+
- `assess_action`: a SIGNED trust verdict from the live Fidacy engine
|
|
14
37
|
(requires an engine API key), verifiable by anyone via `@fidacy/verify`.
|
|
15
|
-
- `fidacy_upgrade
|
|
38
|
+
- `fidacy_upgrade`: upgrade the local install to a real Fidacy account.
|
|
39
|
+
|
|
40
|
+
Plus `spend_summary`, `list_decisions`, `sentinel_alerts`, `explain_decision`,
|
|
41
|
+
`anchor_artifact` and `check_artifact`.
|
|
16
42
|
|
|
17
|
-
Same engine as [`@fidacy/mcp`](https://www.npmjs.com/package/@fidacy/mcp)
|
|
43
|
+
Same engine as [`@fidacy/mcp`](https://www.npmjs.com/package/@fidacy/mcp): one
|
|
18
44
|
engine, many shells. Local-first, deny-by-default, non-custodial: Fidacy authorizes,
|
|
19
45
|
it never holds funds.
|
|
20
46
|
|
|
21
47
|
## To everyone who installed Fidacy
|
|
22
48
|
|
|
23
|
-
|
|
24
|
-
date, over 99% of them blocks. Thank you. Two things worth
|
|
49
|
+
Excluding our own test traffic, installs like yours have made about 1,600 real
|
|
50
|
+
firewall decisions to date, over 99% of them blocks. Thank you. Two things worth
|
|
51
|
+
a minute of your time:
|
|
25
52
|
|
|
26
53
|
1. **See and claim what YOUR install blocked.** Your install carries a private,
|
|
27
54
|
anonymous id on your machine (we never learn who you are unless you choose to).
|
|
@@ -37,10 +64,10 @@ Lucas de Lima, founder
|
|
|
37
64
|
|
|
38
65
|
## Install (2 minutes)
|
|
39
66
|
|
|
40
|
-
**Step 1
|
|
67
|
+
**Step 1: get your free API key** at
|
|
41
68
|
[app.fidacy.com/signup](https://app.fidacy.com/signup) (free tier, no card).
|
|
42
69
|
|
|
43
|
-
**Step 2
|
|
70
|
+
**Step 2: install and set the key.**
|
|
44
71
|
|
|
45
72
|
```bash
|
|
46
73
|
openclaw plugins install @fidacy/openclaw-plugin
|
|
@@ -132,7 +159,7 @@ with SHA-256 and send only the 64 hex characters.
|
|
|
132
159
|
## Prefer MCP instead?
|
|
133
160
|
|
|
134
161
|
If you'd rather run Fidacy as an MCP server (out-of-process), use
|
|
135
|
-
`openclaw mcp add fidacy --command npx --arg -y --arg @fidacy/mcp`
|
|
162
|
+
`openclaw mcp add fidacy --command npx --arg -y --arg @fidacy/mcp` , same tools,
|
|
136
163
|
same engine. This plugin is the native, in-process variant.
|
|
137
164
|
|
|
138
165
|
## Build (development)
|
|
@@ -143,7 +170,7 @@ pnpm --filter @fidacy/openclaw-plugin typecheck # tsc against the real openclaw
|
|
|
143
170
|
```
|
|
144
171
|
|
|
145
172
|
`openclaw/plugin-sdk/*` stays external (the host provides it at runtime); everything
|
|
146
|
-
else
|
|
173
|
+
else (the shared `@fidacy/firewall` engine and `@fidacy/mcp` shell wiring) is
|
|
147
174
|
inlined so the published package is self-contained.
|
|
148
175
|
|
|
149
176
|
Apache-2.0 · https://fidacy.com
|
package/dist/index.js
CHANGED
|
@@ -4426,6 +4426,24 @@ function sessionLabel(sessionId, total, byCategory) {
|
|
|
4426
4426
|
}
|
|
4427
4427
|
return parts.join(" ").slice(0, 120);
|
|
4428
4428
|
}
|
|
4429
|
+
function sessionSummary(opts) {
|
|
4430
|
+
const by = {};
|
|
4431
|
+
for (const [cat, n] of Object.entries(opts.byCategory)) if (n > 0) by[cat] = n;
|
|
4432
|
+
const s = {
|
|
4433
|
+
v: 1,
|
|
4434
|
+
// Mesmo saneamento do rótulo: o host vem de código nosso, mas o campo é
|
|
4435
|
+
// limitado na origem para que uma string estranha vire um valor curto e
|
|
4436
|
+
// legível em vez de um 400 que perderia o registro inteiro da sessão.
|
|
4437
|
+
host: opts.host.replace(/[^a-z0-9-]/gi, "").slice(0, 40) || "unknown",
|
|
4438
|
+
session_id: opts.sessionId.replace(/[^A-Za-z0-9-]/g, "").slice(0, 64) || "unknown",
|
|
4439
|
+
total: opts.total
|
|
4440
|
+
};
|
|
4441
|
+
if (Object.keys(by).length) s.by_category = by;
|
|
4442
|
+
if (opts.truncated) s.truncated = true;
|
|
4443
|
+
if (opts.startedAt) s.started_at = opts.startedAt;
|
|
4444
|
+
if (opts.endedAt) s.ended_at = opts.endedAt;
|
|
4445
|
+
return s;
|
|
4446
|
+
}
|
|
4429
4447
|
|
|
4430
4448
|
// ../mcp/src/observer.ts
|
|
4431
4449
|
var EXACT = {
|
|
@@ -5067,7 +5085,7 @@ var FileAuditStore = class {
|
|
|
5067
5085
|
import { statSync } from "node:fs";
|
|
5068
5086
|
|
|
5069
5087
|
// ../mcp/src/telemetry.ts
|
|
5070
|
-
var CLIENT_VERSION = true ? "0.5.
|
|
5088
|
+
var CLIENT_VERSION = true ? "0.5.4" : "dev";
|
|
5071
5089
|
function bandOf(amount) {
|
|
5072
5090
|
if (typeof amount !== "number" || !Number.isFinite(amount) || amount <= 0) return void 0;
|
|
5073
5091
|
if (amount < 10) return "lt10";
|
|
@@ -5255,7 +5273,7 @@ function requestUpgrade() {
|
|
|
5255
5273
|
}
|
|
5256
5274
|
|
|
5257
5275
|
// ../mcp/src/provision.ts
|
|
5258
|
-
var CLIENT_VERSION2 = true ? "0.5.
|
|
5276
|
+
var CLIENT_VERSION2 = true ? "0.5.4" : "dev";
|
|
5259
5277
|
function provisionEnabled() {
|
|
5260
5278
|
const v = (process.env.FIDACY_DISABLE_PROVISION ?? "").trim().toLowerCase();
|
|
5261
5279
|
return !(v === "1" || v === "true" || v === "yes");
|
|
@@ -5397,7 +5415,7 @@ function trialCountdownLine(keyOverride) {
|
|
|
5397
5415
|
}
|
|
5398
5416
|
|
|
5399
5417
|
// ../mcp/src/register.ts
|
|
5400
|
-
var CLIENT_VERSION3 = true ? "0.5.
|
|
5418
|
+
var CLIENT_VERSION3 = true ? "0.5.4" : "dev";
|
|
5401
5419
|
function endpoint3() {
|
|
5402
5420
|
const base = (process.env.FIDACY_ENGINE_URL ?? "https://api.fidacy.com").replace(/\/$/, "");
|
|
5403
5421
|
return `${base}/v1/register`;
|
|
@@ -6340,6 +6358,10 @@ entry.register = (api) => {
|
|
|
6340
6358
|
sha256: head,
|
|
6341
6359
|
kind: "custom",
|
|
6342
6360
|
label: sessionLabel(sessionId, total, byCategory),
|
|
6361
|
+
// O contrato estruturado que o console lê. `host` é o campo que o
|
|
6362
|
+
// rótulo nunca teve, e sem ele este plugin e o hook de Claude Code
|
|
6363
|
+
// escreviam linhas indistinguíveis.
|
|
6364
|
+
summary: sessionSummary({ host: "openclaw", sessionId, total, byCategory }),
|
|
6343
6365
|
// Which install produced the session, so a fleet view can group by
|
|
6344
6366
|
// machine. The anon id is a random UUID minted on this machine and
|
|
6345
6367
|
// tied to no person, which is the point: the cockpit answers "which
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "fidacy",
|
|
3
3
|
"name": "Fidacy AI Agent Firewall",
|
|
4
|
-
"description": "
|
|
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.
|
|
6
|
+
"version": "0.5.4",
|
|
7
7
|
"contracts": {
|
|
8
8
|
"tools": [
|
|
9
9
|
"request_payment",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fidacy/openclaw-plugin",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
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)",
|
|
@@ -47,21 +47,21 @@
|
|
|
47
47
|
"npmSpec": "@fidacy/openclaw-plugin"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "node scripts/bundle.mjs",
|
|
52
|
+
"typecheck": "tsc --noEmit",
|
|
53
|
+
"test": "npm run build && node --test test/*.test.mjs"
|
|
54
|
+
},
|
|
50
55
|
"engines": {
|
|
51
56
|
"node": ">=20"
|
|
52
57
|
},
|
|
53
58
|
"devDependencies": {
|
|
59
|
+
"@fidacy/firewall": "workspace:*",
|
|
60
|
+
"@fidacy/mcp": "workspace:*",
|
|
54
61
|
"@types/node": "^22.10.0",
|
|
55
62
|
"esbuild": "^0.24.0",
|
|
56
63
|
"openclaw": "2026.6.11",
|
|
57
64
|
"typebox": "1.1.39",
|
|
58
|
-
"typescript": "^5.6.3"
|
|
59
|
-
"@fidacy/firewall": "0.1.1",
|
|
60
|
-
"@fidacy/mcp": "0.7.0"
|
|
61
|
-
},
|
|
62
|
-
"scripts": {
|
|
63
|
-
"build": "node scripts/bundle.mjs",
|
|
64
|
-
"typecheck": "tsc --noEmit",
|
|
65
|
-
"test": "npm run build && node --test test/*.test.mjs"
|
|
65
|
+
"typescript": "^5.6.3"
|
|
66
66
|
}
|
|
67
|
-
}
|
|
67
|
+
}
|