@mneme-ai/core 2.15.1 → 2.16.0

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.
Files changed (64) hide show
  1. package/dist/agent_manifest.d.ts +1 -1
  2. package/dist/agent_manifest.d.ts.map +1 -1
  3. package/dist/agent_manifest.js +18 -1
  4. package/dist/agent_manifest.js.map +1 -1
  5. package/dist/alpha/alpha.test.d.ts +2 -0
  6. package/dist/alpha/alpha.test.d.ts.map +1 -0
  7. package/dist/alpha/alpha.test.js +101 -0
  8. package/dist/alpha/alpha.test.js.map +1 -0
  9. package/dist/alpha/index.d.ts +106 -0
  10. package/dist/alpha/index.d.ts.map +1 -0
  11. package/dist/alpha/index.js +190 -0
  12. package/dist/alpha/index.js.map +1 -0
  13. package/dist/anti_collusion/anti_collusion.test.d.ts +2 -0
  14. package/dist/anti_collusion/anti_collusion.test.d.ts.map +1 -0
  15. package/dist/anti_collusion/anti_collusion.test.js +137 -0
  16. package/dist/anti_collusion/anti_collusion.test.js.map +1 -0
  17. package/dist/anti_collusion/index.d.ts +89 -0
  18. package/dist/anti_collusion/index.d.ts.map +1 -0
  19. package/dist/anti_collusion/index.js +218 -0
  20. package/dist/anti_collusion/index.js.map +1 -0
  21. package/dist/bug_prophet/index.d.ts.map +1 -1
  22. package/dist/bug_prophet/index.js +8 -3
  23. package/dist/bug_prophet/index.js.map +1 -1
  24. package/dist/cosmic/aurelian_v216.test.d.ts +2 -0
  25. package/dist/cosmic/aurelian_v216.test.d.ts.map +1 -0
  26. package/dist/cosmic/aurelian_v216.test.js +89 -0
  27. package/dist/cosmic/aurelian_v216.test.js.map +1 -0
  28. package/dist/index.d.ts +6 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +7 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/living_model/index.d.ts +104 -0
  33. package/dist/living_model/index.d.ts.map +1 -0
  34. package/dist/living_model/index.js +152 -0
  35. package/dist/living_model/index.js.map +1 -0
  36. package/dist/living_model/living_model.test.d.ts +2 -0
  37. package/dist/living_model/living_model.test.d.ts.map +1 -0
  38. package/dist/living_model/living_model.test.js +125 -0
  39. package/dist/living_model/living_model.test.js.map +1 -0
  40. package/dist/obelisk/index.d.ts +74 -0
  41. package/dist/obelisk/index.d.ts.map +1 -0
  42. package/dist/obelisk/index.js +114 -0
  43. package/dist/obelisk/index.js.map +1 -0
  44. package/dist/obelisk/obelisk.test.d.ts +2 -0
  45. package/dist/obelisk/obelisk.test.d.ts.map +1 -0
  46. package/dist/obelisk/obelisk.test.js +67 -0
  47. package/dist/obelisk/obelisk.test.js.map +1 -0
  48. package/dist/persona/index.d.ts +107 -0
  49. package/dist/persona/index.d.ts.map +1 -0
  50. package/dist/persona/index.js +144 -0
  51. package/dist/persona/index.js.map +1 -0
  52. package/dist/persona/persona.test.d.ts +2 -0
  53. package/dist/persona/persona.test.d.ts.map +1 -0
  54. package/dist/persona/persona.test.js +71 -0
  55. package/dist/persona/persona.test.js.map +1 -0
  56. package/dist/public_audit/index.d.ts +70 -0
  57. package/dist/public_audit/index.d.ts.map +1 -0
  58. package/dist/public_audit/index.js +175 -0
  59. package/dist/public_audit/index.js.map +1 -0
  60. package/dist/public_audit/public_audit.test.d.ts +2 -0
  61. package/dist/public_audit/public_audit.test.d.ts.map +1 -0
  62. package/dist/public_audit/public_audit.test.js +64 -0
  63. package/dist/public_audit/public_audit.test.js.map +1 -0
  64. package/package.json +1 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * v2.16.0 — MNEME AURELIAN PUBLIC AUDIT
