@fidacy/mcp 0.2.5 → 0.2.6
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 +83 -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.6" : "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.6" : "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.6" : "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,66 @@ 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
|
+
return lines.join("\n");
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1121
1172
|
// src/sentinel.ts
|
|
1122
1173
|
var SENTINEL = {
|
|
1123
1174
|
/** amount >= SPIKE_FACTOR x the historical max ALLOW to the same payee. */
|
|
@@ -1205,7 +1256,7 @@ function renderAlertLine(alerts) {
|
|
|
1205
1256
|
var state = ensureState();
|
|
1206
1257
|
var core = makeCore();
|
|
1207
1258
|
var subject = process.env.FIDACY_SUBJECT ?? "agent:demo";
|
|
1208
|
-
var SERVER_VERSION = true ? "0.2.
|
|
1259
|
+
var SERVER_VERSION = true ? "0.2.6" : "dev";
|
|
1209
1260
|
var bootClaim = claimUrl();
|
|
1210
1261
|
var server = new McpServer(
|
|
1211
1262
|
{ name: "fidacy", version: SERVER_VERSION },
|
|
@@ -1334,10 +1385,10 @@ server.registerTool(
|
|
|
1334
1385
|
},
|
|
1335
1386
|
async ({ limit, status }) => {
|
|
1336
1387
|
const records = await core.history(5e3);
|
|
1337
|
-
const
|
|
1388
|
+
const rows2 = toRows(records, status ?? "all", limit ?? 20);
|
|
1338
1389
|
return {
|
|
1339
|
-
content: [{ type: "text", text: renderRows(
|
|
1340
|
-
structuredContent: { count:
|
|
1390
|
+
content: [{ type: "text", text: renderRows(rows2) }],
|
|
1391
|
+
structuredContent: { count: rows2.length, decisions: rows2 }
|
|
1341
1392
|
};
|
|
1342
1393
|
}
|
|
1343
1394
|
);
|
|
@@ -1582,12 +1633,15 @@ async function main() {
|
|
|
1582
1633
|
void flush();
|
|
1583
1634
|
});
|
|
1584
1635
|
void autoProvision();
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1636
|
+
console.error(
|
|
1637
|
+
renderBanner({
|
|
1638
|
+
version: SERVER_VERSION,
|
|
1639
|
+
tier: state.config.tier,
|
|
1640
|
+
firstRun: state.firstRun,
|
|
1641
|
+
claim: claimUrl(),
|
|
1642
|
+
weekNudge: weekOneBootNudge("upgrade") ?? ""
|
|
1643
|
+
})
|
|
1644
|
+
);
|
|
1591
1645
|
}
|
|
1592
1646
|
main().catch((e) => {
|
|
1593
1647
|
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.6" : "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.6" : "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