Files
waggle-os/scripts/read-wiki-pages.mjs
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

72 lines
2.5 KiB
JavaScript

import path from 'node:path';
import os from 'node:os';
import fs from 'node:fs';
import { MindDB, FrameStore, KnowledgeGraph, HybridSearch, createEmbeddingProvider } from '@waggle/core';
import { WikiCompiler, CompilationState, resolveSynthesizer } from '@waggle/wiki-compiler';
const db = new MindDB(path.join(os.homedir(), '.waggle', 'personal.mind'));
const kg = new KnowledgeGraph(db);
const frameStore = new FrameStore(db);
const embedder = await createEmbeddingProvider({
provider: process.env.WAGGLE_EMBEDDING_PROVIDER ?? 'inprocess',
inprocess: { cacheDir: path.join(os.homedir(), '.waggle', 'models') },
});
const search = new HybridSearch(db, embedder);
const state = new CompilationState(db);
const synth = await resolveSynthesizer();
console.log('Synthesizer:', synth.provider, '| Model:', synth.model);
const compiler = new WikiCompiler(kg, frameStore, search, state, {
synthesize: synth.synthesize,
});
// Output dir
const outDir = path.join(process.cwd(), 'docs', 'wiki-live');
fs.mkdirSync(outDir, { recursive: true });
// Compile key pages and write to disk + print
const pagesToCompile = [
{ type: 'entity', name: 'Marko Markovic' },
{ type: 'entity', name: 'Waggle OS' },
{ type: 'entity', name: 'KVARK' },
{ type: 'entity', name: 'Egzakta Group' },
{ type: 'concept', name: 'Memory Harvest' },
{ type: 'concept', name: 'Wiki Compiler' },
{ type: 'synthesis', name: 'Waggle OS' },
];
for (const p of pagesToCompile) {
console.log(`\n${'='.repeat(70)}`);
console.log(`Compiling: ${p.type}${p.name}`);
console.log('='.repeat(70));
let page;
if (p.type === 'entity') {
const entity = kg.searchEntities(p.name, 1).find(e => e.name === p.name);
if (!entity) { console.log('Entity not found:', p.name); continue; }
page = await compiler.compileEntityPage(entity);
} else if (p.type === 'concept') {
page = await compiler.compileConceptPage(p.name);
} else if (p.type === 'synthesis') {
page = await compiler.compileSynthesisPage(p.name);
}
if (!page) { console.log('No page generated (insufficient data)'); continue; }
// Write to disk
const filePath = path.join(outDir, `${page.slug}.md`);
fs.writeFileSync(filePath, page.markdown);
console.log(`Written: ${filePath}`);
// Print content
console.log('\n' + page.markdown);
}
// Also compile and write index
const indexPage = compiler.compileIndex();
fs.writeFileSync(path.join(outDir, 'index.md'), indexPage.markdown);
console.log(`\nIndex written: ${path.join(outDir, 'index.md')}`);
db.close();
console.log('\nDone! Pages at docs/wiki-live/');