Files
wevia-brain/s89-ai-apis/kb-sync-cron.php
2026-04-12 23:01:36 +02:00

48 lines
3.1 KiB
PHP
Executable File

<?php
// KB Sync Cron - syncs knowledge_base -> claude_conversations_kb -> commonia_knowledge
// Called by: curl -s http://localhost:5821/api/kb-sync-cron.php
$log = "/var/log/wevads/claude_kb_sync.log";
@mkdir(dirname($log), 0755, true);
$pdo = new PDO('pgsql:host=localhost;dbname=adx_system','admin','admin123');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$results = [];
// Step 1: KB markdown files -> knowledge_base
$synced = 0;
foreach (glob('/opt/wevads/hamid-files/kb_*.md') as $f) {
$bn = basename($f, '.md');
$title = trim(preg_replace('/^#+\s*/', '', fgets(fopen($f, 'r'))));
$exists = $pdo->query("SELECT COUNT(*) FROM admin.knowledge_base WHERE title LIKE '%{$bn}%'")->fetchColumn();
if ($exists == 0 && $title) {
$cat = explode('_', str_replace('kb_', '', $bn))[0];
$content = file_get_contents($f);
$stmt = $pdo->prepare("INSERT INTO admin.knowledge_base (category, title, content, created_at) VALUES (?,?,?,NOW())");
$stmt->execute([$cat, $title, substr($content, 0, 5000)]);
$synced++;
}
}
$results['new_kb_files'] = $synced;
// Step 2: knowledge_base -> claude_conversations_kb
$last = $pdo->query("SELECT COALESCE(MAX(created_at),'2020-01-01') FROM admin.claude_conversations_kb")->fetchColumn();
$stmt2 = $pdo->prepare("INSERT INTO admin.claude_conversations_kb (title, summary, category, importance_score, created_at, last_synced_at) SELECT LEFT(title,200), LEFT(content,1000), UPPER(COALESCE(NULLIF(category,''),'GENERAL')), CASE WHEN category IN ('infrastructure','framework','architecture') THEN 9 WHEN category IN ('operations','security','methods') THEN 8 ELSE 7 END, created_at, NOW() FROM admin.knowledge_base WHERE created_at > ? AND title IS NOT NULL AND title != '' ORDER BY created_at LIMIT 50");
$stmt2->execute([$last]);
$results['new_conversations'] = $stmt2->rowCount();
$results['total_conversations'] = $pdo->query("SELECT COUNT(*) FROM admin.claude_conversations_kb")->fetchColumn();
// Step 3: claude_conversations_kb -> commonia_knowledge
$lastComm = $pdo->query("SELECT COALESCE(MAX(created_at),'2020-01-01') FROM admin.commonia_knowledge WHERE type='claude_session'")->fetchColumn();
$stmt3 = $pdo->prepare("INSERT INTO admin.commonia_knowledge (type, category, title, content, priority, created_at) SELECT 'claude_session', LOWER(category), LEFT(title,200), LEFT(summary,500), importance_score, created_at FROM admin.claude_conversations_kb WHERE created_at > ? AND title IS NOT NULL ORDER BY created_at LIMIT 50 ON CONFLICT DO NOTHING");
$stmt3->execute([$lastComm]);
$results['new_commonia'] = $stmt3->rowCount();
$results['total_commonia'] = $pdo->query("SELECT COUNT(*) FROM admin.commonia_knowledge WHERE type='claude_session'")->fetchColumn();
// Log
$msg = date('Y-m-d H:i:s') . " SYNC: files={$results['new_kb_files']} convs={$results['new_conversations']} (total={$results['total_conversations']}) commonia={$results['new_commonia']}\n";
file_put_contents($log, $msg, FILE_APPEND);
if (php_sapi_name() === 'cli' || isset($_GET['action'])) {
header('Content-Type: application/json');
echo json_encode(['success' => true, 'results' => $results]);
}