diff --git a/agents-archi.html b/agents-archi.html index c079acb44..b6889fd66 100644 --- a/agents-archi.html +++ b/agents-archi.html @@ -1317,7 +1317,7 @@ window.addEventListener('resize',function(){cam.aspect=innerWidth/innerHeight;ca 🗺️
Pain Points Atlas · 25 ERPs
-
35 pain points · 35 agents · 17.36M€ savings/client
+
60 pain points · 60 agents · 23.1M€ savings/client
Open Atlas →
diff --git a/api/agent-leads-sync.json b/api/agent-leads-sync.json index 9daf01af4..e63babd21 100644 --- a/api/agent-leads-sync.json +++ b/api/agent-leads-sync.json @@ -1,6 +1,6 @@ { "agent": "V45_Leads_Sync", - "ts": "2026-04-20T03:30:03+02:00", + "ts": "2026-04-20T03:40:02+02:00", "paperclip_total": 48, "active_customer": 4, "warm_prospect": 5, diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json index c27e7bfcd..9b8fbfefa 100644 --- a/api/blade-actions-surfaced.json +++ b/api/blade-actions-surfaced.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-04-20T03:35:01.431365", + "generated_at": "2026-04-20T03:40:01.397063", "stats": { "total": 23, "pending": 20, diff --git a/api/blade-mcp-server.py b/api/blade-mcp-server.py new file mode 100644 index 000000000..25e44f5da --- /dev/null +++ b/api/blade-mcp-server.py @@ -0,0 +1,457 @@ +#!/usr/bin/env python3 +"""WEVIA Blade MCP Server v1.1 - Extended with apple_* tools +Exposes Razer Blade + Apple/iCloud scraping as MCP tools. +Run: python3 blade-mcp-server.py +Listens: http://0.0.0.0:8765 +""" + +import json, sys, uuid, time, requests +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer + +BLADE_API = "https://weval-consulting.com/api/blade-api.php" +BLADE_KEY = "BLADE2026" +WEVIA_APPLE_API = "https://weval-consulting.com/api/wevia-apple-ingest.php" + +TOOLS = [ + # === BLADE CORE (v1.0) === + { + "name": "blade_exec", + "description": "Execute a PowerShell command on the Razer Blade Windows machine. Returns stdout/stderr/exit_code.", + "inputSchema": { + "type": "object", + "properties": { + "cmd": {"type": "string", "description": "PowerShell command to execute"}, + "timeout": {"type": "integer", "default": 60} + }, + "required": ["cmd"] + } + }, + { + "name": "blade_status", + "description": "Get current Razer Blade health: CPU, RAM, disk, uptime, last heartbeat.", + "inputSchema": {"type": "object", "properties": {}} + }, + { + "name": "blade_screenshot", + "description": "Take a screenshot of the Razer desktop, return URL.", + "inputSchema": { + "type": "object", + "properties": {"label": {"type": "string", "default": "screenshot"}} + } + }, + { + "name": "blade_chrome_cdp", + "description": "Send a Chrome DevTools Protocol command to the Razer Chrome browser via debug port 9222.", + "inputSchema": { + "type": "object", + "properties": { + "url_filter": {"type": "string"}, + "js": {"type": "string"} + }, + "required": ["js"] + } + }, + { + "name": "blade_open_url", + "description": "Open a URL in the Razer Chrome (keeping user session cookies).", + "inputSchema": {"type": "object", "properties": {"url": {"type": "string"}}, "required": ["url"]} + }, + { + "name": "blade_send_keys", + "description": "Simulate keyboard input on the Razer (via SendKeys).", + "inputSchema": {"type": "object", "properties": {"keys": {"type": "string"}}, "required": ["keys"]} + }, + { + "name": "blade_file_read", + "description": "Read a file from the Razer filesystem (text files under 1MB).", + "inputSchema": {"type": "object", "properties": {"path": {"type": "string"}}, "required": ["path"]} + }, + { + "name": "blade_file_write", + "description": "Write a text file to the Razer filesystem.", + "inputSchema": { + "type": "object", + "properties": {"path": {"type": "string"}, "content": {"type": "string"}}, + "required": ["path", "content"] + } + }, + + # === APPLE / WEVIA (v1.1 NEW) === + { + "name": "apple_ingest_note", + "description": "Ingest a note into WEVIA Apple (auto-extracts entities: people, deadlines, money, OSS, tasks). Available everywhere.", + "inputSchema": { + "type": "object", + "properties": { + "title": {"type": "string"}, + "body": {"type": "string", "description": "Note content - will be analyzed by IA"} + }, + "required": ["body"] + } + }, + { + "name": "apple_ingest_message", + "description": "Ingest a message (SMS/iMessage/WhatsApp) into WEVIA Apple for AI analysis (urgency, deadlines, reco).", + "inputSchema": { + "type": "object", + "properties": { + "from": {"type": "string"}, + "to": {"type": "string", "default": "me"}, + "body": {"type": "string"}, + "date": {"type": "string"} + }, + "required": ["from", "body"] + } + }, + { + "name": "apple_status", + "description": "Get WEVIA Apple ingestion status: items, tasks pending, alerts, entities count.", + "inputSchema": {"type": "object", "properties": {}} + }, + { + "name": "apple_search", + "description": "Search across all ingested Apple data (OCR, messages, contacts, notes).", + "inputSchema": { + "type": "object", + "properties": {"q": {"type": "string", "description": "Search query (min 2 chars)"}}, + "required": ["q"] + } + }, + { + "name": "apple_recommendations", + "description": "Get top AI-generated recommendations from ingested iPhone data, sorted P0→P3.", + "inputSchema": { + "type": "object", + "properties": {"priority_filter": {"type": "string", "enum": ["P0","P1","P2","P3","all"], "default": "all"}} + } + }, + { + "name": "apple_tasks_pending", + "description": "Get pending tasks auto-generated from Apple data (deadlines → task_create).", + "inputSchema": {"type": "object", "properties": {}} + }, + { + "name": "apple_mark_task_done", + "description": "Mark an Apple-generated task as done.", + "inputSchema": { + "type": "object", + "properties": {"task_id": {"type": "string"}}, + "required": ["task_id"] + } + }, + { + "name": "apple_mac_scrape_photos", + "description": "Scrape recent iCloud Photos via AppleScript on Mac (requires Blade agent installed on Mac, NOT Razer Windows).", + "inputSchema": { + "type": "object", + "properties": {"limit": {"type": "integer", "default": 20}} + } + }, + { + "name": "apple_mac_scrape_messages", + "description": "Scrape recent iMessage/SMS from chat.db on Mac (requires Blade Mac agent + Full Disk Access perm).", + "inputSchema": { + "type": "object", + "properties": {"limit": {"type": "integer", "default": 50}} + } + } +] + +def push_blade_task(ps_cmd, label="mcp", priority=100, timeout=60): + try: + r = requests.post(BLADE_API, data={ + "k": BLADE_KEY, "action": "push", + "type": "powershell", "cmd": ps_cmd, + "label": f"mcp_{label}", "priority": priority + }, timeout=15) + task_id = r.json().get("task", {}).get("id") + if not task_id: + return {"ok": False, "error": f"push failed: {r.text[:300]}"} + + deadline = time.time() + timeout + while time.time() < deadline: + time.sleep(2) + r2 = requests.get(BLADE_API, params={"k": BLADE_KEY, "action": "list", "id": task_id}, timeout=8) + try: + d = r2.json() + for t in d.get("tasks", []): + if t.get("id") == task_id: + st = t.get("status") + if st in ("done", "failed"): + return { + "ok": st == "done", "status": st, + "result": t.get("result", "")[:4000], + "error": t.get("error"), "task_id": task_id + } + break + except: + pass + return {"ok": False, "error": "timeout waiting for blade", "task_id": task_id} + except Exception as e: + return {"ok": False, "error": f"exception: {str(e)[:200]}"} + +# ==== Blade core handlers (v1.0) ==== + +def tool_blade_exec(args): + return push_blade_task(args["cmd"], label="exec", priority=200, timeout=args.get("timeout", 60)) + +def tool_blade_status(args): + try: + r = requests.get(BLADE_API, params={"k": BLADE_KEY, "action": "status"}, timeout=8) + return {"ok": True, "status": r.json()} + except Exception as e: + return {"ok": False, "error": str(e)[:200]} + +def tool_blade_screenshot(args): + label = args.get("label", "shot").replace(" ", "_") + cmd = f""" +$dir = "C:\\\\ProgramData\\\\WEVAL\\\\shots" +New-Item -ItemType Directory -Path $dir -Force -ErrorAction SilentlyContinue | Out-Null +$f = "$dir\\\\{label}-$(Get-Date -Format 'yyyyMMdd_HHmmss').png" +Add-Type -AssemblyName System.Windows.Forms,System.Drawing +$b = New-Object System.Drawing.Bitmap([System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width, [System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Height) +$g = [System.Drawing.Graphics]::FromImage($b) +$g.CopyFromScreen(0, 0, 0, 0, $b.Size) +$b.Save($f, 'Png') +Write-Host "SHOT_PATH=$f" +""" + return push_blade_task(cmd, label="shot", priority=200, timeout=30) + +def tool_blade_chrome_cdp(args): + js = args["js"].replace("`", "\\`").replace("$", "\\$") + url_filter = args.get("url_filter", "") + cmd = f""" +try {{ $targets = Invoke-RestMethod -Uri "http://localhost:9222/json" -Method GET -TimeoutSec 5 }} +catch {{ Write-Host "NO_CHROME_DEBUG_PORT"; exit 1 }} +$filter = '{url_filter}' +$tgt = if ($filter) {{ $targets | Where-Object {{ $_.url -match $filter }} | Select-Object -First 1 }} else {{ $targets | Where-Object {{ $_.type -eq 'page' }} | Select-Object -First 1 }} +if (!$tgt) {{ Write-Host "NO_TAB_MATCH"; exit 1 }} +$wsUrl = $tgt.webSocketDebuggerUrl +$ws = New-Object System.Net.WebSockets.ClientWebSocket +$cts = New-Object System.Threading.CancellationTokenSource +$cts.CancelAfter(30000) +$ws.ConnectAsync([Uri]$wsUrl, $cts.Token).Wait() +$cmd = @{{id=1; method="Runtime.evaluate"; params=@{{expression=@' +{js} +'@; awaitPromise=$true; returnByValue=$true}}}} | ConvertTo-Json -Depth 5 -Compress +$buf = [Text.Encoding]::UTF8.GetBytes($cmd) +$seg = New-Object 'System.ArraySegment[byte]' (,$buf) +$ws.SendAsync($seg, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $cts.Token).Wait() +$rxBuf = New-Object byte[] 131072 +$rxSeg = New-Object 'System.ArraySegment[byte]' (,$rxBuf) +$result = $ws.ReceiveAsync($rxSeg, $cts.Token).Result +Write-Host ([Text.Encoding]::UTF8.GetString($rxBuf, 0, $result.Count)) +""" + return push_blade_task(cmd, label="cdp", priority=200, timeout=45) + +def tool_blade_open_url(args): + return push_blade_task(f'Start-Process "{args["url"]}"', label="open", priority=200, timeout=15) + +def tool_blade_send_keys(args): + keys = args["keys"].replace("'", "''") + return push_blade_task(f"""Add-Type -AssemblyName System.Windows.Forms +[System.Windows.Forms.SendKeys]::SendWait('{keys}') +Write-Host "KEYS_SENT" """, label="keys", priority=200, timeout=15) + +def tool_blade_file_read(args): + path = args["path"].replace("'", "''") + return push_blade_task(f"Get-Content -Path '{path}' -Raw -ErrorAction Stop", label="read", priority=200, timeout=15) + +def tool_blade_file_write(args): + path = args["path"].replace("'", "''") + import base64 + b64 = base64.b64encode(args["content"].encode()).decode() + return push_blade_task(f"""$c = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('{b64}')) +Set-Content -Path '{path}' -Value $c -Force -Encoding UTF8 +Write-Host "WROTE" """, label="write", priority=200, timeout=15) + +# ==== Apple / WEVIA handlers (v1.1) ==== + +def tool_apple_ingest_note(args): + try: + r = requests.post(f"{WEVIA_APPLE_API}?action=ingest_structured", + headers={"Content-Type": "application/json"}, + json={"type": "note", "items": [{"title": args.get("title", "MCP capture"), "body": args["body"]}]}, + timeout=30) + return {"ok": True, "result": r.json()} + except Exception as e: + return {"ok": False, "error": str(e)[:300]} + +def tool_apple_ingest_message(args): + try: + item = { + "from": args["from"], + "to": args.get("to", "me"), + "body": args["body"], + "date": args.get("date", time.strftime("%Y-%m-%dT%H:%M:%S")) + } + r = requests.post(f"{WEVIA_APPLE_API}?action=ingest_structured", + headers={"Content-Type": "application/json"}, + json={"type": "message", "items": [item]}, timeout=30) + return {"ok": True, "result": r.json()} + except Exception as e: + return {"ok": False, "error": str(e)[:300]} + +def tool_apple_status(args): + try: + r = requests.get(f"{WEVIA_APPLE_API}?action=status", timeout=10) + return {"ok": True, "status": r.json()} + except Exception as e: + return {"ok": False, "error": str(e)[:300]} + +def tool_apple_search(args): + try: + r = requests.get(f"{WEVIA_APPLE_API}?action=search", params={"q": args["q"]}, timeout=10) + return {"ok": True, "result": r.json()} + except Exception as e: + return {"ok": False, "error": str(e)[:300]} + +def tool_apple_recommendations(args): + try: + r = requests.get(f"{WEVIA_APPLE_API}?action=recommendations", timeout=10) + data = r.json() + recos = data.get("recommendations", []) + pf = args.get("priority_filter", "all") + if pf != "all": + recos = [x for x in recos if x.get("priority") == pf] + return {"ok": True, "total": len(recos), "recommendations": recos[:20], "by_priority": data.get("by_priority", {})} + except Exception as e: + return {"ok": False, "error": str(e)[:300]} + +def tool_apple_tasks_pending(args): + try: + r = requests.get(f"{WEVIA_APPLE_API}?action=tasks", params={"status": "open"}, timeout=10) + return {"ok": True, "result": r.json()} + except Exception as e: + return {"ok": False, "error": str(e)[:300]} + +def tool_apple_mark_task_done(args): + try: + r = requests.get(f"{WEVIA_APPLE_API}?action=mark_done", params={"id": args["task_id"]}, timeout=10) + return {"ok": True, "result": r.json()} + except Exception as e: + return {"ok": False, "error": str(e)[:300]} + +def tool_apple_mac_scrape_photos(args): + # Placeholder - needs Blade Mac agent (not Windows Razer). + # Returns guidance + passes AppleScript via Blade task (if Mac hostname matches) + osa = f""" +osascript -e 'tell application "Photos" + set recentPhotos to (get last {args.get("limit", 20)} media items of container "Library") + set output to "" + repeat with p in recentPhotos + set output to output & (get filename of p) & "|" & (get creation date of p as string) & "\\n" + end repeat + return output +end tell' +""" + return { + "ok": False, + "status": "requires_mac_agent", + "message": "This tool requires Blade MCP agent on a Mac (not Razer Windows). Install blade-agent-v4-mac.sh on macOS first.", + "applescript_to_run": osa.strip(), + "fallback": "Use iPhone Shortcut 'Scan WEVIA' + automation iCloud album instead (see /downloads/wevia-shortcut-photos.json)" + } + +def tool_apple_mac_scrape_messages(args): + return { + "ok": False, + "status": "requires_mac_agent", + "message": "This tool requires Blade MCP agent on a Mac with Full Disk Access permission.", + "sql_to_run": f"SELECT datetime(date/1000000000 + 978307200, 'unixepoch') AS ts, handle.id AS contact, text, is_from_me FROM message LEFT JOIN handle ON message.handle_id = handle.ROWID ORDER BY date DESC LIMIT {args.get('limit', 50)};", + "db_path": "~/Library/Messages/chat.db", + "fallback": "Manually share messages via iOS Share Sheet using /downloads/wevia-shortcut-messages.json guide" + } + +TOOL_HANDLERS = { + "blade_exec": tool_blade_exec, + "blade_status": tool_blade_status, + "blade_screenshot": tool_blade_screenshot, + "blade_chrome_cdp": tool_blade_chrome_cdp, + "blade_open_url": tool_blade_open_url, + "blade_send_keys": tool_blade_send_keys, + "blade_file_read": tool_blade_file_read, + "blade_file_write": tool_blade_file_write, + "apple_ingest_note": tool_apple_ingest_note, + "apple_ingest_message": tool_apple_ingest_message, + "apple_status": tool_apple_status, + "apple_search": tool_apple_search, + "apple_recommendations": tool_apple_recommendations, + "apple_tasks_pending": tool_apple_tasks_pending, + "apple_mark_task_done": tool_apple_mark_task_done, + "apple_mac_scrape_photos": tool_apple_mac_scrape_photos, + "apple_mac_scrape_messages": tool_apple_mac_scrape_messages +} + +class MCPHandler(BaseHTTPRequestHandler): + def log_message(self, fmt, *args): pass + + def do_POST(self): + length = int(self.headers.get("Content-Length", 0)) + body = self.rfile.read(length).decode() + try: + req = json.loads(body) + except: + self.send_error(400, "invalid json") + return + + method = req.get("method") + req_id = req.get("id") + params = req.get("params", {}) + result = None + error = None + + if method == "initialize": + result = { + "protocolVersion": "2024-11-05", + "capabilities": {"tools": {}}, + "serverInfo": {"name": "wevia-blade-mcp", "version": "1.1.0"} + } + elif method == "tools/list": + result = {"tools": TOOLS} + elif method == "tools/call": + name = params.get("name") + args = params.get("arguments", {}) + handler = TOOL_HANDLERS.get(name) + if not handler: + error = {"code": -32601, "message": f"Unknown tool: {name}"} + else: + try: + r = handler(args) + result = {"content": [{"type": "text", "text": json.dumps(r, indent=2, ensure_ascii=False)}]} + except Exception as e: + error = {"code": -32000, "message": str(e)[:300]} + elif method == "ping": + result = {} + else: + error = {"code": -32601, "message": f"Unknown method: {method}"} + + resp = {"jsonrpc": "2.0", "id": req_id} + if error: resp["error"] = error + else: resp["result"] = result + + payload = json.dumps(resp).encode() + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(payload))) + self.end_headers() + self.wfile.write(payload) + + def do_GET(self): + if self.path == "/health": + payload = json.dumps({"ok": True, "server": "wevia-blade-mcp", "version": "1.1.0", "tools": len(TOOLS)}).encode() + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(payload))) + self.end_headers() + self.wfile.write(payload) + else: + self.send_error(404) + +if __name__ == "__main__": + port = int(sys.argv[1]) if len(sys.argv) > 1 else 8765 + server = ThreadingHTTPServer(("0.0.0.0", port), MCPHandler) + sys.stderr.write(f"[WEVIA-BLADE-MCP v1.1] Listening on 0.0.0.0:{port}\n") + sys.stderr.write(f"[WEVIA-BLADE-MCP] {len(TOOLS)} tools exposed\n") + sys.stderr.flush() + server.serve_forever() diff --git a/api/mql-scoring-status.json b/api/mql-scoring-status.json index 5c378afad..909920e55 100644 --- a/api/mql-scoring-status.json +++ b/api/mql-scoring-status.json @@ -1,29 +1 @@ -{ - "ok": true, - "agent": "V42_MQL_Scoring_Agent_REAL", - "ts": "2026-04-20T01:30:01+00:00", - "status": "DEPLOYED_AUTO", - "deployed": true, - "algorithm": "weighted_behavioral_signals", - "signals_tracked": { - "wtp_engagement": 100, - "chat_engagement": 0, - "roi_tool": 0, - "email_opened": 0 - }, - "avg_score": 25, - "mql_threshold": 50, - "sql_threshold": 75, - "leads_captured": 48, - "mql_auto_scored": 20, - "sql_auto_scored": 8, - "mql_auto_pct": 41, - "improvement_vs_manual": { - "before_manual_pct": 33.3, - "after_auto_pct": 41, - "delta": 7.700000000000003 - }, - "paperclip_db_ok": true, - "paperclip_tables": 1, - "root_cause_resolved": "Lead Qualification goulet 16pct manual resolved via AUTO behavioral scoring" -} +error code: 502 diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json index 82b2faa3b..6a68cc289 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:38:27+00:00", + "ts": "2026-04-20T01:42:07+00:00", "summary": { "total_categories": 7, "total_kpis": 56, diff --git a/api/wave-wiring-queue.json b/api/wave-wiring-queue.json index 0cd2d7867..3b2d212e2 100644 --- a/api/wave-wiring-queue.json +++ b/api/wave-wiring-queue.json @@ -6224,5 +6224,55 @@ "status": "PENDING_APPROVAL", "created_at": "2026-04-20T01:36:15+00:00", "source": "opus4-autowire-early-v2" + }, + "469": { + "name": "wevia_weval_distinctive_badge", + "triggers": [ + "signe distinctif", + "weval badge", + "agent weval visible", + "gap fill visible" + ], + "cmd": "echo v9.11 signe distinctif weval agents yacine demande identifier agents gaps business avec signe distinctif - fix v9.11 emoji robot \ud83e\udd16 injecte dans re property des 60 agents wv:1 enterprise-model.html ag array - couleur par departement conservee fin=cyan sup=violet mfg=yellow sal=rose hr=teal mkt=pink sec=red ops=blue dir=gold - legend ajoute en bas weval gap-fill agent avec border cyan indicatif - agents-archi.html banner fix 35 pain points vers 60 + 17.36m vers 23.1m coherent - doctrine 14 additive +323 bytes", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-20T01:43:52+00:00", + "source": "opus4-autowire-early-v2" + }, + "470": { + "name": "wevia_uniformise_enterprise_vsm_bpm", + "triggers": [ + "uniformise enterprise", + "vsm bpm soa", + "value stream mapping", + "architecture gap" + ], + "cmd": "echo v9.11 uniformisation enterprise model avec vsm bpm soa architecture gap par erp\/process demande yacine - statut actuel enterprise-model.html contient 749 agents 30 departements dont 60 weval business wv:1 distinctif \ud83e\udd16 - banner enriched 60 pain points 60 agents weval 23.1m savings client vsm+bpm+soa ready - integration vsm partielle via pipeline meeting + lean6sigma + bpmn + dmaic + vsm phases deja visibles en bas - next steps pipeline dedie value stream mapping par erp par process visible futur tag", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-20T01:43:53+00:00", + "source": "opus4-autowire-early-v2" + }, + "471": { + "name": "wevia_paperclip_ceo_idle", + "triggers": [ + "paperclip ceo", + "paperclip idle", + "paperclip status" + ], + "cmd": "echo paperclip ceo agent status image 1 - post v9.4 eacces fix run-logs chmod 775 chown postgres:postgres service actif - screenshot montre status idle + nouveaux runs successifs f065094d f0f8f7f2 fc4d0291 ff497e7b tous cr\u00e9\u00e9s post-fix = success plus aucun eacces permission denied - idle = normal attente prochain heartbeat - 13 runs historiques 57m ago = clean operation", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-20T01:43:53+00:00", + "source": "opus4-autowire-early-v2" + }, + "472": { + "name": "wevia_agents_archi_banner_fix", + "triggers": [ + "agents archi banner", + "archi 35 17.36", + "agents archi coherence" + ], + "cmd": "echo v9.11 agents-archi banner fix - agents-archi.html l1320 banner hardcoded identique 35 pain points 35 agents 17.36m savings\/client aussi present dans cette page - fix meme correction 60\/60\/23.1m coherent cross-pages pain-points-atlas enterprise-model agents-archi - gold backup vault pre-v11-banner - doctrine 4 honnetete + doctrine 14 additive", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-20T01:43:53+00:00", + "source": "opus4-autowire-early-v2" } } \ No newline at end of file diff --git a/api/wired-pending/intent-opus4-wevia_agents_archi_banner_fix.php b/api/wired-pending/intent-opus4-wevia_agents_archi_banner_fix.php new file mode 100644 index 000000000..ae3e2265c --- /dev/null +++ b/api/wired-pending/intent-opus4-wevia_agents_archi_banner_fix.php @@ -0,0 +1,14 @@ + 'wevia_agents_archi_banner_fix', + 'triggers' => + array ( + 0 => 'agents archi banner', + 1 => 'archi 35 17.36', + 2 => 'agents archi coherence', + ), + 'cmd' => 'echo v9.11 agents-archi banner fix - agents-archi.html l1320 banner hardcoded identique 35 pain points 35 agents 17.36m savings/client aussi present dans cette page - fix meme correction 60/60/23.1m coherent cross-pages pain-points-atlas enterprise-model agents-archi - gold backup vault pre-v11-banner - doctrine 4 honnetete + doctrine 14 additive', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-20T01:43:53+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-wevia_paperclip_ceo_idle.php b/api/wired-pending/intent-opus4-wevia_paperclip_ceo_idle.php new file mode 100644 index 000000000..8e7c13e8c --- /dev/null +++ b/api/wired-pending/intent-opus4-wevia_paperclip_ceo_idle.php @@ -0,0 +1,14 @@ + 'wevia_paperclip_ceo_idle', + 'triggers' => + array ( + 0 => 'paperclip ceo', + 1 => 'paperclip idle', + 2 => 'paperclip status', + ), + 'cmd' => 'echo paperclip ceo agent status image 1 - post v9.4 eacces fix run-logs chmod 775 chown postgres:postgres service actif - screenshot montre status idle + nouveaux runs successifs f065094d f0f8f7f2 fc4d0291 ff497e7b tous créés post-fix = success plus aucun eacces permission denied - idle = normal attente prochain heartbeat - 13 runs historiques 57m ago = clean operation', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-20T01:43:53+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-wevia_uniformise_enterprise_vsm_bpm.php b/api/wired-pending/intent-opus4-wevia_uniformise_enterprise_vsm_bpm.php new file mode 100644 index 000000000..37dc74419 --- /dev/null +++ b/api/wired-pending/intent-opus4-wevia_uniformise_enterprise_vsm_bpm.php @@ -0,0 +1,15 @@ + 'wevia_uniformise_enterprise_vsm_bpm', + 'triggers' => + array ( + 0 => 'uniformise enterprise', + 1 => 'vsm bpm soa', + 2 => 'value stream mapping', + 3 => 'architecture gap', + ), + 'cmd' => 'echo v9.11 uniformisation enterprise model avec vsm bpm soa architecture gap par erp/process demande yacine - statut actuel enterprise-model.html contient 749 agents 30 departements dont 60 weval business wv:1 distinctif 🤖 - banner enriched 60 pain points 60 agents weval 23.1m savings client vsm+bpm+soa ready - integration vsm partielle via pipeline meeting + lean6sigma + bpmn + dmaic + vsm phases deja visibles en bas - next steps pipeline dedie value stream mapping par erp par process visible futur tag', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-20T01:43:53+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-wevia_weval_distinctive_badge.php b/api/wired-pending/intent-opus4-wevia_weval_distinctive_badge.php new file mode 100644 index 000000000..c281cc145 --- /dev/null +++ b/api/wired-pending/intent-opus4-wevia_weval_distinctive_badge.php @@ -0,0 +1,15 @@ + 'wevia_weval_distinctive_badge', + 'triggers' => + array ( + 0 => 'signe distinctif', + 1 => 'weval badge', + 2 => 'agent weval visible', + 3 => 'gap fill visible', + ), + 'cmd' => 'echo v9.11 signe distinctif weval agents yacine demande identifier agents gaps business avec signe distinctif - fix v9.11 emoji robot 🤖 injecte dans re property des 60 agents wv:1 enterprise-model.html ag array - couleur par departement conservee fin=cyan sup=violet mfg=yellow sal=rose hr=teal mkt=pink sec=red ops=blue dir=gold - legend ajoute en bas weval gap-fill agent avec border cyan indicatif - agents-archi.html banner fix 35 pain points vers 60 + 17.36m vers 23.1m coherent - doctrine 14 additive +323 bytes', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-20T01:43:52+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/cartographie-screens.html b/cartographie-screens.html index 9918590e8..13e9edea6 100644 --- a/cartographie-screens.html +++ b/cartographie-screens.html @@ -70,7 +70,7 @@ select{padding:10px;background:#0a0e27;color:#fff;border:1px solid #3d4476;borde

🗺️ WEVADS Cartographie Exhaustive Ecrans

-
1722 ecrans total reperes sur 2 serveurs applicatifs | Genere le 2026-04-16 11:18 | WEVIAMaster multiagent
+
1723 ecrans total reperes sur 2 serveurs applicatifs | Genere le 2026-04-16 11:18 | WEVIAMaster multiagent
3914
Total ecrans
@@ -89,8 +89,8 @@ select{padding:10px;background:#0a0e27;color:#fff;border:1px solid #3d4476;borde
+ + + + + + \ No newline at end of file diff --git a/data/wevia-apple/events.jsonl b/data/wevia-apple/events.jsonl index 2ccc7ac69..82a92aa70 100644 --- a/data/wevia-apple/events.jsonl +++ b/data/wevia-apple/events.jsonl @@ -2,3 +2,4 @@ {"type":"ingest","item_id":"contact_69e5824bdbea77.22631491","data_type":"contact","ts":"2026-04-20T01:32:59+00:00"} {"type":"ingest","item_id":"calendar_69e5824c2569b2.34050670","data_type":"calendar","ts":"2026-04-20T01:33:00+00:00"} {"type":"ingest","item_id":"message_69e583ec4a8c63.43728183","data_type":"message","ts":"2026-04-20T01:39:56+00:00"} +{"type":"ingest","item_id":"note_69e584b6df3513.49062359","data_type":"note","ts":"2026-04-20T01:43:18+00:00"} diff --git a/data/wevia-apple/index.json b/data/wevia-apple/index.json index 079f79f39..701ddcf22 100644 --- a/data/wevia-apple/index.json +++ b/data/wevia-apple/index.json @@ -1,11 +1,11 @@ { - "total_items": 4, + "total_items": 5, "by_type": { "photo": 0, "message": 2, "contact": 1, "calendar": 1, - "note": 0, + "note": 1, "health": 0, "call": 0 }, @@ -34,6 +34,10 @@ { "val": "32000 EUR", "source": "message_69e583ec4a8c63.43728183" + }, + { + "val": "15000 EUR", + "source": "note_69e584b6df3513.49062359" } ], "deadlines": [ @@ -48,6 +52,10 @@ { "val": "demain", "source": "message_69e583ec4a8c63.43728183" + }, + { + "val": "demain", + "source": "note_69e584b6df3513.49062359" } ], "locations": [], @@ -123,6 +131,14 @@ { "val": "ethica", "source": "message_69e5824ba35bd6.09795740" + }, + { + "val": "langchain", + "source": "note_69e584b6df3513.49062359" + }, + { + "val": "n8n", + "source": "note_69e584b6df3513.49062359" } ] }, @@ -137,6 +153,17 @@ "source_item": "message_69e583ec4a8c63.43728183", "created_at": "2026-04-20T01:39:56+00:00", "status": "open" + }, + { + "kind": "task_create", + "priority": "P0", + "label": "Créer tâche pour échéance: demain", + "action": "Ajouter à Calendar\/Reminders avec contexte: Test MCP\nURGENT appeler Kaouther demain pour devis 15000 EUR - utilise n8n et langchain pour automation", + "source": "note_69e584b6df3513.49062359", + "id": "reco_69e584b6df9675.91091745", + "source_item": "note_69e584b6df3513.49062359", + "created_at": "2026-04-20T01:43:18+00:00", + "status": "open" } ], "opportunities": [ @@ -146,6 +173,17 @@ "label": "Stacks: n8n, postgres, ethica", "action": "OSS Discovery + backlog R&D", "source": "message_69e5824ba35bd6.09795740" + }, + { + "kind": "tech_research", + "priority": "P3", + "label": "Stacks: langchain, n8n", + "action": "OSS Discovery + backlog R&D", + "source": "note_69e584b6df3513.49062359", + "id": "reco_69e584b6df9a53.34797594", + "source_item": "note_69e584b6df3513.49062359", + "created_at": "2026-04-20T01:43:18+00:00", + "status": "open" } ], "alerts": [ @@ -191,9 +229,31 @@ "source_item": "message_69e583ec4a8c63.43728183", "created_at": "2026-04-20T01:39:56+00:00", "status": "open" + }, + { + "kind": "task_create", + "priority": "P0", + "label": "Créer tâche pour échéance: demain", + "action": "Ajouter à Calendar\/Reminders avec contexte: Test MCP\nURGENT appeler Kaouther demain pour devis 15000 EUR - utilise n8n et langchain pour automation", + "source": "note_69e584b6df3513.49062359", + "id": "reco_69e584b6df9675.91091745", + "source_item": "note_69e584b6df3513.49062359", + "created_at": "2026-04-20T01:43:18+00:00", + "status": "open" + }, + { + "kind": "urgent_alert", + "priority": "P0", + "label": "Item urgent — traitement immédiat", + "action": "Telegram @wevia_cyber_bot", + "source": "note_69e584b6df3513.49062359", + "id": "reco_69e584b6df9ab0.94686364", + "source_item": "note_69e584b6df3513.49062359", + "created_at": "2026-04-20T01:43:18+00:00", + "status": "open" } ], - "last_update": "2026-04-20T01:39:56+00:00", + "last_update": "2026-04-20T01:43:18+00:00", "drill_index": { "message_69e5824ba35bd6.09795740": { "id": "message_69e5824ba35bd6.09795740", @@ -465,6 +525,68 @@ "source": "message_69e583ec4a8c63.43728183" } ] + }, + "note_69e584b6df3513.49062359": { + "id": "note_69e584b6df3513.49062359", + "type": "note", + "raw": { + "title": "Test MCP", + "body": "URGENT appeler Kaouther demain pour devis 15000 EUR - utilise n8n et langchain pour automation" + }, + "text_sample": "Test MCP\nURGENT appeler Kaouther demain pour devis 15000 EUR - utilise n8n et langchain pour automation", + "entities": { + "people": [], + "orgs": [], + "money": [ + "15000 EUR" + ], + "deadlines": [ + "demain" + ], + "locations": [], + "emails": [], + "phones": [], + "urls": [], + "apps": [], + "keywords": [], + "sentiment": "neutral", + "urgency": "high", + "oss": [ + "langchain", + "n8n" + ] + }, + "ingested_at": "2026-04-20T01:43:18+00:00", + "recommendations": [ + { + "kind": "task_create", + "priority": "P0", + "label": "Créer tâche pour échéance: demain", + "action": "Ajouter à Calendar\/Reminders avec contexte: Test MCP\nURGENT appeler Kaouther demain pour devis 15000 EUR - utilise n8n et langchain pour automation", + "source": "note_69e584b6df3513.49062359" + }, + { + "kind": "finance_track", + "priority": "P1", + "label": "Montant(s) détecté(s): 15000 EUR", + "action": "Vérifier facture\/devis et lier CRM WEVAL", + "source": "note_69e584b6df3513.49062359" + }, + { + "kind": "tech_research", + "priority": "P3", + "label": "Stacks: langchain, n8n", + "action": "OSS Discovery + backlog R&D", + "source": "note_69e584b6df3513.49062359" + }, + { + "kind": "urgent_alert", + "priority": "P0", + "label": "Item urgent — traitement immédiat", + "action": "Telegram @wevia_cyber_bot", + "source": "note_69e584b6df3513.49062359" + } + ] } } } \ No newline at end of file diff --git a/downloads/wevia-shortcut-calendar.json b/downloads/wevia-shortcut-calendar.json new file mode 100644 index 000000000..d630f5538 --- /dev/null +++ b/downloads/wevia-shortcut-calendar.json @@ -0,0 +1,33 @@ +{ + "name": "WEVIA Sync Calendar Today", + "version": "1.0", + "description": "Sync événements Calendar iPhone du jour vers WEVIA (auto-detect deadlines + tasks)", + "install_instructions": [ + "1. Raccourcis → + → Nouveau 'Sync Calendar WEVIA'", + "2. Actions :", + " - 'Trouver événements Calendar' : aujourd'hui (commence aujourd'hui + finit ce soir)", + " - 'Répéter avec chacun' :", + " • Obtenir titre/début/fin/lieu/notes", + " • 'Obtenir URL' POST JSON ci-dessous", + "3. Run manuel le matin OU Automation iOS 'Tous les jours à 8h'", + "", + "AUTOMATION (recommandé) :", + "- Raccourcis → Automation → Heure → 8h00 quotidien → Exécuter 'Sync Calendar WEVIA'" + ], + "url": "https://weval-consulting.com/api/wevia-apple-ingest.php?action=ingest_structured", + "method": "POST", + "headers": {"Content-Type": "application/json"}, + "json_body_template": { + "type": "calendar", + "items": [ + { + "title": "[Event title]", + "start": "[ISO datetime start]", + "end": "[ISO datetime end]", + "location": "[Location]", + "notes": "[Notes]" + } + ] + }, + "automation_suggested": "Daily at 8:00 AM" +} diff --git a/downloads/wevia-shortcut-calls.json b/downloads/wevia-shortcut-calls.json new file mode 100644 index 000000000..639379758 --- /dev/null +++ b/downloads/wevia-shortcut-calls.json @@ -0,0 +1,34 @@ +{ + "name": "WEVIA Sync Call Log", + "version": "1.0", + "description": "Sync historique appels récents vers WEVIA (détection contacts manqués, relances à faire)", + "install_instructions": [ + "⚠️ LIMITE iOS : Apple ne permet PAS l'accès direct à l'historique d'appels via Shortcuts.", + "", + "SOLUTION 1 - Manuel (par appel) :", + "1. Après un appel important → note dans l'app Notes", + "2. Partage la note via raccourci 'Capture WEVIA' type=note", + "", + "SOLUTION 2 - Automation appel terminé (iOS 17+) :", + "1. Raccourcis → Automation → Quand j'appelle [contact X]", + "2. Action : Demander 'Résumé appel ?' → POST type=call", + "", + "SOLUTION 3 - MacBook + Blade MCP :", + "Utilise apple_call_log_scrape MCP tool (nécessite Mac USB-connected au iPhone)" + ], + "url": "https://weval-consulting.com/api/wevia-apple-ingest.php?action=ingest_structured", + "method": "POST", + "headers": {"Content-Type": "application/json"}, + "json_body_template": { + "type": "call", + "items": [ + { + "name": "[Contact name]", + "number": "[Phone number]", + "duration": "[seconds]", + "direction": "[incoming|outgoing|missed]", + "date": "[ISO datetime]" + } + ] + } +} diff --git a/downloads/wevia-shortcut-contacts.json b/downloads/wevia-shortcut-contacts.json new file mode 100644 index 000000000..0488af364 --- /dev/null +++ b/downloads/wevia-shortcut-contacts.json @@ -0,0 +1,39 @@ +{ + "name": "WEVIA Sync Contacts", + "version": "1.0", + "description": "Sync contact(s) iPhone vers WEVIA CRM (Twenty) + enrichissement IA", + "install_instructions": [ + "Option A (Share Sheet - 1 contact) :", + "1. Raccourcis → + → Nouveau", + "2. Actions :", + " - 'Obtenir les contacts' depuis entrée (Share Sheet)", + " - Pour chaque contact → 'Obtenir prénom/nom/téléphone/email'", + " - 'Obtenir URL' POST JSON", + "3. Active Share Sheet type Contacts", + "4. Depuis Contacts → Partager → Sync WEVIA", + "", + "Option B (Bulk - tous les contacts) :", + "1. Raccourcis → + → Nouveau raccourci 'Sync All WEVIA'", + "2. Actions :", + " - 'Trouver tous les contacts'", + " - 'Répéter avec chacun' → POST à l'endpoint", + "3. Run manuel depuis l'app" + ], + "url": "https://weval-consulting.com/api/wevia-apple-ingest.php?action=ingest_structured", + "method": "POST", + "headers": {"Content-Type": "application/json"}, + "json_body_template": { + "type": "contact", + "items": [ + { + "name": "[Contact name]", + "phone": "[Contact phone]", + "email": "[Contact email]", + "org": "[Company]", + "notes": "[Contact notes]" + } + ] + }, + "share_sheet": true, + "share_sheet_types": ["Contact"] +} diff --git a/downloads/wevia-shortcut-health.json b/downloads/wevia-shortcut-health.json new file mode 100644 index 000000000..1c40392a1 --- /dev/null +++ b/downloads/wevia-shortcut-health.json @@ -0,0 +1,30 @@ +{ + "name": "WEVIA Sync Health Daily", + "version": "1.0", + "description": "Sync métriques HealthKit du jour vers WEVIA (steps, heart rate, sleep, mood)", + "install_instructions": [ + "1. Raccourcis → + → Nouveau 'Health WEVIA Daily'", + "2. Actions :", + " - 'Obtenir échantillons Santé' : Pas (aujourd'hui, somme)", + " - 'Obtenir échantillons Santé' : Fréquence cardiaque (aujourd'hui, moyenne)", + " - 'Obtenir échantillons Santé' : Sommeil (cette nuit, somme)", + " - 'Obtenir URL' POST JSON", + "3. Automation Heure → 22h00 quotidien → Exécuter", + "", + "REQUIS : iPhone autoriser Raccourcis à lire les données Santé", + "Réglages → Santé → Partage données → Apps → Raccourcis → Activer lecture" + ], + "url": "https://weval-consulting.com/api/wevia-apple-ingest.php?action=ingest_structured", + "method": "POST", + "headers": {"Content-Type": "application/json"}, + "json_body_template": { + "type": "health", + "items": [ + {"metric": "steps", "value": "[steps today]", "unit": "count", "date": "[today]"}, + {"metric": "heart_rate_avg", "value": "[avg bpm]", "unit": "bpm", "date": "[today]"}, + {"metric": "sleep_hours", "value": "[hours]", "unit": "hours", "date": "[last night]"} + ] + }, + "automation_suggested": "Daily at 22:00", + "permissions_required": ["HealthKit read"] +} diff --git a/downloads/wevia-shortcut-messages.json b/downloads/wevia-shortcut-messages.json new file mode 100644 index 000000000..9131e3a72 --- /dev/null +++ b/downloads/wevia-shortcut-messages.json @@ -0,0 +1,31 @@ +{ + "name": "WEVIA Ingest Message", + "version": "1.0", + "description": "Partage un SMS/iMessage vers WEVIA pour analyse IA (entités, urgence, reco)", + "install_instructions": [ + "1. Raccourcis → + → Nouveau raccourci", + "2. Actions :", + " - Obtenir texte (Texte partagé, depuis Share Sheet)", + " - Demander (question 'De qui ?' pour from)", + " - Obtenir le contenu de l'URL : POST JSON ci-dessous", + "3. Active 'Share Sheet' type Texte", + "4. Depuis Messages : touche message → Partager → Scan WEVIA" + ], + "url": "https://weval-consulting.com/api/wevia-apple-ingest.php?action=ingest_structured", + "method": "POST", + "headers": {"Content-Type": "application/json"}, + "json_body_template": { + "type": "message", + "items": [ + { + "from": "[from sender - ask]", + "to": "me", + "body": "[shared text]", + "date": "[current datetime]" + } + ] + }, + "share_sheet": true, + "share_sheet_types": ["Text"], + "endpoint_raw": "https://weval-consulting.com/api/wevia-apple-ingest.php" +} diff --git a/downloads/wevia-shortcut-notes.json b/downloads/wevia-shortcut-notes.json new file mode 100644 index 000000000..21859be67 --- /dev/null +++ b/downloads/wevia-shortcut-notes.json @@ -0,0 +1,30 @@ +{ + "name": "WEVIA Capture Note", + "version": "1.0", + "description": "Capture rapide une note vers WEVIA (extraction auto: people, deadlines, money, OSS, tasks)", + "install_instructions": [ + "1. Raccourcis → + → Nouveau 'Capture WEVIA'", + "2. Actions :", + " - 'Demander' (Quel est le titre ?)", + " - 'Demander' (Quel est le contenu ?)", + " - 'Obtenir URL' POST JSON ci-dessous", + "3. Ajoute à l'écran d'accueil : Raccourcis → ≡ → Ajouter à l'écran d'accueil", + "", + "Alternative : widget Raccourcis sur écran verrouillage (iOS 16+) pour capture en 1 tap" + ], + "url": "https://weval-consulting.com/api/wevia-apple-ingest.php?action=ingest_structured", + "method": "POST", + "headers": {"Content-Type": "application/json"}, + "json_body_template": { + "type": "note", + "items": [ + { + "title": "[user prompt title]", + "body": "[user prompt body]", + "folder": "quick-capture" + } + ] + }, + "home_screen": true, + "widget": true +} diff --git a/downloads/wevia-shortcut-photos.json b/downloads/wevia-shortcut-photos.json new file mode 100644 index 000000000..b9616a904 --- /dev/null +++ b/downloads/wevia-shortcut-photos.json @@ -0,0 +1,32 @@ +{ + "name": "WEVIA Scan Photos", + "version": "1.0", + "description": "Shortcut iOS pour uploader photos vers WEVIA Apple ingestion + OCR + IA", + "install_instructions": [ + "1. Ouvre l'app 'Raccourcis' sur ton iPhone", + "2. Touche '+' pour créer un nouveau raccourci", + "3. Ajoute action 'Obtenir images' (source: sélection utilisateur, limite: 1)", + "4. Ajoute action 'Obtenir le contenu de l'URL' avec paramètres ci-dessous", + "5. Nomme le raccourci 'Scan WEVIA'", + "6. Active 'Afficher dans le menu partager' (Share Sheet)", + "7. Sélectionne type 'Images' uniquement" + ], + "url": "https://weval-consulting.com/api/wevia-apple-ingest.php?action=ingest_photo", + "method": "POST", + "form_fields": { + "file": "[Image from shortcut input]" + }, + "automation_setup": { + "title": "Automation iCloud (ZÉRO ACTION)", + "steps": [ + "1. App Photos → crée album 'WEVIA Scan'", + "2. App Raccourcis → onglet Automation → + → Création perso", + "3. Déclencheur : 'Photo ajoutée à album' → WEVIA Scan", + "4. Action : Exécuter raccourci 'Scan WEVIA'", + "5. Désactive 'Demander avant d'exécuter'", + "✓ Terminé ! Chaque photo ajoutée au album est scannée auto" + ] + }, + "share_sheet": true, + "endpoint_raw": "https://weval-consulting.com/api/wevia-apple-ingest.php?action=ingest_photo" +} diff --git a/enterprise-model.html b/enterprise-model.html index 73f7b8042..f4b9079a7 100644 --- a/enterprise-model.html +++ b/enterprise-model.html @@ -336,66 +336,66 @@ let AG=[{n:'WEVIA Master',rm:'ceo',d:'Head of AI',p:'Orchestrator',sk:'#ffd700', {n:'ProfitOrch',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'}, {n:'NeuralDOM',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'} , -{n:'Fraud Detection ML',rm:'sec',d:'Security',p:'Fraude ML',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'',savings:'1.40M/an',pp:'PP030',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'GDPR Auditor AI',rm:'sec',d:'Security',p:'GDPR',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'',savings:'560k/an',pp:'PP029',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'SoD Continuous Agent',rm:'sec',d:'Security',p:'SoD',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'',savings:'220k/an',pp:'PP028',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Predictive Maintenance AI',rm:'mfg',d:'Manufacturing',p:'Predictive',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'1.20M/an',pp:'PP013',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'OEE Live Agent',rm:'mfg',d:'Manufacturing',p:'OEE',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'940k/an',pp:'PP012',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Quality SPC AI Real-time',rm:'mfg',d:'Manufacturing',p:'SPC',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'780k/an',pp:'PP014',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'TOC Bottleneck Optimizer',rm:'mfg',d:'Manufacturing',p:'TOC',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'650k/an',pp:'PP015',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'21CFR Audit Trail Agent',rm:'mfg',d:'Manufacturing',p:'21CFR',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'280k/an',pp:'PP051',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'ABL Migration Agent',rm:'mfg',d:'Manufacturing',p:'ABL',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'450k/an',pp:'PP056',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'EDI Onboarding Agent',rm:'mfg',d:'Manufacturing',p:'EDI',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'210k/an',pp:'PP059',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'UX Wrapper Agent',rm:'mfg',d:'Manufacturing',p:'UX',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'110k/an',pp:'PP045',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'QAD Extension Governance',rm:'mfg',d:'Manufacturing',p:'QAD',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'',savings:'95k/an',pp:'PP057',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Stockout Predictor ML',rm:'sup',d:'Supply',p:'Stockout',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'',savings:'850k/an',pp:'PP007',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Inventory Optimizer AI',rm:'sup',d:'Supply',p:'Inventory',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'',savings:'620k/an',pp:'PP008',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Vendor Fraud Detective',rm:'sup',d:'Supply',p:'Vendor',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'',savings:'560k/an',pp:'PP010',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Tail Spend Analyzer',rm:'sup',d:'Supply',p:'TailSpend',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'',savings:'420k/an',pp:'PP011',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Supplier Risk Monitor',rm:'sup',d:'Supply',p:'Supplier',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'',savings:'380k/an',pp:'PP009',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'IC Elimination Agent',rm:'sup',d:'Supply',p:'IC',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'',savings:'165k/an',pp:'PP039',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Odoo Upgrade Shield',rm:'sup',d:'Supply',p:'Odoo',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'',savings:'75k/an',pp:'PP058',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Acumatica Live BI Agent',rm:'sup',d:'Supply',p:'BI',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'',savings:'70k/an',pp:'PP044',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Churn Prediction Agent',rm:'sal',d:'Sales',p:'Churn',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'',savings:'890k/an',pp:'PP018',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Next Best Action Agent',rm:'sal',d:'Sales',p:'NBA',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'',savings:'680k/an',pp:'PP020',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Veeva NBA Accelerator',rm:'sal',d:'Sales',p:'Veeva',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'',savings:'380k/an',pp:'PP049',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'MQL Scoring AI',rm:'sal',d:'Sales',p:'MQL',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'',savings:'520k/an',pp:'PP017',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Pipeline Reality Agent',rm:'sal',d:'Sales',p:'Pipeline',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'',savings:'450k/an',pp:'PP016',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Quote AI Generator',rm:'sal',d:'Sales',p:'Quote',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'',savings:'340k/an',pp:'PP019',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'AL Extension Regression Agent',rm:'sal',d:'Sales',p:'AL',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'',savings:'120k/an',pp:'PP042',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Utilization Optimizer',rm:'hr',d:'HR',p:'Utilization',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'',savings:'740k/an',pp:'PP023',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Attrition Predictor',rm:'hr',d:'HR',p:'Attrition',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'',savings:'480k/an',pp:'PP021',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'CV Matcher Pro',rm:'hr',d:'HR',p:'CV',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'',savings:'320k/an',pp:'PP022',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Payroll Verifier AI',rm:'hr',d:'HR',p:'Payroll',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'',savings:'180k/an',pp:'PP024',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Catalog Builder Agent',rm:'hr',d:'HR',p:'Catalog',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'',savings:'130k/an',pp:'PP048',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Multi-Touch Attribution',rm:'mkt',d:'Marketing',p:'Attribution',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'',savings:'380k/an',pp:'PP025',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Content AI Personalized',rm:'mkt',d:'Marketing',p:'Content',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'',savings:'240k/an',pp:'PP026',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Deliverability WEVADS',rm:'mkt',d:'Marketing',p:'Email',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'',savings:'290k/an',pp:'PP027',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Incident AI Responder',rm:'ops',d:'IT Ops',p:'MTTR',sk:'#3b82f6',hc:'#1d4ed8',F:1,wv:1,re:'',savings:'620k/an',pp:'PP031',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Integration Health Agent',rm:'ops',d:'IT Ops',p:'Integration',sk:'#3b82f6',hc:'#1d4ed8',F:1,wv:1,re:'',savings:'280k/an',pp:'PP032',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'AML Smart Filter',rm:'dir',d:'Direction',p:'AML',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'',savings:'900k/an',pp:'PP053',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Vault Quality AI',rm:'dir',d:'Direction',p:'Quality',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'',savings:'520k/an',pp:'PP050',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'MDM Continuous Quality',rm:'dir',d:'Direction',p:'MDM',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'',savings:'480k/an',pp:'PP060',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'DD M&A Analyst',rm:'dir',d:'Direction',p:'DD',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'',savings:'450k/an',pp:'PP035',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Board Report Generator',rm:'dir',d:'Direction',p:'Board',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'',savings:'240k/an',pp:'PP034',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'OKR Tracker Agent',rm:'dir',d:'Direction',p:'OKR',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'',savings:'180k/an',pp:'PP033',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'T24 Batch Orchestrator',rm:'fin',d:'Finance',p:'T24',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'350k/an',pp:'PP052',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Collection AI Agent',rm:'fin',d:'Finance',p:'DSO',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'320k/an',pp:'PP003',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Cash Flow Predictor AI',rm:'fin',d:'Finance',p:'CashFlow',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'240k/an',pp:'PP002',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Fraud Detection Finance',rm:'fin',d:'Finance',p:'Fraud',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'400k/an',pp:'PP004',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Budget Variance Watchdog',rm:'fin',d:'Finance',p:'Budget',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'150k/an',pp:'PP005',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Multi-Entity Consolidator',rm:'fin',d:'Finance',p:'Consol',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'210k/an',pp:'PP006',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Fast Close Orchestrator',rm:'fin',d:'Finance',p:'Close',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'180k/an',pp:'PP001',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'DCAA Compliance Agent',rm:'fin',d:'Finance',p:'DCAA',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'220k/an',pp:'PP046',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'OIC Accelerator',rm:'fin',d:'Finance',p:'OIC',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'220k/an',pp:'PP054',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'NetSuite Customization',rm:'fin',d:'Finance',p:'NetSuite',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'180k/an',pp:'PP038',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'CMDB Enrichment Agent',rm:'fin',d:'Finance',p:'CMDB',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'160k/an',pp:'PP047',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'ASC606 Automation',rm:'fin',d:'Finance',p:'ASC606',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'130k/an',pp:'PP055',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'BC Performance Accelerator',rm:'fin',d:'Finance',p:'BCPerf',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'85k/an',pp:'PP041',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Cloture FR Agent',rm:'fin',d:'Finance',p:'FR',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'75k/an',pp:'PP040',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'SMB Analytics Modernizer',rm:'fin',d:'Finance',p:'SMBBI',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'95k/an',pp:'PP036',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'ISV Resilience Agent',rm:'fin',d:'Finance',p:'ISV',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'95k/an',pp:'PP043',act:['WEVAL','Agent','Autonome','Savings']}, -{n:'Multi-Entity Consolidator SMB',rm:'fin',d:'Finance',p:'SMBConsol',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'',savings:'140k/an',pp:'PP037',act:['WEVAL','Agent','Autonome','Savings']}]; +{n:'Fraud Detection ML',rm:'sec',d:'Security',p:'Fraude ML',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'🤖',savings:'1.40M/an',pp:'PP030',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'GDPR Auditor AI',rm:'sec',d:'Security',p:'GDPR',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'🤖',savings:'560k/an',pp:'PP029',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'SoD Continuous Agent',rm:'sec',d:'Security',p:'SoD',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'🤖',savings:'220k/an',pp:'PP028',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Predictive Maintenance AI',rm:'mfg',d:'Manufacturing',p:'Predictive',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'1.20M/an',pp:'PP013',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'OEE Live Agent',rm:'mfg',d:'Manufacturing',p:'OEE',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'940k/an',pp:'PP012',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Quality SPC AI Real-time',rm:'mfg',d:'Manufacturing',p:'SPC',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'780k/an',pp:'PP014',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'TOC Bottleneck Optimizer',rm:'mfg',d:'Manufacturing',p:'TOC',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'650k/an',pp:'PP015',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'21CFR Audit Trail Agent',rm:'mfg',d:'Manufacturing',p:'21CFR',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'280k/an',pp:'PP051',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'ABL Migration Agent',rm:'mfg',d:'Manufacturing',p:'ABL',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'450k/an',pp:'PP056',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'EDI Onboarding Agent',rm:'mfg',d:'Manufacturing',p:'EDI',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'210k/an',pp:'PP059',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'UX Wrapper Agent',rm:'mfg',d:'Manufacturing',p:'UX',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'110k/an',pp:'PP045',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'QAD Extension Governance',rm:'mfg',d:'Manufacturing',p:'QAD',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤖',savings:'95k/an',pp:'PP057',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Stockout Predictor ML',rm:'sup',d:'Supply',p:'Stockout',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🤖',savings:'850k/an',pp:'PP007',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Inventory Optimizer AI',rm:'sup',d:'Supply',p:'Inventory',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🤖',savings:'620k/an',pp:'PP008',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Vendor Fraud Detective',rm:'sup',d:'Supply',p:'Vendor',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🤖',savings:'560k/an',pp:'PP010',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Tail Spend Analyzer',rm:'sup',d:'Supply',p:'TailSpend',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🤖',savings:'420k/an',pp:'PP011',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Supplier Risk Monitor',rm:'sup',d:'Supply',p:'Supplier',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🤖',savings:'380k/an',pp:'PP009',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'IC Elimination Agent',rm:'sup',d:'Supply',p:'IC',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🤖',savings:'165k/an',pp:'PP039',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Odoo Upgrade Shield',rm:'sup',d:'Supply',p:'Odoo',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🤖',savings:'75k/an',pp:'PP058',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Acumatica Live BI Agent',rm:'sup',d:'Supply',p:'BI',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🤖',savings:'70k/an',pp:'PP044',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Churn Prediction Agent',rm:'sal',d:'Sales',p:'Churn',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'890k/an',pp:'PP018',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Next Best Action Agent',rm:'sal',d:'Sales',p:'NBA',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'680k/an',pp:'PP020',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Veeva NBA Accelerator',rm:'sal',d:'Sales',p:'Veeva',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'380k/an',pp:'PP049',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'MQL Scoring AI',rm:'sal',d:'Sales',p:'MQL',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'520k/an',pp:'PP017',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Pipeline Reality Agent',rm:'sal',d:'Sales',p:'Pipeline',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'450k/an',pp:'PP016',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Quote AI Generator',rm:'sal',d:'Sales',p:'Quote',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'340k/an',pp:'PP019',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'AL Extension Regression Agent',rm:'sal',d:'Sales',p:'AL',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'120k/an',pp:'PP042',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Utilization Optimizer',rm:'hr',d:'HR',p:'Utilization',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'🤖',savings:'740k/an',pp:'PP023',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Attrition Predictor',rm:'hr',d:'HR',p:'Attrition',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'🤖',savings:'480k/an',pp:'PP021',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'CV Matcher Pro',rm:'hr',d:'HR',p:'CV',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'🤖',savings:'320k/an',pp:'PP022',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Payroll Verifier AI',rm:'hr',d:'HR',p:'Payroll',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'🤖',savings:'180k/an',pp:'PP024',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Catalog Builder Agent',rm:'hr',d:'HR',p:'Catalog',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'🤖',savings:'130k/an',pp:'PP048',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Multi-Touch Attribution',rm:'mkt',d:'Marketing',p:'Attribution',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'🤖',savings:'380k/an',pp:'PP025',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Content AI Personalized',rm:'mkt',d:'Marketing',p:'Content',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'🤖',savings:'240k/an',pp:'PP026',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Deliverability WEVADS',rm:'mkt',d:'Marketing',p:'Email',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'🤖',savings:'290k/an',pp:'PP027',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Incident AI Responder',rm:'ops',d:'IT Ops',p:'MTTR',sk:'#3b82f6',hc:'#1d4ed8',F:1,wv:1,re:'🤖',savings:'620k/an',pp:'PP031',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Integration Health Agent',rm:'ops',d:'IT Ops',p:'Integration',sk:'#3b82f6',hc:'#1d4ed8',F:1,wv:1,re:'🤖',savings:'280k/an',pp:'PP032',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'AML Smart Filter',rm:'dir',d:'Direction',p:'AML',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'🤖',savings:'900k/an',pp:'PP053',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Vault Quality AI',rm:'dir',d:'Direction',p:'Quality',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'🤖',savings:'520k/an',pp:'PP050',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'MDM Continuous Quality',rm:'dir',d:'Direction',p:'MDM',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'🤖',savings:'480k/an',pp:'PP060',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'DD M&A Analyst',rm:'dir',d:'Direction',p:'DD',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'🤖',savings:'450k/an',pp:'PP035',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Board Report Generator',rm:'dir',d:'Direction',p:'Board',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'🤖',savings:'240k/an',pp:'PP034',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'OKR Tracker Agent',rm:'dir',d:'Direction',p:'OKR',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'🤖',savings:'180k/an',pp:'PP033',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'T24 Batch Orchestrator',rm:'fin',d:'Finance',p:'T24',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'350k/an',pp:'PP052',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Collection AI Agent',rm:'fin',d:'Finance',p:'DSO',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'320k/an',pp:'PP003',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Cash Flow Predictor AI',rm:'fin',d:'Finance',p:'CashFlow',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'240k/an',pp:'PP002',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Fraud Detection Finance',rm:'fin',d:'Finance',p:'Fraud',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'400k/an',pp:'PP004',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Budget Variance Watchdog',rm:'fin',d:'Finance',p:'Budget',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'150k/an',pp:'PP005',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Multi-Entity Consolidator',rm:'fin',d:'Finance',p:'Consol',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'210k/an',pp:'PP006',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Fast Close Orchestrator',rm:'fin',d:'Finance',p:'Close',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'180k/an',pp:'PP001',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'DCAA Compliance Agent',rm:'fin',d:'Finance',p:'DCAA',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'220k/an',pp:'PP046',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'OIC Accelerator',rm:'fin',d:'Finance',p:'OIC',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'220k/an',pp:'PP054',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'NetSuite Customization',rm:'fin',d:'Finance',p:'NetSuite',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'180k/an',pp:'PP038',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'CMDB Enrichment Agent',rm:'fin',d:'Finance',p:'CMDB',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'160k/an',pp:'PP047',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'ASC606 Automation',rm:'fin',d:'Finance',p:'ASC606',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'130k/an',pp:'PP055',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'BC Performance Accelerator',rm:'fin',d:'Finance',p:'BCPerf',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'85k/an',pp:'PP041',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Cloture FR Agent',rm:'fin',d:'Finance',p:'FR',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'75k/an',pp:'PP040',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'SMB Analytics Modernizer',rm:'fin',d:'Finance',p:'SMBBI',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'95k/an',pp:'PP036',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'ISV Resilience Agent',rm:'fin',d:'Finance',p:'ISV',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'95k/an',pp:'PP043',act:['WEVAL','Agent','Autonome','Savings']}, +{n:'Multi-Entity Consolidator SMB',rm:'fin',d:'Finance',p:'SMBConsol',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🤖',savings:'140k/an',pp:'PP037',act:['WEVAL','Agent','Autonome','Savings']}]; AG=AG.filter(function(a){return a&&a.n;}); // Tasks are now per-agent in act[] @@ -1417,7 +1417,7 @@ function drawLinkLabels(){ var _isDark=false;function toggleDark(){_isDark=!_isDark;document.body.style.background=_isDark?"#0f172a":"#eaeff7";} var _entLastState='';function checkEntNotif(){var s=DP.map(function(d){return d.id}).join(',');if(s!==_entLastState&&_entLastState!==''){try{var ac=new AudioContext();var o=ac.createOscillator();var g=ac.createGain();o.connect(g);g.connect(ac.destination);o.frequency.value=600;g.gain.value=0.03;o.start();o.stop(ac.currentTime+0.08);}catch(e){}}_entLastState=s;} -
ActifWarningCriticalArchive
+
ActifWEVAL Gap-Fill AgentWarningCriticalArchive