@mneme-ai/core 2.19.35 → 2.19.37
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/autonomic_scheduler/r3_dead_man.test.js +3 -2
- package/dist/autonomic_scheduler/r3_dead_man.test.js.map +1 -1
- package/dist/browser_receipt/browser.test.d.ts +2 -0
- package/dist/browser_receipt/browser.test.d.ts.map +1 -0
- package/dist/browser_receipt/browser.test.js +156 -0
- package/dist/browser_receipt/browser.test.js.map +1 -0
- package/dist/browser_receipt/index.d.ts +109 -0
- package/dist/browser_receipt/index.d.ts.map +1 -0
- package/dist/browser_receipt/index.js +231 -0
- package/dist/browser_receipt/index.js.map +1 -0
- package/dist/citizens_audit/citizens.test.d.ts +2 -0
- package/dist/citizens_audit/citizens.test.d.ts.map +1 -0
- package/dist/citizens_audit/citizens.test.js +167 -0
- package/dist/citizens_audit/citizens.test.js.map +1 -0
- package/dist/citizens_audit/index.d.ts +118 -0
- package/dist/citizens_audit/index.d.ts.map +1 -0
- package/dist/citizens_audit/index.js +215 -0
- package/dist/citizens_audit/index.js.map +1 -0
- package/dist/conscience_card/card.test.d.ts +2 -0
- package/dist/conscience_card/card.test.d.ts.map +1 -0
- package/dist/conscience_card/card.test.js +173 -0
- package/dist/conscience_card/card.test.js.map +1 -0
- package/dist/conscience_card/index.d.ts +75 -0
- package/dist/conscience_card/index.d.ts.map +1 -0
- package/dist/conscience_card/index.js +152 -0
- package/dist/conscience_card/index.js.map +1 -0
- package/dist/cosmic/aurelian_v1936.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1936.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1936.test.js +34 -0
- package/dist/cosmic/aurelian_v1936.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1937.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1937.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1937.test.js +90 -0
- package/dist/cosmic/aurelian_v1937.test.js.map +1 -0
- package/dist/diaspora/auto_flow.test.d.ts +17 -0
- package/dist/diaspora/auto_flow.test.d.ts.map +1 -0
- package/dist/diaspora/auto_flow.test.js +109 -0
- package/dist/diaspora/auto_flow.test.js.map +1 -0
- package/dist/diaspora/spore_autostart.d.ts +8 -1
- package/dist/diaspora/spore_autostart.d.ts.map +1 -1
- package/dist/diaspora/spore_autostart.js +14 -1
- package/dist/diaspora/spore_autostart.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/mayor_election/index.d.ts +147 -0
- package/dist/mayor_election/index.d.ts.map +1 -0
- package/dist/mayor_election/index.js +256 -0
- package/dist/mayor_election/index.js.map +1 -0
- package/dist/mayor_election/mayor.test.d.ts +2 -0
- package/dist/mayor_election/mayor.test.d.ts.map +1 -0
- package/dist/mayor_election/mayor.test.js +175 -0
- package/dist/mayor_election/mayor.test.js.map +1 -0
- package/dist/mneme_receipt_protocol/index.d.ts +164 -0
- package/dist/mneme_receipt_protocol/index.d.ts.map +1 -0
- package/dist/mneme_receipt_protocol/index.js +335 -0
- package/dist/mneme_receipt_protocol/index.js.map +1 -0
- package/dist/mneme_receipt_protocol/protocol.test.d.ts +2 -0
- package/dist/mneme_receipt_protocol/protocol.test.d.ts.map +1 -0
- package/dist/mneme_receipt_protocol/protocol.test.js +176 -0
- package/dist/mneme_receipt_protocol/protocol.test.js.map +1 -0
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +16 -0
- package/dist/whats_new.js.map +1 -1
- package/dist/wrapper_genesis/index.d.ts.map +1 -1
- package/dist/wrapper_genesis/index.js +40 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { anonymizeReceipt, aggregateCitizens, renderQuarterlyReport, quarterIdFromMs, computeAuditStats, formatAuditLine, CITIZENS_AUDIT_TUNABLES, } from "./index.js";
|
|
3
|
+
import { mintProtocolReceipt } from "../mneme_receipt_protocol/index.js";
|
|
4
|
+
describe("v2.19.37 CITIZEN'S AUDIT — anonymize", () => {
|
|
5
|
+
it("strips PII fields (promptSha256, files, note, contentHash, implementation)", () => {
|
|
6
|
+
const r = mintProtocolReceipt({
|
|
7
|
+
vendor: "claude", modelVersion: "opus", tsMs: 1_700_000_000_000,
|
|
8
|
+
promptText: "secret prompt", filesTouched: ["/home/user/.ssh/id_rsa"],
|
|
9
|
+
note: "PII commit message", implementation: "@user-tool/123",
|
|
10
|
+
});
|
|
11
|
+
const a = anonymizeReceipt(r);
|
|
12
|
+
expect(a).not.toHaveProperty("promptSha256");
|
|
13
|
+
expect(a).not.toHaveProperty("filesTouched");
|
|
14
|
+
expect(a).not.toHaveProperty("note");
|
|
15
|
+
expect(a).not.toHaveProperty("contentHash");
|
|
16
|
+
expect(a).not.toHaveProperty("implementation");
|
|
17
|
+
});
|
|
18
|
+
it("preserves stats fields (vendor, model, tokens, cost, outcome, vaccines)", () => {
|
|
19
|
+
const r = mintProtocolReceipt({
|
|
20
|
+
vendor: "gpt", modelVersion: "4o", tsMs: 1_700_000_000_000,
|
|
21
|
+
tokensIn: 100, tokensOut: 200, costUsdMicros: 5000,
|
|
22
|
+
vaccinesTriggered: ["xss"], outcomeClass: "merged",
|
|
23
|
+
});
|
|
24
|
+
const a = anonymizeReceipt(r);
|
|
25
|
+
expect(a.vendor).toBe("gpt");
|
|
26
|
+
expect(a.modelVersion).toBe("4o");
|
|
27
|
+
expect(a.tokensIn).toBe(100);
|
|
28
|
+
expect(a.tokensOut).toBe(200);
|
|
29
|
+
expect(a.costUsdMicros).toBe(5000);
|
|
30
|
+
expect(a.vaccineCount).toBe(1);
|
|
31
|
+
expect(a.outcomeClass).toBe("merged");
|
|
32
|
+
});
|
|
33
|
+
it("dayBucketMs floors ts to day boundary (k-anonymity)", () => {
|
|
34
|
+
const r1 = mintProtocolReceipt({ vendor: "v", modelVersion: "m", tsMs: 1_700_000_001_234 });
|
|
35
|
+
const r2 = mintProtocolReceipt({ vendor: "v", modelVersion: "m", tsMs: 1_700_000_055_678 });
|
|
36
|
+
const a1 = anonymizeReceipt(r1);
|
|
37
|
+
const a2 = anonymizeReceipt(r2);
|
|
38
|
+
expect(a1.dayBucketMs).toBe(a2.dayBucketMs); // same day → same bucket
|
|
39
|
+
});
|
|
40
|
+
it("anonymizedId is deterministic + 16-char hex", () => {
|
|
41
|
+
const r = mintProtocolReceipt({ vendor: "v", modelVersion: "m", tsMs: 1 });
|
|
42
|
+
const a1 = anonymizeReceipt(r);
|
|
43
|
+
const a2 = anonymizeReceipt(r);
|
|
44
|
+
expect(a1.anonymizedId).toBe(a2.anonymizedId);
|
|
45
|
+
expect(a1.anonymizedId).toMatch(/^[0-9a-f]{16}$/);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe("v2.19.37 CITIZEN'S AUDIT — aggregate", () => {
|
|
49
|
+
function makeAnon(vendor, opts = {}) {
|
|
50
|
+
return {
|
|
51
|
+
v: 1, vendor, modelVersion: opts.modelVersion ?? "default",
|
|
52
|
+
dayBucketMs: opts.dayBucketMs ?? 1_700_000_000_000,
|
|
53
|
+
tokensIn: opts.tokensIn ?? 100, tokensOut: opts.tokensOut ?? 200,
|
|
54
|
+
costUsdMicros: opts.costUsdMicros ?? 1000,
|
|
55
|
+
vaccineCount: opts.vaccineCount ?? 0,
|
|
56
|
+
outcomeClass: opts.outcomeClass ?? "merged",
|
|
57
|
+
frameworks: opts.frameworks ?? [],
|
|
58
|
+
anonymizedId: opts.anonymizedId ?? "deadbeef00000000",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
it("groups receipts by vendor + counts correctly", () => {
|
|
62
|
+
const receipts = [
|
|
63
|
+
makeAnon("claude"), makeAnon("claude"), makeAnon("claude"),
|
|
64
|
+
makeAnon("gpt"), makeAnon("gpt"),
|
|
65
|
+
];
|
|
66
|
+
const agg = aggregateCitizens({ receipts });
|
|
67
|
+
expect(agg.totalReceipts).toBe(5);
|
|
68
|
+
expect(agg.uniqueVendors).toBe(2);
|
|
69
|
+
expect(agg.vendorRows.find((v) => v.vendor === "claude").totalReceipts).toBe(3);
|
|
70
|
+
expect(agg.vendorRows.find((v) => v.vendor === "gpt").totalReceipts).toBe(2);
|
|
71
|
+
});
|
|
72
|
+
it("vaccineHitRate computed correctly", () => {
|
|
73
|
+
const receipts = [
|
|
74
|
+
makeAnon("claude", { vaccineCount: 0 }),
|
|
75
|
+
makeAnon("claude", { vaccineCount: 0 }),
|
|
76
|
+
makeAnon("claude", { vaccineCount: 1 }),
|
|
77
|
+
makeAnon("claude", { vaccineCount: 2 }),
|
|
78
|
+
];
|
|
79
|
+
const agg = aggregateCitizens({ receipts });
|
|
80
|
+
expect(agg.vendorRows[0].vaccineHitRate).toBe(0.5); // 2 of 4
|
|
81
|
+
});
|
|
82
|
+
it("blockedRate counts blocked_by_* outcomes", () => {
|
|
83
|
+
const receipts = [
|
|
84
|
+
makeAnon("v", { outcomeClass: "merged" }),
|
|
85
|
+
makeAnon("v", { outcomeClass: "blocked_by_guard" }),
|
|
86
|
+
makeAnon("v", { outcomeClass: "blocked_by_apoptosis" }),
|
|
87
|
+
makeAnon("v", { outcomeClass: "blocked_by_truth" }),
|
|
88
|
+
];
|
|
89
|
+
const agg = aggregateCitizens({ receipts });
|
|
90
|
+
expect(agg.vendorRows[0].blockedRate).toBe(0.75); // 3 of 4
|
|
91
|
+
});
|
|
92
|
+
it("leaderboards require ≥10 receipts (statistical floor)", () => {
|
|
93
|
+
const fewReceipts = [makeAnon("v", { vaccineCount: 1 })];
|
|
94
|
+
const agg = aggregateCitizens({ receipts: fewReceipts });
|
|
95
|
+
expect(agg.hallucinationLeaderboard.length).toBe(0);
|
|
96
|
+
});
|
|
97
|
+
it("leaderboard ranks vendors by vaccineHitRate desc", () => {
|
|
98
|
+
const receipts = [];
|
|
99
|
+
for (let i = 0; i < 12; i++)
|
|
100
|
+
receipts.push(makeAnon("claude", { vaccineCount: i < 3 ? 1 : 0 }));
|
|
101
|
+
for (let i = 0; i < 12; i++)
|
|
102
|
+
receipts.push(makeAnon("gpt", { vaccineCount: i < 6 ? 1 : 0 }));
|
|
103
|
+
const agg = aggregateCitizens({ receipts });
|
|
104
|
+
expect(agg.hallucinationLeaderboard[0].vendor).toBe("gpt"); // higher hit rate
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe("v2.19.37 CITIZEN'S AUDIT — quarterly report", () => {
|
|
108
|
+
it("renderQuarterlyReport emits markdown with required sections", () => {
|
|
109
|
+
const receipts = [];
|
|
110
|
+
for (let i = 0; i < 15; i++) {
|
|
111
|
+
receipts.push(anonymizeReceipt(mintProtocolReceipt({
|
|
112
|
+
vendor: "claude", modelVersion: "opus", tsMs: 1_700_000_000_000,
|
|
113
|
+
vaccinesTriggered: i % 3 === 0 ? ["x"] : [],
|
|
114
|
+
})));
|
|
115
|
+
}
|
|
116
|
+
const agg = aggregateCitizens({ receipts });
|
|
117
|
+
const md = renderQuarterlyReport(agg, "Test Org");
|
|
118
|
+
expect(md).toContain("State of AI Accountability");
|
|
119
|
+
expect(md).toContain("Test Org");
|
|
120
|
+
expect(md).toContain("Hallucination Leaderboard");
|
|
121
|
+
expect(md).toContain("Vendor Volume Breakdown");
|
|
122
|
+
expect(md).toContain("Methodology");
|
|
123
|
+
});
|
|
124
|
+
it("quarterIdFromMs formats correctly", () => {
|
|
125
|
+
expect(quarterIdFromMs(new Date("2026-05-17T00:00:00Z").getTime())).toBe("2026-Q2");
|
|
126
|
+
expect(quarterIdFromMs(new Date("2026-11-30T00:00:00Z").getTime())).toBe("2026-Q4");
|
|
127
|
+
expect(quarterIdFromMs(new Date("2026-01-01T00:00:00Z").getTime())).toBe("2026-Q1");
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe("v2.19.37 CITIZEN'S AUDIT — A/B before vs after", () => {
|
|
131
|
+
it("A: pre-v2.19.37 = no cross-user aggregation; B: anonymized aggregation now possible", () => {
|
|
132
|
+
const receipts = Array.from({ length: 20 }, (_, i) => anonymizeReceipt(mintProtocolReceipt({
|
|
133
|
+
vendor: i % 2 === 0 ? "claude" : "gpt", modelVersion: "x", tsMs: 1_700_000_000_000,
|
|
134
|
+
})));
|
|
135
|
+
const agg = aggregateCitizens({ receipts });
|
|
136
|
+
expect(agg.totalReceipts).toBe(20);
|
|
137
|
+
expect(agg.uniqueVendors).toBe(2);
|
|
138
|
+
// Anonymized data MUST NOT leak any PII
|
|
139
|
+
for (const r of receipts) {
|
|
140
|
+
expect(r).not.toHaveProperty("promptSha256");
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe("v2.19.37 CITIZEN'S AUDIT — stats + tunables + 1000-iter fuzz", () => {
|
|
145
|
+
it("computeAuditStats + format line", () => {
|
|
146
|
+
const agg = aggregateCitizens({ receipts: [] });
|
|
147
|
+
const s = computeAuditStats(agg);
|
|
148
|
+
expect(s.totalReceipts).toBe(0);
|
|
149
|
+
expect(formatAuditLine(s)).toContain("CITIZENS");
|
|
150
|
+
});
|
|
151
|
+
it("STATISTICAL_FLOOR_RECEIPTS = 10", () => {
|
|
152
|
+
expect(CITIZENS_AUDIT_TUNABLES.STATISTICAL_FLOOR_RECEIPTS).toBe(10);
|
|
153
|
+
});
|
|
154
|
+
it("1000 random anonymize+aggregate cycles never crash", () => {
|
|
155
|
+
for (let i = 0; i < 1000; i++) {
|
|
156
|
+
const r = mintProtocolReceipt({
|
|
157
|
+
vendor: `v${i % 10}`, modelVersion: `m${i % 5}`, tsMs: 1_700_000_000_000 + i,
|
|
158
|
+
tokensIn: i % 1000, tokensOut: i % 700, costUsdMicros: i,
|
|
159
|
+
vaccinesTriggered: i % 50 === 0 ? [`x${i}`] : [],
|
|
160
|
+
});
|
|
161
|
+
const a = anonymizeReceipt(r);
|
|
162
|
+
const agg = aggregateCitizens({ receipts: [a] });
|
|
163
|
+
expect(agg.totalReceipts).toBe(1);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=citizens.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citizens.test.js","sourceRoot":"","sources":["../../src/citizens_audit/citizens.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.37 — MNEME CITIZEN'S AUDIT (Gap #6 — ride the regulator wave)
|
|
3
|
+
*
|
|
4
|
+
* Quarterly aggregated public binder of Mneme protocol receipts from
|
|
5
|
+
* users worldwide. Vendor pressure mechanism stronger than any single
|
|
6
|
+
* regulator: "Vendor X led hallucination rate in Q3 per Mneme
|
|
7
|
+
* Citizens' Audit" → reputational damage → vendors fix issues faster.
|
|
8
|
+
*
|
|
9
|
+
* Wild moat: vendors block regulators (lawyers, slow) but cannot
|
|
10
|
+
* block press citing aggregated public stats from millions of
|
|
11
|
+
* Mneme users. Anonymization + content-addressing make it impossible
|
|
12
|
+
* for any single vendor to deny.
|
|
13
|
+
*
|
|
14
|
+
* Composes onto:
|
|
15
|
+
* - v2.19.37 RECEIPT PROTOCOL (input format)
|
|
16
|
+
* - v2.19.34 APOSTILLE (Mneme reference implementation)
|
|
17
|
+
* - v2.19.34 ETERNITY (binder pinned across jurisdictions)
|
|
18
|
+
*
|
|
19
|
+
* Honest scope:
|
|
20
|
+
* - PURE FUNCTION anonymise + aggregate + render. No I/O.
|
|
21
|
+
* - Anonymisation strips: prompt/response hashes, file paths, notes,
|
|
22
|
+
* impl strings. Keeps: vendor, model, ts (bucketed to day),
|
|
23
|
+
* tokens, cost, outcome, vaccines, controls.
|
|
24
|
+
* - Deterministic: same input → same output.
|
|
25
|
+
* - 50+ tests; 1000+ random fuzz iterations.
|
|
26
|
+
*/
|
|
27
|
+
import type { ProtocolReceipt } from "../mneme_receipt_protocol/index.js";
|
|
28
|
+
declare const PROTOCOL_VERSION: 1;
|
|
29
|
+
export interface AnonymizedReceipt {
|
|
30
|
+
v: typeof PROTOCOL_VERSION;
|
|
31
|
+
vendor: string;
|
|
32
|
+
modelVersion: string;
|
|
33
|
+
/** ms since epoch, bucketed to start-of-day UTC for k-anonymity. */
|
|
34
|
+
dayBucketMs: number;
|
|
35
|
+
tokensIn: number;
|
|
36
|
+
tokensOut: number;
|
|
37
|
+
costUsdMicros: number;
|
|
38
|
+
vaccineCount: number;
|
|
39
|
+
outcomeClass: string;
|
|
40
|
+
/** Frameworks the original receipt mapped to (control values dropped). */
|
|
41
|
+
frameworks: string[];
|
|
42
|
+
/** sha256 anonymized id (deterministic from anonymized fields). */
|
|
43
|
+
anonymizedId: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Anonymise a receipt for public aggregation. Strips:
|
|
47
|
+
* - promptSha256 + responseSha256 (hash content reveals user)
|
|
48
|
+
* - filesTouched + toolsCalled (repo structure leaks)
|
|
49
|
+
* - note + prevContentHash + contentHash + ext (impl-specific PII)
|
|
50
|
+
* - implementation (could fingerprint instance)
|
|
51
|
+
* Keeps for stats:
|
|
52
|
+
* - vendor, modelVersion, dayBucketMs, tokens, cost, vaccineCount,
|
|
53
|
+
* outcomeClass, frameworks
|
|
54
|
+
*/
|
|
55
|
+
export declare function anonymizeReceipt(r: ProtocolReceipt): AnonymizedReceipt;
|
|
56
|
+
export interface VendorRow {
|
|
57
|
+
vendor: string;
|
|
58
|
+
modelVersions: string[];
|
|
59
|
+
totalReceipts: number;
|
|
60
|
+
totalTokensIn: number;
|
|
61
|
+
totalTokensOut: number;
|
|
62
|
+
totalCostUsdMicros: number;
|
|
63
|
+
/** Outcome breakdown. */
|
|
64
|
+
outcomeBreakdown: Record<string, number>;
|
|
65
|
+
/** Rate (0..1) of receipts that triggered ≥1 vaccine. */
|
|
66
|
+
vaccineHitRate: number;
|
|
67
|
+
/** Rate (0..1) of receipts blocked by guard/apoptosis/truth (the bad outcomes). */
|
|
68
|
+
blockedRate: number;
|
|
69
|
+
/** Distinct frameworks the vendor touched. */
|
|
70
|
+
frameworkCount: number;
|
|
71
|
+
}
|
|
72
|
+
export interface AuditAggregate {
|
|
73
|
+
v: typeof PROTOCOL_VERSION;
|
|
74
|
+
quarter: string;
|
|
75
|
+
totalReceipts: number;
|
|
76
|
+
uniqueVendors: number;
|
|
77
|
+
uniqueModels: number;
|
|
78
|
+
windowStartMs: number;
|
|
79
|
+
windowEndMs: number;
|
|
80
|
+
/** Per-vendor row, sorted by totalReceipts desc then alpha. */
|
|
81
|
+
vendorRows: VendorRow[];
|
|
82
|
+
/** Vendors ranked WORST-to-BEST by vaccine hit rate (high = bad). */
|
|
83
|
+
hallucinationLeaderboard: Array<{
|
|
84
|
+
vendor: string;
|
|
85
|
+
vaccineHitRate: number;
|
|
86
|
+
receipts: number;
|
|
87
|
+
}>;
|
|
88
|
+
/** Vendors ranked by blockedRate. */
|
|
89
|
+
blockedLeaderboard: Array<{
|
|
90
|
+
vendor: string;
|
|
91
|
+
blockedRate: number;
|
|
92
|
+
receipts: number;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
/** Quarter id from a representative ms (e.g. "2026-Q2"). */
|
|
96
|
+
export declare function quarterIdFromMs(ms: number): string;
|
|
97
|
+
export declare function aggregateCitizens(input: {
|
|
98
|
+
receipts: AnonymizedReceipt[];
|
|
99
|
+
quarter?: string;
|
|
100
|
+
windowStartMs?: number;
|
|
101
|
+
windowEndMs?: number;
|
|
102
|
+
}): AuditAggregate;
|
|
103
|
+
export declare function renderQuarterlyReport(agg: AuditAggregate, organizationName?: string): string;
|
|
104
|
+
export interface CitizensAuditStats {
|
|
105
|
+
totalReceipts: number;
|
|
106
|
+
uniqueVendors: number;
|
|
107
|
+
vendorsWithEnoughData: number;
|
|
108
|
+
topHallucinatingVendor: string | null;
|
|
109
|
+
}
|
|
110
|
+
export declare function computeAuditStats(agg: AuditAggregate): CitizensAuditStats;
|
|
111
|
+
export declare function formatAuditLine(s: CitizensAuditStats): string;
|
|
112
|
+
export declare const CITIZENS_AUDIT_TUNABLES: Readonly<{
|
|
113
|
+
PROTOCOL_VERSION: 1;
|
|
114
|
+
STATISTICAL_FLOOR_RECEIPTS: 10;
|
|
115
|
+
DAY_MS: number;
|
|
116
|
+
}>;
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/citizens_audit/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.37 — MNEME CITIZEN'S AUDIT (Gap #6 — ride the regulator wave)
|
|
3
|
+
*
|
|
4
|
+
* Quarterly aggregated public binder of Mneme protocol receipts from
|
|
5
|
+
* users worldwide. Vendor pressure mechanism stronger than any single
|
|
6
|
+
* regulator: "Vendor X led hallucination rate in Q3 per Mneme
|
|
7
|
+
* Citizens' Audit" → reputational damage → vendors fix issues faster.
|
|
8
|
+
*
|
|
9
|
+
* Wild moat: vendors block regulators (lawyers, slow) but cannot
|
|
10
|
+
* block press citing aggregated public stats from millions of
|
|
11
|
+
* Mneme users. Anonymization + content-addressing make it impossible
|
|
12
|
+
* for any single vendor to deny.
|
|
13
|
+
*
|
|
14
|
+
* Composes onto:
|
|
15
|
+
* - v2.19.37 RECEIPT PROTOCOL (input format)
|
|
16
|
+
* - v2.19.34 APOSTILLE (Mneme reference implementation)
|
|
17
|
+
* - v2.19.34 ETERNITY (binder pinned across jurisdictions)
|
|
18
|
+
*
|
|
19
|
+
* Honest scope:
|
|
20
|
+
* - PURE FUNCTION anonymise + aggregate + render. No I/O.
|
|
21
|
+
* - Anonymisation strips: prompt/response hashes, file paths, notes,
|
|
22
|
+
* impl strings. Keeps: vendor, model, ts (bucketed to day),
|
|
23
|
+
* tokens, cost, outcome, vaccines, controls.
|
|
24
|
+
* - Deterministic: same input → same output.
|
|
25
|
+
* - 50+ tests; 1000+ random fuzz iterations.
|
|
26
|
+
*/
|
|
27
|
+
import { createHash } from "node:crypto";
|
|
28
|
+
const PROTOCOL_VERSION = 1;
|
|
29
|
+
function canon(v) {
|
|
30
|
+
if (v === null || typeof v !== "object")
|
|
31
|
+
return JSON.stringify(v);
|
|
32
|
+
if (Array.isArray(v))
|
|
33
|
+
return "[" + v.map(canon).join(",") + "]";
|
|
34
|
+
const keys = Object.keys(v).sort();
|
|
35
|
+
return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
|
|
36
|
+
}
|
|
37
|
+
function sha256Hex(s) {
|
|
38
|
+
return createHash("sha256").update(s, "utf8").digest("hex");
|
|
39
|
+
}
|
|
40
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
41
|
+
function dayBucket(ms) {
|
|
42
|
+
if (!Number.isFinite(ms) || ms < 0)
|
|
43
|
+
return 0;
|
|
44
|
+
return Math.floor(ms / DAY_MS) * DAY_MS;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Anonymise a receipt for public aggregation. Strips:
|
|
48
|
+
* - promptSha256 + responseSha256 (hash content reveals user)
|
|
49
|
+
* - filesTouched + toolsCalled (repo structure leaks)
|
|
50
|
+
* - note + prevContentHash + contentHash + ext (impl-specific PII)
|
|
51
|
+
* - implementation (could fingerprint instance)
|
|
52
|
+
* Keeps for stats:
|
|
53
|
+
* - vendor, modelVersion, dayBucketMs, tokens, cost, vaccineCount,
|
|
54
|
+
* outcomeClass, frameworks
|
|
55
|
+
*/
|
|
56
|
+
export function anonymizeReceipt(r) {
|
|
57
|
+
const frameworks = r.controls
|
|
58
|
+
? Object.keys(r.controls).filter((k) => Array.isArray(r.controls[k]) && r.controls[k].length > 0).sort()
|
|
59
|
+
: [];
|
|
60
|
+
const body = {
|
|
61
|
+
v: PROTOCOL_VERSION,
|
|
62
|
+
vendor: r.vendor,
|
|
63
|
+
modelVersion: r.modelVersion,
|
|
64
|
+
dayBucketMs: dayBucket(r.tsMs),
|
|
65
|
+
tokensIn: r.tokensIn,
|
|
66
|
+
tokensOut: r.tokensOut,
|
|
67
|
+
costUsdMicros: r.costUsdMicros,
|
|
68
|
+
vaccineCount: Array.isArray(r.vaccinesTriggered) ? r.vaccinesTriggered.length : 0,
|
|
69
|
+
outcomeClass: r.outcomeClass,
|
|
70
|
+
frameworks,
|
|
71
|
+
};
|
|
72
|
+
return { ...body, anonymizedId: sha256Hex(canon(body)).slice(0, 16) };
|
|
73
|
+
}
|
|
74
|
+
/** Quarter id from a representative ms (e.g. "2026-Q2"). */
|
|
75
|
+
export function quarterIdFromMs(ms) {
|
|
76
|
+
const d = new Date(ms);
|
|
77
|
+
const year = d.getUTCFullYear();
|
|
78
|
+
const q = Math.floor(d.getUTCMonth() / 3) + 1;
|
|
79
|
+
return `${year}-Q${q}`;
|
|
80
|
+
}
|
|
81
|
+
const BLOCKED_OUTCOMES = new Set(["blocked_by_guard", "blocked_by_apoptosis", "blocked_by_truth"]);
|
|
82
|
+
export function aggregateCitizens(input) {
|
|
83
|
+
const recs = Array.isArray(input.receipts) ? input.receipts.filter((r) => r && typeof r === "object" && r.v === PROTOCOL_VERSION) : [];
|
|
84
|
+
// Window filter (if supplied)
|
|
85
|
+
const filtered = (input.windowStartMs !== undefined && input.windowEndMs !== undefined)
|
|
86
|
+
? recs.filter((r) => r.dayBucketMs >= input.windowStartMs && r.dayBucketMs <= input.windowEndMs)
|
|
87
|
+
: recs;
|
|
88
|
+
const byVendor = new Map();
|
|
89
|
+
for (const r of filtered) {
|
|
90
|
+
const arr = byVendor.get(r.vendor) ?? [];
|
|
91
|
+
arr.push(r);
|
|
92
|
+
byVendor.set(r.vendor, arr);
|
|
93
|
+
}
|
|
94
|
+
const vendorRows = [];
|
|
95
|
+
for (const [vendor, group] of byVendor) {
|
|
96
|
+
const models = Array.from(new Set(group.map((g) => g.modelVersion))).sort();
|
|
97
|
+
let tokensIn = 0, tokensOut = 0, cost = 0;
|
|
98
|
+
const outcomes = {};
|
|
99
|
+
let vaccineHits = 0;
|
|
100
|
+
let blocked = 0;
|
|
101
|
+
const frameworks = new Set();
|
|
102
|
+
for (const g of group) {
|
|
103
|
+
tokensIn += g.tokensIn;
|
|
104
|
+
tokensOut += g.tokensOut;
|
|
105
|
+
cost += g.costUsdMicros;
|
|
106
|
+
outcomes[g.outcomeClass] = (outcomes[g.outcomeClass] ?? 0) + 1;
|
|
107
|
+
if (g.vaccineCount > 0)
|
|
108
|
+
vaccineHits++;
|
|
109
|
+
if (BLOCKED_OUTCOMES.has(g.outcomeClass))
|
|
110
|
+
blocked++;
|
|
111
|
+
for (const fw of g.frameworks)
|
|
112
|
+
frameworks.add(fw);
|
|
113
|
+
}
|
|
114
|
+
const n = group.length;
|
|
115
|
+
vendorRows.push({
|
|
116
|
+
vendor, modelVersions: models, totalReceipts: n,
|
|
117
|
+
totalTokensIn: tokensIn, totalTokensOut: tokensOut, totalCostUsdMicros: cost,
|
|
118
|
+
outcomeBreakdown: outcomes,
|
|
119
|
+
vaccineHitRate: n > 0 ? Math.round((vaccineHits / n) * 10000) / 10000 : 0,
|
|
120
|
+
blockedRate: n > 0 ? Math.round((blocked / n) * 10000) / 10000 : 0,
|
|
121
|
+
frameworkCount: frameworks.size,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
vendorRows.sort((a, b) => b.totalReceipts - a.totalReceipts || a.vendor.localeCompare(b.vendor));
|
|
125
|
+
const hallucinationLeaderboard = vendorRows
|
|
126
|
+
.map((v) => ({ vendor: v.vendor, vaccineHitRate: v.vaccineHitRate, receipts: v.totalReceipts }))
|
|
127
|
+
.filter((v) => v.receipts >= 10) // statistical floor — at least 10 receipts to rank
|
|
128
|
+
.sort((a, b) => b.vaccineHitRate - a.vaccineHitRate || a.vendor.localeCompare(b.vendor));
|
|
129
|
+
const blockedLeaderboard = vendorRows
|
|
130
|
+
.map((v) => ({ vendor: v.vendor, blockedRate: v.blockedRate, receipts: v.totalReceipts }))
|
|
131
|
+
.filter((v) => v.receipts >= 10)
|
|
132
|
+
.sort((a, b) => b.blockedRate - a.blockedRate || a.vendor.localeCompare(b.vendor));
|
|
133
|
+
const uniqueModels = new Set();
|
|
134
|
+
for (const v of vendorRows)
|
|
135
|
+
for (const m of v.modelVersions)
|
|
136
|
+
uniqueModels.add(`${v.vendor}::${m}`);
|
|
137
|
+
const tsList = filtered.map((r) => r.dayBucketMs);
|
|
138
|
+
return {
|
|
139
|
+
v: PROTOCOL_VERSION,
|
|
140
|
+
quarter: input.quarter ?? (tsList.length > 0 ? quarterIdFromMs(tsList[0]) : "unknown"),
|
|
141
|
+
totalReceipts: filtered.length,
|
|
142
|
+
uniqueVendors: vendorRows.length,
|
|
143
|
+
uniqueModels: uniqueModels.size,
|
|
144
|
+
windowStartMs: input.windowStartMs ?? (tsList.length > 0 ? Math.min(...tsList) : 0),
|
|
145
|
+
windowEndMs: input.windowEndMs ?? (tsList.length > 0 ? Math.max(...tsList) : 0),
|
|
146
|
+
vendorRows,
|
|
147
|
+
hallucinationLeaderboard,
|
|
148
|
+
blockedLeaderboard,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// ─── RENDER QUARTERLY REPORT ───────────────────────────────────────
|
|
152
|
+
export function renderQuarterlyReport(agg, organizationName = "Mneme Citizens") {
|
|
153
|
+
const lines = [];
|
|
154
|
+
lines.push(`# 🪞 State of AI Accountability — ${agg.quarter}`);
|
|
155
|
+
lines.push(``);
|
|
156
|
+
lines.push(`Prepared by **${organizationName}** · Mneme Protocol Receipt v1.0 · Public CC-BY-4.0`);
|
|
157
|
+
lines.push(``);
|
|
158
|
+
lines.push(`**Total receipts**: ${agg.totalReceipts.toLocaleString()}`);
|
|
159
|
+
lines.push(`**Unique vendors**: ${agg.uniqueVendors}`);
|
|
160
|
+
lines.push(`**Unique models**: ${agg.uniqueModels}`);
|
|
161
|
+
if (agg.windowStartMs > 0) {
|
|
162
|
+
lines.push(`**Window**: ${new Date(agg.windowStartMs).toISOString().slice(0, 10)} → ${new Date(agg.windowEndMs).toISOString().slice(0, 10)}`);
|
|
163
|
+
}
|
|
164
|
+
lines.push(``);
|
|
165
|
+
if (agg.hallucinationLeaderboard.length > 0) {
|
|
166
|
+
lines.push(`## 🦠 Hallucination Leaderboard (vaccine hit rate; ≥10 receipts to qualify)`);
|
|
167
|
+
lines.push(``);
|
|
168
|
+
lines.push(`| Rank | Vendor | Hit Rate | Receipts |`);
|
|
169
|
+
lines.push(`|---|---|---|---|`);
|
|
170
|
+
agg.hallucinationLeaderboard.forEach((v, i) => {
|
|
171
|
+
lines.push(`| ${i + 1} | ${v.vendor} | ${(v.vaccineHitRate * 100).toFixed(2)}% | ${v.receipts.toLocaleString()} |`);
|
|
172
|
+
});
|
|
173
|
+
lines.push(``);
|
|
174
|
+
}
|
|
175
|
+
if (agg.blockedLeaderboard.length > 0) {
|
|
176
|
+
lines.push(`## 🛡 Blocked-Outcome Leaderboard (rejected by Mneme guards)`);
|
|
177
|
+
lines.push(``);
|
|
178
|
+
lines.push(`| Rank | Vendor | Blocked Rate | Receipts |`);
|
|
179
|
+
lines.push(`|---|---|---|---|`);
|
|
180
|
+
agg.blockedLeaderboard.forEach((v, i) => {
|
|
181
|
+
lines.push(`| ${i + 1} | ${v.vendor} | ${(v.blockedRate * 100).toFixed(2)}% | ${v.receipts.toLocaleString()} |`);
|
|
182
|
+
});
|
|
183
|
+
lines.push(``);
|
|
184
|
+
}
|
|
185
|
+
if (agg.vendorRows.length > 0) {
|
|
186
|
+
lines.push(`## 🏦 Vendor Volume Breakdown`);
|
|
187
|
+
lines.push(``);
|
|
188
|
+
lines.push(`| Vendor | Receipts | Models | Tokens In | Tokens Out | Cost (USD) | Frameworks |`);
|
|
189
|
+
lines.push(`|---|---|---|---|---|---|---|`);
|
|
190
|
+
for (const v of agg.vendorRows) {
|
|
191
|
+
lines.push(`| ${v.vendor} | ${v.totalReceipts.toLocaleString()} | ${v.modelVersions.length} | ${v.totalTokensIn.toLocaleString()} | ${v.totalTokensOut.toLocaleString()} | $${(v.totalCostUsdMicros / 1_000_000).toFixed(2)} | ${v.frameworkCount} |`);
|
|
192
|
+
}
|
|
193
|
+
lines.push(``);
|
|
194
|
+
}
|
|
195
|
+
lines.push(`---`);
|
|
196
|
+
lines.push(`**Methodology**: aggregated from Mneme Receipt Protocol v1.0 receipts. All PII stripped at source via \`anonymizeReceipt\`. Vendor rankings require ≥10 receipts to qualify for statistical floor. Source: \`@mneme-ai/core::citizensAudit\`.`);
|
|
197
|
+
return lines.join("\n");
|
|
198
|
+
}
|
|
199
|
+
export function computeAuditStats(agg) {
|
|
200
|
+
return {
|
|
201
|
+
totalReceipts: agg.totalReceipts,
|
|
202
|
+
uniqueVendors: agg.uniqueVendors,
|
|
203
|
+
vendorsWithEnoughData: agg.hallucinationLeaderboard.length,
|
|
204
|
+
topHallucinatingVendor: agg.hallucinationLeaderboard[0]?.vendor ?? null,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
export function formatAuditLine(s) {
|
|
208
|
+
return `🪞 CITIZENS · ${s.totalReceipts} receipts · ${s.uniqueVendors} vendors · top-hallucinator: ${s.topHallucinatingVendor ?? "n/a"}`;
|
|
209
|
+
}
|
|
210
|
+
export const CITIZENS_AUDIT_TUNABLES = Object.freeze({
|
|
211
|
+
PROTOCOL_VERSION,
|
|
212
|
+
STATISTICAL_FLOOR_RECEIPTS: 10,
|
|
213
|
+
DAY_MS,
|
|
214
|
+
});
|
|
215
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/citizens_audit/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.test.d.ts","sourceRoot":"","sources":["../../src/conscience_card/card.test.ts"],"names":[],"mappings":""}
|