Initial commit with translated description
This commit is contained in:
187
bin/elite-memory.js
Normal file
187
bin/elite-memory.js
Normal file
@@ -0,0 +1,187 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const TEMPLATES = {
|
||||
'session-state': `# SESSION-STATE.md — Active Working Memory
|
||||
|
||||
This file is the agent's "RAM" — survives compaction, restarts, distractions.
|
||||
Chat history is a BUFFER. This file is STORAGE.
|
||||
|
||||
## Current Task
|
||||
[None]
|
||||
|
||||
## Key Context
|
||||
[None yet]
|
||||
|
||||
## Pending Actions
|
||||
- [ ] None
|
||||
|
||||
## Recent Decisions
|
||||
[None yet]
|
||||
|
||||
---
|
||||
*Last updated: ${new Date().toISOString()}*
|
||||
`,
|
||||
|
||||
'memory-md': `# MEMORY.md — Long-Term Memory
|
||||
|
||||
## About the User
|
||||
[Add user preferences, communication style, etc.]
|
||||
|
||||
## Projects
|
||||
[Active projects and their status]
|
||||
|
||||
## Decisions Log
|
||||
[Important decisions and why they were made]
|
||||
|
||||
## Lessons Learned
|
||||
[Mistakes to avoid, patterns that work]
|
||||
|
||||
## Preferences
|
||||
[Tools, frameworks, workflows the user prefers]
|
||||
|
||||
---
|
||||
*Curated memory — distill insights from daily logs here*
|
||||
`,
|
||||
|
||||
'daily-template': `# {{DATE}} — Daily Log
|
||||
|
||||
## Tasks Completed
|
||||
-
|
||||
|
||||
## Decisions Made
|
||||
-
|
||||
|
||||
## Lessons Learned
|
||||
-
|
||||
|
||||
## Tomorrow
|
||||
-
|
||||
`
|
||||
};
|
||||
|
||||
const commands = {
|
||||
init: () => {
|
||||
console.log('🧠 Initializing Elite Longterm Memory...\n');
|
||||
|
||||
// Create SESSION-STATE.md
|
||||
if (!fs.existsSync('SESSION-STATE.md')) {
|
||||
fs.writeFileSync('SESSION-STATE.md', TEMPLATES['session-state']);
|
||||
console.log('✓ Created SESSION-STATE.md (Hot RAM)');
|
||||
} else {
|
||||
console.log('• SESSION-STATE.md already exists');
|
||||
}
|
||||
|
||||
// Create MEMORY.md
|
||||
if (!fs.existsSync('MEMORY.md')) {
|
||||
fs.writeFileSync('MEMORY.md', TEMPLATES['memory-md']);
|
||||
console.log('✓ Created MEMORY.md (Curated Archive)');
|
||||
} else {
|
||||
console.log('• MEMORY.md already exists');
|
||||
}
|
||||
|
||||
// Create memory directory
|
||||
if (!fs.existsSync('memory')) {
|
||||
fs.mkdirSync('memory', { recursive: true });
|
||||
console.log('✓ Created memory/ directory');
|
||||
} else {
|
||||
console.log('• memory/ directory already exists');
|
||||
}
|
||||
|
||||
// Create today's log
|
||||
const today = new Date().toISOString().split('T')[0];
|
||||
const todayFile = `memory/${today}.md`;
|
||||
if (!fs.existsSync(todayFile)) {
|
||||
const content = TEMPLATES['daily-template'].replace('{{DATE}}', today);
|
||||
fs.writeFileSync(todayFile, content);
|
||||
console.log(`✓ Created ${todayFile}`);
|
||||
}
|
||||
|
||||
console.log('\n🎉 Elite Longterm Memory initialized!');
|
||||
console.log('\nNext steps:');
|
||||
console.log('1. Add SESSION-STATE.md to your agent context');
|
||||
console.log('2. Configure LanceDB plugin in clawdbot.json');
|
||||
console.log('3. Review SKILL.md for full setup guide');
|
||||
},
|
||||
|
||||
today: () => {
|
||||
const today = new Date().toISOString().split('T')[0];
|
||||
const todayFile = `memory/${today}.md`;
|
||||
|
||||
if (!fs.existsSync('memory')) {
|
||||
fs.mkdirSync('memory', { recursive: true });
|
||||
}
|
||||
|
||||
if (!fs.existsSync(todayFile)) {
|
||||
const content = TEMPLATES['daily-template'].replace('{{DATE}}', today);
|
||||
fs.writeFileSync(todayFile, content);
|
||||
console.log(`✓ Created ${todayFile}`);
|
||||
} else {
|
||||
console.log(`• ${todayFile} already exists`);
|
||||
}
|
||||
},
|
||||
|
||||
status: () => {
|
||||
console.log('🧠 Elite Longterm Memory Status\n');
|
||||
|
||||
// Check SESSION-STATE.md
|
||||
if (fs.existsSync('SESSION-STATE.md')) {
|
||||
const stat = fs.statSync('SESSION-STATE.md');
|
||||
console.log(`✓ SESSION-STATE.md (${(stat.size / 1024).toFixed(1)}KB, modified ${stat.mtime.toLocaleString()})`);
|
||||
} else {
|
||||
console.log('✗ SESSION-STATE.md missing');
|
||||
}
|
||||
|
||||
// Check MEMORY.md
|
||||
if (fs.existsSync('MEMORY.md')) {
|
||||
const stat = fs.statSync('MEMORY.md');
|
||||
const lines = fs.readFileSync('MEMORY.md', 'utf8').split('\n').length;
|
||||
console.log(`✓ MEMORY.md (${lines} lines, ${(stat.size / 1024).toFixed(1)}KB)`);
|
||||
} else {
|
||||
console.log('✗ MEMORY.md missing');
|
||||
}
|
||||
|
||||
// Check memory directory
|
||||
if (fs.existsSync('memory')) {
|
||||
const files = fs.readdirSync('memory').filter(f => f.endsWith('.md'));
|
||||
console.log(`✓ memory/ (${files.length} daily logs)`);
|
||||
} else {
|
||||
console.log('✗ memory/ directory missing');
|
||||
}
|
||||
|
||||
// Check LanceDB
|
||||
const lancedbPath = path.join(process.env.HOME, '.clawdbot/memory/lancedb');
|
||||
if (fs.existsSync(lancedbPath)) {
|
||||
console.log('✓ LanceDB vectors initialized');
|
||||
} else {
|
||||
console.log('• LanceDB not initialized (optional)');
|
||||
}
|
||||
},
|
||||
|
||||
help: () => {
|
||||
console.log(`
|
||||
🧠 Elite Longterm Memory CLI
|
||||
|
||||
Commands:
|
||||
init Initialize memory system in current directory
|
||||
today Create today's daily log file
|
||||
status Check memory system health
|
||||
help Show this help
|
||||
|
||||
Usage:
|
||||
npx elite-longterm-memory init
|
||||
npx elite-longterm-memory status
|
||||
`);
|
||||
}
|
||||
};
|
||||
|
||||
const command = process.argv[2] || 'help';
|
||||
|
||||
if (commands[command]) {
|
||||
commands[command]();
|
||||
} else {
|
||||
console.log(`Unknown command: ${command}`);
|
||||
commands.help();
|
||||
}
|
||||
Reference in New Issue
Block a user