@mneme-ai/xray 2.150.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.
- package/README.md +71 -0
- package/dist/battery/age.d.ts +3 -0
- package/dist/battery/age.d.ts.map +1 -0
- package/dist/battery/age.js +65 -0
- package/dist/battery/age.js.map +1 -0
- package/dist/battery/busfactor.d.ts +3 -0
- package/dist/battery/busfactor.d.ts.map +1 -0
- package/dist/battery/busfactor.js +92 -0
- package/dist/battery/busfactor.js.map +1 -0
- package/dist/battery/complexity.d.ts +3 -0
- package/dist/battery/complexity.d.ts.map +1 -0
- package/dist/battery/complexity.js +50 -0
- package/dist/battery/complexity.js.map +1 -0
- package/dist/battery/deps.d.ts +15 -0
- package/dist/battery/deps.d.ts.map +1 -0
- package/dist/battery/deps.js +107 -0
- package/dist/battery/deps.js.map +1 -0
- package/dist/battery/hotspots.d.ts +3 -0
- package/dist/battery/hotspots.d.ts.map +1 -0
- package/dist/battery/hotspots.js +61 -0
- package/dist/battery/hotspots.js.map +1 -0
- package/dist/battery/secrets.d.ts +3 -0
- package/dist/battery/secrets.d.ts.map +1 -0
- package/dist/battery/secrets.js +64 -0
- package/dist/battery/secrets.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +76 -0
- package/dist/bin.js.map +1 -0
- package/dist/clone.d.ts +13 -0
- package/dist/clone.d.ts.map +1 -0
- package/dist/clone.js +42 -0
- package/dist/clone.js.map +1 -0
- package/dist/cosmic.d.ts +35 -0
- package/dist/cosmic.d.ts.map +1 -0
- package/dist/cosmic.js +122 -0
- package/dist/cosmic.js.map +1 -0
- package/dist/engine.d.ts +8 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +138 -0
- package/dist/engine.js.map +1 -0
- package/dist/gauntlet.d.ts +9 -0
- package/dist/gauntlet.d.ts.map +1 -0
- package/dist/gauntlet.js +47 -0
- package/dist/gauntlet.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/privacy.d.ts +12 -0
- package/dist/privacy.d.ts.map +1 -0
- package/dist/privacy.js +43 -0
- package/dist/privacy.js.map +1 -0
- package/dist/publish.d.ts +9 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +28 -0
- package/dist/publish.js.map +1 -0
- package/dist/server.d.ts +29 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +482 -0
- package/dist/server.js.map +1 -0
- package/dist/sign.d.ts +7 -0
- package/dist/sign.d.ts.map +1 -0
- package/dist/sign.js +33 -0
- package/dist/sign.js.map +1 -0
- package/dist/types.d.ts +148 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +21 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +111 -0
- package/dist/util.js.map +1 -0
- package/package.json +55 -0
- package/public/card.js +45 -0
- package/public/cosmic.html +74 -0
- package/public/favicon.svg +1 -0
- package/public/index.html +294 -0
- package/public/report.html +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/sign.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { XRayReport, SignedXRay } from "./types.js";
|
|
2
|
+
export declare function sealXRay(repoRoot: string, report: XRayReport, issuedAt?: number): SignedXRay;
|
|
3
|
+
export declare function verifyXRay(signed: SignedXRay): {
|
|
4
|
+
valid: boolean;
|
|
5
|
+
reason: string;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAS5F;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAYjF"}
|
package/dist/sign.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seal an X-Ray report with an Ed25519 NOTARY receipt so any third party can
|
|
3
|
+
* verify OFFLINE (with the embedded public key) that the report is genuine and
|
|
4
|
+
* untampered — no Mneme instance, no network, no shared secret. This is the
|
|
5
|
+
* "every number is signed, no AI guessed it" guarantee.
|
|
6
|
+
*/
|
|
7
|
+
import { notary } from "@mneme-ai/core";
|
|
8
|
+
import { createHash } from "node:crypto";
|
|
9
|
+
export function sealXRay(repoRoot, report, issuedAt) {
|
|
10
|
+
const receipt = notary.issueReceipt(repoRoot, {
|
|
11
|
+
kind: "claim-verdict",
|
|
12
|
+
subject: `xray:${report.subject.repoName}@${report.subject.commitHash.slice(0, 12)}`,
|
|
13
|
+
payload: report,
|
|
14
|
+
includePayload: true,
|
|
15
|
+
issuedAt,
|
|
16
|
+
});
|
|
17
|
+
return { report, receipt };
|
|
18
|
+
}
|
|
19
|
+
export function verifyXRay(signed) {
|
|
20
|
+
const r = notary.verifyReceipt(signed.receipt);
|
|
21
|
+
if (!r.valid)
|
|
22
|
+
return { valid: false, reason: r.reason };
|
|
23
|
+
// BIND the outer report to the signature: verifyReceipt only checks the
|
|
24
|
+
// receipt's own inline payload, so we must confirm signed.report hashes to
|
|
25
|
+
// the receipt's payloadHash — otherwise a tampered outer report would pass.
|
|
26
|
+
const rec = signed.receipt;
|
|
27
|
+
const h = createHash("sha256").update(notary.canonicalJson(signed.report)).digest("hex");
|
|
28
|
+
if (!rec.payloadHash || rec.payloadHash !== h) {
|
|
29
|
+
return { valid: false, reason: "report does not match the signed payloadHash (tampered)" };
|
|
30
|
+
}
|
|
31
|
+
return { valid: true, reason: r.reason };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=sign.js.map
|
package/dist/sign.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,MAAkB,EAAE,QAAiB;IAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC5C,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,QAAQ,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;QACpF,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,IAAI;QACpB,QAAQ;KACT,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACxD,wEAAwE;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,OAAmC,CAAC;IACvD,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzF,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yDAAyD,EAAE,CAAC;IAC7F,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC3C,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mneme Repo X-Ray — report types.
|
|
3
|
+
*
|
|
4
|
+
* DESIGN INVARIANT (the privacy moat, gauntlet-proven by `xrayLeaksRaw`):
|
|
5
|
+
* a report carries ONLY aggregate metrics, counts, line numbers, symbol
|
|
6
|
+
* names/signatures, and sha256 hashes. It NEVER carries a line of source,
|
|
7
|
+
* a secret value, a file's content, or a full diff. The whole report is
|
|
8
|
+
* raw-free by construction so it is safe to ship to a cloud surface.
|
|
9
|
+
*
|
|
10
|
+
* ACCURACY INVARIANT: every number originates from a deterministic
|
|
11
|
+
* @mneme-ai/core function (git history, AST outline, npm metadata, regex
|
|
12
|
+
* secret scan). No LLM is consulted anywhere in the battery, so the same
|
|
13
|
+
* repo at the same commit always produces the same report.
|
|
14
|
+
*/
|
|
15
|
+
export type Grade = "A" | "B" | "C" | "D" | "F";
|
|
16
|
+
export interface XRaySubject {
|
|
17
|
+
kind: "git-url" | "local-path";
|
|
18
|
+
/** The public git URL, or "local" for a path (the path itself is never stored). */
|
|
19
|
+
ref: string;
|
|
20
|
+
repoName: string;
|
|
21
|
+
/** HEAD commit the report was computed at (provenance). */
|
|
22
|
+
commitHash: string;
|
|
23
|
+
}
|
|
24
|
+
/** Dependency mortality — "which of your dependencies are dying". */
|
|
25
|
+
export interface DepsBlock {
|
|
26
|
+
total: number;
|
|
27
|
+
byBand: Record<"thriving" | "healthy" | "watch" | "moribund" | "dead", number>;
|
|
28
|
+
/** Worst offenders first — name + band + 18-month abandonment probability + a known successor. */
|
|
29
|
+
atRisk: Array<{
|
|
30
|
+
name: string;
|
|
31
|
+
band: string;
|
|
32
|
+
probability18mo: number;
|
|
33
|
+
successor: string | null;
|
|
34
|
+
}>;
|
|
35
|
+
/** True when npm metadata could not be fetched for some deps (honest degradation). */
|
|
36
|
+
partial: boolean;
|
|
37
|
+
note: string;
|
|
38
|
+
}
|
|
39
|
+
/** Secret / credential leak scan (values are NEVER stored — only kind + count + location). */
|
|
40
|
+
export interface SecretsBlock {
|
|
41
|
+
filesScanned: number;
|
|
42
|
+
/** Credential-pattern matches in PRODUCTION code (drives the grade). */
|
|
43
|
+
totalFindings: number;
|
|
44
|
+
/** Matches in test/fixture/doc files — intentional sample data, not leaks. */
|
|
45
|
+
excludedTestHits: number;
|
|
46
|
+
byKind: Record<string, number>;
|
|
47
|
+
/** Redacted hits: kind + file + line. The secret value is never present. */
|
|
48
|
+
hits: Array<{
|
|
49
|
+
kind: string;
|
|
50
|
+
file: string;
|
|
51
|
+
line: number;
|
|
52
|
+
}>;
|
|
53
|
+
worstVerdict: "ALLOW" | "REDACT" | "BLOCK";
|
|
54
|
+
note: string;
|
|
55
|
+
}
|
|
56
|
+
/** Bus factor — knowledge concentration from git authorship. */
|
|
57
|
+
export interface BusFactorBlock {
|
|
58
|
+
/** Distinct authors in the analysed window. */
|
|
59
|
+
authors: number;
|
|
60
|
+
/** % of files whose history is dominated (>= dominanceThreshold) by a single author. */
|
|
61
|
+
singleOwnerFilePct: number;
|
|
62
|
+
/** Files most at risk if their sole expert leaves. */
|
|
63
|
+
fragileFiles: Array<{
|
|
64
|
+
file: string;
|
|
65
|
+
topAuthorShare: number;
|
|
66
|
+
commits: number;
|
|
67
|
+
}>;
|
|
68
|
+
/** Share of all commits by the single top contributor. */
|
|
69
|
+
topContributorShare: number;
|
|
70
|
+
busFactor: number;
|
|
71
|
+
note: string;
|
|
72
|
+
}
|
|
73
|
+
/** Repo age, vitality, abandonment. */
|
|
74
|
+
export interface AgeBlock {
|
|
75
|
+
bornAt: string;
|
|
76
|
+
lastCommitAt: string;
|
|
77
|
+
lifespan: string;
|
|
78
|
+
lifespanDays: number;
|
|
79
|
+
totalCommits: number;
|
|
80
|
+
totalAuthors: number;
|
|
81
|
+
dormant: boolean;
|
|
82
|
+
vitality: "active" | "slowing" | "dormant" | "archived";
|
|
83
|
+
note: string;
|
|
84
|
+
}
|
|
85
|
+
/** Structural complexity from the AST outline. */
|
|
86
|
+
export interface ComplexityBlock {
|
|
87
|
+
filesAnalysed: number;
|
|
88
|
+
totalSymbols: number;
|
|
89
|
+
/** Longest functions/methods by body length — the refactor hotspots. */
|
|
90
|
+
hotspots: Array<{
|
|
91
|
+
file: string;
|
|
92
|
+
symbol: string;
|
|
93
|
+
bodyLines: number;
|
|
94
|
+
startLine: number;
|
|
95
|
+
}>;
|
|
96
|
+
maxDepth: number;
|
|
97
|
+
note: string;
|
|
98
|
+
}
|
|
99
|
+
/** Behavioral hotspots — change-frequency × size (refactor-ROI targets). */
|
|
100
|
+
export interface HotspotsBlock {
|
|
101
|
+
windowDays: number;
|
|
102
|
+
filesConsidered: number;
|
|
103
|
+
hotspots: Array<{
|
|
104
|
+
file: string;
|
|
105
|
+
changes: number;
|
|
106
|
+
loc: number;
|
|
107
|
+
score: number;
|
|
108
|
+
}>;
|
|
109
|
+
note: string;
|
|
110
|
+
}
|
|
111
|
+
export interface XRaySummary {
|
|
112
|
+
headline: string;
|
|
113
|
+
grade: Grade;
|
|
114
|
+
/** Number of deterministic signals that ran successfully. */
|
|
115
|
+
signalsRun: number;
|
|
116
|
+
/** One-line takeaway per signal — what a CEO reads first. */
|
|
117
|
+
bullets: string[];
|
|
118
|
+
}
|
|
119
|
+
export interface XRayReport {
|
|
120
|
+
v: 1;
|
|
121
|
+
subject: XRaySubject;
|
|
122
|
+
generatedAt: string;
|
|
123
|
+
summary: XRaySummary;
|
|
124
|
+
deps: DepsBlock;
|
|
125
|
+
secrets: SecretsBlock;
|
|
126
|
+
busFactor: BusFactorBlock;
|
|
127
|
+
age: AgeBlock;
|
|
128
|
+
complexity: ComplexityBlock;
|
|
129
|
+
hotspots: HotspotsBlock;
|
|
130
|
+
/** sha256 over the canonicalised metric blocks — a tamper-evident content id. */
|
|
131
|
+
fingerprint: string;
|
|
132
|
+
}
|
|
133
|
+
/** A report plus its offline-verifiable Ed25519 NOTARY receipt. */
|
|
134
|
+
export interface SignedXRay {
|
|
135
|
+
report: XRayReport;
|
|
136
|
+
receipt: unknown;
|
|
137
|
+
}
|
|
138
|
+
export interface XRayInput {
|
|
139
|
+
/** Local repo path. The path is analysed in place and never transmitted/stored. */
|
|
140
|
+
repoPath?: string;
|
|
141
|
+
/** Public git URL — shallow-cloned to a temp dir, analysed, then deleted. */
|
|
142
|
+
gitUrl?: string;
|
|
143
|
+
/** Override "now" for deterministic tests. */
|
|
144
|
+
now?: number;
|
|
145
|
+
/** Max files to scan for secrets/complexity (perf bound; logged when hit). */
|
|
146
|
+
maxFiles?: number;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mneme Repo X-Ray — report types.
|
|
3
|
+
*
|
|
4
|
+
* DESIGN INVARIANT (the privacy moat, gauntlet-proven by `xrayLeaksRaw`):
|
|
5
|
+
* a report carries ONLY aggregate metrics, counts, line numbers, symbol
|
|
6
|
+
* names/signatures, and sha256 hashes. It NEVER carries a line of source,
|
|
7
|
+
* a secret value, a file's content, or a full diff. The whole report is
|
|
8
|
+
* raw-free by construction so it is safe to ship to a cloud surface.
|
|
9
|
+
*
|
|
10
|
+
* ACCURACY INVARIANT: every number originates from a deterministic
|
|
11
|
+
* @mneme-ai/core function (git history, AST outline, npm metadata, regex
|
|
12
|
+
* secret scan). No LLM is consulted anywhere in the battery, so the same
|
|
13
|
+
* repo at the same commit always produces the same report.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Run git read-only; returns stdout or "" on any failure (never throws). */
|
|
2
|
+
export declare function git(repoPath: string, args: string[]): string;
|
|
3
|
+
export declare function headCommit(repoPath: string): string;
|
|
4
|
+
/** True only if the path is inside a real git work tree (so we can be honest
|
|
5
|
+
* about non-git folders instead of reporting empty/garbage history). */
|
|
6
|
+
export declare function isGitRepo(repoPath: string): boolean;
|
|
7
|
+
export interface RepoFile {
|
|
8
|
+
rel: string;
|
|
9
|
+
abs: string;
|
|
10
|
+
}
|
|
11
|
+
/** Text files to scan — tracked files via `git ls-files`, or a filesystem walk
|
|
12
|
+
* when the folder is not a git repo (or git lists nothing). Capped at maxFiles. */
|
|
13
|
+
export declare function listTextFiles(repoPath: string, maxFiles: number): {
|
|
14
|
+
files: RepoFile[];
|
|
15
|
+
truncated: boolean;
|
|
16
|
+
};
|
|
17
|
+
/** Read a small text file; "" on failure or if too large (>2MB). */
|
|
18
|
+
export declare function readText(abs: string): string;
|
|
19
|
+
export declare function repoNameFromUrl(url: string): string;
|
|
20
|
+
export declare function repoNameFromPath(p: string): string;
|
|
21
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAKA,6EAA6E;AAC7E,wBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ5D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;yEACyE;AACzE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAYD,MAAM,WAAW,QAAQ;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AAyBtD;oFACoF;AACpF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAY3G;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/** Repo filesystem/git helpers for the X-Ray battery. Deterministic, fail-safe. */
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { readFileSync, statSync, readdirSync } from "node:fs";
|
|
4
|
+
import { join, extname, basename, relative, sep } from "node:path";
|
|
5
|
+
/** Run git read-only; returns stdout or "" on any failure (never throws). */
|
|
6
|
+
export function git(repoPath, args) {
|
|
7
|
+
try {
|
|
8
|
+
const r = spawnSync("git", args, { cwd: repoPath, encoding: "utf8", maxBuffer: 64 * 1024 * 1024 });
|
|
9
|
+
if (r.status !== 0)
|
|
10
|
+
return "";
|
|
11
|
+
return r.stdout ?? "";
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return "";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function headCommit(repoPath) {
|
|
18
|
+
return git(repoPath, ["rev-parse", "HEAD"]).trim() || "unknown";
|
|
19
|
+
}
|
|
20
|
+
/** True only if the path is inside a real git work tree (so we can be honest
|
|
21
|
+
* about non-git folders instead of reporting empty/garbage history). */
|
|
22
|
+
export function isGitRepo(repoPath) {
|
|
23
|
+
return git(repoPath, ["rev-parse", "--is-inside-work-tree"]).trim() === "true";
|
|
24
|
+
}
|
|
25
|
+
/** Source-text extensions the secret + complexity scanners look at. */
|
|
26
|
+
const TEXT_EXT = new Set([
|
|
27
|
+
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".py", ".go", ".rs", ".java",
|
|
28
|
+
".c", ".h", ".cpp", ".cc", ".rb", ".php", ".cs", ".kt", ".swift", ".scala",
|
|
29
|
+
".sh", ".bash", ".env", ".json", ".yaml", ".yml", ".toml", ".ini", ".cfg",
|
|
30
|
+
".xml", ".gradle", ".properties", ".tf", ".sql", ".vue", ".svelte",
|
|
31
|
+
]);
|
|
32
|
+
const SKIP_DIR = /(^|\/)(node_modules|\.git|dist|build|vendor|\.next|coverage|__pycache__|\.venv|target)(\/|$)/;
|
|
33
|
+
/** Recursive filesystem walk — the fallback for NON-git folders (so a plain
|
|
34
|
+
* local folder, never uploaded, still gets scanned). Skips vendor dirs. */
|
|
35
|
+
function walkFiles(root, maxFiles) {
|
|
36
|
+
const rels = [];
|
|
37
|
+
let truncated = false;
|
|
38
|
+
const stack = [root];
|
|
39
|
+
while (stack.length) {
|
|
40
|
+
const dir = stack.pop();
|
|
41
|
+
let entries;
|
|
42
|
+
try {
|
|
43
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
for (const e of entries) {
|
|
49
|
+
const abs = join(dir, e.name);
|
|
50
|
+
const rel = relative(root, abs).split(sep).join("/");
|
|
51
|
+
if (SKIP_DIR.test(rel) || e.name.startsWith("."))
|
|
52
|
+
continue;
|
|
53
|
+
if (e.isDirectory()) {
|
|
54
|
+
stack.push(abs);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (!e.isFile() || !TEXT_EXT.has(extname(e.name).toLowerCase()))
|
|
58
|
+
continue;
|
|
59
|
+
if (rels.length >= maxFiles) {
|
|
60
|
+
truncated = true;
|
|
61
|
+
return { rels, truncated };
|
|
62
|
+
}
|
|
63
|
+
rels.push(rel);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { rels, truncated };
|
|
67
|
+
}
|
|
68
|
+
/** Text files to scan — tracked files via `git ls-files`, or a filesystem walk
|
|
69
|
+
* when the folder is not a git repo (or git lists nothing). Capped at maxFiles. */
|
|
70
|
+
export function listTextFiles(repoPath, maxFiles) {
|
|
71
|
+
let rels = git(repoPath, ["ls-files"]).split("\n").map((s) => s.trim()).filter(Boolean);
|
|
72
|
+
let truncated = false;
|
|
73
|
+
if (rels.length === 0) {
|
|
74
|
+
const w = walkFiles(repoPath, maxFiles);
|
|
75
|
+
rels = w.rels;
|
|
76
|
+
truncated = w.truncated;
|
|
77
|
+
}
|
|
78
|
+
const out = [];
|
|
79
|
+
for (const rel of rels) {
|
|
80
|
+
if (SKIP_DIR.test(rel))
|
|
81
|
+
continue;
|
|
82
|
+
if (!TEXT_EXT.has(extname(rel).toLowerCase()))
|
|
83
|
+
continue;
|
|
84
|
+
if (out.length >= maxFiles) {
|
|
85
|
+
truncated = true;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
out.push({ rel, abs: join(repoPath, rel) });
|
|
89
|
+
}
|
|
90
|
+
return { files: out, truncated };
|
|
91
|
+
}
|
|
92
|
+
/** Read a small text file; "" on failure or if too large (>2MB). */
|
|
93
|
+
export function readText(abs) {
|
|
94
|
+
try {
|
|
95
|
+
const st = statSync(abs);
|
|
96
|
+
if (!st.isFile() || st.size > 2 * 1024 * 1024)
|
|
97
|
+
return "";
|
|
98
|
+
return readFileSync(abs, "utf8");
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return "";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export function repoNameFromUrl(url) {
|
|
105
|
+
const m = url.replace(/\.git$/, "").match(/[/:]([^/]+\/[^/]+)$/);
|
|
106
|
+
return m ? m[1] : url.replace(/\.git$/, "");
|
|
107
|
+
}
|
|
108
|
+
export function repoNameFromPath(p) {
|
|
109
|
+
return basename(p.replace(/[/\\]+$/, "")) || "repo";
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mneme-ai/xray",
|
|
3
|
+
"version": "2.150.0",
|
|
4
|
+
"description": "Mneme Repo X-Ray — a signed, raw-free, deterministic X-Ray of any repo. Every number is reproducible from git/AST/metadata and sealed with an offline-verifiable NOTARY receipt. No source code ever leaves the machine; no LLM guesses anything.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"mneme-xray": "./dist/bin.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/patsa2561-art/mneme-ai.git",
|
|
20
|
+
"directory": "packages/xray"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://github.com/patsa2561-art/mneme-ai#readme",
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/patsa2561-art/mneme-ai/issues"
|
|
25
|
+
},
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"public",
|
|
30
|
+
"README.md"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc -b",
|
|
34
|
+
"clean": "tsc -b --clean",
|
|
35
|
+
"serve": "node dist/server.js"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"ai",
|
|
39
|
+
"repo-analysis",
|
|
40
|
+
"x-ray",
|
|
41
|
+
"deterministic",
|
|
42
|
+
"notary",
|
|
43
|
+
"signed",
|
|
44
|
+
"privacy",
|
|
45
|
+
"bus-factor",
|
|
46
|
+
"dependency-mortality",
|
|
47
|
+
"mneme"
|
|
48
|
+
],
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@mneme-ai/core": "^2.150.0"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=22.13.0 <25.0.0"
|
|
54
|
+
}
|
|
55
|
+
}
|
package/public/card.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* Shared X-Ray card renderer — used by both the home page and the permalink page. */
|
|
2
|
+
(function (g) {
|
|
3
|
+
const esc = (s) => String(s == null ? "" : s).replace(/[&<>]/g, (c) => ({ "&": "&", "<": "<", ">": ">" }[c]));
|
|
4
|
+
const gC = (x) => "g-" + ("ABCDEF".includes(x) ? x : "C");
|
|
5
|
+
const pct = (n) => (n || 0) + "%";
|
|
6
|
+
|
|
7
|
+
function xrayCardHTML(signed, opts) {
|
|
8
|
+
opts = opts || {};
|
|
9
|
+
const r = signed.report, s = r.summary;
|
|
10
|
+
const dep = r.deps, sec = r.secrets, bf = r.busFactor, age = r.age, cx = r.complexity;
|
|
11
|
+
const verified = signed.receipt ? '<span class="verified"><span class="dot"></span>Ed25519 — verifies offline</span>' : "unsigned";
|
|
12
|
+
|
|
13
|
+
const depChips = (dep.atRisk || []).slice(0, 6).map((d) =>
|
|
14
|
+
`<span class="chip ${d.band === "dead" ? "bad" : "warn"}">${esc(d.name)} · ${d.band}${d.successor ? ` → ${esc(d.successor)}` : ""}</span>`).join("") || `<span class="chip">none dying</span>`;
|
|
15
|
+
const secChips = sec.totalFindings === 0 ? `<span class="chip">clean</span>` :
|
|
16
|
+
Object.entries(sec.byKind).slice(0, 8).map(([k, n]) => `<span class="chip bad">${esc(k)} ×${n}</span>`).join("");
|
|
17
|
+
const fragile = (bf.fragileFiles || []).slice(0, 4).map((x) => `<span class="chip ${x.topAuthorShare >= 0.9 ? "warn" : ""}">${esc(x.file)} · ${Math.round(x.topAuthorShare * 100)}%</span>`).join("");
|
|
18
|
+
const hot = (cx.hotspots || []).slice(0, 4).map((h) => `<span class="chip">${esc(h.symbol).slice(0, 40)} · ${h.bodyLines}L</span>`).join("");
|
|
19
|
+
const hs = r.hotspots || { hotspots: [] };
|
|
20
|
+
const hsChips = (hs.hotspots || []).slice(0, 5).map((h) => `<span class="chip">${esc(h.file)} · ${h.changes}× · ${h.loc}L</span>`).join("") || `<span class="chip">none</span>`;
|
|
21
|
+
|
|
22
|
+
const share = opts.share ? `<div class="share" id="share"></div>` : "";
|
|
23
|
+
|
|
24
|
+
return `
|
|
25
|
+
<div class="card">
|
|
26
|
+
<div class="top">
|
|
27
|
+
<div class="grade ${gC(s.grade)}">${esc(s.grade)}</div>
|
|
28
|
+
<div><div class="repo">${esc(r.subject.repoName)}</div>
|
|
29
|
+
<div class="head">${esc(s.headline)} · ${s.signalsRun} signals · @ ${esc(String(r.subject.commitHash).slice(0, 10))}</div></div>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="rows">
|
|
32
|
+
<div class="row"><div class="k">Dependencies</div><div class="v"><span class="big">${dep.total}</span> total · ${dep.byBand.dead + dep.byBand.moribund} dying<div class="chips">${depChips}</div></div></div>
|
|
33
|
+
<div class="row"><div class="k">Secrets</div><div class="v"><span class="big">${sec.totalFindings}</span> in production code · ${sec.filesScanned} files${sec.excludedTestHits ? ` · <span class="muted">+${sec.excludedTestHits} in tests/docs (excluded)</span>` : ""}<div class="chips">${secChips}</div></div></div>
|
|
34
|
+
<div class="row"><div class="k">Bus factor</div><div class="v"><span class="big">${bf.busFactor}</span> · top author ${pct(bf.topContributorShare)} · ${pct(bf.singleOwnerFilePct)} files single-owner<div class="chips">${fragile}</div></div></div>
|
|
35
|
+
<div class="row"><div class="k">Vitality</div><div class="v"><span class="big">${esc(age.vitality)}</span> · ${esc(age.lifespan)} old · ${age.totalCommits} commits · ${age.totalAuthors} authors</div></div>
|
|
36
|
+
<div class="row"><div class="k">Complexity</div><div class="v"><span class="big">${cx.totalSymbols}</span> symbols · ${cx.filesAnalysed} files · max depth ${cx.maxDepth}<div class="chips">${hot}</div></div></div>
|
|
37
|
+
<div class="row"><div class="k">🔥 Hotspots</div><div class="v"><span class="muted">refactor-ROI · churn × size · last ${hs.windowDays||365}d</span><div class="chips">${hsChips}</div></div></div>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="foot">${verified}<span>fingerprint <code>${esc(String(r.fingerprint).slice(0, 28))}…</code></span></div>
|
|
40
|
+
${share}
|
|
41
|
+
</div>`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
g.MnemeXRay = { xrayCardHTML, gradeClass: gC, esc };
|
|
45
|
+
})(window);
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Cosmic Link · Status · Mneme</title>
|
|
7
|
+
<link rel="icon" href="/favicon.svg" />
|
|
8
|
+
<style>
|
|
9
|
+
:root{--ink:#0a0a0a;--sub:#6b7280;--line:#ececec;--soft:#fafafa;--green:#16a34a;--red:#dc2626;--a:#4f46e5}
|
|
10
|
+
*{box-sizing:border-box}
|
|
11
|
+
body{margin:0;background:#fff;color:var(--ink);font:16px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,sans-serif;-webkit-font-smoothing:antialiased}
|
|
12
|
+
.wrap{max-width:680px;margin:0 auto;padding:46px 20px 70px}
|
|
13
|
+
.nav{display:flex;justify-content:space-between;align-items:center;margin-bottom:26px}
|
|
14
|
+
.mark{font-size:13px;letter-spacing:.18em;text-transform:uppercase;color:var(--sub)}
|
|
15
|
+
.home{font-size:13px;color:var(--ink);text-decoration:none;border:1px solid var(--line);border-radius:9px;padding:8px 13px}
|
|
16
|
+
h1{font-size:30px;font-weight:680;letter-spacing:-.02em;margin:0 0 4px}
|
|
17
|
+
.sub{color:var(--sub);margin:0 0 26px}
|
|
18
|
+
.card{border:1px solid var(--line);border-radius:18px;overflow:hidden;box-shadow:0 1px 2px rgba(0,0,0,.03),0 8px 30px rgba(0,0,0,.04)}
|
|
19
|
+
.hero{display:flex;align-items:center;gap:18px;padding:26px 28px;border-bottom:1px solid var(--line)}
|
|
20
|
+
.pulse{width:16px;height:16px;border-radius:50%;flex:none}
|
|
21
|
+
.pulse.up{background:var(--green);box-shadow:0 0 0 0 rgba(22,163,74,.5);animation:p 2s infinite}
|
|
22
|
+
.pulse.down{background:var(--red)}
|
|
23
|
+
@keyframes p{0%{box-shadow:0 0 0 0 rgba(22,163,74,.5)}70%{box-shadow:0 0 0 12px rgba(22,163,74,0)}100%{box-shadow:0 0 0 0 rgba(22,163,74,0)}}
|
|
24
|
+
.state{font-size:26px;font-weight:680}
|
|
25
|
+
.grid{display:grid;grid-template-columns:repeat(3,1fr)}
|
|
26
|
+
.cell{padding:22px 28px;border-right:1px solid var(--soft);border-bottom:1px solid var(--soft)}
|
|
27
|
+
.cell:nth-child(3n){border-right:0}
|
|
28
|
+
.cell .n{font-size:26px;font-weight:680}
|
|
29
|
+
.cell .l{font-size:12.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--sub);margin-top:3px}
|
|
30
|
+
.foot{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 28px;background:var(--soft);font-size:13px;color:var(--sub);flex-wrap:wrap}
|
|
31
|
+
.verified{display:inline-flex;align-items:center;gap:7px;color:var(--green);font-weight:560}
|
|
32
|
+
code{font-family:ui-monospace,Menlo,monospace;font-size:12px}
|
|
33
|
+
.badgerow{margin-top:20px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--sub)}
|
|
34
|
+
.badgerow img{height:20px}
|
|
35
|
+
@media (max-width:560px){ .grid{grid-template-columns:repeat(3,1fr)} .cell{padding:16px 14px} .cell .n{font-size:20px} .hero{padding:20px} }
|
|
36
|
+
</style>
|
|
37
|
+
</head>
|
|
38
|
+
<body>
|
|
39
|
+
<div class="wrap">
|
|
40
|
+
<div class="nav"><span class="mark">Mneme · Cosmic Link</span><a class="home" href="/">Repo X-Ray →</a></div>
|
|
41
|
+
<h1>Cosmic Link — live status</h1>
|
|
42
|
+
<p class="sub">Measured by the Mneme X-Ray server probing the cosmic-link server, then <b>signed</b> so the uptime is verifiable, not just claimed.</p>
|
|
43
|
+
<div class="card" id="card"><div class="hero"><div class="pulse"></div><div class="state">Loading…</div></div></div>
|
|
44
|
+
<div class="badgerow" id="badgerow"></div>
|
|
45
|
+
</div>
|
|
46
|
+
<script>
|
|
47
|
+
const esc=s=>String(s==null?"":s).replace(/[&<>]/g,c=>({"&":"&","<":"<",">":">"}[c]));
|
|
48
|
+
function ms(n){ n=Math.round(n||0); return n+" ms"; }
|
|
49
|
+
function ago(ts){ if(!ts) return "—"; const s=Math.round((Date.now()-ts)/1000); return s<60?s+"s ago":Math.round(s/60)+"m ago"; }
|
|
50
|
+
async function load(){
|
|
51
|
+
try{
|
|
52
|
+
const st=await (await fetch("/api/cosmic/status")).json();
|
|
53
|
+
if(st.configured===false){ document.getElementById("card").innerHTML='<div class="hero"><div class="pulse down"></div><div class="state">monitor not enabled</div></div>'; return; }
|
|
54
|
+
const up=st.up;
|
|
55
|
+
document.getElementById("card").innerHTML=`
|
|
56
|
+
<div class="hero"><div class="pulse ${up?"up":"down"}"></div>
|
|
57
|
+
<div><div class="state">${up?"Operational":"Down"}</div>
|
|
58
|
+
<div style="color:var(--sub);font-size:14px">${esc(st.url)} · last check ${ago(st.lastCheck)}</div></div></div>
|
|
59
|
+
<div class="grid">
|
|
60
|
+
<div class="cell"><div class="n">${st.uptimePct}%</div><div class="l">uptime (window)</div></div>
|
|
61
|
+
<div class="cell"><div class="n">${st.checks}</div><div class="l">probes</div></div>
|
|
62
|
+
<div class="cell"><div class="n">${ms(st.p50Ms)}</div><div class="l">latency p50</div></div>
|
|
63
|
+
<div class="cell"><div class="n">${ms(st.p95Ms)}</div><div class="l">latency p95</div></div>
|
|
64
|
+
<div class="cell"><div class="n">${up?"●":"○"}</div><div class="l">current</div></div>
|
|
65
|
+
<div class="cell"><div class="n">15s</div><div class="l">probe interval</div></div>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="foot"><span class="verified">● Ed25519 — signed liveness, verifies offline</span><span>since ${st.sinceTs?new Date(st.sinceTs).toLocaleString():"—"}</span></div>`;
|
|
68
|
+
document.getElementById("badgerow").innerHTML=`Embed: <img src="/badge/cosmic.svg"/> <code></code>`;
|
|
69
|
+
}catch(e){ document.getElementById("card").innerHTML='<div class="hero"><div class="pulse down"></div><div class="state">error loading status</div></div>'; }
|
|
70
|
+
}
|
|
71
|
+
load(); setInterval(load, 10000);
|
|
72
|
+
</script>
|
|
73
|
+
</body>
|
|
74
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><rect width="32" height="32" rx="8" fill="#0a0a0a"/><circle cx="16" cy="16" r="8" fill="none" stroke="#fff" stroke-width="2"/><circle cx="16" cy="16" r="2.5" fill="#4f46e5"/></svg>
|