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.
Files changed (97) hide show
  1. package/dist/engine/context-assembler.d.ts +3 -0
  2. package/dist/engine/context-assembler.js +161 -0
  3. package/dist/engine/context-assembler.js.map +1 -0
  4. package/dist/engine/exemplar-selector.d.ts +6 -0
  5. package/dist/engine/exemplar-selector.js +21 -0
  6. package/dist/engine/exemplar-selector.js.map +1 -0
  7. package/dist/engine/framework-engine.d.ts +61 -0
  8. package/dist/engine/framework-engine.js +351 -0
  9. package/dist/engine/framework-engine.js.map +1 -0
  10. package/dist/engine/framework-renderer.d.ts +17 -0
  11. package/dist/engine/framework-renderer.js +161 -0
  12. package/dist/engine/framework-renderer.js.map +1 -0
  13. package/dist/engine/framework-seeds.d.ts +2 -0
  14. package/dist/engine/framework-seeds.js +265 -0
  15. package/dist/engine/framework-seeds.js.map +1 -0
  16. package/dist/engine/lesson-store.d.ts +8 -0
  17. package/dist/engine/lesson-store.js +40 -0
  18. package/dist/engine/lesson-store.js.map +1 -0
  19. package/dist/engine/meta-optimizer.d.ts +37 -0
  20. package/dist/engine/meta-optimizer.js +140 -0
  21. package/dist/engine/meta-optimizer.js.map +1 -0
  22. package/dist/engine/prompt-builder.d.ts +31 -0
  23. package/dist/engine/prompt-builder.js +385 -0
  24. package/dist/engine/prompt-builder.js.map +1 -0
  25. package/dist/engine/reflection-runner.d.ts +18 -0
  26. package/dist/engine/reflection-runner.js +313 -0
  27. package/dist/engine/reflection-runner.js.map +1 -0
  28. package/dist/engine/shadow-transform.d.ts +1 -0
  29. package/dist/engine/shadow-transform.js +41 -0
  30. package/dist/engine/shadow-transform.js.map +1 -0
  31. package/dist/engine/signal-extractor.d.ts +14 -0
  32. package/dist/engine/signal-extractor.js +204 -0
  33. package/dist/engine/signal-extractor.js.map +1 -0
  34. package/dist/engine/signal-store.d.ts +5 -0
  35. package/dist/engine/signal-store.js +56 -0
  36. package/dist/engine/signal-store.js.map +1 -0
  37. package/dist/engine/snapshot-manager.d.ts +3 -0
  38. package/dist/engine/snapshot-manager.js +52 -0
  39. package/dist/engine/snapshot-manager.js.map +1 -0
  40. package/dist/engine/state-engine.d.ts +34 -0
  41. package/dist/engine/state-engine.js +127 -0
  42. package/dist/engine/state-engine.js.map +1 -0
  43. package/dist/engine/tension-detector.d.ts +10 -0
  44. package/dist/engine/tension-detector.js +77 -0
  45. package/dist/engine/tension-detector.js.map +1 -0
  46. package/dist/engine/token-budget.d.ts +12 -0
  47. package/dist/engine/token-budget.js +44 -0
  48. package/dist/engine/token-budget.js.map +1 -0
  49. package/dist/hooks/on-stop.d.ts +11 -0
  50. package/dist/hooks/on-stop.js +153 -0
  51. package/dist/hooks/on-stop.js.map +1 -0
  52. package/dist/index.d.ts +2 -0
  53. package/dist/index.js +171 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/tools/soul-activate.d.ts +1 -0
  56. package/dist/tools/soul-activate.js +149 -0
  57. package/dist/tools/soul-activate.js.map +1 -0
  58. package/dist/tools/soul-context.d.ts +1 -0
  59. package/dist/tools/soul-context.js +31 -0
  60. package/dist/tools/soul-context.js.map +1 -0
  61. package/dist/tools/soul-evaluate.d.ts +8 -0
  62. package/dist/tools/soul-evaluate.js +97 -0
  63. package/dist/tools/soul-evaluate.js.map +1 -0
  64. package/dist/tools/soul-framework.d.ts +1 -0
  65. package/dist/tools/soul-framework.js +66 -0
  66. package/dist/tools/soul-framework.js.map +1 -0
  67. package/dist/tools/soul-read.d.ts +1 -0
  68. package/dist/tools/soul-read.js +24 -0
  69. package/dist/tools/soul-read.js.map +1 -0
  70. package/dist/tools/soul-reflect.d.ts +1 -0
  71. package/dist/tools/soul-reflect.js +82 -0
  72. package/dist/tools/soul-reflect.js.map +1 -0
  73. package/dist/tools/soul-signal.d.ts +8 -0
  74. package/dist/tools/soul-signal.js +119 -0
  75. package/dist/tools/soul-signal.js.map +1 -0
  76. package/dist/tools/soul-status.d.ts +1 -0
  77. package/dist/tools/soul-status.js +130 -0
  78. package/dist/tools/soul-status.js.map +1 -0
  79. package/dist/tools/soul-write.d.ts +1 -0
  80. package/dist/tools/soul-write.js +26 -0
  81. package/dist/tools/soul-write.js.map +1 -0
  82. package/dist/types/config-types.d.ts +45 -0
  83. package/dist/types/config-types.js +21 -0
  84. package/dist/types/config-types.js.map +1 -0
  85. package/dist/types/learning-types.d.ts +166 -0
  86. package/dist/types/learning-types.js +2 -0
  87. package/dist/types/learning-types.js.map +1 -0
  88. package/dist/util/files.d.ts +20 -0
  89. package/dist/util/files.js +54 -0
  90. package/dist/util/files.js.map +1 -0
  91. package/dist/util/llm.d.ts +6 -0
  92. package/dist/util/llm.js +76 -0
  93. package/dist/util/llm.js.map +1 -0
  94. package/dist/util/tokens.d.ts +1 -0
  95. package/dist/util/tokens.js +4 -0
  96. package/dist/util/tokens.js.map +1 -0
  97. package/package.json +44 -0
@@ -0,0 +1,3 @@
1
+ import type { SoulConfig } from "../types/config-types.js";
2
+ export declare function assembleSoulContext(config: SoulConfig): Promise<string>;
3
+ export declare function assembleSlimContext(): Promise<string>;
@@ -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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"}