@fidacy/mcp 0.2.5 → 0.2.7
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/dist/banner.d.ts +8 -0
- package/dist/core.js +1 -1
- package/dist/index.js +87 -29
- package/dist/lib.js +2 -2
- package/package.json +1 -1
package/dist/banner.d.ts
ADDED
package/dist/core.js
CHANGED
|
@@ -461,7 +461,7 @@ function resolveMandateRules(cfg) {
|
|
|
461
461
|
}
|
|
462
462
|
|
|
463
463
|
// src/telemetry.ts
|
|
464
|
-
var CLIENT_VERSION = true ? "0.2.
|
|
464
|
+
var CLIENT_VERSION = true ? "0.2.7" : "dev";
|
|
465
465
|
function bandOf(amount) {
|
|
466
466
|
if (typeof amount !== "number" || !Number.isFinite(amount) || amount <= 0) return void 0;
|
|
467
467
|
if (amount < 10) return "lt10";
|
package/dist/index.js
CHANGED
|
@@ -490,7 +490,7 @@ function resolveMandateRules(cfg) {
|
|
|
490
490
|
}
|
|
491
491
|
|
|
492
492
|
// src/telemetry.ts
|
|
493
|
-
var CLIENT_VERSION = true ? "0.2.
|
|
493
|
+
var CLIENT_VERSION = true ? "0.2.7" : "dev";
|
|
494
494
|
function bandOf(amount) {
|
|
495
495
|
if (typeof amount !== "number" || !Number.isFinite(amount) || amount <= 0) return void 0;
|
|
496
496
|
if (amount < 10) return "lt10";
|
|
@@ -834,7 +834,7 @@ async function findArtifacts(sha2562, cfg) {
|
|
|
834
834
|
}
|
|
835
835
|
|
|
836
836
|
// src/provision.ts
|
|
837
|
-
var CLIENT_VERSION2 = true ? "0.2.
|
|
837
|
+
var CLIENT_VERSION2 = true ? "0.2.7" : "dev";
|
|
838
838
|
function provisionEnabled() {
|
|
839
839
|
const v = (process.env.FIDACY_DISABLE_PROVISION ?? "").trim().toLowerCase();
|
|
840
840
|
return !(v === "1" || v === "true" || v === "yes");
|
|
@@ -995,15 +995,6 @@ function trialCountdownLine(keyOverride) {
|
|
|
995
995
|
}
|
|
996
996
|
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.`;
|
|
997
997
|
}
|
|
998
|
-
function activationBootLine() {
|
|
999
|
-
if (hasEngineKey()) return null;
|
|
1000
|
-
const used = decisionsUsed();
|
|
1001
|
-
const left = remainingFree();
|
|
1002
|
-
if (left === 0) {
|
|
1003
|
-
return ` Anonymous trial over (${used}/${FREE_DECISIONS} free decisions used): payments are denied until activated with a free API key.`;
|
|
1004
|
-
}
|
|
1005
|
-
return ` Anonymous trial: ${used}/${FREE_DECISIONS} free decisions used; after that the firewall requires a free API key.`;
|
|
1006
|
-
}
|
|
1007
998
|
|
|
1008
999
|
// src/reporting.ts
|
|
1009
1000
|
function withinDays(records, days, now = Date.now()) {
|
|
@@ -1018,10 +1009,10 @@ var addTo = (bucket, key, value) => {
|
|
|
1018
1009
|
bucket[key] = (bucket[key] ?? 0) + value;
|
|
1019
1010
|
};
|
|
1020
1011
|
function summarize(records, days, now = Date.now()) {
|
|
1021
|
-
const
|
|
1012
|
+
const rows2 = withinDays(records, days, now);
|
|
1022
1013
|
const out = {
|
|
1023
1014
|
window_days: days,
|
|
1024
|
-
decisions:
|
|
1015
|
+
decisions: rows2.length,
|
|
1025
1016
|
allowed: 0,
|
|
1026
1017
|
denied: 0,
|
|
1027
1018
|
allowed_totals: {},
|
|
@@ -1029,11 +1020,11 @@ function summarize(records, days, now = Date.now()) {
|
|
|
1029
1020
|
denied_by_rule: {},
|
|
1030
1021
|
payees_paid: [],
|
|
1031
1022
|
amount_unknown: 0,
|
|
1032
|
-
first_ts:
|
|
1033
|
-
last_ts:
|
|
1023
|
+
first_ts: rows2.length ? rows2[0].ts : null,
|
|
1024
|
+
last_ts: rows2.length ? rows2[rows2.length - 1].ts : null
|
|
1034
1025
|
};
|
|
1035
1026
|
const paid = /* @__PURE__ */ new Set();
|
|
1036
|
-
for (const r of
|
|
1027
|
+
for (const r of rows2) {
|
|
1037
1028
|
const known = typeof r.amount === "number" && Number.isFinite(r.amount);
|
|
1038
1029
|
if (!known) out.amount_unknown += 1;
|
|
1039
1030
|
const ccy = r.currency ?? "unknown";
|
|
@@ -1086,9 +1077,9 @@ function toRows(records, status, limit) {
|
|
|
1086
1077
|
invoiceRef: r.invoiceRef
|
|
1087
1078
|
}));
|
|
1088
1079
|
}
|
|
1089
|
-
function renderRows(
|
|
1090
|
-
if (!
|
|
1091
|
-
return
|
|
1080
|
+
function renderRows(rows2) {
|
|
1081
|
+
if (!rows2.length) return "No decisions match that filter yet.";
|
|
1082
|
+
return rows2.map((r) => {
|
|
1092
1083
|
const amount = typeof r.amount === "number" ? `${r.amount.toLocaleString("en-US")} ${r.currency ?? ""}`.trim() : "amount not recorded";
|
|
1093
1084
|
const who = r.payee ?? "payee not recorded";
|
|
1094
1085
|
const why = r.status === "DENY" ? ` blocked by ${r.violatedRule ?? "a rule not recorded on this older entry"}.` : "";
|
|
@@ -1118,6 +1109,70 @@ function explainRule(rule, payee) {
|
|
|
1118
1109
|
return `The mandate rule "${rule}" was violated.`;
|
|
1119
1110
|
}
|
|
1120
1111
|
|
|
1112
|
+
// src/banner.ts
|
|
1113
|
+
var fancy = () => {
|
|
1114
|
+
if (process.env.NO_COLOR) return false;
|
|
1115
|
+
if (process.env.FORCE_COLOR) return true;
|
|
1116
|
+
return Boolean(process.stderr.isTTY);
|
|
1117
|
+
};
|
|
1118
|
+
var A = "\x1B[94m";
|
|
1119
|
+
var D = "\x1B[2m";
|
|
1120
|
+
var B = "\x1B[1m";
|
|
1121
|
+
var R = "\x1B[0m";
|
|
1122
|
+
var WIDTH = 80;
|
|
1123
|
+
var LABEL = 9;
|
|
1124
|
+
function rows(s) {
|
|
1125
|
+
const used = decisionsUsed();
|
|
1126
|
+
const keyed = hasEngineKey();
|
|
1127
|
+
const out = [["mode", `${s.tier} \xB7 local-first \xB7 deny-by-default`]];
|
|
1128
|
+
if (!keyed) out.push(["trial", `${used}/${FREE_DECISIONS} anonymous decisions used \xB7 then a free key is required`]);
|
|
1129
|
+
if (s.firstRun) out.push(["mandate", "safe default active \xB7 add trusted payees in ~/.fidacy/config.json"]);
|
|
1130
|
+
if (keyed) {
|
|
1131
|
+
out.push(["verdicts", "engine key set \xB7 signed verdicts from the live engine"]);
|
|
1132
|
+
} else if (s.claim) {
|
|
1133
|
+
out.push(["activate", s.claim]);
|
|
1134
|
+
out.push(["", "free account + key in ~2 min \xB7 every block made here migrates"]);
|
|
1135
|
+
} else {
|
|
1136
|
+
out.push(["verdicts", "provisioning free key in background (or FIDACY_ENGINE_API_KEY)"]);
|
|
1137
|
+
}
|
|
1138
|
+
return out;
|
|
1139
|
+
}
|
|
1140
|
+
function renderBanner(s) {
|
|
1141
|
+
const title = "FIDACY \xB7 the payment firewall for AI agents";
|
|
1142
|
+
const sub = `signs the YES and the NO \xB7 v${s.version}`;
|
|
1143
|
+
const body = rows(s);
|
|
1144
|
+
if (!fancy()) {
|
|
1145
|
+
const lines2 = [
|
|
1146
|
+
`[fidacy] ${title} (${sub})`,
|
|
1147
|
+
...body.map(([k, v]) => `[fidacy] ${(k || "").padEnd(LABEL)} ${v}`)
|
|
1148
|
+
];
|
|
1149
|
+
if (s.weekNudge) lines2.push(`[fidacy] ${"".padEnd(LABEL)} ${s.weekNudge.trim()}`);
|
|
1150
|
+
return lines2.join("\n");
|
|
1151
|
+
}
|
|
1152
|
+
const content = WIDTH - 4;
|
|
1153
|
+
const clip = (t) => t.length > content ? t.slice(0, content - 1) + "\u2026" : t;
|
|
1154
|
+
const row = (styled, visible) => `\u2502 ${styled}${" ".repeat(Math.max(0, content - visible))} \u2502`;
|
|
1155
|
+
const bar = (l, r_) => l + "\u2500".repeat(WIDTH - 2) + r_;
|
|
1156
|
+
const lines = [
|
|
1157
|
+
bar("\u250C", "\u2510"),
|
|
1158
|
+
row(`${B}${A}${clip(title)}${R}`, clip(title).length),
|
|
1159
|
+
row(`${D}${clip(sub)}${R}`, clip(sub).length),
|
|
1160
|
+
bar("\u251C", "\u2524"),
|
|
1161
|
+
...body.map(([k, v]) => {
|
|
1162
|
+
const value = clip(v).slice(0, content - LABEL - 1);
|
|
1163
|
+
const styled = `${A}${(k || "").padEnd(LABEL)}${R} ${k === "activate" ? `${B}${value}${R}` : `${D}${value}${R}`}`;
|
|
1164
|
+
return row(styled, LABEL + 1 + value.length);
|
|
1165
|
+
}),
|
|
1166
|
+
bar("\u2514", "\u2518")
|
|
1167
|
+
];
|
|
1168
|
+
if (s.weekNudge) lines.push(`${D}${s.weekNudge.trim()}${R}`);
|
|
1169
|
+
lines.push(
|
|
1170
|
+
`${D}this is an MCP server, now waiting for an agent on stdio (Ctrl+C exits).${R}`,
|
|
1171
|
+
`${D}wire it into yours:${R} ${A}claude mcp add fidacy -- npx -y @fidacy/mcp${R}`
|
|
1172
|
+
);
|
|
1173
|
+
return lines.join("\n");
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1121
1176
|
// src/sentinel.ts
|
|
1122
1177
|
var SENTINEL = {
|
|
1123
1178
|
/** amount >= SPIKE_FACTOR x the historical max ALLOW to the same payee. */
|
|
@@ -1205,7 +1260,7 @@ function renderAlertLine(alerts) {
|
|
|
1205
1260
|
var state = ensureState();
|
|
1206
1261
|
var core = makeCore();
|
|
1207
1262
|
var subject = process.env.FIDACY_SUBJECT ?? "agent:demo";
|
|
1208
|
-
var SERVER_VERSION = true ? "0.2.
|
|
1263
|
+
var SERVER_VERSION = true ? "0.2.7" : "dev";
|
|
1209
1264
|
var bootClaim = claimUrl();
|
|
1210
1265
|
var server = new McpServer(
|
|
1211
1266
|
{ name: "fidacy", version: SERVER_VERSION },
|
|
@@ -1334,10 +1389,10 @@ server.registerTool(
|
|
|
1334
1389
|
},
|
|
1335
1390
|
async ({ limit, status }) => {
|
|
1336
1391
|
const records = await core.history(5e3);
|
|
1337
|
-
const
|
|
1392
|
+
const rows2 = toRows(records, status ?? "all", limit ?? 20);
|
|
1338
1393
|
return {
|
|
1339
|
-
content: [{ type: "text", text: renderRows(
|
|
1340
|
-
structuredContent: { count:
|
|
1394
|
+
content: [{ type: "text", text: renderRows(rows2) }],
|
|
1395
|
+
structuredContent: { count: rows2.length, decisions: rows2 }
|
|
1341
1396
|
};
|
|
1342
1397
|
}
|
|
1343
1398
|
);
|
|
@@ -1582,12 +1637,15 @@ async function main() {
|
|
|
1582
1637
|
void flush();
|
|
1583
1638
|
});
|
|
1584
1639
|
void autoProvision();
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1640
|
+
console.error(
|
|
1641
|
+
renderBanner({
|
|
1642
|
+
version: SERVER_VERSION,
|
|
1643
|
+
tier: state.config.tier,
|
|
1644
|
+
firstRun: state.firstRun,
|
|
1645
|
+
claim: claimUrl(),
|
|
1646
|
+
weekNudge: weekOneBootNudge("upgrade") ?? ""
|
|
1647
|
+
})
|
|
1648
|
+
);
|
|
1591
1649
|
}
|
|
1592
1650
|
main().catch((e) => {
|
|
1593
1651
|
console.error("[fidacy] fatal:", e);
|
package/dist/lib.js
CHANGED
|
@@ -613,7 +613,7 @@ function resolveMandateRules(cfg) {
|
|
|
613
613
|
}
|
|
614
614
|
|
|
615
615
|
// src/telemetry.ts
|
|
616
|
-
var CLIENT_VERSION = true ? "0.2.
|
|
616
|
+
var CLIENT_VERSION = true ? "0.2.7" : "dev";
|
|
617
617
|
function bandOf(amount) {
|
|
618
618
|
if (typeof amount !== "number" || !Number.isFinite(amount) || amount <= 0) return void 0;
|
|
619
619
|
if (amount < 10) return "lt10";
|
|
@@ -791,7 +791,7 @@ function requestUpgrade() {
|
|
|
791
791
|
}
|
|
792
792
|
|
|
793
793
|
// src/provision.ts
|
|
794
|
-
var CLIENT_VERSION2 = true ? "0.2.
|
|
794
|
+
var CLIENT_VERSION2 = true ? "0.2.7" : "dev";
|
|
795
795
|
function provisionEnabled() {
|
|
796
796
|
const v = (process.env.FIDACY_DISABLE_PROVISION ?? "").trim().toLowerCase();
|
|
797
797
|
return !(v === "1" || v === "true" || v === "yes");
|
package/package.json
CHANGED