From 1c7a42f68ba3d15b3f7f74eabfb89ddf5ae28c3f Mon Sep 17 00:00:00 2001 From: Myron Blair Date: Sun, 31 May 2026 19:58:28 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20224=20voice=20intents=20seeded;=20fix?= =?UTF-8?q?=20KBEngine=20fillTemplate=20=E2=80=94=20user=5Ftitle,=20pendin?= =?UTF-8?q?g=5Fcount,=20system/network=20facts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/lib/kb_engine.php | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/api/lib/kb_engine.php b/api/lib/kb_engine.php index fbbdbfb..6be9ede 100644 --- a/api/lib/kb_engine.php +++ b/api/lib/kb_engine.php @@ -45,34 +45,49 @@ class KBEngine { 'current_date' => date('l, F j Y'), ]; - // Fetch all facts for this category (and null-category universal facts) + // Load user address preference + $prefRows = JarvisDB::query( + "SELECT pref_key, pref_value FROM kb_preferences WHERE pref_key IN ('user_name','user_title')" + ); + $prefs = []; + foreach ($prefRows ?? [] as $p) { $prefs[$p['pref_key']] = $p['pref_value']; } + $builtins['user_title'] = $prefs['user_title'] ?? $prefs['user_name'] ?? 'Sir'; + $builtins['user_name'] = $prefs['user_name'] ?? 'Myron'; + + // Computed builtins + $pendingRow = JarvisDB::single("SELECT COUNT(*) cnt FROM tasks WHERE status NOT IN ('done','cancelled')"); + $builtins['pending_count'] = (string)($pendingRow['cnt'] ?? 0); + $overdueRow = JarvisDB::single("SELECT COUNT(*) cnt FROM tasks WHERE due_date < CURDATE() AND status NOT IN ('done','cancelled')"); + $builtins['overdue_count'] = (string)($overdueRow['cnt'] ?? 0); + + // Fetch all facts for this category $facts = []; if ($category) { $rows = JarvisDB::query( 'SELECT fact_key, fact_value FROM kb_facts - WHERE category = ?', + WHERE category = ? AND (expires_at IS NULL OR expires_at > NOW())', [$category] ); - foreach ($rows as $r) { + foreach ($rows ?? [] as $r) { $facts[$r['fact_key']] = $r['fact_value']; } } - // Also pull network facts for network tokens used in any template + // Pull network facts if template uses them if (strpos($template, '{online_count}') !== false || strpos($template, '{total_count}') !== false) { - $netRows = JarvisDB::query( - "SELECT fact_key, fact_value FROM kb_facts - WHERE category='network'" - ); - foreach ($netRows as $r) { - $facts[$r['fact_key']] = $r['fact_value']; - } + $netRows = JarvisDB::query("SELECT fact_key, fact_value FROM kb_facts WHERE category='network' AND (expires_at IS NULL OR expires_at > NOW())"); + foreach ($netRows ?? [] as $r) { $facts[$r['fact_key']] = $r['fact_value']; } + } + // Pull system facts if template uses them + if (preg_match('/\{(cpu_usage|mem_|disk_|uptime|load_)\w*\}/', $template)) { + $sysRows = JarvisDB::query("SELECT fact_key, fact_value FROM kb_facts WHERE category='system' AND (expires_at IS NULL OR expires_at > NOW())"); + foreach ($sysRows ?? [] as $r) { $facts[$r['fact_key']] = $r['fact_value']; } } $allTokens = array_merge($builtins, $facts); // Replace placeholders return preg_replace_callback('/\{([a-z0-9_]+)\}/', function ($m) use ($allTokens) { - return $allTokens[$m[1]] ?? '[unknown]'; + return $allTokens[$m[1]] ?? ''; }, $template); }