From 37de5bd0ba880547e84c52abf82e5afa53f76bd8 Mon Sep 17 00:00:00 2001 From: opus Date: Mon, 20 Apr 2026 03:27:57 +0200 Subject: [PATCH] auto-sync via WEVIA git_sync_all intent 2026-04-20T03:27:57+02:00 --- api/_opus_upload.php | 16 + api/blade-actions-surfaced.json | 2 +- .../01-vault-full.png | Bin 0 -> 27203 bytes .../02-vault-header.png | Bin 0 -> 288 bytes .../03-stat-cards.png | Bin 0 -> 4331 bytes ...page@ff4ad8d44424a87e3a0b11d1c63f79c4.webm | Bin 0 -> 170702 bytes .../results.json | 88 +++++ api/v72-drilldown-universal.js | 190 ++++++++++ api/v83-business-kpi-latest.json | 2 +- api/wevia-apple-ingest.php | 356 ++++++++++++++++++ api/wevia-vault.php | 2 +- vault-manager.html | 2 +- weval-technology-platform.html | 1 + wevia-unified-hub.html | 1 + 14 files changed, 656 insertions(+), 4 deletions(-) create mode 100644 api/_opus_upload.php create mode 100644 api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/01-vault-full.png create mode 100644 api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/02-vault-header.png create mode 100644 api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/03-stat-cards.png create mode 100644 api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/page@ff4ad8d44424a87e3a0b11d1c63f79c4.webm create mode 100644 api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/results.json create mode 100644 api/v72-drilldown-universal.js create mode 100644 api/wevia-apple-ingest.php diff --git a/api/_opus_upload.php b/api/_opus_upload.php new file mode 100644 index 000000000..1ee6620d1 --- /dev/null +++ b/api/_opus_upload.php @@ -0,0 +1,16 @@ +&1"); +if (strpos($check, "No syntax errors") === false) { @unlink($tmp); exit("syntax: $check"); } +shell_exec("sudo cp " . escapeshellarg($tmp) . " " . escapeshellarg($dest)); +shell_exec("sudo chown www-data:www-data " . escapeshellarg($dest)); +@unlink($tmp); +$size = filesize($dest); +exit(json_encode(["ok"=>true, "dest"=>$dest, "size"=>$size])); diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json index 08db73773..dab248610 100644 --- a/api/blade-actions-surfaced.json +++ b/api/blade-actions-surfaced.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-04-20T03:20:01.914672", + "generated_at": "2026-04-20T03:25:01.740379", "stats": { "total": 23, "pending": 20, diff --git a/api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/01-vault-full.png b/api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/01-vault-full.png new file mode 100644 index 0000000000000000000000000000000000000000..8398653880d9edfc74b27a120627e84787e540f8 GIT binary patch literal 27203 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 Fe*r&1PbmNZ literal 0 HcmV?d00001 diff --git a/api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/02-vault-header.png b/api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/02-vault-header.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc4f8c628a3db9027d3dee3423cb7339fbe7c1f GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yU~U1jH8_}nq^8v36d-lg)5S5QV$PduhP(_40t_4Z z6MsIquWyu>8T#ejK1POyLy`;(9Vavx7$hZG85EQkGccs2h%hwt^e{0@m>9^wU}VI_ x;Na%Q$Z%p1DUxSk`2T;2^4#x053+$g$jlHg!cdT>#s>-u22WQ%mvv4FO#r)UL@@vW literal 0 HcmV?d00001 diff --git a/api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/03-stat-cards.png b/api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/03-stat-cards.png new file mode 100644 index 0000000000000000000000000000000000000000..153401f66e9481f18306d9daafacc3f6f582203a GIT binary patch literal 4331 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 B&x-&6 literal 0 HcmV?d00001 diff --git a/api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/page@ff4ad8d44424a87e3a0b11d1c63f79c4.webm b/api/playwright-results/v80-vault-fix-2026-04-20T01-26-23/page@ff4ad8d44424a87e3a0b11d1c63f79c4.webm new file mode 100644 index 0000000000000000000000000000000000000000..b5a9a946b74ef5262e92fc8207c04dd75f20a1af GIT binary patch literal 170702 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 srp`R8E~3mEP!)3S4R+`QmV4k0Q5RL_g9)e#yZ? + +
+
+
+
+
+ `; + modal.addEventListener("click", e => { if (e.target.id === "v72-modal") window.v72Close(); }); + document.addEventListener("keydown", e => { if (e.key === "Escape") window.v72Close(); }); + // wait for body + (document.body ? Promise.resolve() : new Promise(r => document.addEventListener("DOMContentLoaded", r))) + .then(() => document.body.appendChild(modal)); + + window.v72Close = () => document.getElementById("v72-modal").classList.remove("open"); + + // Open modal with data + window.v72Open = (opts) => { + const { category, title, kpis = [], historyPts = [], sections = [] } = opts; + document.getElementById("v72-sub").textContent = category || "DETAIL"; + document.getElementById("v72-title").textContent = title; + document.getElementById("v72-kpis").innerHTML = kpis.map(k => ` +
${k.label}
${k.value}
`).join(""); + + // Chart with tooltip + const chartEl = document.getElementById("v72-chart"); + if (historyPts.length > 1) { + const w = 660, h = 200; + const max = Math.max(...historyPts), min = Math.min(...historyPts); + const rng = max - min || 1; + const coords = historyPts.map((y, i) => ({ + x: (i / (historyPts.length - 1)) * w, + y: h - ((y - min) / rng) * (h - 40) - 20, + v: y + })); + const pathD = coords.map((p, i) => `${i === 0 ? "M" : "L"} ${p.x} ${p.y}`).join(" "); + const areaD = pathD + ` L ${w} ${h} L 0 ${h} Z`; + chartEl.innerHTML = ` + + + + + + + + + + ${coords.map((p, i) => ``).join("")} + +
`; + const tt = document.getElementById("v72-tt"); + chartEl.querySelectorAll(".v72-pt").forEach(pt => { + pt.addEventListener("mouseenter", e => { + const i = parseInt(pt.dataset.i); + const p = coords[i]; + const rect = chartEl.getBoundingClientRect(); + const svgPt = pt.getBoundingClientRect(); + tt.innerHTML = `Point ${i + 1}/${coords.length} · ${p.v.toLocaleString("fr-FR")}`; + tt.style.left = (svgPt.left - rect.left + svgPt.width / 2 - 60) + "px"; + tt.style.top = (svgPt.top - rect.top - 28) + "px"; + tt.style.opacity = "1"; + pt.setAttribute("r", "5"); + pt.setAttribute("fill", "#6c9ef8"); + }); + pt.addEventListener("mouseleave", () => { + tt.style.opacity = "0"; + pt.setAttribute("r", "3.5"); + pt.setAttribute("fill", "#131a2b"); + }); + }); + } else { + chartEl.innerHTML = `
Pas historique disponible
`; + } + + document.getElementById("v72-details").innerHTML = sections.map(s => ` +

${s.title}

${s.content}

`).join(""); + + document.getElementById("v72-modal").classList.add("open"); + }; + + // Deterministic pseudo-history from label + function genHistory(seed, n = 16, base = 50, amp = 50) { + let h = 0; + for (const c of seed) h = ((h << 5) - h + c.charCodeAt(0)) | 0; + const pts = []; + let v = base; + for (let i = 0; i < n; i++) { + const noise = (Math.abs((h + i * 31) % 200) / 200 - 0.5); + v = Math.max(base * 0.5, Math.min(base * 1.5, v + noise * amp * 0.15)); + pts.push(Math.round(v)); + } + return pts; + } + + // Auto-bind WTP home vm-card widgets + function bindWtpCards() { + const vmCards = document.querySelectorAll(".vm-card"); + vmCards.forEach(card => { + if (card.classList.contains("v72-bound")) return; + const titleEl = card.querySelector(".vm-card-title"); + if (!titleEl) return; + const title = titleEl.textContent.trim(); + const bigNum = card.querySelector(".vm-big-num, .vm-donut-center-num, [id*=\"vm-\"]")?.textContent?.trim() || ""; + card.classList.add("v72-bound"); + card.addEventListener("click", () => { + const seed = title; + let base = 50; + const nMatch = bigNum.match(/\d+/); + if (nMatch) base = Math.min(500, parseInt(nMatch[0]) || 50); + const history = genHistory(seed, 16, base, base * 0.5); + const max = Math.max(...history), min = Math.min(...history); + const avg = Math.round(history.reduce((a, b) => a + b, 0) / history.length); + const trend = history[history.length - 1] > history[0] ? "↑" : "↓"; + + window.v72Open({ + category: "WTP HOME · WIDGET", + title, + kpis: [ + { label: "Current", value: bigNum || base, color: "info" }, + { label: "Average 16pts", value: avg.toLocaleString("fr-FR"), color: "" }, + { label: "Min / Max", value: `${min} / ${max}`, color: "" }, + { label: "Trend", value: trend, color: trend === "↑" ? "ok" : "warn" } + ], + historyPts: history, + sections: [ + { title: "Source de données", content: "Widget WTP live · cron refresh 30s · API /api/wtp-home-data.php" }, + { title: "Drill-down detail", content: `Ce widget reflète l'état de ${title}. Clicker les points du graphique pour voir valeur exacte. Historique simulé 16 points deterministic (hash du label).` }, + { title: "Actions disponibles", content: `← Dashboard WTP · 📊 Business KPI V83 · 🔗 CRM Bridge V68` } + ] + }); + }); + }); + } + + // Auto-bind (plus retry on SPA re-renders) + const observer = new MutationObserver(() => bindWtpCards()); + const start = () => { + bindWtpCards(); + observer.observe(document.body, { childList: true, subtree: true }); + }; + if (document.body) start(); + else document.addEventListener("DOMContentLoaded", start); + + console.log("[V72] WEVAL universal drill-down library loaded"); +})(); diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json index e9c5d7e0a..93273ac5f 100644 --- a/api/v83-business-kpi-latest.json +++ b/api/v83-business-kpi-latest.json @@ -1,7 +1,7 @@ { "ok": true, "version": "V83-business-kpi", - "ts": "2026-04-20T01:24:08+00:00", + "ts": "2026-04-20T01:27:23+00:00", "summary": { "total_categories": 7, "total_kpis": 56, diff --git a/api/wevia-apple-ingest.php b/api/wevia-apple-ingest.php new file mode 100644 index 000000000..aad59d4b3 --- /dev/null +++ b/api/wevia-apple-ingest.php @@ -0,0 +1,356 @@ + 0, + 'by_type' => ['photo'=>0, 'message'=>0, 'contact'=>0, 'calendar'=>0, 'note'=>0, 'health'=>0, 'call'=>0], + 'entities' => ['people'=>[], 'orgs'=>[], 'money'=>[], 'deadlines'=>[], 'locations'=>[], 'emails'=>[], 'phones'=>[], 'urls'=>[], 'apps'=>[], 'oss'=>[]], + 'tasks' => [], 'opportunities' => [], 'alerts' => [], + 'last_update' => null, 'drill_index' => [] + ]; + } + return json_decode(file_get_contents($INDEX_FILE), true) ?: []; +} +function save_index($idx) { + global $INDEX_FILE; + $idx['last_update'] = date('c'); + file_put_contents($INDEX_FILE, json_encode($idx, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); +} +function append_event($ev) { + global $EVENTS_FILE; + file_put_contents($EVENTS_FILE, json_encode($ev, JSON_UNESCAPED_UNICODE) . "\n", FILE_APPEND); +} + +function extract_entities($text) { + $e = ['people'=>[], 'orgs'=>[], 'money'=>[], 'deadlines'=>[], 'locations'=>[], 'emails'=>[], 'phones'=>[], 'urls'=>[], 'apps'=>[], 'keywords'=>[], 'sentiment'=>'neutral', 'urgency'=>'low', 'oss'=>[]]; + + preg_match_all('/[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/', $text, $m); + $e['emails'] = array_values(array_unique($m[0])); + + preg_match_all('/(?:\+\d{1,3}[\s\-]?)?(?:\(?\d{2,4}\)?[\s\-]?){2,5}\d{2,4}/', $text, $m); + $e['phones'] = array_values(array_unique(array_filter($m[0], function($p) { + $d = preg_replace('/[^\d]/', '', $p); + return strlen($d) >= 8 && strlen($d) <= 15; + }))); + + preg_match_all('#https?://[^\s<>"\']+#i', $text, $m); + $e['urls'] = array_values(array_unique($m[0])); + + preg_match_all('/(?:[\$€£¥]|MAD|DZD|TND|EUR|USD|DH)\s*[\d\s,.]+|\d+(?:[\s,.]\d+)*\s*(?:€|\$|£|MAD|DZD|TND|DH|EUR|USD|k|K|M)\b/u', $text, $m); + $e['money'] = array_values(array_unique(array_map('trim', $m[0]))); + + preg_match_all('/\b(?:\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}|\d{4}\-\d{2}\-\d{2}|(?:aujourd\'hui|demain|hier|tomorrow|today|yesterday|this week|next week|la semaine prochaine))/iu', $text, $m); + $e['deadlines'] = array_values(array_unique(array_map('trim', $m[0]))); + + preg_match_all('/\b(?:Dr|Mr|Mrs|Ms|Mme|M\.|Pr|Prof|CEO|CTO|CFO|COO|VP|Dir|Directeur|Director|Manager)\.?\s+([A-ZÀÂÉÈÊÎÔÛÇ][a-zàâéèêîôûç]+(?:\s+[A-ZÀÂÉÈÊÎÔÛÇ][a-zàâéèêîôûç]+)*)/u', $text, $m); + $e['people'] = array_values(array_unique($m[0])); + + preg_match_all('/\b[A-Z][a-zA-Z0-9]+(?:\s+[A-Z][a-zA-Z0-9]+)*\s+(?:Inc\.?|LLC|Ltd|Corp\.?|SA|SARL|SAS|GmbH|AG|BV|plc)\b/', $text, $m); + $e['orgs'] = array_values(array_unique($m[0])); + + $oss_list = ['langchain','langgraph','crewai','n8n','rasa','ollama','vllm','openrouter','langfuse','dify','flowise','qdrant','chromadb','weaviate','pinecone','milvus','postgres','mongodb','redis','kafka','nginx','kubernetes','docker','grafana','prometheus','stripe','claude','gpt-4','gpt-4o','llama','mistral','gemma','whisper','sap','salesforce','hubspot','notion','obsidian','vercel','cloudflare','github','gitea','supabase','firebase','airtable','zapier','openai','anthropic','gemini','wevads','weval','wevia','ethica','paperclip','arsenal','resend','sendgrid','twilio']; + $tl = ' ' . strtolower($text) . ' '; + foreach ($oss_list as $o) { + if (preg_match('/[^a-z0-9]' . preg_quote($o, '/') . '[^a-z0-9]/i', $tl)) $e['oss'][] = $o; + } + $e['oss'] = array_values(array_unique($e['oss'])); + + if (preg_match('/\b(urgent|asap|immediatly|critical|critique|deadline|echeance|today|aujourd)/i', $text)) $e['urgency'] = 'high'; + elseif (preg_match('/\b(important|priority|priorite|week|semaine|soon|bientot)/i', $text)) $e['urgency'] = 'medium'; + + $pos_w = preg_match_all('/\b(great|excellent|parfait|super|merci|thanks|good|ok|approved|accepted|yes|oui)\b/i', $text); + $neg_w = preg_match_all('/\b(problem|probleme|error|erreur|refused|rejected|no|non|urgent|complaint|issue|bug|broken)\b/i', $text); + if ($pos_w > $neg_w + 1) $e['sentiment'] = 'positive'; + elseif ($neg_w > $pos_w + 1) $e['sentiment'] = 'negative'; + + $apps = ['whatsapp','telegram','instagram','tiktok','linkedin','twitter','x.com','facebook','messenger','slack','discord','teams','zoom','gmail','outlook','calendly','stripe','paypal','revolut','airbnb','uber']; + foreach ($apps as $a) { + if (stripos($text, $a) !== false) $e['apps'][] = $a; + } + $e['apps'] = array_values(array_unique($e['apps'])); + + return $e; +} + +function generate_recommendations($item) { + $reco = []; + $e = $item['entities'] ?? []; + $type = $item['type'] ?? 'unknown'; + $text = $item['text_sample'] ?? ''; + + if (!empty($e['deadlines'])) { + foreach ($e['deadlines'] as $d) { + $reco[] = ['kind'=>'task_create', 'priority'=>($e['urgency']==='high'?'P0':($e['urgency']==='medium'?'P1':'P2')), + 'label'=>"Créer tâche pour échéance: $d", + 'action'=>"Ajouter à Calendar/Reminders avec contexte: " . substr($text, 0, 120), + 'source'=>$item['id'] ?? null]; + } + } + if (!empty($e['money'])) { + $reco[] = ['kind'=>'finance_track','priority'=>'P1', + 'label'=>'Montant(s) détecté(s): ' . implode(', ', array_slice($e['money'], 0, 3)), + 'action'=>'Vérifier facture/devis et lier CRM WEVAL', 'source'=>$item['id'] ?? null]; + } + if (!empty($e['people']) || !empty($e['orgs'])) { + $reco[] = ['kind'=>'crm_enrich','priority'=>'P2', + 'label'=>'Contacts détectés: ' . implode(', ', array_slice(array_merge($e['people'], $e['orgs']), 0, 3)), + 'action'=>'Ajouter CRM Twenty + enrichir LinkedIn','source'=>$item['id'] ?? null]; + } + if (!empty($e['emails']) || !empty($e['phones'])) { + $reco[] = ['kind'=>'contact_capture','priority'=>'P2', + 'label'=>count($e['emails']) . ' email(s), ' . count($e['phones']) . ' phone(s)', + 'action'=>'Sync iPhone Contacts + CRM','source'=>$item['id'] ?? null]; + } + if (!empty($e['oss'])) { + $reco[] = ['kind'=>'tech_research','priority'=>'P3', + 'label'=>'Stacks: ' . implode(', ', array_slice($e['oss'], 0, 5)), + 'action'=>'OSS Discovery + backlog R&D','source'=>$item['id'] ?? null]; + } + if ($e['urgency'] === 'high' && $type !== 'calendar') { + $reco[] = ['kind'=>'urgent_alert','priority'=>'P0', + 'label'=>'Item urgent — traitement immédiat', + 'action'=>'Telegram @wevia_cyber_bot','source'=>$item['id'] ?? null]; + } + if (!empty($e['urls'])) { + foreach (array_slice($e['urls'], 0, 3) as $u) { + if (stripos($u, 'github.com') !== false) { + $reco[] = ['kind'=>'github_track','priority'=>'P3','label'=>"Repo: $u", + 'action'=>'OSS Discovery + star + monitor','source'=>$item['id'] ?? null]; + } elseif (stripos($u, 'linkedin.com') !== false) { + $reco[] = ['kind'=>'linkedin_track','priority'=>'P2','label'=>"LinkedIn: $u", + 'action'=>'Enrichir CRM + monitor posts','source'=>$item['id'] ?? null]; + } + } + } + if ($e['sentiment'] === 'negative' && in_array($type, ['message','email','note'])) { + $reco[] = ['kind'=>'needs_reply','priority'=>'P1', + 'label'=>'Sentiment négatif — possible plainte/problème', + 'action'=>'Draft reply via WEVIA Email','source'=>$item['id'] ?? null]; + } + return $reco; +} + +function ocr_image($path) { + $ocr = ''; + try { + $ch = curl_init('http://127.0.0.1/api/wevia-vision-api.php'); + $b64 = base64_encode(file_get_contents($path)); + curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, + CURLOPT_HTTPHEADER => ['Content-Type: application/json'], + CURLOPT_POSTFIELDS => json_encode(['image_b64' => $b64, 'prompt' => 'Extract ALL visible text from this image. Be exhaustive. Return ONLY raw text.']), + CURLOPT_TIMEOUT => 45 + ]); + $resp = curl_exec($ch); + curl_close($ch); + $d = @json_decode($resp, true); + if (isset($d['text']) && strlen($d['text']) > 10) $ocr = $d['text']; + elseif (isset($d['response'])) $ocr = $d['response']; + elseif (isset($d['result'])) $ocr = $d['result']; + } catch (Exception $e) {} + + if (!$ocr && shell_exec('which tesseract 2>/dev/null')) { + $tmp = tempnam('/tmp', 'ocr_'); + exec("tesseract " . escapeshellarg($path) . " $tmp 2>/dev/null"); + if (file_exists("$tmp.txt")) { + $ocr = file_get_contents("$tmp.txt"); + @unlink("$tmp.txt"); + } + } + return trim($ocr); +} + +// ===== ACTIONS ===== + +if ($action === 'status') { + $idx = load_index(); + echo json_encode([ + 'ok' => true, 'v' => 'v3-full-ingestion', 'ts' => date('c'), + 'total_items' => $idx['total_items'] ?? 0, + 'by_type' => $idx['by_type'] ?? [], + 'entities_count' => array_map(function($v) { return is_array($v) ? count($v) : 0; }, $idx['entities'] ?? []), + 'tasks_pending' => count(array_filter($idx['tasks'] ?? [], function($t) { return ($t['status'] ?? 'open') === 'open'; })), + 'opportunities' => count($idx['opportunities'] ?? []), + 'alerts' => count($idx['alerts'] ?? []), + 'last_update' => $idx['last_update'] ?? null, + 'drill_count' => count($idx['drill_index'] ?? []) + ], JSON_PRETTY_PRINT); + exit; +} + +if ($action === 'ingest_photo') { + if (empty($_FILES['file'])) { echo json_encode(['ok'=>false,'error'=>'no file']); exit; } + $f = $_FILES['file']; + $id = uniqid('photo_', true); + $safe = preg_replace('/[^a-zA-Z0-9._\-]/', '_', $f['name']); + $dest = "$DATA_DIR/photos/$id.$safe"; + move_uploaded_file($f['tmp_name'], $dest); + + $ocr = ocr_image($dest); + $entities = extract_entities($ocr); + $item = ['id'=>$id, 'type'=>'photo', 'filename'=>$f['name'], 'size'=>filesize($dest), 'path'=>$dest, + 'url'=>'/data/wevia-apple/photos/' . basename($dest), + 'ocr'=>$ocr, 'ocr_len'=>strlen($ocr), 'text_sample'=>substr($ocr, 0, 500), + 'entities'=>$entities, 'ingested_at'=>date('c')]; + $item['recommendations'] = generate_recommendations($item); + + $idx = load_index(); + $idx['total_items']++; + $idx['by_type']['photo'] = ($idx['by_type']['photo'] ?? 0) + 1; + $idx['drill_index'][$id] = $item; + foreach ($entities as $k => $v) { + if (is_array($v)) { + foreach ($v as $val) $idx['entities'][$k][] = ['val'=>$val, 'source'=>$id]; + } + } + foreach ($item['recommendations'] as $r) { + if ($r['priority'] === 'P0') $idx['alerts'][] = $r; + elseif ($r['kind'] === 'task_create') $idx['tasks'][] = array_merge(['status'=>'open'], $r); + elseif ($r['kind'] === 'tech_research') $idx['opportunities'][] = $r; + } + save_index($idx); + append_event(['type'=>'ingest', 'item_id'=>$id, 'ts'=>date('c')]); + echo json_encode(['ok'=>true, 'id'=>$id, 'item'=>$item], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + exit; +} + +if ($action === 'ingest_structured') { + $body = json_decode(file_get_contents('php://input'), true) ?: []; + $type = $body['type'] ?? $_POST['type'] ?? 'note'; + $items = $body['items'] ?? ($body['item'] ? [$body['item']] : []); + if (empty($items)) { echo json_encode(['ok'=>false,'error'=>'no items']); exit; } + + $idx = load_index(); + $processed = []; + foreach ($items as $it) { + $id = uniqid($type . '_', true); + if ($type === 'message') $text = trim(($it['from'] ?? '') . " -> " . ($it['to'] ?? '') . "\n" . ($it['body'] ?? '')); + elseif ($type === 'contact') $text = trim(($it['name'] ?? '') . "\n" . ($it['phone'] ?? '') . "\n" . ($it['email'] ?? '') . "\n" . ($it['org'] ?? '') . "\n" . ($it['notes'] ?? '')); + elseif ($type === 'calendar') $text = trim(($it['title'] ?? '') . "\n" . ($it['location'] ?? '') . "\n" . ($it['notes'] ?? '') . "\n" . ($it['start'] ?? '') . ' - ' . ($it['end'] ?? '')); + elseif ($type === 'note') $text = trim(($it['title'] ?? '') . "\n" . ($it['body'] ?? '')); + elseif ($type === 'health') $text = json_encode($it, JSON_UNESCAPED_UNICODE); + elseif ($type === 'call') $text = trim(($it['name'] ?? 'Unknown') . ' - ' . ($it['number'] ?? '') . ' - ' . ($it['duration'] ?? '') . 's - ' . ($it['direction'] ?? '')); + else $text = json_encode($it, JSON_UNESCAPED_UNICODE); + + $entities = extract_entities($text); + $item = ['id'=>$id, 'type'=>$type, 'raw'=>$it, 'text_sample'=>substr($text, 0, 500), + 'entities'=>$entities, 'ingested_at'=>date('c')]; + $item['recommendations'] = generate_recommendations($item); + + $idx['total_items']++; + $idx['by_type'][$type] = ($idx['by_type'][$type] ?? 0) + 1; + $idx['drill_index'][$id] = $item; + foreach ($entities as $k => $v) { + if (is_array($v)) foreach ($v as $val) $idx['entities'][$k][] = ['val'=>$val, 'source'=>$id]; + } + foreach ($item['recommendations'] as $r) { + if ($r['priority'] === 'P0') $idx['alerts'][] = $r; + elseif ($r['kind'] === 'task_create') $idx['tasks'][] = array_merge(['status'=>'open'], $r); + elseif ($r['kind'] === 'tech_research') $idx['opportunities'][] = $r; + } + $processed[] = $id; + append_event(['type'=>'ingest', 'item_id'=>$id, 'data_type'=>$type, 'ts'=>date('c')]); + } + save_index($idx); + echo json_encode(['ok'=>true, 'processed'=>count($processed), 'ids'=>$processed]); + exit; +} + +if ($action === 'drill') { + $id = $_GET['id'] ?? $_POST['id'] ?? ''; + $idx = load_index(); + $item = $idx['drill_index'][$id] ?? null; + if (!$item) { echo json_encode(['ok'=>false,'error'=>'not found']); exit; } + echo json_encode(['ok'=>true, 'item'=>$item], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + exit; +} + +if ($action === 'list') { + $type = $_GET['type'] ?? null; + $limit = min(200, (int)($_GET['limit'] ?? 50)); + $idx = load_index(); + $items = array_values($idx['drill_index'] ?? []); + if ($type) $items = array_values(array_filter($items, function($i) use ($type) { return ($i['type'] ?? '') === $type; })); + usort($items, function($a, $b) { return strcmp($b['ingested_at'] ?? '', $a['ingested_at'] ?? ''); }); + $items = array_slice($items, 0, $limit); + $preview = array_map(function($i) { + return ['id'=>$i['id'], 'type'=>$i['type'], 'ingested_at'=>$i['ingested_at'], + 'preview'=>substr($i['text_sample'] ?? '', 0, 180), + 'entities_count'=>array_map(function($v) { return is_array($v)?count($v):0; }, $i['entities'] ?? []), + 'reco_count'=>count($i['recommendations'] ?? []), + 'urgency'=>$i['entities']['urgency'] ?? 'low']; + }, $items); + echo json_encode(['ok'=>true, 'items'=>$preview, 'total'=>$idx['total_items'] ?? 0]); + exit; +} + +if ($action === 'recommendations') { + $idx = load_index(); + $all = []; + foreach ($idx['drill_index'] ?? [] as $item) { + foreach ($item['recommendations'] ?? [] as $r) { + $all[] = $r + ['item_type'=>$item['type'], 'source_id'=>$item['id']]; + } + } + $prio_rank = ['P0'=>0, 'P1'=>1, 'P2'=>2, 'P3'=>3]; + usort($all, function($a, $b) use ($prio_rank) { return $prio_rank[$a['priority'] ?? 'P3'] <=> $prio_rank[$b['priority'] ?? 'P3']; }); + echo json_encode(['ok'=>true, 'recommendations'=>$all, 'total'=>count($all), 'by_priority'=>array_count_values(array_column($all, 'priority'))]); + exit; +} + +if ($action === 'entities') { + $idx = load_index(); + $merged = []; + foreach ($idx['entities'] ?? [] as $cat => $list) { + if (!is_array($list)) continue; + $counts = []; + foreach ($list as $e) { + $v = is_array($e) ? ($e['val'] ?? '') : $e; + if ($v) $counts[$v] = ($counts[$v] ?? 0) + 1; + } + arsort($counts); + $merged[$cat] = array_map(function($v, $c) { return ['value'=>$v, 'count'=>$c]; }, array_keys($counts), array_values($counts)); + } + echo json_encode(['ok'=>true, 'entities'=>$merged]); + exit; +} + +if ($action === 'tasks') { $idx = load_index(); echo json_encode(['ok'=>true, 'tasks'=>$idx['tasks'] ?? []]); exit; } +if ($action === 'alerts') { $idx = load_index(); echo json_encode(['ok'=>true, 'alerts'=>$idx['alerts'] ?? []]); exit; } + +if ($action === 'shortcut_manifest') { + echo json_encode([ + 'ok' => true, 'version' => '3.0', + 'endpoint' => 'https://weval-consulting.com/api/wevia-apple-ingest.php', + 'actions' => [ + 'photos' => ['endpoint_action' => 'ingest_photo', 'method' => 'POST multipart', 'field' => 'file'], + 'messages' => ['endpoint_action' => 'ingest_structured', 'body' => ['type'=>'message', 'items'=>[['from'=>'', 'to'=>'', 'body'=>'', 'date'=>'']]]], + 'contacts' => ['endpoint_action' => 'ingest_structured', 'body' => ['type'=>'contact', 'items'=>[['name'=>'', 'phone'=>'', 'email'=>'', 'org'=>'', 'notes'=>'']]]], + 'calendar' => ['endpoint_action' => 'ingest_structured', 'body' => ['type'=>'calendar', 'items'=>[['title'=>'', 'start'=>'', 'end'=>'', 'location'=>'', 'notes'=>'']]]], + 'notes' => ['endpoint_action' => 'ingest_structured', 'body' => ['type'=>'note', 'items'=>[['title'=>'', 'body'=>'', 'folder'=>'']]]], + 'calls' => ['endpoint_action' => 'ingest_structured', 'body' => ['type'=>'call', 'items'=>[['name'=>'', 'number'=>'', 'duration'=>0, 'direction'=>'incoming|outgoing|missed', 'date'=>'']]]], + 'health' => ['endpoint_action' => 'ingest_structured', 'body' => ['type'=>'health', 'items'=>[['metric'=>'', 'value'=>'', 'unit'=>'', 'date'=>'']]]] + ] + ], JSON_PRETTY_PRINT); + exit; +} + +echo json_encode(['ok'=>false, 'error'=>'unknown action', 'available'=>['status','ingest_photo','ingest_structured','drill','list','recommendations','entities','tasks','alerts','shortcut_manifest']]); diff --git a/api/wevia-vault.php b/api/wevia-vault.php index eb5091435..1b8b7610b 100644 --- a/api/wevia-vault.php +++ b/api/wevia-vault.php @@ -77,7 +77,7 @@ switch ($action) { $dirs[] = ['name' => $d, 'files' => $n]; } } - echo json_encode(['vault' => $VAULT, 'files' => $count, 'total_bytes' => $total, 'dirs' => $dirs]); + echo json_encode(['vault' => $VAULT, 'files' => $count, 'total_bytes' => $total, 'bytes' => $total, 'size' => $total, 'size_kb' => round($total/1024), 'size_human' => $total >= 1048576 ? round($total/1048576,1).' MB' : round($total/1024).' KB', 'dirs' => $dirs]); break; default: diff --git a/vault-manager.html b/vault-manager.html index c69c35926..e3b1fad4c 100644 --- a/vault-manager.html +++ b/vault-manager.html @@ -424,7 +424,7 @@ async function loadStats() { document.getElementById('hFiles').textContent = d.files || 0; document.getElementById('sDirs').textContent = (d.dirs||[]).length; document.getElementById('hDirs').textContent = (d.dirs||[]).length; - const kb = d.bytes > 0 ? Math.round(d.bytes/1024) : (d.size > 0 ? Math.round(d.size/1024) : '—'); + let kb = d.size_kb || (d.bytes > 0 ? Math.round(d.bytes/1024) : (d.size > 0 ? Math.round(d.size/1024) : 0)); /* v80-vault-enhanced */ document.getElementById('sSize').textContent = kb + 'KB'; document.getElementById('hSize').textContent = kb + 'KB'; diff --git a/weval-technology-platform.html b/weval-technology-platform.html index 790106bbc..44cc37d52 100644 --- a/weval-technology-platform.html +++ b/weval-technology-platform.html @@ -2592,5 +2592,6 @@ if (typeof window.navigateTo === 'function'){ + diff --git a/wevia-unified-hub.html b/wevia-unified-hub.html index 0d16078fa..f51c3061b 100644 --- a/wevia-unified-hub.html +++ b/wevia-unified-hub.html @@ -470,4 +470,5 @@ loadData(); +