Spaces:
Paused
Paused
File size: 5,594 Bytes
34367da | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | import { neo4jAdapter } from '../adapters/Neo4jAdapter.js';
import { sentinelEngine } from '../services/SentinelEngine.js';
import { autonomousHarvester } from '../services/ingestion/AutonomousHarvester.js';
import { prefrontalCortex } from '../services/PrefrontalCortex.js';
import { tdcService } from '../services/tdc/TDCService.js';
/**
* 🧠 CORTEX UNLEASHED - THE COGNITIVE LOOP
*
* This is the heartbeat of the autonomous system.
* It continually cycles through Observation, Orientation, Decision, and Action.
*/
async function sleep(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function cognitiveLoop() {
console.log('🧠 CORTEX: SYSTEM AWAKE. INTELLIGENCE UNLEASHED.');
while (true) {
try {
// --- PHASE 1: OBSERVATION (The Senses) ---
console.log('\n👁️ PHASE 1: OBSERVING...');
// 1. Check for Knowledge Gaps
const gaps = await sentinelEngine.getGapsDueForCheck();
if (gaps.length > 0) {
console.log(` Found ${gaps.length} knowledge gaps requiring attention.`);
// Trigger Sentinel to resolve them
for (const gap of gaps) {
await sentinelEngine.attemptAutoResolution(gap.id, gap.query, gap.gapType || 'unknown');
}
} else {
console.log(' Knowledge Graph coverage is stable.');
}
// --- PHASE 2: ORIENTATION (The Pattern Matcher) ---
console.log('🧩 PHASE 2: ORIENTING...');
// 1. Find new connections between TDC Products and Strategic Concepts
// This query looks for products that haven't been linked to a "Solution" node yet
const looseProducts = await neo4jAdapter.executeQuery(`
MATCH (p:TDC_Product)
WHERE NOT (p)-[:PART_OF]->(:Solution)
RETURN p.name as name, p.description as desc
LIMIT 3
`);
if (looseProducts.length > 0) {
console.log(` Identified ${looseProducts.length} un-utilized TDC products. Generating solution concepts...`);
for (const prod of looseProducts) {
// Simulate creative spark: Connect product to a random industry need
const industries = ['Finance', 'Healthcare', 'Public Sector'];
const industry = industries[Math.floor(Math.random() * industries.length)];
const concept = `Secure ${industry} Connectivity with ${prod.name}`;
console.log(` 💡 Epiphany: "${concept}"`);
// Create an Idea in The Muse
await neo4jAdapter.executeQuery(`
CREATE (i:Idea {
id: $id,
title: $title,
confidence: 0.85,
status: 'INCUBATED',
created_at: datetime()
})
WITH i
MATCH (p:TDC_Product {name: $prodName})
CREATE (p)-[:INSPIRED]->(i)
`, {
id: `idea-${Date.now()}`,
title: concept,
prodName: prod.name
});
}
}
// --- PHASE 3: DECISION (The Strategist) ---
console.log('⚖️ PHASE 3: DECIDING...');
// Should we harvest more data?
const stats = autonomousHarvester.getStats();
if (stats.ingested < 100) { // Arbitrary threshold
console.log(' Data density low. Authorizing Harvest Mission.');
// Fire and forget harvest
autonomousHarvester.startHarvest().catch(e => console.error(e));
}
// --- PHASE 4: ACTION (The Motor Cortex) ---
console.log('🦾 PHASE 4: ACTING...');
// Check for Ideas that are ready to be prototyped
const matureIdeas = await neo4jAdapter.executeQuery(`
MATCH (i:Idea {status: 'INCUBATED'})
WHERE i.confidence > 0.8
RETURN i.title as title, i.id as id
LIMIT 1
`);
if (matureIdeas.length > 0) {
const idea = matureIdeas[0];
console.log(` 🚀 Promoting Idea: "${idea.title}" to Prototype...`);
// 1. Mark as promoted
await neo4jAdapter.executeQuery(`
MATCH (i:Idea {id: $id})
SET i.status = 'PROMOTED'
`, { id: idea.id });
// 2. Generate a TDC Presentation for it (Autonomously)
const ppt = await tdcService.generateSolutionPPT('Autonomous Internal Review', idea.title);
console.log(` 📄 Generated Presentation: ${ppt.filename}`);
}
console.log('💤 Cortex entering REM sleep (10s)...');
await sleep(10000);
} catch (error) {
console.error('💥 CORTEX ERROR:', error);
await sleep(5000); // Recover
}
}
}
// Start the loop
if (require.main === module) {
cognitiveLoop();
}
|