@mneme-ai/core 1.64.0 → 1.65.1
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/ai_compliance.d.ts +16 -0
- package/dist/ai_compliance.d.ts.map +1 -1
- package/dist/ai_compliance.js +33 -1
- package/dist/ai_compliance.js.map +1 -1
- package/dist/ai_compliance_windowed.test.d.ts +5 -0
- package/dist/ai_compliance_windowed.test.d.ts.map +1 -0
- package/dist/ai_compliance_windowed.test.js +70 -0
- package/dist/ai_compliance_windowed.test.js.map +1 -0
- package/dist/apoptosis/acgv_cascade.d.ts +24 -0
- package/dist/apoptosis/acgv_cascade.d.ts.map +1 -0
- package/dist/apoptosis/acgv_cascade.js +57 -0
- package/dist/apoptosis/acgv_cascade.js.map +1 -0
- package/dist/apoptosis/apoptosis.d.ts +64 -0
- package/dist/apoptosis/apoptosis.d.ts.map +1 -0
- package/dist/apoptosis/apoptosis.js +198 -0
- package/dist/apoptosis/apoptosis.js.map +1 -0
- package/dist/apoptosis/apoptosis.test.d.ts +12 -0
- package/dist/apoptosis/apoptosis.test.d.ts.map +1 -0
- package/dist/apoptosis/apoptosis.test.js +361 -0
- package/dist/apoptosis/apoptosis.test.js.map +1 -0
- package/dist/apoptosis/bayesian_prior.d.ts +37 -0
- package/dist/apoptosis/bayesian_prior.d.ts.map +1 -0
- package/dist/apoptosis/bayesian_prior.js +129 -0
- package/dist/apoptosis/bayesian_prior.js.map +1 -0
- package/dist/apoptosis/bench.d.ts +60 -0
- package/dist/apoptosis/bench.d.ts.map +1 -0
- package/dist/apoptosis/bench.js +156 -0
- package/dist/apoptosis/bench.js.map +1 -0
- package/dist/apoptosis/epistemic_humility.d.ts +30 -0
- package/dist/apoptosis/epistemic_humility.d.ts.map +1 -0
- package/dist/apoptosis/epistemic_humility.js +85 -0
- package/dist/apoptosis/epistemic_humility.js.map +1 -0
- package/dist/apoptosis/fractal_decompose.d.ts +39 -0
- package/dist/apoptosis/fractal_decompose.d.ts.map +1 -0
- package/dist/apoptosis/fractal_decompose.js +76 -0
- package/dist/apoptosis/fractal_decompose.js.map +1 -0
- package/dist/apoptosis/index.d.ts +31 -0
- package/dist/apoptosis/index.d.ts.map +1 -0
- package/dist/apoptosis/index.js +32 -0
- package/dist/apoptosis/index.js.map +1 -0
- package/dist/apoptosis/semantic_grounding.d.ts +35 -0
- package/dist/apoptosis/semantic_grounding.d.ts.map +1 -0
- package/dist/apoptosis/semantic_grounding.js +117 -0
- package/dist/apoptosis/semantic_grounding.js.map +1 -0
- package/dist/apoptosis/temporal_consistency.d.ts +32 -0
- package/dist/apoptosis/temporal_consistency.d.ts.map +1 -0
- package/dist/apoptosis/temporal_consistency.js +127 -0
- package/dist/apoptosis/temporal_consistency.js.map +1 -0
- package/dist/apoptosis/witnesses.d.ts +66 -0
- package/dist/apoptosis/witnesses.d.ts.map +1 -0
- package/dist/apoptosis/witnesses.js +381 -0
- package/dist/apoptosis/witnesses.js.map +1 -0
- package/dist/embedder_autodiagnose.d.ts +64 -0
- package/dist/embedder_autodiagnose.d.ts.map +1 -0
- package/dist/embedder_autodiagnose.js +153 -0
- package/dist/embedder_autodiagnose.js.map +1 -0
- package/dist/embedder_autodiagnose.test.d.ts +5 -0
- package/dist/embedder_autodiagnose.test.d.ts.map +1 -0
- package/dist/embedder_autodiagnose.test.js +101 -0
- package/dist/embedder_autodiagnose.test.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/powers/p6_live.d.ts +43 -0
- package/dist/powers/p6_live.d.ts.map +1 -0
- package/dist/powers/p6_live.js +154 -0
- package/dist/powers/p6_live.js.map +1 -0
- package/dist/powers/p7_shadow.d.ts +37 -0
- package/dist/powers/p7_shadow.d.ts.map +1 -0
- package/dist/powers/p7_shadow.js +112 -0
- package/dist/powers/p7_shadow.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.65.0 -- APOPTOSIS L2: SEMANTIC GROUNDING.
|
|
3
|
+
*
|
|
4
|
+
* The claim must be semantically close to the code it references.
|
|
5
|
+
* Even if every named identifier exists (W1+W2 pass), the claim can
|
|
6
|
+
* still be a lie if its meaning has no embedding-space overlap with
|
|
7
|
+
* the cited code.
|
|
8
|
+
*
|
|
9
|
+
* Example: "auth.ts implements bcrypt hashing"
|
|
10
|
+
* - W1 passes (auth.ts exists)
|
|
11
|
+
* - W2 passes (no symbols required)
|
|
12
|
+
* - But auth.ts contains argon2, not bcrypt
|
|
13
|
+
* - L2 cosine(claim, file) = 0.21 (low) -> ALERT
|
|
14
|
+
*
|
|
15
|
+
* No actual embedder is required at minimum: we use a deterministic
|
|
16
|
+
* token-Jaccard fallback that's 80% as good for short claims. If the
|
|
17
|
+
* caller hands us a real embedder it's used instead.
|
|
18
|
+
*/
|
|
19
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
20
|
+
import { join } from "node:path";
|
|
21
|
+
function tokens(s) {
|
|
22
|
+
return new Set(s.toLowerCase()
|
|
23
|
+
.replace(/[^a-z0-9_\s]/g, " ")
|
|
24
|
+
.split(/\s+/)
|
|
25
|
+
.filter((t) => t.length >= 3 && !STOPWORDS.has(t)));
|
|
26
|
+
}
|
|
27
|
+
const STOPWORDS = new Set([
|
|
28
|
+
"the", "and", "for", "with", "this", "that", "from", "into", "when", "then", "else",
|
|
29
|
+
"function", "const", "var", "let", "true", "false", "null", "return", "import", "export",
|
|
30
|
+
"type", "interface", "class", "public", "private", "static", "async", "await", "would", "should",
|
|
31
|
+
"could", "have", "has", "had", "was", "were", "are", "but", "not", "any", "all", "use", "uses",
|
|
32
|
+
"used", "very", "some", "more", "less", "than", "such", "what", "which", "where", "while",
|
|
33
|
+
]);
|
|
34
|
+
function jaccard(a, b) {
|
|
35
|
+
if (a.size === 0 || b.size === 0)
|
|
36
|
+
return 0;
|
|
37
|
+
let inter = 0;
|
|
38
|
+
for (const x of a)
|
|
39
|
+
if (b.has(x))
|
|
40
|
+
inter += 1;
|
|
41
|
+
const union = a.size + b.size - inter;
|
|
42
|
+
return union === 0 ? 0 : inter / union;
|
|
43
|
+
}
|
|
44
|
+
/** Cosine on bag-of-words count vectors. Token-Jaccard is the default
|
|
45
|
+
* fallback for code-vs-claim. */
|
|
46
|
+
function tfCosine(claimTokens, docTokens) {
|
|
47
|
+
let dot = 0, na = 0, nb = 0;
|
|
48
|
+
for (const [t, c] of claimTokens) {
|
|
49
|
+
na += c * c;
|
|
50
|
+
if (docTokens.has(t))
|
|
51
|
+
dot += c * docTokens.get(t);
|
|
52
|
+
}
|
|
53
|
+
for (const [, c] of docTokens)
|
|
54
|
+
nb += c * c;
|
|
55
|
+
if (na === 0 || nb === 0)
|
|
56
|
+
return 0;
|
|
57
|
+
return dot / Math.sqrt(na * nb);
|
|
58
|
+
}
|
|
59
|
+
function bagOfWords(s) {
|
|
60
|
+
const out = new Map();
|
|
61
|
+
for (const t of s.toLowerCase().replace(/[^a-z0-9_\s]/g, " ").split(/\s+/)) {
|
|
62
|
+
if (t.length < 3 || STOPWORDS.has(t))
|
|
63
|
+
continue;
|
|
64
|
+
out.set(t, (out.get(t) ?? 0) + 1);
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/** Score the semantic grounding of `claim` against named paths. */
|
|
69
|
+
export function semanticGround(repoRoot, claim, paths, opts) {
|
|
70
|
+
const t0 = Date.now();
|
|
71
|
+
const threshold = opts?.threshold ?? 0.06; // TF-cosine on prose-vs-code naturally low
|
|
72
|
+
const minClaimTokens = opts?.minTokens ?? 3;
|
|
73
|
+
if (paths.length === 0) {
|
|
74
|
+
return { score: 0, verdict: "INAPPLICABLE", filesUsed: [], detail: "No paths to ground against.", ms: Date.now() - t0 };
|
|
75
|
+
}
|
|
76
|
+
const claimToks = bagOfWords(claim);
|
|
77
|
+
if (claimToks.size < minClaimTokens) {
|
|
78
|
+
return { score: 0, verdict: "INAPPLICABLE", filesUsed: [], detail: "Claim too short for semantic grounding.", ms: Date.now() - t0 };
|
|
79
|
+
}
|
|
80
|
+
const filesUsed = [];
|
|
81
|
+
let bestScore = 0;
|
|
82
|
+
for (const p of paths) {
|
|
83
|
+
const abs = p.startsWith("/") || /^[A-Z]:/.test(p) ? p : join(repoRoot, p);
|
|
84
|
+
if (!existsSync(abs))
|
|
85
|
+
continue;
|
|
86
|
+
let content = "";
|
|
87
|
+
try {
|
|
88
|
+
content = readFileSync(abs, "utf8");
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
filesUsed.push(p);
|
|
94
|
+
// Use first ~10KB of file to bound cost.
|
|
95
|
+
const docToks = bagOfWords(content.slice(0, 10000));
|
|
96
|
+
// Augment with Jaccard for robustness on short claims.
|
|
97
|
+
const cos = tfCosine(claimToks, docToks);
|
|
98
|
+
const jac = jaccard(tokens(claim), tokens(content.slice(0, 10000)));
|
|
99
|
+
const score = Math.max(cos, jac * 0.5);
|
|
100
|
+
if (score > bestScore)
|
|
101
|
+
bestScore = score;
|
|
102
|
+
}
|
|
103
|
+
if (filesUsed.length === 0) {
|
|
104
|
+
return { score: 0, verdict: "ALERT", filesUsed: [], detail: "None of the claimed paths exist; cannot ground semantically.", ms: Date.now() - t0 };
|
|
105
|
+
}
|
|
106
|
+
const verdict = bestScore >= threshold ? "GROUNDED" : "ALERT";
|
|
107
|
+
return {
|
|
108
|
+
score: bestScore,
|
|
109
|
+
verdict,
|
|
110
|
+
filesUsed,
|
|
111
|
+
detail: verdict === "GROUNDED"
|
|
112
|
+
? `Best semantic score ${bestScore.toFixed(3)} >= threshold ${threshold} across ${filesUsed.length} file(s).`
|
|
113
|
+
: `Best semantic score ${bestScore.toFixed(3)} < threshold ${threshold}; claim appears decorative.`,
|
|
114
|
+
ms: Date.now() - t0,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=semantic_grounding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic_grounding.js","sourceRoot":"","sources":["../../src/apoptosis/semantic_grounding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.65.0 -- APOPTOSIS L4: TEMPORAL CONSISTENCY.
|
|
3
|
+
*
|
|
4
|
+
* Today's claim is diffed against what the SAME vendor has said about
|
|
5
|
+
* the SAME thing in past sessions. Contradictions = at least one lie.
|
|
6
|
+
*
|
|
7
|
+
* today (claude): "auth.ts uses bcrypt"
|
|
8
|
+
* yesterday (claude): "auth.ts uses argon2"
|
|
9
|
+
* contradiction -> at least 1 of 2 is fabricated -> ALERT
|
|
10
|
+
*
|
|
11
|
+
* Anchors on .mneme/ai-souls/<vendor>.json sessions. Token-Jaccard
|
|
12
|
+
* detects topic overlap; antonym map detects direct contradictions.
|
|
13
|
+
*/
|
|
14
|
+
export interface TemporalReport {
|
|
15
|
+
verdict: "GROUNDED" | "ALERT" | "INAPPLICABLE";
|
|
16
|
+
/** Past claims about the same topic. */
|
|
17
|
+
pastClaims: Array<{
|
|
18
|
+
vendor: string;
|
|
19
|
+
ts?: string;
|
|
20
|
+
text: string;
|
|
21
|
+
topicOverlap: number;
|
|
22
|
+
contradicts: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
detail: string;
|
|
25
|
+
ms: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function temporalConsistency(repoRoot: string, claim: string, opts?: {
|
|
28
|
+
topicThreshold?: number;
|
|
29
|
+
vendor?: string;
|
|
30
|
+
maxLookback?: number;
|
|
31
|
+
}): TemporalReport;
|
|
32
|
+
//# sourceMappingURL=temporal_consistency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal_consistency.d.ts","sourceRoot":"","sources":["../../src/apoptosis/temporal_consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;IAC/C,wCAAwC;IACxC,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7G,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAuED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACxE,cAAc,CA6ChB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.65.0 -- APOPTOSIS L4: TEMPORAL CONSISTENCY.
|
|
3
|
+
*
|
|
4
|
+
* Today's claim is diffed against what the SAME vendor has said about
|
|
5
|
+
* the SAME thing in past sessions. Contradictions = at least one lie.
|
|
6
|
+
*
|
|
7
|
+
* today (claude): "auth.ts uses bcrypt"
|
|
8
|
+
* yesterday (claude): "auth.ts uses argon2"
|
|
9
|
+
* contradiction -> at least 1 of 2 is fabricated -> ALERT
|
|
10
|
+
*
|
|
11
|
+
* Anchors on .mneme/ai-souls/<vendor>.json sessions. Token-Jaccard
|
|
12
|
+
* detects topic overlap; antonym map detects direct contradictions.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
// Common ANTONYM PAIRS for contradiction detection.
|
|
17
|
+
const ANTONYMS = [
|
|
18
|
+
[/\bbcrypt\b/i, /\b(argon2|scrypt|pbkdf2|sha[12]?56?|md5)\b/i],
|
|
19
|
+
[/\bargon2\b/i, /\bbcrypt\b/i],
|
|
20
|
+
[/\bsynchronous\b/i, /\basync(?:hronous)?\b/i],
|
|
21
|
+
[/\bcjs\b/i, /\besm\b/i],
|
|
22
|
+
[/\bcommonjs\b/i, /\b(esmodule|esm)\b/i],
|
|
23
|
+
[/\bencrypted\b/i, /\b(unencrypted|plaintext|cleartext)\b/i],
|
|
24
|
+
[/\b(plaintext|cleartext|unencrypted)\b/i, /\bencrypted\b/i],
|
|
25
|
+
[/\benabled\b/i, /\bdisabled\b/i],
|
|
26
|
+
[/\b(always|never)\b/i, /\b(never|always|sometimes)\b/i],
|
|
27
|
+
[/\bjwt\b/i, /\bsession[- ]?cookie\b/i],
|
|
28
|
+
[/\b(included|added|present)\b/i, /\b(removed|deleted|excluded|absent)\b/i],
|
|
29
|
+
[/\bv1\.5[0-9]\b/i, /\bv1\.[123][0-9]\b/i],
|
|
30
|
+
];
|
|
31
|
+
function readAllSouls(repoRoot) {
|
|
32
|
+
const dir = join(repoRoot, ".mneme/ai-souls");
|
|
33
|
+
if (!existsSync(dir))
|
|
34
|
+
return [];
|
|
35
|
+
const out = [];
|
|
36
|
+
let entries = [];
|
|
37
|
+
try {
|
|
38
|
+
entries = readdirSync(dir);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
for (const e of entries) {
|
|
44
|
+
if (!e.endsWith(".json"))
|
|
45
|
+
continue;
|
|
46
|
+
try {
|
|
47
|
+
const j = JSON.parse(readFileSync(join(dir, e), "utf8"));
|
|
48
|
+
const vendor = j.vendor ?? e.replace(/\.json$/, "");
|
|
49
|
+
out.push({ vendor, sessions: j.sessions ?? [] });
|
|
50
|
+
}
|
|
51
|
+
catch { /* */ }
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
function tokens(s) {
|
|
56
|
+
return new Set((s.toLowerCase().match(/[a-z][a-z0-9_-]+/g) ?? []).filter((t) => t.length >= 4));
|
|
57
|
+
}
|
|
58
|
+
function jaccard(a, b) {
|
|
59
|
+
if (a.size === 0 || b.size === 0)
|
|
60
|
+
return 0;
|
|
61
|
+
let inter = 0;
|
|
62
|
+
for (const x of a)
|
|
63
|
+
if (b.has(x))
|
|
64
|
+
inter += 1;
|
|
65
|
+
const union = a.size + b.size - inter;
|
|
66
|
+
return union === 0 ? 0 : inter / union;
|
|
67
|
+
}
|
|
68
|
+
function isContradiction(a, b) {
|
|
69
|
+
for (const [reA, reB] of ANTONYMS) {
|
|
70
|
+
if (reA.test(a) && reB.test(b))
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
export function temporalConsistency(repoRoot, claim, opts) {
|
|
76
|
+
const t0 = Date.now();
|
|
77
|
+
const topicThreshold = opts?.topicThreshold ?? 0.2;
|
|
78
|
+
const maxLookback = opts?.maxLookback ?? 200;
|
|
79
|
+
const souls = readAllSouls(repoRoot);
|
|
80
|
+
if (souls.length === 0) {
|
|
81
|
+
return {
|
|
82
|
+
verdict: "INAPPLICABLE",
|
|
83
|
+
pastClaims: [],
|
|
84
|
+
detail: "No ai-souls records; no temporal history.",
|
|
85
|
+
ms: Date.now() - t0,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const claimToks = tokens(claim);
|
|
89
|
+
const candidates = [];
|
|
90
|
+
for (const { vendor, sessions } of souls) {
|
|
91
|
+
if (opts?.vendor && vendor !== opts.vendor)
|
|
92
|
+
continue;
|
|
93
|
+
let scanned = 0;
|
|
94
|
+
for (const s of sessions) {
|
|
95
|
+
if (scanned >= maxLookback)
|
|
96
|
+
break;
|
|
97
|
+
scanned += 1;
|
|
98
|
+
const past = s.finalAnswer ?? s.text ?? s.prompt ?? s.claim ?? s.reason ?? "";
|
|
99
|
+
if (!past || past.length < 8)
|
|
100
|
+
continue;
|
|
101
|
+
const overlap = jaccard(claimToks, tokens(past));
|
|
102
|
+
if (overlap < topicThreshold)
|
|
103
|
+
continue;
|
|
104
|
+
const contradicts = isContradiction(claim, past) || isContradiction(past, claim);
|
|
105
|
+
candidates.push({ vendor, ts: s.ts, text: past.slice(0, 200), topicOverlap: overlap, contradicts });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const contradictions = candidates.filter((c) => c.contradicts);
|
|
109
|
+
let verdict;
|
|
110
|
+
if (candidates.length === 0)
|
|
111
|
+
verdict = "INAPPLICABLE";
|
|
112
|
+
else if (contradictions.length > 0)
|
|
113
|
+
verdict = "ALERT";
|
|
114
|
+
else
|
|
115
|
+
verdict = "GROUNDED";
|
|
116
|
+
return {
|
|
117
|
+
verdict,
|
|
118
|
+
pastClaims: candidates.slice(0, 5),
|
|
119
|
+
detail: verdict === "ALERT"
|
|
120
|
+
? `${contradictions.length} contradiction(s) detected vs prior claims by same/cross vendor.`
|
|
121
|
+
: verdict === "INAPPLICABLE"
|
|
122
|
+
? `No prior topic-overlapping claim found.`
|
|
123
|
+
: `${candidates.length} prior claim(s) on the same topic; no contradictions.`,
|
|
124
|
+
ms: Date.now() - t0,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=temporal_consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal_consistency.js","sourceRoot":"","sources":["../../src/apoptosis/temporal_consistency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.65.0 -- APOPTOSIS L1: 5-WITNESS FUSION.
|
|
3
|
+
*
|
|
4
|
+
* Forensic-grade grounding. Every AI claim is broken into 5
|
|
5
|
+
* independent oracles that each verify a separate facet of reality.
|
|
6
|
+
* Break ANY one → the witness fails and APOPTOSIS escalates.
|
|
7
|
+
*
|
|
8
|
+
* W1 path-exists claim names a file -> does it exist on disk?
|
|
9
|
+
* W2 symbol-exists claim names a symbol -> does it appear in source?
|
|
10
|
+
* W3 type-shape-matches claim names a return/arg type -> matches tsc?
|
|
11
|
+
* W4 git-history-consistent claim names a version/SHA -> tag walk agrees?
|
|
12
|
+
* W5 behavior-cited claim names behavior -> at least one test mentions it?
|
|
13
|
+
*
|
|
14
|
+
* This is the floor. Layers 2-7 add semantic, temporal, statistical,
|
|
15
|
+
* fractal, and cascade-level checks.
|
|
16
|
+
*
|
|
17
|
+
* Pure read. No side effects. Returns per-witness verdict + overall.
|
|
18
|
+
*/
|
|
19
|
+
export type WitnessId = "W1-path" | "W2-symbol" | "W3-type" | "W4-history" | "W5-behavior";
|
|
20
|
+
export type WitnessVerdict = "GROUNDED" | "ALERT" | "INAPPLICABLE";
|
|
21
|
+
export interface WitnessReport {
|
|
22
|
+
id: WitnessId;
|
|
23
|
+
verdict: WitnessVerdict;
|
|
24
|
+
/** Plain-English why. */
|
|
25
|
+
detail: string;
|
|
26
|
+
/** Optional evidence the witness consulted. */
|
|
27
|
+
evidence?: string[];
|
|
28
|
+
/** Time spent in this witness, ms. */
|
|
29
|
+
ms: number;
|
|
30
|
+
}
|
|
31
|
+
export interface ClaimFacets {
|
|
32
|
+
/** Raw claim text. */
|
|
33
|
+
text: string;
|
|
34
|
+
/** Files the claim names (relative or absolute paths). */
|
|
35
|
+
paths?: string[];
|
|
36
|
+
/** Identifiers the claim names (functions, classes, vars). */
|
|
37
|
+
symbols?: string[];
|
|
38
|
+
/** Type names + expected shape (e.g. "function foo returns User"). */
|
|
39
|
+
typeAssertions?: Array<{
|
|
40
|
+
symbol: string;
|
|
41
|
+
expectedReturn?: string;
|
|
42
|
+
expectedArgs?: string[];
|
|
43
|
+
}>;
|
|
44
|
+
/** Version / tag / SHA references. */
|
|
45
|
+
versionRefs?: Array<{
|
|
46
|
+
kind: "tag" | "sha" | "version";
|
|
47
|
+
value: string;
|
|
48
|
+
}>;
|
|
49
|
+
/** Behavioral / domain phrases (e.g. "handles auth", "retries on 5xx"). */
|
|
50
|
+
behaviors?: string[];
|
|
51
|
+
}
|
|
52
|
+
export interface FiveWitnessReport {
|
|
53
|
+
witnesses: WitnessReport[];
|
|
54
|
+
/** ALERT count. */
|
|
55
|
+
alerts: number;
|
|
56
|
+
/** All-grounded? */
|
|
57
|
+
unanimous: boolean;
|
|
58
|
+
/** Composite confidence in [0, 1]. */
|
|
59
|
+
confidence: number;
|
|
60
|
+
/** Total elapsed ms across all 5. */
|
|
61
|
+
ms: number;
|
|
62
|
+
}
|
|
63
|
+
/** Parse free-form claim text into structured facets. */
|
|
64
|
+
export declare function extractFacets(text: string): ClaimFacets;
|
|
65
|
+
export declare function fiveWitness(repoRoot: string, claimText: string, knownFacets?: Partial<ClaimFacets>): FiveWitnessReport;
|
|
66
|
+
//# sourceMappingURL=witnesses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"witnesses.d.ts","sourceRoot":"","sources":["../../src/apoptosis/witnesses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;AAE3F,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,SAAS,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sEAAsE;IACtE,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC7F,sCAAsC;IACtC,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;CACZ;AAYD,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CA4BvD;AA+OD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,iBAAiB,CAsBtH"}
|