claude-soul-server 0.1.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/dist/engine/context-assembler.d.ts +3 -0
- package/dist/engine/context-assembler.js +161 -0
- package/dist/engine/context-assembler.js.map +1 -0
- package/dist/engine/exemplar-selector.d.ts +6 -0
- package/dist/engine/exemplar-selector.js +21 -0
- package/dist/engine/exemplar-selector.js.map +1 -0
- package/dist/engine/framework-engine.d.ts +61 -0
- package/dist/engine/framework-engine.js +351 -0
- package/dist/engine/framework-engine.js.map +1 -0
- package/dist/engine/framework-renderer.d.ts +17 -0
- package/dist/engine/framework-renderer.js +161 -0
- package/dist/engine/framework-renderer.js.map +1 -0
- package/dist/engine/framework-seeds.d.ts +2 -0
- package/dist/engine/framework-seeds.js +265 -0
- package/dist/engine/framework-seeds.js.map +1 -0
- package/dist/engine/lesson-store.d.ts +8 -0
- package/dist/engine/lesson-store.js +40 -0
- package/dist/engine/lesson-store.js.map +1 -0
- package/dist/engine/meta-optimizer.d.ts +37 -0
- package/dist/engine/meta-optimizer.js +140 -0
- package/dist/engine/meta-optimizer.js.map +1 -0
- package/dist/engine/prompt-builder.d.ts +31 -0
- package/dist/engine/prompt-builder.js +385 -0
- package/dist/engine/prompt-builder.js.map +1 -0
- package/dist/engine/reflection-runner.d.ts +18 -0
- package/dist/engine/reflection-runner.js +313 -0
- package/dist/engine/reflection-runner.js.map +1 -0
- package/dist/engine/shadow-transform.d.ts +1 -0
- package/dist/engine/shadow-transform.js +41 -0
- package/dist/engine/shadow-transform.js.map +1 -0
- package/dist/engine/signal-extractor.d.ts +14 -0
- package/dist/engine/signal-extractor.js +204 -0
- package/dist/engine/signal-extractor.js.map +1 -0
- package/dist/engine/signal-store.d.ts +5 -0
- package/dist/engine/signal-store.js +56 -0
- package/dist/engine/signal-store.js.map +1 -0
- package/dist/engine/snapshot-manager.d.ts +3 -0
- package/dist/engine/snapshot-manager.js +52 -0
- package/dist/engine/snapshot-manager.js.map +1 -0
- package/dist/engine/state-engine.d.ts +34 -0
- package/dist/engine/state-engine.js +127 -0
- package/dist/engine/state-engine.js.map +1 -0
- package/dist/engine/tension-detector.d.ts +10 -0
- package/dist/engine/tension-detector.js +77 -0
- package/dist/engine/tension-detector.js.map +1 -0
- package/dist/engine/token-budget.d.ts +12 -0
- package/dist/engine/token-budget.js +44 -0
- package/dist/engine/token-budget.js.map +1 -0
- package/dist/hooks/on-stop.d.ts +11 -0
- package/dist/hooks/on-stop.js +153 -0
- package/dist/hooks/on-stop.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +171 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/soul-activate.d.ts +1 -0
- package/dist/tools/soul-activate.js +149 -0
- package/dist/tools/soul-activate.js.map +1 -0
- package/dist/tools/soul-context.d.ts +1 -0
- package/dist/tools/soul-context.js +31 -0
- package/dist/tools/soul-context.js.map +1 -0
- package/dist/tools/soul-evaluate.d.ts +8 -0
- package/dist/tools/soul-evaluate.js +97 -0
- package/dist/tools/soul-evaluate.js.map +1 -0
- package/dist/tools/soul-framework.d.ts +1 -0
- package/dist/tools/soul-framework.js +66 -0
- package/dist/tools/soul-framework.js.map +1 -0
- package/dist/tools/soul-read.d.ts +1 -0
- package/dist/tools/soul-read.js +24 -0
- package/dist/tools/soul-read.js.map +1 -0
- package/dist/tools/soul-reflect.d.ts +1 -0
- package/dist/tools/soul-reflect.js +82 -0
- package/dist/tools/soul-reflect.js.map +1 -0
- package/dist/tools/soul-signal.d.ts +8 -0
- package/dist/tools/soul-signal.js +119 -0
- package/dist/tools/soul-signal.js.map +1 -0
- package/dist/tools/soul-status.d.ts +1 -0
- package/dist/tools/soul-status.js +130 -0
- package/dist/tools/soul-status.js.map +1 -0
- package/dist/tools/soul-write.d.ts +1 -0
- package/dist/tools/soul-write.js +26 -0
- package/dist/tools/soul-write.js.map +1 -0
- package/dist/types/config-types.d.ts +45 -0
- package/dist/types/config-types.js +21 -0
- package/dist/types/config-types.js.map +1 -0
- package/dist/types/learning-types.d.ts +166 -0
- package/dist/types/learning-types.js +2 -0
- package/dist/types/learning-types.js.map +1 -0
- package/dist/util/files.d.ts +20 -0
- package/dist/util/files.js +54 -0
- package/dist/util/files.js.map +1 -0
- package/dist/util/llm.d.ts +6 -0
- package/dist/util/llm.js +76 -0
- package/dist/util/llm.js.map +1 -0
- package/dist/util/tokens.d.ts +1 -0
- package/dist/util/tokens.js +4 -0
- package/dist/util/tokens.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { renderFrameworksToMarkdown, renderFrameworksCompressed } from "./framework-renderer.js";
|
|
2
|
+
import { transformShadowContent } from "./shadow-transform.js";
|
|
3
|
+
import { applyTokenBudget } from "./token-budget.js";
|
|
4
|
+
import { readSignals } from "./signal-store.js";
|
|
5
|
+
import { soulFilePath, readFileSafe, TENSIONS_PATH, EXEMPLARS_PATH, LESSONS_PATH, } from "../util/files.js";
|
|
6
|
+
import { readJsonSafe } from "../util/files.js";
|
|
7
|
+
import { FrameworkEngine } from "./framework-engine.js";
|
|
8
|
+
function renderFrameworkVocabulary(store) {
|
|
9
|
+
const models = store.frameworks
|
|
10
|
+
.filter((f) => (f.status === "active" || f.status === "questioning") && f.kind !== "process")
|
|
11
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
12
|
+
if (models.length === 0)
|
|
13
|
+
return "";
|
|
14
|
+
const lines = [];
|
|
15
|
+
lines.push("## Active Thinking Frameworks");
|
|
16
|
+
lines.push("");
|
|
17
|
+
lines.push("Named concepts available as thinking vocabulary. Apply when relevant:");
|
|
18
|
+
lines.push("");
|
|
19
|
+
for (const fw of models) {
|
|
20
|
+
const tier = fw.evidenceTier ?? "hypothesis";
|
|
21
|
+
lines.push(`- **${fw.name}** [${tier}]: ${fw.description.slice(0, 150)}`);
|
|
22
|
+
}
|
|
23
|
+
return lines.join("\n");
|
|
24
|
+
}
|
|
25
|
+
function renderProcessFrameworks(store) {
|
|
26
|
+
const processes = store.frameworks
|
|
27
|
+
.filter((f) => (f.status === "active" || f.status === "questioning") && f.kind === "process")
|
|
28
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
29
|
+
if (processes.length === 0)
|
|
30
|
+
return "";
|
|
31
|
+
const lines = [];
|
|
32
|
+
lines.push("## Active Cognitive Processes");
|
|
33
|
+
lines.push("");
|
|
34
|
+
lines.push("Procedures to follow when triggered. Check triggers against current task:");
|
|
35
|
+
lines.push("");
|
|
36
|
+
for (const fw of processes) {
|
|
37
|
+
const tier = fw.evidenceTier ?? "hypothesis";
|
|
38
|
+
const triggers = (fw.triggers ?? []).join(" | ");
|
|
39
|
+
lines.push(`- **${fw.name}** [${tier}]: ${triggers}`);
|
|
40
|
+
}
|
|
41
|
+
return lines.join("\n");
|
|
42
|
+
}
|
|
43
|
+
function renderRecentSignals(signals) {
|
|
44
|
+
if (signals.length === 0)
|
|
45
|
+
return "";
|
|
46
|
+
const grouped = new Map();
|
|
47
|
+
for (const s of signals) {
|
|
48
|
+
const list = grouped.get(s.type) ?? [];
|
|
49
|
+
list.push(s);
|
|
50
|
+
grouped.set(s.type, list);
|
|
51
|
+
}
|
|
52
|
+
const lines = [];
|
|
53
|
+
lines.push("## Recent Patterns");
|
|
54
|
+
lines.push("");
|
|
55
|
+
for (const [type, group] of grouped) {
|
|
56
|
+
const mostRecent = group[group.length - 1];
|
|
57
|
+
lines.push(`- ${group.length} ${type} signal(s): "${mostRecent.evidence.slice(0, 80)}"`);
|
|
58
|
+
}
|
|
59
|
+
const corrections = grouped.get("correction");
|
|
60
|
+
if (corrections && corrections.length > 0) {
|
|
61
|
+
lines.push("");
|
|
62
|
+
lines.push("**Action**: Recent corrections detected. Question assumptions BEFORE responding, not after correction.");
|
|
63
|
+
}
|
|
64
|
+
return lines.join("\n");
|
|
65
|
+
}
|
|
66
|
+
export async function assembleSoulContext(config) {
|
|
67
|
+
const [soulMd, correctionsMd, stateMd, storyMd, shadowRaw] = await Promise.all([
|
|
68
|
+
readFileSafe(soulFilePath("SOUL.md")),
|
|
69
|
+
readFileSafe(soulFilePath("CORRECTIONS.md")),
|
|
70
|
+
readFileSafe(soulFilePath("STATE.md")),
|
|
71
|
+
readFileSafe(soulFilePath("STORY.md")),
|
|
72
|
+
readFileSafe(soulFilePath("SHADOW.md")),
|
|
73
|
+
]);
|
|
74
|
+
const frameworkEngine = new FrameworkEngine();
|
|
75
|
+
const store = await frameworkEngine.initialize();
|
|
76
|
+
const frameworksMd = renderFrameworksToMarkdown(store);
|
|
77
|
+
const shadowTransformed = transformShadowContent(shadowRaw);
|
|
78
|
+
const exemplars = await readJsonSafe(EXEMPLARS_PATH, []);
|
|
79
|
+
const lessons = await readJsonSafe(LESSONS_PATH, []);
|
|
80
|
+
const tensions = await readJsonSafe(TENSIONS_PATH, { tensions: [] });
|
|
81
|
+
const recentSignals = await readSignals();
|
|
82
|
+
const blocks = [];
|
|
83
|
+
// --- TIER 1: Always included ---
|
|
84
|
+
const frameworkVocabulary = renderFrameworkVocabulary(store);
|
|
85
|
+
if (frameworkVocabulary.trim()) {
|
|
86
|
+
blocks.push({ content: frameworkVocabulary, tier: 1, label: "Framework Vocabulary" });
|
|
87
|
+
}
|
|
88
|
+
const processFrameworks = renderProcessFrameworks(store);
|
|
89
|
+
if (processFrameworks.trim()) {
|
|
90
|
+
blocks.push({ content: processFrameworks, tier: 1, label: "Cognitive Processes" });
|
|
91
|
+
}
|
|
92
|
+
const recentPatterns = renderRecentSignals(recentSignals.slice(-20));
|
|
93
|
+
if (recentPatterns.trim()) {
|
|
94
|
+
blocks.push({ content: recentPatterns, tier: 1, label: "Recent Patterns" });
|
|
95
|
+
}
|
|
96
|
+
if (soulMd.trim()) {
|
|
97
|
+
blocks.push({ content: soulMd, tier: 1, label: "SOUL.md" });
|
|
98
|
+
}
|
|
99
|
+
if (correctionsMd.trim()) {
|
|
100
|
+
blocks.push({ content: correctionsMd, tier: 1, label: "CORRECTIONS.md" });
|
|
101
|
+
}
|
|
102
|
+
if (shadowTransformed.trim()) {
|
|
103
|
+
blocks.push({ content: shadowTransformed, tier: 1, label: "SHADOW.md" });
|
|
104
|
+
}
|
|
105
|
+
if (stateMd.trim()) {
|
|
106
|
+
blocks.push({ content: stateMd, tier: 1, label: "STATE.md" });
|
|
107
|
+
}
|
|
108
|
+
// --- TIER 2: Included if budget allows ---
|
|
109
|
+
const compressedFrameworks = renderFrameworksCompressed(store);
|
|
110
|
+
if (frameworksMd.trim()) {
|
|
111
|
+
blocks.push({
|
|
112
|
+
content: frameworksMd,
|
|
113
|
+
tier: 2,
|
|
114
|
+
label: "FRAMEWORKS.md",
|
|
115
|
+
fallback: compressedFrameworks,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const topLessons = lessons
|
|
119
|
+
.sort((a, b) => b.confidence - a.confidence)
|
|
120
|
+
.slice(0, config.lessons.maxInjectCount);
|
|
121
|
+
if (topLessons.length > 0) {
|
|
122
|
+
const lessonsContent = "## Active Lessons\n\n" +
|
|
123
|
+
topLessons
|
|
124
|
+
.map((l) => `- **${l.context}**: ${l.lesson} (confidence: ${l.confidence.toFixed(2)})`)
|
|
125
|
+
.join("\n");
|
|
126
|
+
blocks.push({ content: lessonsContent, tier: 2, label: "Lessons" });
|
|
127
|
+
}
|
|
128
|
+
const topExemplars = exemplars.slice(-config.exemplars.maxInjectCount);
|
|
129
|
+
if (topExemplars.length > 0) {
|
|
130
|
+
const exemplarsContent = "## Exemplars (what good looks like)\n\n" +
|
|
131
|
+
topExemplars
|
|
132
|
+
.map((e) => `**Context**: ${e.context}\n**Response**: ${e.responseExcerpt}\n*Frameworks active: ${e.frameworksActive.join(", ")}*`)
|
|
133
|
+
.join("\n\n");
|
|
134
|
+
blocks.push({ content: exemplarsContent, tier: 2, label: "Exemplars" });
|
|
135
|
+
}
|
|
136
|
+
if (tensions.tensions.length > 0) {
|
|
137
|
+
const activeTensions = tensions.tensions.filter((t) => t.status === "detected" || t.status === "holding");
|
|
138
|
+
if (activeTensions.length > 0) {
|
|
139
|
+
const tensionContent = "## Active Tensions\n\n" +
|
|
140
|
+
activeTensions
|
|
141
|
+
.map((t) => {
|
|
142
|
+
const prefs = Object.entries(t.preferredInContext)
|
|
143
|
+
.map(([ctx, p]) => ` - In ${ctx}: prefer ${p.preferred} (${p.confirmedCount} confirmed)`)
|
|
144
|
+
.join("\n");
|
|
145
|
+
return `- ${t.description}${prefs ? "\n" + prefs : ""}`;
|
|
146
|
+
})
|
|
147
|
+
.join("\n");
|
|
148
|
+
blocks.push({ content: tensionContent, tier: 2, label: "Tensions" });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// --- TIER 3: Supplementary ---
|
|
152
|
+
if (storyMd.trim()) {
|
|
153
|
+
blocks.push({ content: storyMd, tier: 3, label: "STORY.md" });
|
|
154
|
+
}
|
|
155
|
+
return applyTokenBudget(blocks, config.contextBudget.maxTokens);
|
|
156
|
+
}
|
|
157
|
+
export async function assembleSlimContext() {
|
|
158
|
+
const soulMd = await readFileSafe(soulFilePath("SOUL.md"));
|
|
159
|
+
return soulMd;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=context-assembler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-assembler.js","sourceRoot":"","sources":["../../src/engine/context-assembler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Exemplar, Framework } from "../types/learning-types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Select the most relevant exemplars for the current context.
|
|
4
|
+
* Matches by domain and active framework overlap.
|
|
5
|
+
*/
|
|
6
|
+
export declare function selectExemplars(exemplars: Exemplar[], activeFrameworks: Framework[], maxCount: number): Exemplar[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Select the most relevant exemplars for the current context.
|
|
3
|
+
* Matches by domain and active framework overlap.
|
|
4
|
+
*/
|
|
5
|
+
export function selectExemplars(exemplars, activeFrameworks, maxCount) {
|
|
6
|
+
if (exemplars.length === 0)
|
|
7
|
+
return [];
|
|
8
|
+
const activeNames = new Set(activeFrameworks.map((f) => f.name));
|
|
9
|
+
// Score each exemplar by framework overlap + recency
|
|
10
|
+
const scored = exemplars.map((ex) => {
|
|
11
|
+
const frameworkOverlap = ex.frameworksActive.filter((f) => activeNames.has(f)).length;
|
|
12
|
+
const recencyScore = Math.max(0, 1 - (Date.now() - ex.createdAt) / (30 * 24 * 60 * 60 * 1000)); // 30-day decay
|
|
13
|
+
const score = frameworkOverlap * 2 + recencyScore;
|
|
14
|
+
return { exemplar: ex, score };
|
|
15
|
+
});
|
|
16
|
+
return scored
|
|
17
|
+
.sort((a, b) => b.score - a.score)
|
|
18
|
+
.slice(0, maxCount)
|
|
19
|
+
.map((s) => s.exemplar);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=exemplar-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exemplar-selector.js","sourceRoot":"","sources":["../../src/engine/exemplar-selector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,SAAqB,EACrB,gBAA6B,EAC7B,QAAgB;IAEhB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,qDAAqD;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAClC,MAAM,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe;QAC/G,MAAM,KAAK,GAAG,gBAAgB,GAAG,CAAC,GAAG,YAAY,CAAC;QAClD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM;SACV,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;SAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Framework, FrameworkStore, FrameworkEvidence, EvidenceTier } from "../types/learning-types.js";
|
|
2
|
+
export declare class FrameworkEngine {
|
|
3
|
+
private store;
|
|
4
|
+
initialize(): Promise<FrameworkStore>;
|
|
5
|
+
loadStore(): Promise<FrameworkStore>;
|
|
6
|
+
saveStore(store: FrameworkStore): Promise<void>;
|
|
7
|
+
addDiscoveredFramework(partial: {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
domain: string;
|
|
11
|
+
confidence: number;
|
|
12
|
+
}): Promise<Framework>;
|
|
13
|
+
evolveFramework(id: string, changes: {
|
|
14
|
+
description?: string;
|
|
15
|
+
confidence?: number;
|
|
16
|
+
status?: Framework["status"];
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
mergeFrameworks(ids: string[], merged: {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
retireFramework(id: string, reason: string): Promise<void>;
|
|
23
|
+
recordEvidence(frameworkId: string, evidence: FrameworkEvidence): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Tier advancement based on external evidence.
|
|
26
|
+
* hypothesis → observed: at least 1 external confirmed evidence
|
|
27
|
+
* observed → validated: at least 3 external confirmed evidences
|
|
28
|
+
* Tiers only go up, never down. Retirement handles frameworks that don't work.
|
|
29
|
+
*/
|
|
30
|
+
calculateTier(framework: Framework): EvidenceTier;
|
|
31
|
+
calculateConfidence(framework: Framework): number;
|
|
32
|
+
/**
|
|
33
|
+
* Rule-based status transitions. Called after evidence/tier updates.
|
|
34
|
+
* - questioning → active: evidenceTier >= "observed" AND confidence >= 0.5
|
|
35
|
+
* - active → questioning: confidence < 0.3 with 5+ evidence
|
|
36
|
+
* - any → retired: confidence < 0.2 with 10+ evidence
|
|
37
|
+
*/
|
|
38
|
+
recalculateStatus(framework: Framework): void;
|
|
39
|
+
recalculateAllStatuses(store: FrameworkStore): void;
|
|
40
|
+
getActiveFrameworks(): Framework[];
|
|
41
|
+
getProcessFrameworks(): Framework[];
|
|
42
|
+
getTopFrameworks(n: number): Framework[];
|
|
43
|
+
private static readonly SELF_REF_KEYWORDS;
|
|
44
|
+
/**
|
|
45
|
+
* One-time migration: tag unclassified evidence with contextType,
|
|
46
|
+
* recalculate confidence with self-referential weighting,
|
|
47
|
+
* and run status transitions.
|
|
48
|
+
*/
|
|
49
|
+
private migrateV2;
|
|
50
|
+
/**
|
|
51
|
+
* V3 migration: add `kind` field to all frameworks.
|
|
52
|
+
* Existing frameworks default to "mental-model". Process seeds get "process".
|
|
53
|
+
*/
|
|
54
|
+
private migrateV3;
|
|
55
|
+
/**
|
|
56
|
+
* Inject any seed frameworks that are missing from an existing store.
|
|
57
|
+
* This allows new seeds (like cognitive processes) to be added to
|
|
58
|
+
* existing users without requiring a store reset.
|
|
59
|
+
*/
|
|
60
|
+
private injectMissingSeeds;
|
|
61
|
+
}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { FRAMEWORK_SEEDS } from "./framework-seeds.js";
|
|
3
|
+
import { FRAMEWORKS_PATH } from "../util/files.js";
|
|
4
|
+
import { readJsonSafe, writeJsonAtomic } from "../util/files.js";
|
|
5
|
+
function generateId(prefix) {
|
|
6
|
+
return `${prefix}-${crypto.randomUUID().slice(0, 8)}`;
|
|
7
|
+
}
|
|
8
|
+
const EMPTY_STORE = {
|
|
9
|
+
version: 1,
|
|
10
|
+
frameworks: [],
|
|
11
|
+
meta: {
|
|
12
|
+
totalDiscovered: 0,
|
|
13
|
+
totalRetired: 0,
|
|
14
|
+
totalMerged: 0,
|
|
15
|
+
lastReflectionAt: 0,
|
|
16
|
+
reflectionCount: 0,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
export class FrameworkEngine {
|
|
20
|
+
store = null;
|
|
21
|
+
async initialize() {
|
|
22
|
+
try {
|
|
23
|
+
const existing = await readJsonSafe(FRAMEWORKS_PATH, null);
|
|
24
|
+
if (existing && existing.frameworks && existing.frameworks.length > 0) {
|
|
25
|
+
let changed = this.migrateV2(existing);
|
|
26
|
+
changed = this.migrateV3(existing) || changed;
|
|
27
|
+
changed = this.injectMissingSeeds(existing) || changed;
|
|
28
|
+
if (changed) {
|
|
29
|
+
await writeJsonAtomic(FRAMEWORKS_PATH, existing);
|
|
30
|
+
}
|
|
31
|
+
this.store = existing;
|
|
32
|
+
return existing;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Fall through to create new store
|
|
37
|
+
}
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
const frameworks = FRAMEWORK_SEEDS.map((seed) => ({
|
|
40
|
+
...seed,
|
|
41
|
+
id: generateId("fw"),
|
|
42
|
+
createdAt: now,
|
|
43
|
+
lastTestedAt: now,
|
|
44
|
+
evidence: [],
|
|
45
|
+
evidenceTier: "hypothesis",
|
|
46
|
+
relatedFrameworks: [...seed.relatedFrameworks],
|
|
47
|
+
contradicts: [...seed.contradicts],
|
|
48
|
+
supersedes: [...seed.supersedes],
|
|
49
|
+
workflows: [],
|
|
50
|
+
}));
|
|
51
|
+
const store = {
|
|
52
|
+
version: 1,
|
|
53
|
+
schemaVersion: 3,
|
|
54
|
+
frameworks,
|
|
55
|
+
meta: {
|
|
56
|
+
totalDiscovered: 0,
|
|
57
|
+
totalRetired: 0,
|
|
58
|
+
totalMerged: 0,
|
|
59
|
+
lastReflectionAt: 0,
|
|
60
|
+
reflectionCount: 0,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
await this.saveStore(store);
|
|
64
|
+
return store;
|
|
65
|
+
}
|
|
66
|
+
async loadStore() {
|
|
67
|
+
const store = await readJsonSafe(FRAMEWORKS_PATH, EMPTY_STORE);
|
|
68
|
+
let changed = this.migrateV2(store);
|
|
69
|
+
changed = this.migrateV3(store) || changed;
|
|
70
|
+
changed = this.injectMissingSeeds(store) || changed;
|
|
71
|
+
if (changed) {
|
|
72
|
+
await writeJsonAtomic(FRAMEWORKS_PATH, store);
|
|
73
|
+
}
|
|
74
|
+
this.store = store;
|
|
75
|
+
return store;
|
|
76
|
+
}
|
|
77
|
+
async saveStore(store) {
|
|
78
|
+
await writeJsonAtomic(FRAMEWORKS_PATH, store);
|
|
79
|
+
this.store = store;
|
|
80
|
+
}
|
|
81
|
+
async addDiscoveredFramework(partial) {
|
|
82
|
+
const store = this.store ?? (await this.loadStore());
|
|
83
|
+
const now = Date.now();
|
|
84
|
+
const framework = {
|
|
85
|
+
id: generateId("fw"),
|
|
86
|
+
name: partial.name,
|
|
87
|
+
description: partial.description,
|
|
88
|
+
domain: partial.domain,
|
|
89
|
+
kind: partial.domain === "cognitive-process" ? "process" : "mental-model",
|
|
90
|
+
confidence: partial.confidence,
|
|
91
|
+
evidenceTier: "hypothesis",
|
|
92
|
+
source: "discovered",
|
|
93
|
+
evidence: [],
|
|
94
|
+
relatedFrameworks: [],
|
|
95
|
+
contradicts: [],
|
|
96
|
+
supersedes: [],
|
|
97
|
+
workflows: [],
|
|
98
|
+
createdAt: now,
|
|
99
|
+
lastTestedAt: now,
|
|
100
|
+
applicationCount: 0,
|
|
101
|
+
version: 1,
|
|
102
|
+
status: "questioning",
|
|
103
|
+
};
|
|
104
|
+
store.frameworks.push(framework);
|
|
105
|
+
store.meta.totalDiscovered++;
|
|
106
|
+
await this.saveStore(store);
|
|
107
|
+
return framework;
|
|
108
|
+
}
|
|
109
|
+
async evolveFramework(id, changes) {
|
|
110
|
+
const store = this.store ?? (await this.loadStore());
|
|
111
|
+
const fw = store.frameworks.find((f) => f.id === id);
|
|
112
|
+
if (!fw)
|
|
113
|
+
return;
|
|
114
|
+
if (changes.description !== undefined)
|
|
115
|
+
fw.description = changes.description;
|
|
116
|
+
if (changes.confidence !== undefined)
|
|
117
|
+
fw.confidence = changes.confidence;
|
|
118
|
+
if (changes.status !== undefined)
|
|
119
|
+
fw.status = changes.status;
|
|
120
|
+
fw.version++;
|
|
121
|
+
await this.saveStore(store);
|
|
122
|
+
}
|
|
123
|
+
async mergeFrameworks(ids, merged) {
|
|
124
|
+
const store = this.store ?? (await this.loadStore());
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
const sourceFw = store.frameworks.find((f) => f.id === ids[0]);
|
|
127
|
+
const mergedFw = {
|
|
128
|
+
id: generateId("fw"),
|
|
129
|
+
name: merged.name,
|
|
130
|
+
description: merged.description,
|
|
131
|
+
domain: sourceFw?.domain ?? "general",
|
|
132
|
+
kind: sourceFw?.kind ?? "mental-model",
|
|
133
|
+
confidence: 0.5,
|
|
134
|
+
evidenceTier: "hypothesis",
|
|
135
|
+
source: "merged",
|
|
136
|
+
evidence: [],
|
|
137
|
+
relatedFrameworks: [],
|
|
138
|
+
contradicts: [],
|
|
139
|
+
supersedes: ids,
|
|
140
|
+
workflows: [],
|
|
141
|
+
createdAt: now,
|
|
142
|
+
lastTestedAt: now,
|
|
143
|
+
applicationCount: 0,
|
|
144
|
+
version: 1,
|
|
145
|
+
status: "questioning",
|
|
146
|
+
};
|
|
147
|
+
store.frameworks.push(mergedFw);
|
|
148
|
+
for (const id of ids) {
|
|
149
|
+
const fw = store.frameworks.find((f) => f.id === id);
|
|
150
|
+
if (fw)
|
|
151
|
+
fw.status = "merged";
|
|
152
|
+
}
|
|
153
|
+
store.meta.totalMerged += ids.length;
|
|
154
|
+
await this.saveStore(store);
|
|
155
|
+
}
|
|
156
|
+
async retireFramework(id, reason) {
|
|
157
|
+
const store = this.store ?? (await this.loadStore());
|
|
158
|
+
const fw = store.frameworks.find((f) => f.id === id);
|
|
159
|
+
if (!fw)
|
|
160
|
+
return;
|
|
161
|
+
fw.status = "retired";
|
|
162
|
+
fw.evidence.push({
|
|
163
|
+
timestamp: Date.now(),
|
|
164
|
+
type: "contradicted",
|
|
165
|
+
context: reason,
|
|
166
|
+
});
|
|
167
|
+
store.meta.totalRetired++;
|
|
168
|
+
await this.saveStore(store);
|
|
169
|
+
}
|
|
170
|
+
async recordEvidence(frameworkId, evidence) {
|
|
171
|
+
const store = this.store ?? (await this.loadStore());
|
|
172
|
+
const fw = store.frameworks.find((f) => f.id === frameworkId);
|
|
173
|
+
if (!fw)
|
|
174
|
+
return;
|
|
175
|
+
fw.evidence.push(evidence);
|
|
176
|
+
fw.lastTestedAt = evidence.timestamp;
|
|
177
|
+
fw.applicationCount++;
|
|
178
|
+
fw.confidence = this.calculateConfidence(fw);
|
|
179
|
+
fw.evidenceTier = this.calculateTier(fw);
|
|
180
|
+
this.recalculateStatus(fw);
|
|
181
|
+
await this.saveStore(store);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Tier advancement based on external evidence.
|
|
185
|
+
* hypothesis → observed: at least 1 external confirmed evidence
|
|
186
|
+
* observed → validated: at least 3 external confirmed evidences
|
|
187
|
+
* Tiers only go up, never down. Retirement handles frameworks that don't work.
|
|
188
|
+
*/
|
|
189
|
+
calculateTier(framework) {
|
|
190
|
+
const externalConfirmed = framework.evidence.filter((e) => e.type === "confirmed" && e.contextType === "external").length;
|
|
191
|
+
if (externalConfirmed >= 3)
|
|
192
|
+
return "validated";
|
|
193
|
+
if (externalConfirmed >= 1)
|
|
194
|
+
return "observed";
|
|
195
|
+
return framework.evidenceTier ?? "hypothesis";
|
|
196
|
+
}
|
|
197
|
+
calculateConfidence(framework) {
|
|
198
|
+
const now = Date.now();
|
|
199
|
+
const sevenDays = 7 * 24 * 60 * 60 * 1000;
|
|
200
|
+
let confirmed = 0;
|
|
201
|
+
let contradicted = 0;
|
|
202
|
+
for (const e of framework.evidence) {
|
|
203
|
+
const recencyWeight = now - e.timestamp < sevenDays ? 2 : 1;
|
|
204
|
+
// Self-referential evidence counts at half weight
|
|
205
|
+
const contextWeight = e.contextType === "self-referential" ? 0.5 : 1.0;
|
|
206
|
+
const weight = recencyWeight * contextWeight;
|
|
207
|
+
if (e.type === "confirmed")
|
|
208
|
+
confirmed += weight;
|
|
209
|
+
else if (e.type === "contradicted")
|
|
210
|
+
contradicted += weight;
|
|
211
|
+
}
|
|
212
|
+
const ratio = (confirmed - contradicted) / (confirmed + contradicted + 1);
|
|
213
|
+
const usageWeight = Math.min(1, framework.applicationCount / 5);
|
|
214
|
+
const confidence = ratio * usageWeight;
|
|
215
|
+
return Math.max(0, Math.min(1, confidence));
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Rule-based status transitions. Called after evidence/tier updates.
|
|
219
|
+
* - questioning → active: evidenceTier >= "observed" AND confidence >= 0.5
|
|
220
|
+
* - active → questioning: confidence < 0.3 with 5+ evidence
|
|
221
|
+
* - any → retired: confidence < 0.2 with 10+ evidence
|
|
222
|
+
*/
|
|
223
|
+
recalculateStatus(framework) {
|
|
224
|
+
if (framework.status === "retired" || framework.status === "merged")
|
|
225
|
+
return;
|
|
226
|
+
const tierRank = {
|
|
227
|
+
hypothesis: 0,
|
|
228
|
+
observed: 1,
|
|
229
|
+
validated: 2,
|
|
230
|
+
};
|
|
231
|
+
// Auto-retirement
|
|
232
|
+
if (framework.confidence < 0.2 && framework.evidence.length >= 10) {
|
|
233
|
+
framework.status = "retired";
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
// Promotion: questioning → active
|
|
237
|
+
if (framework.status === "questioning") {
|
|
238
|
+
const rank = tierRank[framework.evidenceTier] ?? 0;
|
|
239
|
+
if (rank >= 1 && framework.confidence >= 0.5) {
|
|
240
|
+
framework.status = "active";
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Demotion: active → questioning
|
|
244
|
+
if (framework.status === "active") {
|
|
245
|
+
if (framework.confidence < 0.3 && framework.evidence.length >= 5) {
|
|
246
|
+
framework.status = "questioning";
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
recalculateAllStatuses(store) {
|
|
251
|
+
for (const fw of store.frameworks) {
|
|
252
|
+
this.recalculateStatus(fw);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
getActiveFrameworks() {
|
|
256
|
+
if (!this.store)
|
|
257
|
+
return [];
|
|
258
|
+
return this.store.frameworks.filter((f) => f.status === "active" || f.status === "questioning");
|
|
259
|
+
}
|
|
260
|
+
getProcessFrameworks() {
|
|
261
|
+
if (!this.store)
|
|
262
|
+
return [];
|
|
263
|
+
return this.store.frameworks.filter((f) => f.kind === "process" && (f.status === "active" || f.status === "questioning"));
|
|
264
|
+
}
|
|
265
|
+
getTopFrameworks(n) {
|
|
266
|
+
const active = this.getActiveFrameworks();
|
|
267
|
+
return active
|
|
268
|
+
.sort((a, b) => b.confidence * Math.log(b.applicationCount + 1) -
|
|
269
|
+
a.confidence * Math.log(a.applicationCount + 1))
|
|
270
|
+
.slice(0, n);
|
|
271
|
+
}
|
|
272
|
+
// --- Migration ---
|
|
273
|
+
static SELF_REF_KEYWORDS = [
|
|
274
|
+
"soul", "framework", "meta-reflection", "meta-audit",
|
|
275
|
+
"reflection system", "soul system", "operating model",
|
|
276
|
+
"evidence tier", "tier advancement", "self-referential",
|
|
277
|
+
"cargo-cult", "cargo cult", "credibility paradox",
|
|
278
|
+
];
|
|
279
|
+
/**
|
|
280
|
+
* One-time migration: tag unclassified evidence with contextType,
|
|
281
|
+
* recalculate confidence with self-referential weighting,
|
|
282
|
+
* and run status transitions.
|
|
283
|
+
*/
|
|
284
|
+
migrateV2(store) {
|
|
285
|
+
if ((store.schemaVersion ?? 0) >= 2)
|
|
286
|
+
return false;
|
|
287
|
+
for (const fw of store.frameworks) {
|
|
288
|
+
for (const e of fw.evidence) {
|
|
289
|
+
if (!e.contextType) {
|
|
290
|
+
const lower = e.context.toLowerCase();
|
|
291
|
+
const isSelfRef = FrameworkEngine.SELF_REF_KEYWORDS.some((kw) => lower.includes(kw));
|
|
292
|
+
e.contextType = isSelfRef ? "self-referential" : "unknown";
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Skip retired/merged — don't resurrect them
|
|
296
|
+
if (fw.status === "retired" || fw.status === "merged")
|
|
297
|
+
continue;
|
|
298
|
+
// Reset to questioning — everyone re-earns their status through evidence
|
|
299
|
+
fw.status = "questioning";
|
|
300
|
+
fw.confidence = this.calculateConfidence(fw);
|
|
301
|
+
fw.evidenceTier = this.calculateTier(fw);
|
|
302
|
+
this.recalculateStatus(fw);
|
|
303
|
+
}
|
|
304
|
+
store.schemaVersion = 2;
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* V3 migration: add `kind` field to all frameworks.
|
|
309
|
+
* Existing frameworks default to "mental-model". Process seeds get "process".
|
|
310
|
+
*/
|
|
311
|
+
migrateV3(store) {
|
|
312
|
+
if ((store.schemaVersion ?? 0) >= 3)
|
|
313
|
+
return false;
|
|
314
|
+
for (const fw of store.frameworks) {
|
|
315
|
+
if (!fw.kind) {
|
|
316
|
+
fw.kind = fw.domain === "cognitive-process" ? "process" : "mental-model";
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
store.schemaVersion = 3;
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Inject any seed frameworks that are missing from an existing store.
|
|
324
|
+
* This allows new seeds (like cognitive processes) to be added to
|
|
325
|
+
* existing users without requiring a store reset.
|
|
326
|
+
*/
|
|
327
|
+
injectMissingSeeds(store) {
|
|
328
|
+
const existingNames = new Set(store.frameworks.map((f) => f.name));
|
|
329
|
+
const now = Date.now();
|
|
330
|
+
let injected = false;
|
|
331
|
+
for (const seed of FRAMEWORK_SEEDS) {
|
|
332
|
+
if (!existingNames.has(seed.name)) {
|
|
333
|
+
store.frameworks.push({
|
|
334
|
+
...seed,
|
|
335
|
+
id: generateId("fw"),
|
|
336
|
+
createdAt: now,
|
|
337
|
+
lastTestedAt: now,
|
|
338
|
+
evidence: [],
|
|
339
|
+
evidenceTier: "hypothesis",
|
|
340
|
+
relatedFrameworks: [...seed.relatedFrameworks],
|
|
341
|
+
contradicts: [...seed.contradicts],
|
|
342
|
+
supersedes: [...seed.supersedes],
|
|
343
|
+
workflows: [],
|
|
344
|
+
});
|
|
345
|
+
injected = true;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return injected;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=framework-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-engine.js","sourceRoot":"","sources":["../../src/engine/framework-engine.ts"],"names":[],"mappings":"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"}
|