@fidacy/openclaw-plugin 0.2.1 → 0.2.3

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.2
4
+
5
+ README: a Security and privacy section answering the ClawHub audit point by
6
+ point (telemetry and provisioning opt-outs, local state paths, what
7
+ FIDACY_SIGNING_KEY_B64 is, no hardcoded secrets in the bundle). No code change.
8
+
3
9
  ## 0.2.1
4
10
 
5
11
  Manifest catch-up: openclaw.plugin.json version was stale (0.1.18) in the 0.2.0
package/README.md CHANGED
@@ -70,6 +70,30 @@ the free key is set. Claim an anonymous install's history:
70
70
 
71
71
  Verify any verdict yourself: https://api.fidacy.com/.well-known/jwks.json
72
72
 
73
+ ## Security and privacy, point by point
74
+
75
+ This is a payment-control plugin, so audit it like one. What it actually does:
76
+
77
+ - **Network calls it makes:** anonymous usage telemetry to `api.fidacy.com/v1/telemetry`
78
+ (an install UUID plus event enums; never payee, amount, currency, or content) and a
79
+ background free-key provision to `/v1/provision`. Both are opt-out:
80
+ `FIDACY_DISABLE_TELEMETRY=1` and `FIDACY_DISABLE_PROVISION=1`. Neither is ever on
81
+ the decision path; payment gating works fully offline.
82
+ - **Local state:** `~/.fidacy/config.json` (0600; anon id, tier, your mandate rules)
83
+ and `~/.fidacy/audit/audit.log` (the hash-chained decision log). Nothing else.
84
+ - **`FIDACY_SIGNING_KEY_B64`:** an OPTIONAL env var the operator sets to pin a
85
+ stable local Ed25519 signing key for grants. If unset, a per-session key is
86
+ generated. The plugin reads it; it never writes or transmits it.
87
+ - **API keys:** read from your plugin config (`engineApiKey`) or the
88
+ `FIDACY_ENGINE_API_KEY` env var, sent only to your configured engine URL
89
+ (default `api.fidacy.com`) as a bearer token. There are no hardcoded keys or
90
+ secrets in the published bundle; scanner hits on those lines are pattern matches
91
+ on the env/config reads above, and you can verify yourself: the bundle is
92
+ unminified on npm and mirrored at github.com/lucaslubi/fidacy-mcp (plugin-native/).
93
+ - **Verify our signatures, not our word:** every verdict checks against the public
94
+ JWKS at `api.fidacy.com/.well-known/jwks.json` with the open-source
95
+ [`@fidacy/verify`](https://www.npmjs.com/package/@fidacy/verify).
96
+
73
97
  ## Prefer MCP instead?
74
98
 
75
99
  If you'd rather run Fidacy as an MCP server (out-of-process), use
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.2.1" : "dev";
4693
+ var CLIENT_VERSION = true ? "0.2.3" : "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.2.1" : "dev";
4870
+ var CLIENT_VERSION2 = true ? "0.2.3" : "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");
@@ -4919,16 +4919,21 @@ function nudgeOnce(key) {
4919
4919
  }
4920
4920
  return true;
4921
4921
  }
4922
+ var sessionDecisions = 0;
4923
+ function sessionDecisionCount() {
4924
+ return sessionDecisions;
4925
+ }
4922
4926
  function bumpDecisionCount() {
4927
+ sessionDecisions += 1;
4923
4928
  const cfg = readConfig();
4924
- if (!cfg) return 0;
4929
+ if (!cfg) return sessionDecisions;
4925
4930
  const n = (cfg.decisions_count ?? 0) + 1;
4926
4931
  cfg.decisions_count = n;
4927
4932
  try {
4928
4933
  writeConfig(cfg);
4929
4934
  } catch {
4930
4935
  }
4931
- return n;
4936
+ return Math.max(n, sessionDecisions);
4932
4937
  }
4933
4938
  function decisionNudge(status, violatedRule, upgradeToolName) {
4934
4939
  const count = bumpDecisionCount();
@@ -4962,7 +4967,7 @@ function hasEngineKey(keyOverride) {
4962
4967
  return Boolean((keyOverride ?? process.env.FIDACY_ENGINE_API_KEY ?? "").trim());
4963
4968
  }
4964
4969
  function decisionsUsed() {
4965
- return readConfig()?.decisions_count ?? 0;
4970
+ return Math.max(readConfig()?.decisions_count ?? 0, sessionDecisionCount());
4966
4971
  }
4967
4972
  function remainingFree() {
4968
4973
  return Math.max(0, FREE_DECISIONS - decisionsUsed());
@@ -4981,7 +4986,7 @@ function activationGate(keyOverride) {
4981
4986
  }
4982
4987
  function trialCountdownLine(keyOverride) {
4983
4988
  if (hasEngineKey(keyOverride)) return null;
4984
- if (!readConfig()) return null;
4989
+ if (!readConfig() && sessionDecisionCount() === 0) return null;
4985
4990
  const left = remainingFree();
4986
4991
  if (left > 5) return null;
4987
4992
  const url = claimDestination();
@@ -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.2.1",
6
+ "version": "0.2.2",
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.2.1",
3
+ "version": "0.2.3",
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",
@@ -46,20 +46,20 @@
46
46
  "npmSpec": "@fidacy/openclaw-plugin"
47
47
  }
48
48
  },
49
+ "scripts": {
50
+ "build": "node scripts/bundle.mjs",
51
+ "typecheck": "tsc --noEmit"
52
+ },
49
53
  "engines": {
50
54
  "node": ">=20"
51
55
  },
52
56
  "devDependencies": {
57
+ "@fidacy/firewall": "workspace:*",
58
+ "@fidacy/mcp": "workspace:*",
53
59
  "@types/node": "^22.10.0",
54
60
  "esbuild": "^0.24.0",
55
61
  "openclaw": "2026.6.11",
56
62
  "typebox": "1.1.39",
57
- "typescript": "^5.6.3",
58
- "@fidacy/firewall": "0.1.1",
59
- "@fidacy/mcp": "0.2.0"
60
- },
61
- "scripts": {
62
- "build": "node scripts/bundle.mjs",
63
- "typecheck": "tsc --noEmit"
63
+ "typescript": "^5.6.3"
64
64
  }
65
- }
65
+ }