lorehub
Version:
Capture and surface the collective wisdom of your codebase
74 lines • 3.25 kB
JavaScript
import React from 'react';
import { render } from 'ink';
import { Database } from '../../db/database.js';
import { AddLore } from '../components/AddLore.js';
import { getDbPath } from '../utils/db-config.js';
import { getRealmInfo } from '../utils/realm.js';
export async function renderAddLore(options) {
const dbPath = getDbPath();
const db = new Database(dbPath);
// If we have content from command line args, use non-interactive mode
if (options.initialContent && options.initialContent.trim() !== '') {
try {
const realmInfo = await getRealmInfo(process.cwd());
let realm = db.findRealmByPath(process.cwd());
if (!realm) {
realm = db.createRealm({
name: realmInfo.name,
path: realmInfo.path,
gitRemote: realmInfo.gitRemote,
isMonorepo: realmInfo.isMonorepo,
provinces: realmInfo.provinces,
});
}
// Check for duplicates before creating
const potentialDuplicates = await db.checkForDuplicates(options.initialContent, realm.id, 0.85);
if (potentialDuplicates.length > 0) {
console.log('\n⚠ Warning: Similar lores already exist:');
potentialDuplicates.slice(0, 3).forEach((dup, i) => {
console.log(` ${i + 1}. [${Math.round(dup.similarity * 100)}% similar] ${dup.content}`);
});
console.log('\nAdding lore anyway in non-interactive mode...\n');
}
const lore = await db.createLore({
realmId: realm.id,
content: options.initialContent,
type: options.type || 'decree',
why: options.why,
provinces: options.provinces || [],
sigils: options.sigils || [],
confidence: options.confidence || 80,
origin: {
type: 'manual',
reference: 'cli',
context: `Added via CLI in ${realm.name}`,
},
});
console.log('✓ Lore added successfully');
console.log(` ID: ${lore.id}`);
console.log(` Realm: ${realm.name}`);
}
catch (error) {
console.error('Error:', error instanceof Error ? error.message : 'Unknown error');
process.exit(1);
}
finally {
db.close();
}
return;
}
// Interactive mode with Ink
const { waitUntilExit } = render(React.createElement(AddLore, { db: db, realmPath: process.cwd(), initialContent: options.initialContent || '', initialType: options.type, initialWhy: options.why, initialProvinces: options.provinces, initialSigils: options.sigils, initialConfidence: options.confidence, onComplete: (success) => {
if (success && options.initialContent) {
// For non-interactive mode, show a simple success message
console.log('✓ Lore added successfully');
}
} }));
try {
await waitUntilExit();
}
finally {
db.close();
}
}
//# sourceMappingURL=add.js.map