@mneme-ai/core 1.62.0 → 1.64.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 (69) hide show
  1. package/dist/cognitive/cognitive.test.d.ts +10 -0
  2. package/dist/cognitive/cognitive.test.d.ts.map +1 -0
  3. package/dist/cognitive/cognitive.test.js +485 -0
  4. package/dist/cognitive/cognitive.test.js.map +1 -0
  5. package/dist/cognitive/consolidation.d.ts +73 -0
  6. package/dist/cognitive/consolidation.d.ts.map +1 -0
  7. package/dist/cognitive/consolidation.js +170 -0
  8. package/dist/cognitive/consolidation.js.map +1 -0
  9. package/dist/cognitive/counterfactual.d.ts +73 -0
  10. package/dist/cognitive/counterfactual.d.ts.map +1 -0
  11. package/dist/cognitive/counterfactual.js +184 -0
  12. package/dist/cognitive/counterfactual.js.map +1 -0
  13. package/dist/cognitive/curiosity.d.ts +37 -0
  14. package/dist/cognitive/curiosity.d.ts.map +1 -0
  15. package/dist/cognitive/curiosity.js +191 -0
  16. package/dist/cognitive/curiosity.js.map +1 -0
  17. package/dist/cognitive/debate.d.ts +48 -0
  18. package/dist/cognitive/debate.d.ts.map +1 -0
  19. package/dist/cognitive/debate.js +223 -0
  20. package/dist/cognitive/debate.js.map +1 -0
  21. package/dist/cognitive/decision_atom.d.ts +119 -0
  22. package/dist/cognitive/decision_atom.d.ts.map +1 -0
  23. package/dist/cognitive/decision_atom.js +187 -0
  24. package/dist/cognitive/decision_atom.js.map +1 -0
  25. package/dist/cognitive/index.d.ts +31 -0
  26. package/dist/cognitive/index.d.ts.map +1 -0
  27. package/dist/cognitive/index.js +24 -0
  28. package/dist/cognitive/index.js.map +1 -0
  29. package/dist/cognitive/theory_of_mind.d.ts +56 -0
  30. package/dist/cognitive/theory_of_mind.d.ts.map +1 -0
  31. package/dist/cognitive/theory_of_mind.js +212 -0
  32. package/dist/cognitive/theory_of_mind.js.map +1 -0
  33. package/dist/cognitive/tree_of_thought.d.ts +55 -0
  34. package/dist/cognitive/tree_of_thought.d.ts.map +1 -0
  35. package/dist/cognitive/tree_of_thought.js +134 -0
  36. package/dist/cognitive/tree_of_thought.js.map +1 -0
  37. package/dist/index.d.ts +5 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +21 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/innerlife/ai_teacher.d.ts +83 -0
  42. package/dist/innerlife/ai_teacher.d.ts.map +1 -0
  43. package/dist/innerlife/ai_teacher.js +152 -0
  44. package/dist/innerlife/ai_teacher.js.map +1 -0
  45. package/dist/innerlife/innerlife.d.ts +104 -0
  46. package/dist/innerlife/innerlife.d.ts.map +1 -0
  47. package/dist/innerlife/innerlife.js +228 -0
  48. package/dist/innerlife/innerlife.js.map +1 -0
  49. package/dist/innerlife/innerlife.test.d.ts +5 -0
  50. package/dist/innerlife/innerlife.test.d.ts.map +1 -0
  51. package/dist/innerlife/innerlife.test.js +219 -0
  52. package/dist/innerlife/innerlife.test.js.map +1 -0
  53. package/dist/metamorphosis/metamorphosis.d.ts +116 -0
  54. package/dist/metamorphosis/metamorphosis.d.ts.map +1 -0
  55. package/dist/metamorphosis/metamorphosis.js +278 -0
  56. package/dist/metamorphosis/metamorphosis.js.map +1 -0
  57. package/dist/metamorphosis/metamorphosis.test.d.ts +5 -0
  58. package/dist/metamorphosis/metamorphosis.test.d.ts.map +1 -0
  59. package/dist/metamorphosis/metamorphosis.test.js +176 -0
  60. package/dist/metamorphosis/metamorphosis.test.js.map +1 -0
  61. package/dist/tribunal/tribunal.d.ts +111 -0
  62. package/dist/tribunal/tribunal.d.ts.map +1 -0
  63. package/dist/tribunal/tribunal.js +294 -0
  64. package/dist/tribunal/tribunal.js.map +1 -0
  65. package/dist/tribunal/tribunal.test.d.ts +5 -0
  66. package/dist/tribunal/tribunal.test.d.ts.map +1 -0
  67. package/dist/tribunal/tribunal.test.js +184 -0
  68. package/dist/tribunal/tribunal.test.js.map +1 -0
  69. package/package.json +1 -1
