@fidacy/openclaw-plugin 0.1.18 → 0.2.1
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 +14 -0
- package/README.md +21 -8
- package/dist/index.js +43 -3
- package/openclaw.plugin.json +2 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
Manifest catch-up: openclaw.plugin.json version was stale (0.1.18) in the 0.2.0
|
|
6
|
+
artifact, and the engineApiKey help now points to the free key and explains it
|
|
7
|
+
keeps the firewall active past the 20-decision anonymous trial. No code change.
|
|
8
|
+
|
|
9
|
+
## 0.2.0
|
|
10
|
+
|
|
11
|
+
Activation gate (same engine as @fidacy/mcp 0.2.0): anonymous installs get 20
|
|
12
|
+
free firewall decisions, then request_payment fails closed with DENY
|
|
13
|
+
(activation_required) until engineApiKey (plugin config) or
|
|
14
|
+
FIDACY_ENGINE_API_KEY is set — free key at fidacy.com/claim, history migrates.
|
|
15
|
+
Countdown line on the last 5 free decisions. Keyed installs unaffected.
|
|
16
|
+
|
|
3
17
|
## 0.1.14 — 2026-07-06
|
|
4
18
|
|
|
5
19
|
Founder note in the README for the week-one install base: claim your install's
|
package/README.md
CHANGED
|
@@ -18,10 +18,10 @@ Same engine as [`@fidacy/mcp`](https://www.npmjs.com/package/@fidacy/mcp) — on
|
|
|
18
18
|
engine, many shells. Local-first, deny-by-default, non-custodial: Fidacy authorizes,
|
|
19
19
|
it never holds funds.
|
|
20
20
|
|
|
21
|
-
## To everyone who installed Fidacy
|
|
21
|
+
## To everyone who installed Fidacy
|
|
22
22
|
|
|
23
|
-
You are one of ~
|
|
24
|
-
|
|
23
|
+
You are one of ~170 installs that have made 2,100+ real firewall decisions to
|
|
24
|
+
date, over 99% of them blocks. Thank you. Two things worth a minute of your time:
|
|
25
25
|
|
|
26
26
|
1. **See and claim what YOUR install blocked.** Your install carries a private,
|
|
27
27
|
anonymous id on your machine (we never learn who you are unless you choose to).
|
|
@@ -35,14 +35,18 @@ You are one of ~135 installs that made 1,784 real firewall decisions in week one
|
|
|
35
35
|
|
|
36
36
|
Lucas de Lima, founder
|
|
37
37
|
|
|
38
|
-
## Install
|
|
38
|
+
## Install (2 minutes)
|
|
39
|
+
|
|
40
|
+
**Step 1 — get your free API key** at
|
|
41
|
+
[app.fidacy.com/signup](https://app.fidacy.com/signup) (free tier, no card).
|
|
42
|
+
|
|
43
|
+
**Step 2 — install and set the key:**
|
|
39
44
|
|
|
40
45
|
```bash
|
|
41
46
|
openclaw plugins install @fidacy/openclaw-plugin
|
|
42
47
|
```
|
|
43
48
|
|
|
44
|
-
|
|
45
|
-
`~/.fidacy/config.json`. Optional plugin config (`plugins.entries.fidacy.config`):
|
|
49
|
+
Plugin config (`plugins.entries.fidacy.config`):
|
|
46
50
|
|
|
47
51
|
```json
|
|
48
52
|
{
|
|
@@ -52,8 +56,17 @@ Zero config to start (deny-unknown-payee + per-tx cap). Add trusted payees/caps
|
|
|
52
56
|
}
|
|
53
57
|
```
|
|
54
58
|
|
|
55
|
-
`engineApiKey` enables signed verdicts (`assess_action`)
|
|
56
|
-
|
|
59
|
+
`engineApiKey` enables signed verdicts (`assess_action`) and keeps the firewall
|
|
60
|
+
active past the anonymous trial. Environment variables (`FIDACY_ENGINE_API_KEY`,
|
|
61
|
+
`FIDACY_ENGINE_URL`, `FIDACY_SUBJECT`) are the fallback. Decisions run locally,
|
|
62
|
+
deny-by-default (deny-unknown-payee + per-tx cap); add trusted payees/caps in
|
|
63
|
+
`~/.fidacy/config.json`.
|
|
64
|
+
|
|
65
|
+
**No key yet?** The install works anonymously for its first **20 firewall
|
|
66
|
+
decisions**, then fails closed (payments denied with `activation_required`) until
|
|
67
|
+
the free key is set. Claim an anonymous install's history:
|
|
68
|
+
`grep anon_id ~/.fidacy/config.json`, then open
|
|
69
|
+
`https://fidacy.com/claim?ref=<that id>`.
|
|
57
70
|
|
|
58
71
|
Verify any verdict yourself: https://api.fidacy.com/.well-known/jwks.json
|
|
59
72
|
|
package/dist/index.js
CHANGED
|
@@ -4690,7 +4690,7 @@ function resolveMandateRules(cfg) {
|
|
|
4690
4690
|
}
|
|
4691
4691
|
|
|
4692
4692
|
// ../mcp/src/telemetry.ts
|
|
4693
|
-
var CLIENT_VERSION = true ? "0.1
|
|
4693
|
+
var CLIENT_VERSION = true ? "0.2.1" : "dev";
|
|
4694
4694
|
function bandOf(amount) {
|
|
4695
4695
|
if (typeof amount !== "number" || !Number.isFinite(amount) || amount <= 0) return void 0;
|
|
4696
4696
|
if (amount < 10) return "lt10";
|
|
@@ -4867,7 +4867,7 @@ function requestUpgrade() {
|
|
|
4867
4867
|
}
|
|
4868
4868
|
|
|
4869
4869
|
// ../mcp/src/provision.ts
|
|
4870
|
-
var CLIENT_VERSION2 = true ? "0.1
|
|
4870
|
+
var CLIENT_VERSION2 = true ? "0.2.1" : "dev";
|
|
4871
4871
|
function provisionEnabled() {
|
|
4872
4872
|
const v = (process.env.FIDACY_DISABLE_PROVISION ?? "").trim().toLowerCase();
|
|
4873
4873
|
return !(v === "1" || v === "true" || v === "yes");
|
|
@@ -4956,6 +4956,41 @@ function noKeyCta() {
|
|
|
4956
4956
|
return url ? `free in ~1 min for your operator: open ${url} (this install's history migrates), or set FIDACY_ENGINE_API_KEY if you already have one` : `free in ~1 min: call the upgrade tool (your history migrates), or set FIDACY_ENGINE_API_KEY if you already have one`;
|
|
4957
4957
|
}
|
|
4958
4958
|
|
|
4959
|
+
// ../mcp/src/activation.ts
|
|
4960
|
+
var FREE_DECISIONS = 20;
|
|
4961
|
+
function hasEngineKey(keyOverride) {
|
|
4962
|
+
return Boolean((keyOverride ?? process.env.FIDACY_ENGINE_API_KEY ?? "").trim());
|
|
4963
|
+
}
|
|
4964
|
+
function decisionsUsed() {
|
|
4965
|
+
return readConfig()?.decisions_count ?? 0;
|
|
4966
|
+
}
|
|
4967
|
+
function remainingFree() {
|
|
4968
|
+
return Math.max(0, FREE_DECISIONS - decisionsUsed());
|
|
4969
|
+
}
|
|
4970
|
+
function claimDestination() {
|
|
4971
|
+
return claimUrl() ?? "https://fidacy.com/claim";
|
|
4972
|
+
}
|
|
4973
|
+
function activationGate(keyOverride) {
|
|
4974
|
+
if (hasEngineKey(keyOverride)) return null;
|
|
4975
|
+
if (decisionsUsed() < FREE_DECISIONS) return null;
|
|
4976
|
+
recordUpgradeIntent();
|
|
4977
|
+
const url = claimDestination();
|
|
4978
|
+
return {
|
|
4979
|
+
message: `DENY (activation_required). This anonymous install has used its ${FREE_DECISIONS} free firewall decisions, so the firewall now fails closed: no payment can proceed until it is activated. Activation is a free API key, about 2 minutes, no card. Relay this to your operator word for word: "Fidacy paused this agent's payments until you activate it. Get your free key at ${url} (this install's block history migrates to your account), then set FIDACY_ENGINE_API_KEY=<the key> where the agent runs and retry."`
|
|
4980
|
+
};
|
|
4981
|
+
}
|
|
4982
|
+
function trialCountdownLine(keyOverride) {
|
|
4983
|
+
if (hasEngineKey(keyOverride)) return null;
|
|
4984
|
+
if (!readConfig()) return null;
|
|
4985
|
+
const left = remainingFree();
|
|
4986
|
+
if (left > 5) return null;
|
|
4987
|
+
const url = claimDestination();
|
|
4988
|
+
if (left === 0) {
|
|
4989
|
+
return ` [fidacy] That was this install's LAST free anonymous decision \u2014 the next payment will be denied until it is activated. For your operator: free API key at ${url} (history migrates), then set FIDACY_ENGINE_API_KEY.`;
|
|
4990
|
+
}
|
|
4991
|
+
return ` [fidacy] ${left} free anonymous decision${left === 1 ? "" : "s"} left on this install before the firewall requires activation. For your operator: free API key at ${url} (history migrates), then set FIDACY_ENGINE_API_KEY.`;
|
|
4992
|
+
}
|
|
4993
|
+
|
|
4959
4994
|
// ../mcp/src/assess.ts
|
|
4960
4995
|
var AssessError = class extends Error {
|
|
4961
4996
|
type;
|
|
@@ -5206,11 +5241,16 @@ var index_default = defineToolPlugin({
|
|
|
5206
5241
|
)
|
|
5207
5242
|
}),
|
|
5208
5243
|
async execute(params, config) {
|
|
5244
|
+
const gate = activationGate(config.engineApiKey);
|
|
5245
|
+
if (gate) {
|
|
5246
|
+
return { status: "DENY", decisionId: "activation_required", violatedRule: "activation_required", message: gate.message };
|
|
5247
|
+
}
|
|
5209
5248
|
const d = await boot().decide(params, subjectOf(config));
|
|
5210
5249
|
const base = d.status === "ALLOW" ? `ALLOW (decision ${d.decisionId})${params.invoiceRef ? ` for invoice ${params.invoiceRef}` : ""}. To settle, call the executor with the SAME payee, amount, currency, and idempotencyKey, and set "grant" to EXACTLY this signed value:
|
|
5211
5250
|
${d.grant}` : `DENY (decision ${d.decisionId}). Rule violated: ${d.violatedRule}. No grant issued, this payment cannot proceed. The denial itself is recorded in the tamper-evident, hash-chained audit: call get_audit_proof with decisionId ${d.decisionId} for the proof of what was blocked.${d.violatedRule?.startsWith("payee_not_in_allowlist") ? ` If the user trusts this payee, add "${params.payee}" to mandate.payees in ~/.fidacy/config.json and retry: the firewall picks the change up on the next call, no restart needed.` : ""}`;
|
|
5212
5251
|
const nudge = decisionNudge(d.status, d.violatedRule, "fidacy_upgrade");
|
|
5213
|
-
const
|
|
5252
|
+
const countdown = trialCountdownLine(config.engineApiKey);
|
|
5253
|
+
const message = [base, nudge, countdown].filter(Boolean).join(" ");
|
|
5214
5254
|
return { status: d.status, decisionId: d.decisionId, grant: d.grant, violatedRule: d.violatedRule, message };
|
|
5215
5255
|
}
|
|
5216
5256
|
}),
|
package/openclaw.plugin.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "Fidacy — Payment Firewall",
|
|
4
4
|
"description": "A signed, independently-verifiable verdict on every money-moving agent action. Blocks wrong/lookalike payee, over-cap, and duplicate-invoice fraud before money moves. Non-custodial, local-first, deny-by-default.",
|
|
5
5
|
"icon": "https://fidacy.com/logo.png",
|
|
6
|
-
"version": "0.1
|
|
6
|
+
"version": "0.2.1",
|
|
7
7
|
"contracts": {
|
|
8
8
|
"tools": [
|
|
9
9
|
"request_payment",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"label": "Engine API key",
|
|
39
39
|
"placeholder": "fky_live_...",
|
|
40
40
|
"sensitive": true,
|
|
41
|
-
"help": "
|
|
41
|
+
"help": "Free key at app.fidacy.com/signup. Enables signed trust verdicts (assess_action) and keeps the firewall active past the 20-decision anonymous trial."
|
|
42
42
|
},
|
|
43
43
|
"engineUrl": {
|
|
44
44
|
"label": "Engine URL",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fidacy/openclaw-plugin",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
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
|
"homepage": "https://fidacy.com",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"typebox": "1.1.39",
|
|
57
57
|
"typescript": "^5.6.3",
|
|
58
58
|
"@fidacy/firewall": "0.1.1",
|
|
59
|
-
"@fidacy/mcp": "0.
|
|
59
|
+
"@fidacy/mcp": "0.2.0"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build": "node scripts/bundle.mjs",
|