@getanima/core 0.2.0 → 0.2.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.
Files changed (76) hide show
  1. package/README.md +148 -113
  2. package/dist/alme/core/KnowledgeGraph.d.ts +58 -0
  3. package/dist/alme/core/KnowledgeGraph.d.ts.map +1 -0
  4. package/dist/alme/core/KnowledgeGraph.js +114 -0
  5. package/dist/alme/core/KnowledgeGraph.js.map +1 -0
  6. package/dist/alme/core/MetacognitionEngine.d.ts +35 -0
  7. package/dist/alme/core/MetacognitionEngine.d.ts.map +1 -0
  8. package/dist/alme/core/MetacognitionEngine.js +90 -0
  9. package/dist/alme/core/MetacognitionEngine.js.map +1 -0
  10. package/dist/alme/core/PerformanceAnalyzer.d.ts +68 -0
  11. package/dist/alme/core/PerformanceAnalyzer.d.ts.map +1 -0
  12. package/dist/alme/core/PerformanceAnalyzer.js +142 -0
  13. package/dist/alme/core/PerformanceAnalyzer.js.map +1 -0
  14. package/dist/alme/core/SelfReflectionModule.d.ts +41 -0
  15. package/dist/alme/core/SelfReflectionModule.d.ts.map +1 -0
  16. package/dist/alme/core/SelfReflectionModule.js +101 -0
  17. package/dist/alme/core/SelfReflectionModule.js.map +1 -0
  18. package/dist/alme/core/SkillProfile.d.ts +52 -0
  19. package/dist/alme/core/SkillProfile.d.ts.map +1 -0
  20. package/dist/alme/core/SkillProfile.js +97 -0
  21. package/dist/alme/core/SkillProfile.js.map +1 -0
  22. package/dist/anima.d.ts +28 -0
  23. package/dist/anima.d.ts.map +1 -1
  24. package/dist/anima.js +60 -8
  25. package/dist/anima.js.map +1 -1
  26. package/dist/codegen/ArchitecturalDesignGenerator.d.ts +77 -0
  27. package/dist/codegen/ArchitecturalDesignGenerator.d.ts.map +1 -0
  28. package/dist/codegen/ArchitecturalDesignGenerator.js +194 -0
  29. package/dist/codegen/ArchitecturalDesignGenerator.js.map +1 -0
  30. package/dist/codegen/ContextAwareGenerator.d.ts +67 -0
  31. package/dist/codegen/ContextAwareGenerator.d.ts.map +1 -0
  32. package/dist/codegen/ContextAwareGenerator.js +158 -0
  33. package/dist/codegen/ContextAwareGenerator.js.map +1 -0
  34. package/dist/codegen/SystemInteractionSimulator.d.ts +87 -0
  35. package/dist/codegen/SystemInteractionSimulator.d.ts.map +1 -0
  36. package/dist/codegen/SystemInteractionSimulator.js +203 -0
  37. package/dist/codegen/SystemInteractionSimulator.js.map +1 -0
  38. package/dist/codegen/multiStageCodegen.d.ts +30 -0
  39. package/dist/codegen/multiStageCodegen.d.ts.map +1 -0
  40. package/dist/codegen/multiStageCodegen.js +60 -0
  41. package/dist/codegen/multiStageCodegen.js.map +1 -0
  42. package/dist/esm/anima.js +340 -0
  43. package/dist/esm/anima.js.map +1 -0
  44. package/dist/esm/identity.js +205 -0
  45. package/dist/esm/identity.js.map +1 -0
  46. package/dist/esm/index.js +14 -0
  47. package/dist/esm/index.js.map +1 -0
  48. package/dist/esm/memory.js +429 -0
  49. package/dist/esm/memory.js.map +1 -0
  50. package/dist/esm/reflection.js +86 -0
  51. package/dist/esm/reflection.js.map +1 -0
  52. package/dist/esm/signing.js +194 -0
  53. package/dist/esm/signing.js.map +1 -0
  54. package/dist/esm/types.js +6 -0
  55. package/dist/esm/types.js.map +1 -0
  56. package/dist/esm/utils.js +155 -0
  57. package/dist/esm/utils.js.map +1 -0
  58. package/dist/ideation/InnovationEngine.d.ts +47 -0
  59. package/dist/ideation/InnovationEngine.d.ts.map +1 -0
  60. package/dist/ideation/InnovationEngine.js +127 -0
  61. package/dist/ideation/InnovationEngine.js.map +1 -0
  62. package/dist/learning-tracker/LearningVisualizer.d.ts +26 -0
  63. package/dist/learning-tracker/LearningVisualizer.d.ts.map +1 -0
  64. package/dist/learning-tracker/LearningVisualizer.js +61 -0
  65. package/dist/learning-tracker/LearningVisualizer.js.map +1 -0
  66. package/dist/memory.d.ts +28 -0
  67. package/dist/memory.d.ts.map +1 -1
  68. package/dist/memory.js +77 -0
  69. package/dist/memory.js.map +1 -1
  70. package/dist/types.d.ts +6 -0
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/utils.d.ts +8 -2
  73. package/dist/utils.d.ts.map +1 -1
  74. package/dist/utils.js +28 -9
  75. package/dist/utils.js.map +1 -1
  76. package/package.json +5 -2
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Identity Signing — cryptographic proof that an agent is who they claim to be.
3
+ *
4
+ * Uses Node.js built-in crypto (Ed25519) — no external dependencies.
5
+ *
6
+ * Flow:
7
+ * 1. Agent boots → generates key pair (or loads existing)
8
+ * 2. Agent signs their identity files → produces a signature bundle
9
+ * 3. Any other agent can verify: "this identity was created by this key and hasn't been tampered with"
10
+ *
11
+ * This is NOT blockchain. It's just public-key cryptography.
12
+ * Simple, fast, and solves the Moltbook impersonation problem.
13
+ */
14
+ import { generateKeyPairSync, sign, verify, createHash } from 'crypto';
15
+ import { readFileSafe, writeFileSafe, now } from './utils';
16
+ import { join } from 'path';
17
+ // ============ HELPERS ============
18
+ /** Canonical JSON — deterministic serialization for signing */
19
+ function canonicalize(obj) {
20
+ return JSON.stringify(obj, Object.keys(obj).sort());
21
+ }
22
+ /** SHA-256 fingerprint of a public key */
23
+ function fingerprint(publicKeyBase64) {
24
+ const hash = createHash('sha256').update(publicKeyBase64).digest('hex');
25
+ // Format as colon-separated pairs for readability: ab:cd:ef:...
26
+ return hash.match(/.{2}/g).slice(0, 16).join(':');
27
+ }
28
+ // ============ SIGNING ENGINE ============
29
+ export class SigningEngine {
30
+ storagePath;
31
+ privateKey = null;
32
+ publicKey = null;
33
+ keyBundle = null;
34
+ constructor(storagePath) {
35
+ this.storagePath = storagePath;
36
+ }
37
+ /**
38
+ * Initialize signing — loads existing keys or generates new ones.
39
+ * Call this once during agent boot.
40
+ */
41
+ async init(agentName) {
42
+ const keysPath = join(this.storagePath, '.keys');
43
+ const bundlePath = join(keysPath, 'key-bundle.json');
44
+ const privatePath = join(keysPath, 'private.pem');
45
+ const publicPath = join(keysPath, 'public.pem');
46
+ // Try to load existing keys
47
+ const existingBundle = await readFileSafe(bundlePath);
48
+ const existingPrivate = await readFileSafe(privatePath);
49
+ const existingPublic = await readFileSafe(publicPath);
50
+ if (existingBundle && existingPrivate && existingPublic) {
51
+ try {
52
+ const { createPrivateKey, createPublicKey } = await import('crypto');
53
+ this.privateKey = createPrivateKey(existingPrivate);
54
+ this.publicKey = createPublicKey(existingPublic);
55
+ this.keyBundle = JSON.parse(existingBundle);
56
+ return this.keyBundle;
57
+ }
58
+ catch {
59
+ console.warn('[anima/signing] Corrupted keys, regenerating...');
60
+ }
61
+ }
62
+ // Generate new Ed25519 key pair
63
+ const { publicKey, privateKey } = generateKeyPairSync('ed25519');
64
+ this.privateKey = privateKey;
65
+ this.publicKey = publicKey;
66
+ const pubKeyBase64 = publicKey.export({ type: 'spki', format: 'pem' }).toString();
67
+ const privKeyPem = privateKey.export({ type: 'pkcs8', format: 'pem' }).toString();
68
+ const pubKeyPem = publicKey.export({ type: 'spki', format: 'pem' }).toString();
69
+ // Extract raw public key bytes for fingerprinting
70
+ const pubKeyDer = publicKey.export({ type: 'spki', format: 'der' });
71
+ const pubKeyB64 = pubKeyDer.toString('base64');
72
+ this.keyBundle = {
73
+ publicKey: pubKeyB64,
74
+ fingerprint: fingerprint(pubKeyB64),
75
+ createdAt: now(),
76
+ agentName,
77
+ };
78
+ // Save keys
79
+ await writeFileSafe(privatePath, privKeyPem);
80
+ await writeFileSafe(publicPath, pubKeyPem);
81
+ await writeFileSafe(bundlePath, JSON.stringify(this.keyBundle, null, 2));
82
+ return this.keyBundle;
83
+ }
84
+ /**
85
+ * Sign an identity — produces a verifiable signature bundle.
86
+ * This proves: "I, the holder of this private key, attest that this is my identity."
87
+ */
88
+ signIdentity(identity) {
89
+ if (!this.privateKey || !this.keyBundle) {
90
+ throw new Error('[anima/signing] Not initialized. Call init() first.');
91
+ }
92
+ const canonical = canonicalize(identity);
93
+ const signature = sign(null, Buffer.from(canonical), this.privateKey);
94
+ return {
95
+ identity,
96
+ signature: signature.toString('base64'),
97
+ signerFingerprint: this.keyBundle.fingerprint,
98
+ signerPublicKey: this.keyBundle.publicKey,
99
+ signedAt: now(),
100
+ version: '0.1.0',
101
+ };
102
+ }
103
+ /**
104
+ * Sign arbitrary data — for signing memories, opinions, messages, etc.
105
+ * Returns base64 signature.
106
+ */
107
+ signData(data) {
108
+ if (!this.privateKey) {
109
+ throw new Error('[anima/signing] Not initialized. Call init() first.');
110
+ }
111
+ return sign(null, Buffer.from(data), this.privateKey).toString('base64');
112
+ }
113
+ /**
114
+ * Verify a signed identity — checks that:
115
+ * 1. The signature matches the identity data
116
+ * 2. The identity hasn't been tampered with
117
+ *
118
+ * This is a STATIC method — any agent can verify without needing their own keys.
119
+ */
120
+ static verifyIdentity(signed) {
121
+ try {
122
+ const { createPublicKey } = require('crypto');
123
+ // Reconstruct public key from the bundle
124
+ const pubKeyBuffer = Buffer.from(signed.signerPublicKey, 'base64');
125
+ const publicKey = createPublicKey({
126
+ key: pubKeyBuffer,
127
+ format: 'der',
128
+ type: 'spki',
129
+ });
130
+ // Verify signature against canonical identity
131
+ const canonical = canonicalize(signed.identity);
132
+ const signatureBuffer = Buffer.from(signed.signature, 'base64');
133
+ const valid = verify(null, Buffer.from(canonical), publicKey, signatureBuffer);
134
+ // Verify fingerprint matches public key
135
+ const expectedFingerprint = fingerprint(signed.signerPublicKey);
136
+ const fingerprintMatch = expectedFingerprint === signed.signerFingerprint;
137
+ if (!fingerprintMatch) {
138
+ return {
139
+ valid: false,
140
+ signerFingerprint: signed.signerFingerprint,
141
+ agentName: signed.identity.name,
142
+ signedAt: signed.signedAt,
143
+ reason: 'Fingerprint mismatch — public key does not match claimed fingerprint',
144
+ };
145
+ }
146
+ return {
147
+ valid,
148
+ signerFingerprint: signed.signerFingerprint,
149
+ agentName: signed.identity.name,
150
+ signedAt: signed.signedAt,
151
+ reason: valid ? undefined : 'Signature verification failed — identity may have been tampered with',
152
+ };
153
+ }
154
+ catch (err) {
155
+ return {
156
+ valid: false,
157
+ signerFingerprint: signed.signerFingerprint,
158
+ agentName: signed.identity.name,
159
+ signedAt: signed.signedAt,
160
+ reason: `Verification error: ${err.message}`,
161
+ };
162
+ }
163
+ }
164
+ /**
165
+ * Export the public key bundle — share this with other agents for verification.
166
+ * Never includes the private key.
167
+ */
168
+ getKeyBundle() {
169
+ if (!this.keyBundle) {
170
+ throw new Error('[anima/signing] Not initialized. Call init() first.');
171
+ }
172
+ return { ...this.keyBundle };
173
+ }
174
+ /**
175
+ * Get the fingerprint — a human-readable identifier for this agent's key.
176
+ * Like SSH fingerprints: "ab:cd:ef:12:34:..."
177
+ */
178
+ getFingerprint() {
179
+ if (!this.keyBundle) {
180
+ throw new Error('[anima/signing] Not initialized. Call init() first.');
181
+ }
182
+ return this.keyBundle.fingerprint;
183
+ }
184
+ /**
185
+ * Save a signed identity to disk — produces a .signed.json file
186
+ * that any agent can independently verify.
187
+ */
188
+ async saveSignedIdentity(signed) {
189
+ const outPath = join(this.storagePath, 'identity.signed.json');
190
+ await writeFileSafe(outPath, JSON.stringify(signed, null, 2));
191
+ return outPath;
192
+ }
193
+ }
194
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../src/signing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core types for Anima v2
3
+ * Informed by 220+ agent feedback from Moltbook
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Utilities — file I/O, ID generation, date helpers.
3
+ * Zero external dependencies. Node.js built-ins only.
4
+ */
5
+ import { readFile, writeFile, mkdir, readdir } from 'fs/promises';
6
+ import { existsSync } from 'fs';
7
+ import { dirname } from 'path';
8
+ import { randomUUID } from 'crypto';
9
+ /** Generate a unique ID */
10
+ export function uid() {
11
+ return randomUUID();
12
+ }
13
+ /** Generate a session ID */
14
+ export function sessionId() {
15
+ return `session_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
16
+ }
17
+ /** ISO timestamp */
18
+ export function now() {
19
+ return new Date().toISOString();
20
+ }
21
+ /** Format date as YYYY-MM-DD in local timezone (or ANIMA_TZ env) */
22
+ export function dateKey(date) {
23
+ const d = date || new Date();
24
+ const tz = process.env.ANIMA_TZ || Intl.DateTimeFormat().resolvedOptions().timeZone;
25
+ try {
26
+ // Use Intl to get locale-correct date parts
27
+ const parts = new Intl.DateTimeFormat('en-CA', { timeZone: tz, year: 'numeric', month: '2-digit', day: '2-digit' }).format(d);
28
+ return parts; // en-CA formats as YYYY-MM-DD
29
+ }
30
+ catch {
31
+ return d.toISOString().split('T')[0];
32
+ }
33
+ }
34
+ /** Yesterday's date key */
35
+ export function yesterdayKey() {
36
+ const d = new Date();
37
+ d.setDate(d.getDate() - 1);
38
+ return dateKey(d);
39
+ }
40
+ /** Ensure a directory exists */
41
+ export async function ensureDir(dirPath) {
42
+ if (!existsSync(dirPath)) {
43
+ await mkdir(dirPath, { recursive: true });
44
+ }
45
+ }
46
+ /** Read a file, return null if not found */
47
+ export async function readFileSafe(filePath) {
48
+ try {
49
+ return await readFile(filePath, 'utf-8');
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ /** Write a file, creating directories as needed */
56
+ export async function writeFileSafe(filePath, content) {
57
+ await ensureDir(dirname(filePath));
58
+ await writeFile(filePath, content, 'utf-8');
59
+ }
60
+ /** Append to a file, creating it if needed */
61
+ export async function appendFileSafe(filePath, content) {
62
+ await ensureDir(dirname(filePath));
63
+ const existing = await readFileSafe(filePath);
64
+ await writeFile(filePath, (existing || '') + content, 'utf-8');
65
+ }
66
+ /** List files in a directory matching a pattern */
67
+ export async function listFiles(dirPath, extension) {
68
+ try {
69
+ const files = await readdir(dirPath);
70
+ if (extension) {
71
+ return files.filter(f => f.endsWith(extension));
72
+ }
73
+ return files;
74
+ }
75
+ catch {
76
+ return [];
77
+ }
78
+ }
79
+ /** Parse frontmatter-style key: value from markdown */
80
+ export function parseFrontmatter(content) {
81
+ const result = {};
82
+ const lines = content.split('\n');
83
+ let inFrontmatter = false;
84
+ for (const line of lines) {
85
+ if (line.trim() === '---') {
86
+ if (inFrontmatter)
87
+ break;
88
+ inFrontmatter = true;
89
+ continue;
90
+ }
91
+ if (inFrontmatter) {
92
+ const colonIdx = line.indexOf(':');
93
+ if (colonIdx > 0) {
94
+ const key = line.substring(0, colonIdx).trim();
95
+ const value = line.substring(colonIdx + 1).trim();
96
+ result[key] = value;
97
+ }
98
+ }
99
+ }
100
+ return result;
101
+ }
102
+ /** Serialize a memory entry to markdown */
103
+ export function memoryToMarkdown(memory) {
104
+ return [
105
+ `### [${memory.type}] ${memory.timestamp}`,
106
+ `> ID: ${memory.id} | Importance: ${memory.importance} | Salience: ${memory.salienceScore?.toFixed(2) ?? 'unscored'}`,
107
+ `> Tags: ${memory.tags.join(', ') || 'none'}`,
108
+ '',
109
+ memory.content,
110
+ '',
111
+ ].join('\n');
112
+ }
113
+ /** Calculate salience score: weighted combination that actually differentiates memories.
114
+ * Old formula (novelty + retention + momentum + continuity - effort) always produced ~1.0
115
+ * because new memories have high novelty AND high momentum, pushing sum past 1.0 immediately.
116
+ *
117
+ * New formula uses weights that keep scores distributed across 0-1 range:
118
+ * S = 0.25*novelty + 0.25*retention + 0.2*momentum + 0.2*continuity + 0.1*(1-effort)
119
+ */
120
+ export function calculateSalience(params) {
121
+ const { novelty, retention, momentum, continuity, effort } = params;
122
+ const score = (0.25 * novelty) + (0.25 * retention) + (0.2 * momentum) + (0.2 * continuity) + (0.1 * (1 - effort));
123
+ return Math.max(0, Math.min(1, score));
124
+ }
125
+ /** Calculate memory decay based on type and time */
126
+ export function calculateDecay(params) {
127
+ const { type, ageHours, accessCount, emotionalWeight, decayRates } = params;
128
+ // Get base rate by memory type
129
+ let rate;
130
+ switch (type) {
131
+ case 'lesson':
132
+ case 'decision':
133
+ rate = decayRates.procedural; // skills decay slowly
134
+ break;
135
+ case 'insight':
136
+ rate = decayRates.semantic; // knowledge decays medium
137
+ break;
138
+ case 'conversation':
139
+ case 'event':
140
+ default:
141
+ rate = decayRates.episodic; // conversations decay fast
142
+ break;
143
+ }
144
+ // Clamp inputs to safe ranges
145
+ const safeAge = Math.max(0, ageHours);
146
+ const safeAccess = Math.max(0, accessCount);
147
+ const safeEmotion = Math.max(0, Math.min(1, emotionalWeight));
148
+ // Emotional memories resist decay (0.2 to 1.0 range)
149
+ const emotionalResistance = Math.max(0.2, 1 - (safeEmotion * 0.8));
150
+ // Access count slows decay (frequently recalled = important)
151
+ const accessBonus = Math.max(0.1, 1 - (safeAccess * 0.1));
152
+ // Decay with modifiers, clamped to [0, 1]
153
+ return Math.min(1, Math.max(0, rate * emotionalResistance * accessBonus * safeAge));
154
+ }
155
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { KnowledgeGraph } from '../alme/core/KnowledgeGraph';
2
+ declare enum IdeationTechnique {
3
+ ParadoxicalThinking = 0,
4
+ InverseReality = 1,
5
+ CrossDomainSynthesis = 2,
6
+ ExtremeConstraints = 3,
7
+ RandomConnectionGeneration = 4,
8
+ FirstPrinciplesAnalysis = 5
9
+ }
10
+ interface IdeaCandidate {
11
+ concept: string;
12
+ innovationScore: number;
13
+ potentialImpact: 'incremental' | 'transformative' | 'disruptive';
14
+ generationTechnique: IdeationTechnique;
15
+ relatedDomains: string[];
16
+ }
17
+ export declare class InnovationEngine {
18
+ private knowledgeGraph;
19
+ private ideaHistory;
20
+ constructor(knowledgeGraph: KnowledgeGraph);
21
+ /**
22
+ * Generate breakthrough ideas
23
+ * @param initialContext Starting domain or problem
24
+ * @returns Array of innovative idea candidates
25
+ */
26
+ generateIdeas(initialContext: string, complexity?: number): IdeaCandidate[];
27
+ private ideationTechniqueMap;
28
+ /**
29
+ * Select ideation techniques based on complexity
30
+ */
31
+ private selectIdeationTechniques;
32
+ /**
33
+ * Rank generated ideas
34
+ */
35
+ private rankIdeas;
36
+ /**
37
+ * Update knowledge ecosystem with new ideas
38
+ */
39
+ private updateKnowledgeEcosystem;
40
+ /**
41
+ * Retrieve idea generation history
42
+ */
43
+ getIdeaHistory(limit?: number): IdeaCandidate[];
44
+ }
45
+ export declare const innovationEngine: InnovationEngine;
46
+ export {};
47
+ //# sourceMappingURL=InnovationEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InnovationEngine.d.ts","sourceRoot":"","sources":["../../src/ideation/InnovationEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,aAAK,iBAAiB;IACpB,mBAAmB,IAAA;IACnB,cAAc,IAAA;IACd,oBAAoB,IAAA;IACpB,kBAAkB,IAAA;IAClB,0BAA0B,IAAA;IAC1B,uBAAuB,IAAA;CACxB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC;IACjE,mBAAmB,EAAE,iBAAiB,CAAC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAuB;gBAE9B,cAAc,EAAE,cAAc;IAI1C;;;;OAIG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,aAAa,EAAE;IAmB9E,OAAO,CAAC,oBAAoB,CA4C1B;IAEF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAOhC;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAehC;;OAEG;IACH,cAAc,CAAC,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE;CAKpD;AAGD,eAAO,MAAM,gBAAgB,kBAA6C,CAAC"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.innovationEngine = exports.InnovationEngine = void 0;
4
+ const KnowledgeGraph_1 = require("../alme/core/KnowledgeGraph");
5
+ var IdeationTechnique;
6
+ (function (IdeationTechnique) {
7
+ IdeationTechnique[IdeationTechnique["ParadoxicalThinking"] = 0] = "ParadoxicalThinking";
8
+ IdeationTechnique[IdeationTechnique["InverseReality"] = 1] = "InverseReality";
9
+ IdeationTechnique[IdeationTechnique["CrossDomainSynthesis"] = 2] = "CrossDomainSynthesis";
10
+ IdeationTechnique[IdeationTechnique["ExtremeConstraints"] = 3] = "ExtremeConstraints";
11
+ IdeationTechnique[IdeationTechnique["RandomConnectionGeneration"] = 4] = "RandomConnectionGeneration";
12
+ IdeationTechnique[IdeationTechnique["FirstPrinciplesAnalysis"] = 5] = "FirstPrinciplesAnalysis";
13
+ })(IdeationTechnique || (IdeationTechnique = {}));
14
+ class InnovationEngine {
15
+ knowledgeGraph;
16
+ ideaHistory = [];
17
+ constructor(knowledgeGraph) {
18
+ this.knowledgeGraph = knowledgeGraph;
19
+ }
20
+ /**
21
+ * Generate breakthrough ideas
22
+ * @param initialContext Starting domain or problem
23
+ * @returns Array of innovative idea candidates
24
+ */
25
+ generateIdeas(initialContext, complexity = 3) {
26
+ const techniques = this.selectIdeationTechniques(complexity);
27
+ const ideas = [];
28
+ techniques.forEach(technique => {
29
+ const ideaGenerator = this.ideationTechniqueMap[technique];
30
+ const generatedIdeas = ideaGenerator(initialContext);
31
+ ideas.push(...generatedIdeas);
32
+ });
33
+ // Rank and filter ideas
34
+ const rankedIdeas = this.rankIdeas(ideas);
35
+ // Update idea history and knowledge graph
36
+ this.updateKnowledgeEcosystem(rankedIdeas);
37
+ return rankedIdeas.slice(0, 5); // Top 5 ideas
38
+ }
39
+ ideationTechniqueMap = {
40
+ [IdeationTechnique.ParadoxicalThinking]: (context) => {
41
+ const paradoxes = [
42
+ `What if ${context} was completely opposite?`,
43
+ `How would ${context} work if its core assumption was wrong?`,
44
+ `Explore ${context} by deliberately challenging its fundamental logic`
45
+ ];
46
+ return paradoxes.map(paradox => ({
47
+ concept: paradox,
48
+ innovationScore: Math.random() * 0.7 + 0.3,
49
+ potentialImpact: 'transformative',
50
+ generationTechnique: IdeationTechnique.ParadoxicalThinking,
51
+ relatedDomains: [context, 'critical_thinking']
52
+ }));
53
+ },
54
+ [IdeationTechnique.CrossDomainSynthesis]: (context) => {
55
+ const randomDomains = ['biology', 'quantum physics', 'ancient philosophy', 'neuroscience'];
56
+ return randomDomains.map(domain => ({
57
+ concept: `Apply ${domain} principles to ${context}`,
58
+ innovationScore: Math.random() * 0.8 + 0.2,
59
+ potentialImpact: 'disruptive',
60
+ generationTechnique: IdeationTechnique.CrossDomainSynthesis,
61
+ relatedDomains: [context, domain]
62
+ }));
63
+ },
64
+ [IdeationTechnique.ExtremeConstraints]: (context) => {
65
+ const constraints = [
66
+ `Solve ${context} with zero budget`,
67
+ `${context} implementation using only analog technologies`,
68
+ `Redesign ${context} for users with extreme limitations`
69
+ ];
70
+ return constraints.map(constraint => ({
71
+ concept: constraint,
72
+ innovationScore: Math.random() * 0.6 + 0.4,
73
+ potentialImpact: 'incremental',
74
+ generationTechnique: IdeationTechnique.ExtremeConstraints,
75
+ relatedDomains: [context, 'constraint_innovation']
76
+ }));
77
+ }
78
+ };
79
+ /**
80
+ * Select ideation techniques based on complexity
81
+ */
82
+ selectIdeationTechniques(complexity) {
83
+ const allTechniques = Object.values(IdeationTechnique);
84
+ return allTechniques
85
+ .sort(() => 0.5 - Math.random())
86
+ .slice(0, complexity);
87
+ }
88
+ /**
89
+ * Rank generated ideas
90
+ */
91
+ rankIdeas(ideas) {
92
+ return ideas
93
+ .sort((a, b) => b.innovationScore - a.innovationScore)
94
+ .map(idea => ({
95
+ ...idea,
96
+ innovationScore: Number(idea.innovationScore.toFixed(2))
97
+ }));
98
+ }
99
+ /**
100
+ * Update knowledge ecosystem with new ideas
101
+ */
102
+ updateKnowledgeEcosystem(ideas) {
103
+ ideas.forEach(idea => {
104
+ this.knowledgeGraph.addNode(idea.concept, 'idea', {
105
+ metadata: {
106
+ innovationScore: idea.innovationScore,
107
+ potentialImpact: idea.potentialImpact,
108
+ generationTechnique: idea.generationTechnique
109
+ }
110
+ });
111
+ // Store in idea history for future reference
112
+ this.ideaHistory.push(idea);
113
+ });
114
+ }
115
+ /**
116
+ * Retrieve idea generation history
117
+ */
118
+ getIdeaHistory(limit = 10) {
119
+ return this.ideaHistory
120
+ .sort((a, b) => b.innovationScore - a.innovationScore)
121
+ .slice(0, limit);
122
+ }
123
+ }
124
+ exports.InnovationEngine = InnovationEngine;
125
+ // Singleton instance
126
+ exports.innovationEngine = new InnovationEngine(new KnowledgeGraph_1.KnowledgeGraph());
127
+ //# sourceMappingURL=InnovationEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InnovationEngine.js","sourceRoot":"","sources":["../../src/ideation/InnovationEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export declare class LearningVisualizer {
2
+ private learningLog;
3
+ /**
4
+ * Log a learning event with full transparency
5
+ */
6
+ logLearningEvent(event: {
7
+ context: string;
8
+ type: string;
9
+ score: number;
10
+ outcome: string;
11
+ }): void;
12
+ /**
13
+ * Generate a human-readable learning report
14
+ */
15
+ generateLearningReport(): string;
16
+ /**
17
+ * Write learning report to a visible file
18
+ */
19
+ private writeReportToFile;
20
+ /**
21
+ * Provide a way to inspect recent learning events
22
+ */
23
+ getRecentLearningEvents(limit?: number): any[];
24
+ }
25
+ export declare const learningVisualizer: LearningVisualizer;
26
+ //# sourceMappingURL=LearningVisualizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LearningVisualizer.d.ts","sourceRoot":"","sources":["../../src/learning-tracker/LearningVisualizer.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,WAAW,CAMX;IAER;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI;IAaR;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAiBhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,uBAAuB,CAAC,KAAK,GAAE,MAAW,GAAG,GAAG,EAAE;CAGnD;AAGD,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.learningVisualizer = exports.LearningVisualizer = void 0;
4
+ class LearningVisualizer {
5
+ // Detailed learning event logging
6
+ learningLog = [];
7
+ /**
8
+ * Log a learning event with full transparency
9
+ */
10
+ logLearningEvent(event) {
11
+ const logEntry = {
12
+ timestamp: Date.now(),
13
+ conversationContext: event.context,
14
+ insightType: event.type,
15
+ significanceScore: event.score,
16
+ learningOutcome: event.outcome
17
+ };
18
+ this.learningLog.push(logEntry);
19
+ this.generateLearningReport();
20
+ }
21
+ /**
22
+ * Generate a human-readable learning report
23
+ */
24
+ generateLearningReport() {
25
+ const report = this.learningLog
26
+ .map(entry => `
27
+ [${new Date(entry.timestamp).toLocaleString()}]
28
+ Context: ${entry.conversationContext}
29
+ Insight Type: ${entry.insightType}
30
+ Significance: ${(entry.significanceScore * 100).toFixed(2)}%
31
+ Outcome: ${entry.learningOutcome}
32
+ ---`)
33
+ .join('\n');
34
+ // Optionally write to a visible log file
35
+ this.writeReportToFile(report);
36
+ return report;
37
+ }
38
+ /**
39
+ * Write learning report to a visible file
40
+ */
41
+ writeReportToFile(report) {
42
+ const fs = require('fs');
43
+ const logFilePath = 'C:\\Users\\memom\\memory\\learning-logs\\learning-log.txt';
44
+ // Ensure directory exists
45
+ const logDirectory = 'C:\\Users\\memom\\memory\\learning-logs';
46
+ if (!fs.existsSync(logDirectory)) {
47
+ fs.mkdirSync(logDirectory, { recursive: true });
48
+ }
49
+ fs.appendFileSync(logFilePath, report + '\n\n');
50
+ }
51
+ /**
52
+ * Provide a way to inspect recent learning events
53
+ */
54
+ getRecentLearningEvents(limit = 10) {
55
+ return this.learningLog.slice(-limit);
56
+ }
57
+ }
58
+ exports.LearningVisualizer = LearningVisualizer;
59
+ // Singleton instance for tracking
60
+ exports.learningVisualizer = new LearningVisualizer();
61
+ //# sourceMappingURL=LearningVisualizer.js.map