@@ -0,0 +1,191 @@
1
+ /**
2
+ * v1.64.0 -- COGNITIVE LAYER 3: CURIOSITY ENGINE.
3
+ *
4
+ * Daemon-idle gap detector. Scan the wisdom stack, find areas where
5
+ * Mneme has DATA but no DEFENSE (commits about X but no vaccines)
6
+ * or VICE VERSA. Generate test claims that probe the gap. Either:
7
+ * - the claim grounds (Mneme adds it to its known-truths)
8
+ * - the claim refutes (Mneme emits a new vaccine)
9
+ *
10
+ * Either way: a gap closes. Mneme gets smarter on its own.
11
+ *
12
+ * NO LLM. Heuristic gap scan over .mneme/squadron + .mneme/forecast +
13
+ * .mneme/whisper.
14
+ */
15
+ import { existsSync, readFileSync, mkdirSync, appendFileSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ const COGNITIVE_DIR = ".mneme/cognitive";
18
+ function tokenize(s) {
19
+ return Array.from(new Set((s.toLowerCase().match(/[a-z][a-z0-9_-]+/g) ?? []).filter((t) => t.length >= 4)));
20
+ }
21
+ function readRecentCommitSubjects(repoRoot, max = 100) {
22
+ try {
23
+ const { execSync } = require("node:child_process");
24
+ const r = execSync(`git -C "${repoRoot}" log --max-count=${max} --pretty=format:%s`, {
25
+ encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 3000,
26
+ });
27
+ return r.split("\n").filter(Boolean);
28
+ }
29
+ catch {
30
+ return [];
31
+ }
32
+ }
33
+ function readVaccineSamples(repoRoot) {
34
+ const p = join(repoRoot, ".mneme/squadron/lie-vaccines.jsonl");
35
+ if (!existsSync(p))
36
+ return [];
37
+ try {
38
+ return readFileSync(p, "utf8").split("\n").filter(Boolean).map((l) => {
39
+ try {
40
+ return JSON.parse(l).sample ?? "";
41
+ }
42
+ catch {
43
+ return "";
44
+ }
45
+ }).filter(Boolean);
46
+ }
47
+ catch {
48
+ return [];
49
+ }
50
+ }
51
+ function readForecastClaims(repoRoot) {
52
+ const p = join(repoRoot, ".mneme/forecast/forecasts.jsonl");
53
+ if (!existsSync(p))
54
+ return [];
55
+ try {
56
+ return readFileSync(p, "utf8").split("\n").filter(Boolean).map((l) => {
57
+ try {
58
+ return JSON.parse(l).claim ?? "";
59
+ }
60
+ catch {
61
+ return "";
62
+ }
63
+ }).filter(Boolean);
64
+ }
65
+ catch {
66
+ return [];
67
+ }
68
+ }
69
+ /** Find the top areas with many commits but no vaccines defending them. */
70
+ function findCommitGaps(repoRoot) {
71
+ const subjects = readRecentCommitSubjects(repoRoot, 100);
72
+ const vaccines = readVaccineSamples(repoRoot);
73
+ const vaccineTokens = new Set();
74
+ for (const v of vaccines)
75
+ for (const t of tokenize(v))
76
+ vaccineTokens.add(t);
77
+ const commitTopics = new Map();
78
+ for (const subj of subjects) {
79
+ for (const t of tokenize(subj)) {
80
+ if (t.length < 5)
81
+ continue;
82
+ commitTopics.set(t, (commitTopics.get(t) ?? 0) + 1);
83
+ }
84
+ }
85
+ const gaps = [];
86
+ const sorted = [...commitTopics.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5);
87
+ for (const [topic, count] of sorted) {
88
+ if (vaccineTokens.has(topic))
89
+ continue;
90
+ const priority = Math.min(1, count / 10);
91
+ gaps.push({
92
+ id: `gap-commit-${topic.slice(0, 16)}`,
93
+ description: `${count} recent commit(s) about "${topic}" but no vaccine defending against fab claims in this area`,
94
+ source: "commit-no-vaccine",
95
+ suggestedProbe: `is "${topic}" in this codebase implemented correctly`,
96
+ priority,
97
+ });
98
+ }
99
+ return gaps;
100
+ }
101
+ /** Find forecasts that have only ONE sample (no trend yet). */
102
+ function findForecastGaps(repoRoot) {
103
+ const claims = readForecastClaims(repoRoot);
104
+ const counts = new Map();
105
+ for (const c of claims) {
106
+ const key = tokenize(c).slice(0, 3).join("-");
107
+ if (!key)
108
+ continue;
109
+ counts.set(key, (counts.get(key) ?? 0) + 1);
110
+ }
111
+ const gaps = [];
112
+ for (const [key, count] of counts) {
113
+ if (count >= 2)
114
+ continue;
115
+ gaps.push({
116
+ id: `gap-forecast-${key.slice(0, 16)}`,
117
+ description: `Only ${count} forecast(s) recorded for area "${key}"; cannot compute trend yet`,
118
+ source: "forecast-no-trend",
119
+ suggestedProbe: `run a second forecast on a claim mentioning "${key}"`,
120
+ priority: 0.3,
121
+ });
122
+ }
123
+ return gaps.slice(0, 5);
124
+ }
125
+ /** Detect stale areas: high commit-count topics with no recent forecasts. */
126
+ function findStaleAreas(repoRoot) {
127
+ const subjects = readRecentCommitSubjects(repoRoot, 200);
128
+ const forecastClaims = readForecastClaims(repoRoot);
129
+ const forecastTokens = new Set();
130
+ for (const c of forecastClaims)
131
+ for (const t of tokenize(c))
132
+ forecastTokens.add(t);
133
+ const commitTopics = new Map();
134
+ for (const subj of subjects) {
135
+ for (const t of tokenize(subj)) {
136
+ if (t.length < 6)
137
+ continue;
138
+ commitTopics.set(t, (commitTopics.get(t) ?? 0) + 1);
139
+ }
140
+ }
141
+ const gaps = [];
142
+ const sorted = [...commitTopics.entries()].sort((a, b) => b[1] - a[1]).slice(0, 3);
143
+ for (const [topic, count] of sorted) {
144
+ if (forecastTokens.has(topic) || count < 3)
145
+ continue;
146
+ gaps.push({
147
+ id: `gap-stale-${topic.slice(0, 16)}`,
148
+ description: `Active area "${topic}" (${count} commits) has no forecast coverage`,
149
+ source: "stale-area",
150
+ suggestedProbe: `forecast regression risk for next change touching "${topic}"`,
151
+ priority: Math.min(1, count / 8),
152
+ });
153
+ }
154
+ return gaps;
155
+ }
156
+ /** Scan all wisdom layers for gaps. */
157
+ export function scanGaps(repoRoot) {
158
+ const allGaps = [
159
+ ...findCommitGaps(repoRoot),
160
+ ...findForecastGaps(repoRoot),
161
+ ...findStaleAreas(repoRoot),
162
+ ];
163
+ // Dedup by id.
164
+ const seen = new Set();
165
+ const unique = allGaps.filter((g) => {
166
+ if (seen.has(g.id))
167
+ return false;
168
+ seen.add(g.id);
169
+ return true;
170
+ });
171
+ unique.sort((a, b) => b.priority - a.priority);
172
+ return {
173
+ gaps: unique,
174
+ scannedAt: new Date().toISOString(),
175
+ totalGaps: unique.length,
176
+ highPriority: unique.filter((g) => g.priority >= 0.6).length,
177
+ };
178
+ }
179
+ /** Log a probe that was actually executed in response to a gap. */
180
+ export function logProbeExecution(repoRoot, gapId, outcome) {
181
+ try {
182
+ const dir = join(repoRoot, COGNITIVE_DIR, "curiosity");
183
+ if (!existsSync(dir))
184
+ mkdirSync(dir, { recursive: true });
185
+ appendFileSync(join(dir, "probes.jsonl"), JSON.stringify({
186
+ ts: new Date().toISOString(), gapId, outcome,
187
+ }) + "\n", "utf8");
188
+ }
189
+ catch { /* */ }
190
+ }
191
+ //# sourceMappingURL=curiosity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curiosity.js","sourceRoot":"","sources":["../../src/cognitive/curiosity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * v1.64.0 -- COGNITIVE LAYER 6: INTERNAL DEBATE.
3
+ *
4
+ * Before Mneme commits to a verdict, three internal voices argue:
5
+ *
6
+ * SKEPTIC -- assumes the worst-case interpretation. Flags hidden
7
+ * assumptions, missing data, fab-shaped claims.
8
+ * (Anchored on vaccine bank + ACGV history.)
9
+ *
10
+ * OPTIMIST -- assumes the best-case interpretation. Flags upside
11
+ * scenarios, growth-event triggers, why-not-just-ship.
12
+ * (Anchored on positive lessons + recent successes.)
13
+ *
14
+ * REALIST -- weighs both sides + the actual evidence. Cites
15
+ * reactor cost estimate + game-theory fairness + the
16
+ * forecast trend. Issues the synthesis verdict.
17
+ *
18
+ * Each voice gets a turn, then the realist arbitrates with a vote
19
+ * count of "skeptic-points" vs "optimist-points" actually grounded
20
+ * in evidence. The arbiter's verdict has a confidence score.
21
+ *
22
+ * NO LLM. Heuristics over claim text + repo state. Deterministic.
23
+ * The point isn't to simulate humans -- it's to force Mneme to
24
+ * spend tokens on the OPPOSITE side before committing.
25
+ */
26
+ export type Voice = "skeptic" | "optimist" | "realist";
27
+ export interface DebateTurn {
28
+ voice: Voice;
29
+ /** What the voice said. */
30
+ argument: string;
31
+ /** Specific evidence cited (file paths, commit subjects, vaccine ids, etc.). */
32
+ evidence: string[];
33
+ /** Confidence the voice has in its own argument 0..1. */
34
+ selfConfidence: number;
35
+ }
36
+ export interface DebateResult {
37
+ claim: string;
38
+ turns: DebateTurn[];
39
+ verdict: "AGREE" | "DISAGREE" | "INCONCLUSIVE";
40
+ /** Confidence of the realist's synthesis in [0, 1]. */
41
+ arbiterConfidence: number;
42
+ /** Plain-English explanation of the synthesis. */
43
+ reasoning: string;
44
+ }
45
+ export declare function debate(repoRoot: string, claim: string, opts?: {
46
+ persist?: boolean;
47
+ }): DebateResult;
48
+ //# sourceMappingURL=debate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debate.d.ts","sourceRoot":"","sources":["../../src/cognitive/debate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC/C,uDAAuD;IACvD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;CACnB;AAsKD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,YAAY,CA2BlG"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * v1.64.0 -- COGNITIVE LAYER 6: INTERNAL DEBATE.
3
+ *
4
+ * Before Mneme commits to a verdict, three internal voices argue:
5
+ *
6
+ * SKEPTIC -- assumes the worst-case interpretation. Flags hidden
7
+ * assumptions, missing data, fab-shaped claims.
8
+ * (Anchored on vaccine bank + ACGV history.)
9
+ *
10
+ * OPTIMIST -- assumes the best-case interpretation. Flags upside
11
+ * scenarios, growth-event triggers, why-not-just-ship.
12
+ * (Anchored on positive lessons + recent successes.)
13
+ *
14
+ * REALIST -- weighs both sides + the actual evidence. Cites
15
+ * reactor cost estimate + game-theory fairness + the
16
+ * forecast trend. Issues the synthesis verdict.
17
+ *
18
+ * Each voice gets a turn, then the realist arbitrates with a vote
19
+ * count of "skeptic-points" vs "optimist-points" actually grounded
20
+ * in evidence. The arbiter's verdict has a confidence score.
21
+ *
22
+ * NO LLM. Heuristics over claim text + repo state. Deterministic.
23
+ * The point isn't to simulate humans -- it's to force Mneme to
24
+ * spend tokens on the OPPOSITE side before committing.
25
+ */
26
+ import { existsSync, mkdirSync, appendFileSync, readFileSync } from "node:fs";
27
+ import { join } from "node:path";
28
+ const COGNITIVE_DIR = ".mneme/cognitive";
29
+ function readSignals(repoRoot) {
30
+ const out = { vaccines: [], lessons: [], recentSubjects: [], forecastClaims: [] };
31
+ // Vaccines
32
+ const vp = join(repoRoot, ".mneme/squadron/lie-vaccines.jsonl");
33
+ if (existsSync(vp)) {
34
+ try {
35
+ out.vaccines = readFileSync(vp, "utf8").split("\n").filter(Boolean).map((l) => {
36
+ try {
37
+ return JSON.parse(l).sample ?? "";
38
+ }
39
+ catch {
40
+ return "";
41
+ }
42
+ }).filter(Boolean);
43
+ }
44
+ catch { /* */ }
45
+ }
46
+ // Lessons
47
+ const np = join(repoRoot, ".mneme/nucleus.json");
48
+ if (existsSync(np)) {
49
+ try {
50
+ const j = JSON.parse(readFileSync(np, "utf8"));
51
+ out.lessons = (j.lessons ?? []).map((l) => l.text ?? "").filter(Boolean);
52
+ }
53
+ catch { /* */ }
54
+ }
55
+ // Forecasts
56
+ const fp = join(repoRoot, ".mneme/forecast/forecasts.jsonl");
57
+ if (existsSync(fp)) {
58
+ try {
59
+ out.forecastClaims = readFileSync(fp, "utf8").split("\n").filter(Boolean).map((l) => {
60
+ try {
61
+ return JSON.parse(l).claim ?? "";
62
+ }
63
+ catch {
64
+ return "";
65
+ }
66
+ }).filter(Boolean);
67
+ }
68
+ catch { /* */ }
69
+ }
70
+ // Recent commit subjects
71
+ try {
72
+ const { execSync } = require("node:child_process");
73
+ const r = execSync(`git -C "${repoRoot}" log --max-count=30 --pretty=format:%s`, {
74
+ encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 3000,
75
+ });
76
+ out.recentSubjects = r.split("\n").filter(Boolean);
77
+ }
78
+ catch { /* */ }
79
+ return out;
80
+ }
81
+ function tokenize(s) {
82
+ return new Set((s.toLowerCase().match(/[a-z][a-z0-9_-]+/g) ?? []).filter((t) => t.length >= 4));
83
+ }
84
+ function overlapCount(a, b) {
85
+ let n = 0;
86
+ for (const t of a)
87
+ if (b.has(t))
88
+ n += 1;
89
+ return n;
90
+ }
91
+ function runSkeptic(claim, sig) {
92
+ const claimTokens = tokenize(claim);
93
+ const evidence = [];
94
+ let points = 0;
95
+ // Vaccine matches = lies previously refuted = strong skeptic ammo.
96
+ for (const v of sig.vaccines) {
97
+ const vTokens = tokenize(v);
98
+ const hits = overlapCount(claimTokens, vTokens);
99
+ if (hits >= 2) {
100
+ evidence.push(`vaccine-match: "${v.slice(0, 60)}" (${hits} shared tokens)`);
101
+ points += hits;
102
+ }
103
+ }
104
+ // Fab-shaped triggers in the claim itself.
105
+ for (const trigger of ["always", "never", "guaranteed", "100%", "all", "impossible"]) {
106
+ if (claim.toLowerCase().includes(trigger)) {
107
+ evidence.push(`absolute-claim: "${trigger}" -- absolutes rarely survive scrutiny`);
108
+ points += 1;
109
+ }
110
+ }
111
+ // No supporting evidence in lessons.
112
+ let supportingLessons = 0;
113
+ for (const l of sig.lessons) {
114
+ if (overlapCount(claimTokens, tokenize(l)) >= 2)
115
+ supportingLessons += 1;
116
+ }
117
+ if (supportingLessons === 0 && sig.lessons.length > 0) {
118
+ evidence.push(`absence-of-evidence: 0 of ${sig.lessons.length} known lessons reinforce this`);
119
+ points += 1;
120
+ }
121
+ const argument = points > 0
122
+ ? `Caution: ${points} signal(s) suggest this claim resembles previously-refuted patterns or lacks supporting evidence.`
123
+ : `No vaccine or absolute-claim triggers; mild skepticism only.`;
124
+ const selfConfidence = Math.min(1, points / 5);
125
+ return { voice: "skeptic", argument, evidence, selfConfidence };
126
+ }
127
+ function runOptimist(claim, sig) {
128
+ const claimTokens = tokenize(claim);
129
+ const evidence = [];
130
+ let points = 0;
131
+ // Lessons that overlap with the claim = positive corroboration.
132
+ for (const l of sig.lessons.slice(0, 50)) {
133
+ const hits = overlapCount(claimTokens, tokenize(l));
134
+ if (hits >= 2) {
135
+ evidence.push(`lesson-overlap: "${l.slice(0, 60)}" (${hits} shared tokens)`);
136
+ points += 1;
137
+ }
138
+ }
139
+ // Recent commits = active work in this area.
140
+ let recentHits = 0;
141
+ for (const s of sig.recentSubjects) {
142
+ if (overlapCount(claimTokens, tokenize(s)) >= 2)
143
+ recentHits += 1;
144
+ }
145
+ if (recentHits > 0) {
146
+ evidence.push(`recent-activity: ${recentHits} recent commits touch this area`);
147
+ points += Math.min(3, recentHits);
148
+ }
149
+ // Forecast claims previously made = the team has been thinking about this.
150
+ for (const fc of sig.forecastClaims.slice(0, 20)) {
151
+ const hits = overlapCount(claimTokens, tokenize(fc));
152
+ if (hits >= 2) {
153
+ evidence.push(`forecast-precedent: "${fc.slice(0, 60)}" (${hits} shared tokens)`);
154
+ points += 1;
155
+ break;
156
+ }
157
+ }
158
+ const argument = points > 0
159
+ ? `Encouragement: ${points} signal(s) suggest momentum, prior wins, or active focus in this area.`
160
+ : `Cold start, but absence of refutation is not refutation.`;
161
+ const selfConfidence = Math.min(1, points / 5);
162
+ return { voice: "optimist", argument, evidence, selfConfidence };
163
+ }
164
+ function runRealist(claim, sig, skeptic, optimist) {
165
+ const skepPts = skeptic.selfConfidence;
166
+ const optPts = optimist.selfConfidence;
167
+ let verdict;
168
+ let arbiterConfidence;
169
+ let argument;
170
+ const evidence = [];
171
+ if (skepPts > optPts + 0.2) {
172
+ verdict = "DISAGREE";
173
+ arbiterConfidence = Math.min(1, skepPts);
174
+ argument = `Skeptic wins on evidence (${skepPts.toFixed(2)} vs ${optPts.toFixed(2)}). Claim does not pass.`;
175
+ evidence.push(...skeptic.evidence.slice(0, 3));
176
+ }
177
+ else if (optPts > skepPts + 0.2) {
178
+ verdict = "AGREE";
179
+ arbiterConfidence = Math.min(1, optPts);
180
+ argument = `Optimist wins on evidence (${optPts.toFixed(2)} vs ${skepPts.toFixed(2)}). Claim is consistent with what we know.`;
181
+ evidence.push(...optimist.evidence.slice(0, 3));
182
+ }
183
+ else {
184
+ verdict = "INCONCLUSIVE";
185
+ arbiterConfidence = 0.3 + Math.min(0.2, (skepPts + optPts) / 4);
186
+ argument = `Neither side decisive (skeptic ${skepPts.toFixed(2)}, optimist ${optPts.toFixed(2)}). Need more evidence before acting.`;
187
+ evidence.push(...skeptic.evidence.slice(0, 2), ...optimist.evidence.slice(0, 2));
188
+ }
189
+ const reasoning = [
190
+ `Skeptic (${skepPts.toFixed(2)}): ${skeptic.argument}`,
191
+ `Optimist (${optPts.toFixed(2)}): ${optimist.argument}`,
192
+ `Realist verdict: ${verdict} (arbiter confidence ${arbiterConfidence.toFixed(2)}).`,
193
+ `Reason: ${argument}`,
194
+ ].join("\n");
195
+ return {
196
+ turn: { voice: "realist", argument, evidence, selfConfidence: arbiterConfidence },
197
+ verdict, arbiterConfidence, reasoning,
198
+ };
199
+ }
200
+ export function debate(repoRoot, claim, opts) {
201
+ const sig = readSignals(repoRoot);
202
+ const skeptic = runSkeptic(claim, sig);
203
+ const optimist = runOptimist(claim, sig);
204
+ const realistOut = runRealist(claim, sig, skeptic, optimist);
205
+ const result = {
206
+ claim,
207
+ turns: [skeptic, optimist, realistOut.turn],
208
+ verdict: realistOut.verdict,
209
+ arbiterConfidence: realistOut.arbiterConfidence,
210
+ reasoning: realistOut.reasoning,
211
+ };
212
+ if (opts?.persist) {
213
+ try {
214
+ const dir = join(repoRoot, COGNITIVE_DIR, "debate");
215
+ if (!existsSync(dir))
216
+ mkdirSync(dir, { recursive: true });
217
+ appendFileSync(join(dir, "debates.jsonl"), JSON.stringify({ ts: new Date().toISOString(), claim, verdict: result.verdict, arbiterConfidence: result.arbiterConfidence }) + "\n", "utf8");
218
+ }
219
+ catch { /* */ }
220
+ }
221
+ return result;
222
+ }
223
+ //# sourceMappingURL=debate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debate.js","sourceRoot":"","sources":["../../src/cognitive/debate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * v1.64.0 -- COGNITIVE LAYER 7: DECISION ATOM (FUSION CORE).
3
+ *
4
+ * The capstone. A decision atom fuses the outputs of all six previous
5
+ * cognitive layers into a single, audit-traceable verdict for ANY
6
+ * non-trivial decision:
7
+ *
8
+ * 1. theory-of-mind -- which vendor is best for this task
9
+ * 2. tree-of-thought -- which strategy + tactic has highest EV
10
+ * 3. curiosity -- are there gaps that should be probed first
11
+ * 4. consolidation -- is the wisdom stack consistent (no near-dupes)
12
+ * 5. counterfactual -- would any alternative timeline score higher
13
+ * 6. debate -- skeptic / optimist / realist arbitration
14
+ *
15
+ * Each layer contributes a sub-verdict + confidence. The atom's
16
+ * fusion rule:
17
+ *
18
+ * PROCEED all layers AGREE or near-neutral
19
+ * PROCEED-WITH-CARE one layer DISAGREES with low confidence
20
+ * PAUSE-INVESTIGATE one layer DISAGREES with high confidence, OR
21
+ * two+ layers express concern
22
+ * ABORT-FOR-NOW debate DISAGREES with arbiterConfidence >= 0.7
23
+ * AND tree-of-thought best EV < 0.3
24
+ *
25
+ * Output is a single screen worth of plain English -- the user (or
26
+ * AI agent) reads it and acts. The full audit trail is on disk.
27
+ */
28
+ import { type VendorProfile } from "./theory_of_mind.js";
29
+ import { type ToTResult } from "./tree_of_thought.js";
30
+ import { type CuriosityScan } from "./curiosity.js";
31
+ import { type ConsolidationReport } from "./consolidation.js";
32
+ import { type CounterfactualResult } from "./counterfactual.js";
33
+ import { type DebateResult } from "./debate.js";
34
+ export type AtomVerdict = "PROCEED" | "PROCEED-WITH-CARE" | "PAUSE-INVESTIGATE" | "ABORT-FOR-NOW";
35
+ export interface DecisionAtomInput {
36
+ /** The decision in plain English (e.g. "refactor authentication"). */
37
+ intent: string;
38
+ /** Optional list of vendors to consider (e.g. ["claude", "cursor", "gemini"]). */
39
+ vendors?: string[];
40
+ /** Optional task profile for vendor recommendation. */
41
+ taskProfile?: {
42
+ domain?: string;
43
+ needsTerse?: boolean;
44
+ needsStable?: boolean;
45
+ };
46
+ /** Counterfactual baseline (the actual decision's risk/fair/cost). */
47
+ counterfactualBaseline?: {
48
+ actualRegressionP: number;
49
+ actualStakeholderFair: number;
50
+ actualTokenCost: number;
51
+ };
52
+ }
53
+ export interface DecisionAtom {
54
+ intent: string;
55
+ verdict: AtomVerdict;
56
+ /** Overall confidence in [0, 1]. */
57
+ confidence: number;
58
+ /** Per-layer sub-verdicts. */
59
+ layers: {
60
+ theoryOfMind: {
61
+ recommendedVendor: string | null;
62
+ vendorProfiles: number;
63
+ };
64
+ treeOfThought: {
65
+ bestPath: string[];
66
+ bestEv: number;
67
+ alternatives: number;
68
+ };
69
+ curiosity: {
70
+ totalGaps: number;
71
+ highPriority: number;
72
+ topGap: string | null;
73
+ };
74
+ consolidation: {
75
+ vaccinesMerged: number;
76
+ lessonsPruned: number;
77
+ lessonsPromoted: number;
78
+ };
79
+ counterfactual: {
80
+ topAlternative: string | null;
81
+ netRelief: number;
82
+ netRegret: number;
83
+ } | null;
84
+ debate: {
85
+ verdict: DebateResult["verdict"];
86
+ arbiterConfidence: number;
87
+ };
88
+ };
89
+ /** One-screen plain-English explanation. */
90
+ briefing: string;
91
+ /** Recommended next concrete action. */
92
+ recommendedAction: string;
93
+ /** Raw layer outputs for audit. */
94
+ raw: {
95
+ profiles: VendorProfile[];
96
+ tot: ToTResult;
97
+ curiosity: CuriosityScan;
98
+ consolidation: ConsolidationReport;
99
+ counterfactual: CounterfactualResult | null;
100
+ debate: DebateResult;
101
+ };
102
+ /** ISO timestamp. */
103
+ builtAt: string;
104
+ }
105
+ export declare function build(repoRoot: string, input: DecisionAtomInput): DecisionAtom;
106
+ /** Roll up the atom history -- how often does Mneme tell us PROCEED vs PAUSE? */
107
+ export interface AtomHistorySummary {
108
+ totalAtoms: number;
109
+ verdictCounts: Record<AtomVerdict, number>;
110
+ meanConfidence: number;
111
+ /** Most-recent atom's intent + verdict for quick recall. */
112
+ lastAtom: {
113
+ intent: string;
114
+ verdict: AtomVerdict;
115
+ ts: string;
116
+ } | null;
117
+ }
118
+ export declare function summarizeHistory(repoRoot: string): AtomHistorySummary;
119
+ //# sourceMappingURL=decision_atom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision_atom.d.ts","sourceRoot":"","sources":["../../src/cognitive/decision_atom.ts"],"names":[],"mappings":"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"}