3
+ *
4
+ * "npx mneme audit <package> — Mneme runs the AURELIAN scorecard against
5
+ * any open-source AI tool. Produces an HMAC-signed quality scorecard
6
+ * publishable to the global trust graph. Ranks every dev tool's
7
+ * measured quality."
8
+ *
9
+ * The killer Move: the AURELIAN AUDITOR (v2.13) was internal to Mneme.
10
+ * v2.16 opens it. Anyone can audit anyone — and the scorecards aggregate
11
+ * into a public "open AI dev tool" leaderboard.
12
+ *
13
+ * Algorithm: pull standard signals from a package's npm/PyPI/Cargo
14
+ * metadata + GitHub repo + any cosmic SOUL/BOUNTY data the maintainer
15
+ * has opted to share. Convert into AURELIAN measurements + evidence,
16
+ * then run the existing aurelian_audit primitive. Result is signed.
17
+ */
18
+ import { createHmac } from "node:crypto";
19
+ const PROTOCOL_VERSION = 1;
20
+ function canon(v) {
21
+ if (v === null || typeof v !== "object")
22
+ return JSON.stringify(v);
23
+ if (Array.isArray(v))
24
+ return "[" + v.map(canon).join(",") + "]";
25
+ const keys = Object.keys(v).sort();
26
+ return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
27
+ }
28
+ function defaultSecret() {
29
+ return process.env["MNEME_PUBLIC_AUDIT_SECRET"] || `mneme-public-audit-v${PROTOCOL_VERSION}`;
30
+ }
31
+ /**
32
+ * Optional helper to fetch npm metadata. Caller can use this OR pass
33
+ * pre-fetched data via input.metadata.
34
+ */
35
+ export async function fetchNpmMetadata(packageName, fetchOverride) {
36
+ const fetchFn = fetchOverride ?? globalThis.fetch;
37
+ if (typeof fetchFn !== "function")
38
+ return {};
39
+ try {
40
+ const res = await fetchFn(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`);
41
+ if (!res.ok)
42
+ return {};
43
+ const j = await res.json();
44
+ const latest = j["dist-tags"]?.latest;
45
+ const versions = j["versions"];
46
+ const latestData = latest && versions ? versions[latest] : undefined;
47
+ const time = j["time"];
48
+ return {
49
+ ...(latest ? { version: latest } : {}),
50
+ ...(latestData?.["description"] ? { description: String(latestData["description"]) } : {}),
51
+ ...(latestData?.["homepage"] ? { homepage: String(latestData["homepage"]) } : {}),
52
+ ...(latestData?.["license"] ? { license: String(latestData["license"]) } : {}),
53
+ ...(latest && time?.[latest] ? { lastPublished: time[latest] } : {}),
54
+ ...(latestData?.["repository"] ? { githubUrl: String((latestData["repository"].url) ?? "") } : {}),
55
+ ...(latestData?.["types"] || latestData?.["typings"] ? { hasTypes: true } : { hasTypes: false }),
56
+ };
57
+ }
58
+ catch {
59
+ return {};
60
+ }
61
+ }
62
+ export function audit(input) {
63
+ const m = input.metadata ?? {};
64
+ const evidence = [];
65
+ const rec = [];
66
+ // Popularity (0-100): downloads + stars (capped, log-shaped)
67
+ let popularity = 0;
68
+ if (m.weeklyDownloads) {
69
+ const score = Math.min(100, Math.round(Math.log10(m.weeklyDownloads + 1) * 18));
70
+ popularity = score;
71
+ evidence.push(`weekly downloads: ${m.weeklyDownloads.toLocaleString()} → popularity ${score}/100`);
72
+ }
73
+ else {
74
+ rec.push("Add download count via fetch from npm/PyPI to compute popularity properly.");
75
+ }
76
+ if (m.stars !== undefined) {
77
+ popularity = Math.min(100, Math.round((popularity + Math.min(100, Math.log10(m.stars + 1) * 22)) / (m.weeklyDownloads ? 2 : 1)));
78
+ evidence.push(`GitHub stars: ${m.stars}`);
79
+ }
80
+ // Freshness (0-100): days since last publish
81
+ let freshness = 50;
82
+ if (m.lastPublished) {
83
+ const days = (Date.now() - new Date(m.lastPublished).getTime()) / (1000 * 60 * 60 * 24);
84
+ if (Number.isFinite(days)) {
85
+ if (days <= 30) {
86
+ freshness = 100;
87
+ evidence.push(`last published ${Math.round(days)} days ago — actively maintained.`);
88
+ }
89
+ else if (days <= 90) {
90
+ freshness = 85;
91
+ evidence.push(`last published ${Math.round(days)} days ago.`);
92
+ }
93
+ else if (days <= 180) {
94
+ freshness = 70;
95
+ evidence.push(`last published ${Math.round(days)} days ago.`);
96
+ }
97
+ else if (days <= 365) {
98
+ freshness = 50;
99
+ rec.push("Consider a maintenance release; last publish > 6 months ago.");
100
+ }
101
+ else {
102
+ freshness = 20;
103
+ rec.push(`Stale: last publish ${Math.round(days)} days ago — investigate before adopting.`);
104
+ }
105
+ }
106
+ }
107
+ // Openness (0-100): license + open issues posture
108
+ let openness = 60;
109
+ if (m.license) {
110
+ const goodLicenses = ["MIT", "Apache-2.0", "BSD-3-Clause", "BSD-2-Clause", "ISC", "0BSD", "MPL-2.0"];
111
+ if (goodLicenses.some((l) => m.license.toUpperCase().includes(l.toUpperCase()))) {
112
+ openness = 95;
113
+ evidence.push(`license: ${m.license} (permissive open-source)`);
114
+ }
115
+ else if (/GPL|AGPL/i.test(m.license)) {
116
+ openness = 75;
117
+ evidence.push(`license: ${m.license} (copyleft — restrictive for commercial use)`);
118
+ }
119
+ else {
120
+ openness = 40;
121
+ evidence.push(`license: ${m.license}`);
122
+ rec.push("Verify license is open-source compatible with your use.");
123
+ }
124
+ }
125
+ else {
126
+ openness = 30;
127
+ rec.push("No license declared — high adoption risk.");
128
+ }
129
+ // Types (TypeScript types presence)
130
+ const types = m.hasTypes ? 100 : 30;
131
+ if (m.hasTypes)
132
+ evidence.push("TypeScript types declared.");
133
+ else
134
+ rec.push("No TypeScript types — adoption friction for TS projects.");
135
+ // Docs (readme presence + homepage)
136
+ let docs = 0;
137
+ if (m.hasReadme) {
138
+ docs += 60;
139
+ evidence.push("README present.");
140
+ }
141
+ else
142
+ rec.push("No README detected.");
143
+ if (m.homepage) {
144
+ docs += 40;
145
+ evidence.push(`homepage: ${m.homepage}`);
146
+ }
147
+ else
148
+ rec.push("No homepage URL — reduces discoverability.");
149
+ const composite = Math.round((popularity * 0.30 + freshness * 0.25 + openness * 0.20 + types * 0.10 + docs * 0.15));
150
+ let verdict;
151
+ if (composite >= 90)
152
+ verdict = "platinum";
153
+ else if (composite >= 75)
154
+ verdict = "gold";
155
+ else if (composite >= 60)
156
+ verdict = "silver";
157
+ else if (composite >= 40)
158
+ verdict = "bronze";
159
+ else
160
+ verdict = "needs_work";
161
+ const generatedAt = new Date().toISOString();
162
+ const body = {
163
+ v: PROTOCOL_VERSION,
164
+ package: input.packageName,
165
+ registry: input.registry,
166
+ scores: { popularity, freshness, openness, types, docs },
167
+ composite, verdict, evidence, recommendations: rec, generatedAt,
168
+ };
169
+ const sig = createHmac("sha256", input.secret ?? defaultSecret()).update(canon(body)).digest("hex");
170
+ return { ...body, sig };
171
+ }
172
+ export function formatPublicAuditLine(r) {
173
+ return `AUDIT · ${r.package} · ${r.composite}/100 · ${r.verdict} · sig=${r.sig.slice(0, 8)}`;
174
+ }
175
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/public_audit/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=public_audit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_audit.test.d.ts","sourceRoot":"","sources":["../../src/public_audit/public_audit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { audit, formatPublicAuditLine } from "./index.js";
3
+ describe("v2.16 · MNEME AURELIAN PUBLIC AUDIT", () => {
4
+ it("platinum verdict for popular + fresh + permissive + typed package", () => {
5
+ const r = audit({
6
+ registry: "npm", packageName: "react",
7
+ metadata: {
8
+ version: "18.3.0",
9
+ weeklyDownloads: 25_000_000,
10
+ stars: 220_000,
11
+ license: "MIT",
12
+ hasTypes: true, hasReadme: true,
13
+ homepage: "https://react.dev",
14
+ lastPublished: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(),
15
+ },
16
+ });
17
+ expect(r.composite).toBeGreaterThanOrEqual(85);
18
+ expect(["platinum", "gold"]).toContain(r.verdict);
19
+ });
20
+ it("needs_work for stale + unlicensed + no-readme package", () => {
21
+ const r = audit({
22
+ registry: "npm", packageName: "obscure-broken-thing",
23
+ metadata: {
24
+ weeklyDownloads: 5,
25
+ stars: 1,
26
+ license: undefined,
27
+ hasTypes: false, hasReadme: false,
28
+ lastPublished: new Date(Date.now() - 4 * 365 * 24 * 60 * 60 * 1000).toISOString(),
29
+ },
30
+ });
31
+ expect(r.verdict).toBe("needs_work");
32
+ expect(r.recommendations.length).toBeGreaterThan(0);
33
+ });
34
+ it("recommends adding types when missing", () => {
35
+ const r = audit({
36
+ registry: "npm", packageName: "x",
37
+ metadata: { weeklyDownloads: 100, hasReadme: true, license: "MIT", hasTypes: false, lastPublished: new Date().toISOString() },
38
+ });
39
+ expect(r.recommendations.some((s) => /TypeScript types/i.test(s))).toBe(true);
40
+ });
41
+ it("flags copyleft licenses as 'restrictive for commercial'", () => {
42
+ const r = audit({
43
+ registry: "npm", packageName: "x",
44
+ metadata: { weeklyDownloads: 100, license: "GPL-3.0", hasReadme: true, hasTypes: true, lastPublished: new Date().toISOString() },
45
+ });
46
+ expect(r.evidence.some((e) => /copyleft|restrictive/i.test(e))).toBe(true);
47
+ });
48
+ it("HMAC sig is 64 hex", () => {
49
+ const r = audit({ registry: "npm", packageName: "x", metadata: {} });
50
+ expect(r.sig).toMatch(/^[0-9a-f]{64}$/);
51
+ });
52
+ it("freshness scoring is monotonic with age", () => {
53
+ const day = 24 * 60 * 60 * 1000;
54
+ const recent = audit({ registry: "npm", packageName: "a", metadata: { lastPublished: new Date(Date.now() - 10 * day).toISOString(), license: "MIT", hasReadme: true, hasTypes: true, weeklyDownloads: 1000 } });
55
+ const old = audit({ registry: "npm", packageName: "b", metadata: { lastPublished: new Date(Date.now() - 400 * day).toISOString(), license: "MIT", hasReadme: true, hasTypes: true, weeklyDownloads: 1000 } });
56
+ expect(recent.scores.freshness).toBeGreaterThan(old.scores.freshness);
57
+ });
58
+ it("formatPublicAuditLine summarises", () => {
59
+ const r = audit({ registry: "npm", packageName: "react", metadata: { weeklyDownloads: 25_000_000, license: "MIT", hasTypes: true, hasReadme: true, lastPublished: new Date().toISOString() } });
60
+ expect(formatPublicAuditLine(r)).toContain("AUDIT");
61
+ expect(formatPublicAuditLine(r)).toContain("/100");
62
+ });
63
+ });
64
+ //# sourceMappingURL=public_audit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_audit.test.js","sourceRoot":"","sources":["../../src/public_audit/public_audit.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/core",
3
- "version": "2.15.1",
3
+ "version": "2.16.0",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",