/** * workflowLLMService.js — ChessBoard Reasoning Engine LLM Backend * Phase 2: Real LLM inference via Groq → DeepSeek → OpenRouter fallback chain * Produces board traces, step-by-step reasoning, verdicts, and real confidence scores. */ import crypto from "node:crypto"; // ── Domain Ontologies (64 nodes each) ───────────────────────────────────── // Sourced from workflow-engine.html — single source of truth must be kept in sync export const DOMAIN_ONTOLOGIES = { legal: { id: "legal", symbol: "⊢", name: "Legal Reasoning", description: "64 legal doctrine nodes. Auditable AI legal argumentation. Every case is a game. Every ruling is a trace.", nodes: [ {id:'a8',icon:'⊢',name:'Civil Liab.',desc:'General civil liability doctrine'}, {id:'b8',icon:'∂',name:'Med. Neg.',desc:'Medical standard of care breach'}, {id:'c8',icon:'∇',name:'Traffic',desc:'Road accident tort liability'}, {id:'d8',icon:'Σ',name:'Product',desc:'Defective product liability'}, {id:'e8',icon:'∫',name:'Premises',desc:'Property owner duty of care'}, {id:'f8',icon:'Π',name:'Pharma',desc:'Drug manufacturer liability'}, {id:'g8',icon:'δ',name:'Pers. Inj.',desc:'Bodily harm compensation'}, {id:'h8',icon:'Ω',name:'Wrng. Death',desc:'Death from negligent act'}, {id:'a7',icon:'→',name:'Contract',desc:'Offer, acceptance, consideration'}, {id:'b7',icon:'⊥',name:'Breach',desc:'Failure to perform obligation'}, {id:'c7',icon:'≡',name:'Damages',desc:'Monetary compensation calculation'}, {id:'d7',icon:'⇒',name:'Spec. Perf.',desc:'Specific performance equitable remedy'}, {id:'e7',icon:'∅',name:'Void',desc:'Contract nullity and rescission'}, {id:'f7',icon:'⊃',name:'Force Maj.',desc:'Force majeure unforeseen circumstances'}, {id:'g7',icon:'∧',name:'Good Faith',desc:'Good faith and fair dealing'}, {id:'h7',icon:'⏲',name:'Limitation',desc:'Statute of limitations time-bar'}, {id:'a6',icon:'∃',name:'Doc. Evid.',desc:'Documentary evidence standard'}, {id:'b6',icon:'∀',name:'Eyewitness',desc:'Testimonial evidence admissibility'}, {id:'c6',icon:'φ',name:'Expert Wit.',desc:'Expert opinion and admissibility'}, {id:'d6',icon:'λ',name:'Forensic',desc:'Scientific physical evidence'}, {id:'e6',icon:'ℤ',name:'Digital',desc:'Electronic records and metadata'}, {id:'f6',icon:'ρ',name:'CCTV',desc:'Video surveillance admissibility'}, {id:'g6',icon:'μ',name:'Med. Record',desc:'Clinical documentation standard'}, {id:'h6',icon:'ξ',name:'Statistical',desc:'Data-based evidentiary proof'}, {id:'a5',icon:'⊸',name:'But-For',desc:'Sine qua non causation test'}, {id:'b5',icon:'↔',name:'Proximate',desc:'Direct legal causation chain'}, {id:'c5',icon:'⊕',name:'Intervening',desc:'Superseding intervening cause'}, {id:'d5',icon:'σ',name:'Std. of Care',desc:'Reasonable person benchmark'}, {id:'e5',icon:'τ',name:'Duty of Care',desc:'Legal obligation to avoid harm'}, {id:'f5',icon:'⊗',name:'Contrib. Neg',desc:'Plaintiff contributory fault'}, {id:'g5',icon:'÷',name:'Comp. Fault',desc:'Proportional liability split'}, {id:'h5',icon:'⊤',name:'Strict Liab.',desc:'No-fault strict liability'}, {id:'a4',icon:'$',name:'Compensatory',desc:'Make the plaintiff whole'}, {id:'b4',icon:'×',name:'Punitive',desc:'Punishment for egregious conduct'}, {id:'c4',icon:'ℝ',name:'Actual Loss',desc:'Documented economic loss'}, {id:'d4',icon:'ε',name:'Pain & Suf.',desc:'Non-economic general damages'}, {id:'e4',icon:'η',name:'Lost Earn.',desc:'Income reduction future claim'}, {id:'f4',icon:'ℕ',name:'Med. Exp.',desc:'Healthcare cost recovery'}, {id:'g4',icon:'β',name:'Future Dmg.',desc:'Projected ongoing future losses'}, {id:'h4',icon:'≈',name:'Mitigation',desc:'Duty to mitigate damages'}, {id:'a3',icon:'∪',name:'Assump. Risk',desc:'Voluntary assumption of known risk'}, {id:'b3',icon:'⌛',name:'Stat. Limit.',desc:'Time-bar statute of limitations'}, {id:'c3',icon:'ℂ',name:'Sov. Immun.',desc:'Government sovereign immunity'}, {id:'d3',icon:'∩',name:'Consent',desc:'Plaintiff consent to risk'}, {id:'e3',icon:'≠',name:'Res Judic.',desc:'Prior judgment issue preclusion'}, {id:'f3',icon:'⊂',name:'Coll. Estop.',desc:'Collateral estoppel doctrine'}, {id:'g3',icon:'⚡',name:'Emergency',desc:'Sudden emergency doctrine'}, {id:'h3',icon:'±',name:'Good Samar.',desc:'Good Samaritan protection'}, {id:'a2',icon:'ℚ',name:'Subject Jx.',desc:'Subject matter jurisdiction'}, {id:'b2',icon:'∈',name:'Personal Jx.',desc:'Personal jurisdiction over party'}, {id:'c2',icon:'π',name:'Pleading',desc:'Required pleading specificity'}, {id:'d2',icon:'ι',name:'Discovery',desc:'Evidence disclosure rules'}, {id:'e2',icon:'κ',name:'Burden Pf.',desc:'Preponderance burden of proof'}, {id:'f2',icon:'ν',name:'Class Act.',desc:'Collective class action litigation'}, {id:'g2',icon:'ζ',name:'Settlement',desc:'Out-of-court resolution'}, {id:'h2',icon:'θ',name:'Sum. Judg.',desc:'Pre-trial summary judgment'}, {id:'a1',icon:'✓',name:'Liable',desc:'Defendant found liable'}, {id:'b1',icon:'✗',name:'No Liability',desc:'Defendant not liable'}, {id:'c1',icon:'½',name:'Partial',desc:'Partial recovery awarded'}, {id:'d1',icon:'¹',name:'Full Recov.',desc:'Complete damages awarded'}, {id:'e1',icon:'↩',name:'Remanded',desc:'Case returned to lower court'}, {id:'f1',icon:'⊘',name:'Dismissed',desc:'Permanent dismissal with prejudice'}, {id:'g1',icon:'⇔',name:'Equit. Rel.',desc:'Injunction or specific performance'}, {id:'h1',icon:'↻',name:'New Trial',desc:'New trial ordered by court'}, ], cases: [ {id:'hernandez-hospital', name:'Hernández v. Hospital Central', label:'Medical Neg.'}, {id:'techcorp-supplierx', name:'TechCorp v. SupplierX', label:'Contract Breach'}, {id:'people-martinez', name:'People v. Martínez', label:'Traffic Tort'}, ] }, medical: { id: "medical", symbol: "∂", name: "Medical Diagnosis", description: "64 clinical nodes. Bayesian diagnostic traversal. Every patient is a protocol. Every trace is a treatment plan.", nodes: [ {id:'a8',icon:'θ',name:'Fever',desc:'Elevated temperature symptom'},{id:'b8',icon:'♥',name:'Chest Pain',desc:'Chest pain with radiation'}, {id:'c8',icon:'~',name:'Dyspnea',desc:'Difficulty breathing dyspnea'},{id:'d8',icon:'≈',name:'Nausea',desc:'Nausea and vomiting symptom'}, {id:'e8',icon:'⊥',name:'Headache',desc:'Severe cephalgia headache'},{id:'f8',icon:'ρ',name:'Skin Rash',desc:'Cutaneous eruption rash'}, {id:'g8',icon:'τ',name:'Joint Pain',desc:'Polyarthralgia joint pain'},{id:'h8',icon:'μ',name:'Fatigue',desc:'Chronic fatigue syndrome'}, {id:'a7',icon:'∿',name:'ECG',desc:'Electrocardiogram test'},{id:'b7',icon:'Σ',name:'CBC Panel',desc:'Complete blood count panel'}, {id:'c7',icon:'∂',name:'CRP / ESR',desc:'Inflammatory markers CRP ESR'},{id:'d7',icon:'∇',name:'Culture',desc:'Microbial culture and sensitivity'}, {id:'e7',icon:'⊗',name:'CT Scan',desc:'Computed tomography imaging'},{id:'f7',icon:'λ',name:'Chest X-Ray',desc:'Chest X-ray radiograph'}, {id:'g7',icon:'∀',name:'ANA Panel',desc:'Antinuclear antibody panel'},{id:'h7',icon:'Δ',name:'Troponin',desc:'Cardiac troponin assay'}, {id:'a6',icon:'→',name:'ACS',desc:'Acute coronary syndrome'},{id:'b6',icon:'⊕',name:'Pulm. Emb.',desc:'Pulmonary embolism'}, {id:'c6',icon:'∃',name:'Bacterial',desc:'Bacterial infection diagnosis'},{id:'d6',icon:'ψ',name:'SLE / Lupus',desc:'Systemic lupus erythematosus'}, {id:'e6',icon:'ω',name:'Migraine',desc:'Complex migraine disorder'},{id:'f6',icon:'φ',name:'Viral',desc:'Viral syndrome diagnosis'}, {id:'g6',icon:'σ',name:'RA',desc:'Rheumatoid arthritis'},{id:'h6',icon:'ξ',name:'Drug Rxn.',desc:'Adverse drug reaction'}, {id:'a5',icon:'✗',name:'Not Cardiac',desc:'Rule out cardiac cause'},{id:'b5',icon:'✗',name:'Not Pulm.',desc:'Rule out pulmonary embolism'}, {id:'c5',icon:'✗',name:'Not Bact.',desc:'Rule out bacterial infection'},{id:'d5',icon:'✓',name:'Autoimmune',desc:'Confirm autoimmune etiology'}, {id:'e5',icon:'✗',name:'Not Mening.',desc:'Rule out meningitis'},{id:'f5',icon:'✓',name:'Viral Conf.',desc:'Confirm viral syndrome'}, {id:'g5',icon:'✓',name:'Rheumatic',desc:'Confirm rheumatic disease'},{id:'h5',icon:'✗',name:'Not Drug Rxn',desc:'Rule out drug reaction'}, {id:'a4',icon:'∫',name:'ASA + GTN',desc:'Aspirin and nitrates treatment'},{id:'b4',icon:'⊃',name:'Anticoag.',desc:'Anticoagulation therapy'}, {id:'c4',icon:'β',name:'Antibiotic',desc:'Broad-spectrum antibiotic'},{id:'d4',icon:'γ',name:'HCQ',desc:'Hydroxychloroquine treatment'}, {id:'e4',icon:'π',name:'Triptan',desc:'Triptan therapy for migraine'},{id:'f4',icon:'≡',name:'Supportive',desc:'Supportive care management'}, {id:'g4',icon:'α',name:'MTX + Bio.',desc:'Methotrexate and biologics'},{id:'h4',icon:'∅',name:'D/C Drug',desc:'Discontinue offending drug'}, {id:'a3',icon:'◊',name:'CCU Admit',desc:'Coronary care unit admission'},{id:'b3',icon:'◊',name:'ICU Admit',desc:'Intensive care unit admission'}, {id:'c3',icon:'◊',name:'Ward',desc:'General ward admission'},{id:'d3',icon:'◊',name:'Rheum. Out.',desc:'Rheumatology outpatient clinic'}, {id:'e3',icon:'◊',name:'Neuro. Out.',desc:'Neurology outpatient clinic'},{id:'f3',icon:'□',name:'Home Care',desc:'Home management and care'}, {id:'g3',icon:'◊',name:'Ortho Ref.',desc:'Orthopaedic referral'},{id:'h3',icon:'↻',name:'Review 48h',desc:'48-hour follow-up review'}, {id:'a2',icon:'Π',name:'Echo FU',desc:'Echocardiogram follow-up'},{id:'b2',icon:'∿',name:'INR Monitor',desc:'INR monitoring'}, {id:'c2',icon:'∂',name:'CRP Monitor',desc:'CRP monitoring'},{id:'d2',icon:'η',name:'dsDNA',desc:'dsDNA antibody monitoring'}, {id:'e2',icon:'∇',name:'HA Diary',desc:'Headache diary'},{id:'f2',icon:'θ',name:'Temp Monitor',desc:'Temperature monitoring'}, {id:'g2',icon:'Σ',name:'DAS28',desc:'DAS28 disease activity score'},{id:'h2',icon:'⊢',name:'GP Review',desc:'General practitioner review'}, {id:'a1',icon:'✓',name:'Stable',desc:'Stable for discharge'},{id:'b1',icon:'↑',name:'Cath Lab',desc:'Transfer to catheterization lab'}, {id:'c1',icon:'→',name:'Responds',desc:'Responding to treatment'},{id:'d1',icon:'∞',name:'Long-term',desc:'Long-term management plan'}, {id:'e1',icon:'≈',name:'Sym. Ctrl.',desc:'Symptom control achieved'},{id:'f1',icon:'↗',name:'Recovery',desc:'Expected recovery trajectory'}, {id:'g1',icon:'∫',name:'Remission',desc:'Remission target achieved'},{id:'h1',icon:'↻',name:'Monitor',desc:'Monitor and adjust'}, ], cases: [ {id:'male-64-chest', name:'Male 64 — Chest pain, dyspnea, diaphoresis', label:'ACS Protocol'}, {id:'female-34-fever', name:'Female 34 — Fever, rash, arthralgia', label:'Autoimmune Protocol'}, {id:'child-8-headache', name:'Child 8 — Recurrent headache, photophobia', label:'Neuro Protocol'}, ] }, learning: { id: "learning", symbol: "∇", name: "Adaptive Learning", description: "64 curriculum nodes. Cognitive profile mapping via board traversal. Every student is a unique path.", nodes: [ {id:'a8',name:'Arithmetic'},{id:'b8',name:'Algebra'},{id:'c8',name:'Statistics'},{id:'d8',name:'Calculus'}, {id:'e8',name:'Num. Theory'},{id:'f8',name:'Geometry'},{id:'g8',name:'Functions'},{id:'h8',name:'Lin. Algebra'}, {id:'a7',name:'Newton'},{id:'b7',name:'EM Theory'},{id:'c7',name:'Organic Chem'},{id:'d7',name:'Biology'}, {id:'e7',name:'Astronomy'},{id:'f7',name:'Earth Sci.'},{id:'g7',name:'Fluid Dyn.'},{id:'h7',name:'Thermody.'}, {id:'a6',name:'Reading'},{id:'b6',name:'Essay Writing'},{id:'c6',name:'Lit. Analysis'},{id:'d6',name:'Oral Pres.'}, {id:'e6',name:'Grammar'},{id:'f6',name:'Research'},{id:'g6',name:'Creative Wrt'},{id:'h6',name:'Language 2'}, {id:'a5',name:'Anc. History'},{id:'b5',name:'World History'},{id:'c5',name:'Wars'},{id:'d5',name:'Govt & Pol.'}, {id:'e5',name:'Econ. Hist.'},{id:'f5',name:'Art History'},{id:'g5',name:'Sci. History'},{id:'h5',name:'Philosophy'}, {id:'a4',name:'Programming'},{id:'b4',name:'AI / ML'},{id:'c4',name:'Web Dev.'},{id:'d4',name:'Databases'}, {id:'e4',name:'Cybersec.'},{id:'f4',name:'Data Science'},{id:'g4',name:'Statistics'},{id:'h4',name:'Algorithms'}, {id:'a3',name:'Visual Art'},{id:'b3',name:'Music Theory'},{id:'c3',name:'Film Studies'},{id:'d3',name:'Photography'}, {id:'e3',name:'Game Design'},{id:'f3',name:'Architecture'},{id:'g3',name:'Prob. Solving'},{id:'h3',name:'Crit. Thinking'}, {id:'a2',name:'Sports Sci.'},{id:'b2',name:'Finance'},{id:'c2',name:'Environ.'},{id:'d2',name:'Health Lit.'}, {id:'e2',name:'Global Cit.'},{id:'f2',name:'Career Plan'},{id:'g2',name:'Social Skills'},{id:'h2',name:'Wellbeing'}, {id:'a1',name:'Mastery Math'},{id:'b1',name:'Mastery Science'},{id:'c1',name:'Mastery Language'},{id:'d1',name:'Mastery History'}, {id:'e1',name:'Mastery CS'},{id:'f1',name:'Mastery Creative'},{id:'g1',name:'Mastery Applied'},{id:'h1',name:'Mastery All'}, ], cases: [ {id:'alex-analytical', name:'Alex — Analytical, math-dominant, avoids writing', label:'Math Track'}, {id:'maria-theoretical', name:'Maria — Theoretical, deep reading, avoids practice', label:'Humanities Track'}, {id:'sam-creative', name:'Sam — Creative divergent, nonlinear thinker', label:'Creative Track'}, ] }, cybersec: { id: "cybersec", symbol: "∅", name: "CyberSec Kill-Chain", description: "64 MITRE ATT&CK nodes. Threat actor simulation. Every campaign is a trace. Every IOC is a board position.", nodes: [ {id:'a8',name:'OSINT',desc:'Open-source intelligence gathering'},{id:'b8',name:'Port Scan',desc:'Network reconnaissance'}, {id:'c8',name:'Phishing',desc:'Social engineering initial access'},{id:'d8',name:'Supply Chain',desc:'Third-party compromise'}, {id:'e8',name:'Drive-by',desc:'Watering hole download'},{id:'f8',name:'Watering Hole',desc:'Strategic web compromise'}, {id:'g8',name:'Cred. Harvest',desc:'Credential harvesting'},{id:'h8',name:'0-Day',desc:'Zero-day exploit'}, {id:'a7',name:'Execution',desc:'Code execution technique'},{id:'b7',name:'Script Host',desc:'Script interpreter execution'}, {id:'c7',name:'Svc. Exploit',desc:'Service exploitation'},{id:'d7',name:'WMI Exec.',desc:'WMI-based execution'}, {id:'e7',name:'PowerShell',desc:'PowerShell execution'},{id:'f7',name:'Sched. Task',desc:'Scheduled task persistence'}, {id:'g7',name:'Registry Mod',desc:'Registry modification persistence'},{id:'h7',name:'New Account',desc:'Account creation persistence'}, {id:'a6',name:'AV Bypass',desc:'Antivirus evasion'},{id:'b6',name:'Log Clear',desc:'Log clearing defense evasion'}, {id:'c6',name:'Token Imp.',desc:'Token impersonation privilege escalation'},{id:'d6',name:'Priv. Esc.',desc:'Privilege escalation'}, {id:'e6',name:'Hash Dump',desc:'Credential hash dumping'},{id:'f6',name:'Kerberoast',desc:'Kerberoasting attack'}, {id:'g6',name:'Pass-the-Hash',desc:'Pass-the-hash lateral movement'},{id:'h6',name:'Cred. Files',desc:'Credential file access'}, {id:'a5',name:'Lateral Mv.',desc:'Lateral movement'},{id:'b5',name:'RDP Exploit',desc:'RDP exploitation'}, {id:'c5',name:'SMB Shares',desc:'SMB share access'},{id:'d5',name:'WinRM',desc:'WinRM lateral movement'}, {id:'e5',name:'Net. Scan',desc:'Network discovery'},{id:'f5',name:'File Discov.',desc:'File system discovery'}, {id:'g5',name:'AD Enum.',desc:'Active Directory enumeration'},{id:'h5',name:'Svc. Discov.',desc:'Service discovery'}, {id:'a4',name:'Data Staging',desc:'Data staging for exfiltration'},{id:'b4',name:'Email Coll.',desc:'Email collection'}, {id:'c4',name:'Screen Cap.',desc:'Screen capture collection'},{id:'d4',name:'Keylogging',desc:'Keylogger collection'}, {id:'e4',name:'Ransomware',desc:'Ransomware deployment impact'},{id:'f4',name:'Crypto Pay.',desc:'Cryptocurrency payment'}, {id:'g4',name:'Exfiltration',desc:'Data exfiltration'},{id:'h4',name:'DNS Exfil',desc:'DNS exfiltration covert channel'}, {id:'a3',name:'C2 Beacon',desc:'Command and control beacon'},{id:'b3',name:'Proxy C2',desc:'Proxy-based C2'}, {id:'c3',name:'Covert C2',desc:'Covert C2 channel'},{id:'d3',name:'HTTPS C2',desc:'HTTPS C2 communication'}, {id:'e3',name:'Track Cover',desc:'Track covering cleanup'},{id:'f3',name:'Artifact Rm.',desc:'Artifact removal'}, {id:'g3',name:'Acct. Disable',desc:'Account disabling cleanup'},{id:'h3',name:'DNS Flux',desc:'DNS fast-flux'}, {id:'a2',name:'No Detection',desc:'Undetected outcome'},{id:'b2',name:'Detected',desc:'Detection outcome'}, {id:'c2',name:'Partial Detct',desc:'Partial detection'},{id:'d2',name:'IOC Generat.',desc:'IOC generated'}, {id:'e2',name:'IDS Alert',desc:'IDS alert triggered'},{id:'f2',name:'Blocked WAF',desc:'WAF blocked'}, {id:'g2',name:'SOC Notified',desc:'SOC notification'},{id:'h2',name:'Acct. Locked',desc:'Account locked'}, {id:'a1',name:'Objective',desc:'Objective achieved'},{id:'b1',name:'Financial Gn',desc:'Financial gain achieved'}, {id:'c1',name:'Espionage',desc:'Espionage objective achieved'},{id:'d1',name:'Ransom Paid',desc:'Ransom payment received'}, {id:'e1',name:'Neutralized',desc:'Threat neutralized'},{id:'f1',name:'IR Activated',desc:'Incident response activated'}, {id:'g1',name:'Legal Action',desc:'Legal action initiated'},{id:'h1',name:'Recovery',desc:'System recovery achieved'}, ], cases: [ {id:'apt29-supply', name:'APT29 — Supply Chain Compromise (SolarWinds pattern)', label:'T1195.002'}, {id:'apt41-financial', name:'APT41 — Dual-mission Financial Intrusion', label:'T1566.001'}, {id:'raas-ransomware', name:'RaaS — Ransomware-as-a-Service Deployment', label:'T1486'}, ] }, "drug-rd": { id: "drug-rd", symbol: "λ", name: "Drug R&D Discovery", description: "64 pharma nodes. AI agent drug repurposing swarm. Every candidate is a board path. Every hit is a trace.", nodes: [ {id:'a8',name:'Metformin',desc:'Approved diabetes drug - AMPK activator'},{id:'b8',name:'Rapamycin',desc:'mTOR inhibitor - autophagy inducer'}, {id:'c8',name:'Ibuprofen',desc:'NSAID - COX inhibitor'},{id:'d8',name:'Ritonavir',desc:'HIV protease inhibitor'}, {id:'e8',name:'Sildenafil',desc:'PDE5 inhibitor - cardiovascular'},{id:'f8',name:'Thalidomide',desc:'Immunomodulatory - TNF-alpha blocker'}, {id:'g8',name:'Aspirin',desc:'COX inhibitor - antiplatelet'},{id:'h8',name:'Ivermectin',desc:'Antiparasitic - efflux pump inhibitor'}, {id:'a7',name:'mTOR',desc:'mTOR pathway target'},{id:'b7',name:'Amyloid',desc:'Amyloid-beta aggregation target'}, {id:'c7',name:'Tau-p',desc:'Tau phosphorylation target'},{id:'d7',name:'NF-kB',desc:'NF-kB inflammatory pathway'}, {id:'e7',name:'Mitochond.',desc:'Mitochondrial dysfunction target'},{id:'f7',name:'TB CellWall',desc:'TB cell wall biosynthesis'}, {id:'g7',name:'ATP Synth.',desc:'ATP synthase target'},{id:'h7',name:'Card. Metab.',desc:'Cardiac metabolic reprogramming'}, {id:'a6',name:'Kinase Inh.',desc:'Kinase inhibition mechanism'},{id:'b6',name:'Autophagy',desc:'Autophagy induction mechanism'}, {id:'c6',name:'HDAC Inh.',desc:'HDAC inhibition mechanism'},{id:'d6',name:'TNF-a Block',desc:'TNF-alpha blockade mechanism'}, {id:'e6',name:'ROS Scavng.',desc:'ROS scavenging mechanism'},{id:'f6',name:'Efflux Block',desc:'Efflux pump blockade'}, {id:'g6',name:'PDE5 Inh.',desc:'PDE5 inhibition'},{id:'h6',name:'AMPK Act.',desc:'AMPK activation mechanism'}, {id:'a5',name:'In Silico',desc:'Computational validation'},{id:'b5',name:'In Vitro',desc:'Cell-based validation'}, {id:'c5',name:'In Vivo',desc:'Animal model validation'},{id:'d5',name:'Organoid',desc:'Organoid model validation'}, {id:'e5',name:'SNS Score',desc:'Synaptic Network Score'},{id:'f5',name:'Bind. Affin.',desc:'Binding affinity score'}, {id:'g5',name:'ADMET',desc:'ADMET properties score'},{id:'h5',name:'Safety Idx',desc:'Safety index score'}, {id:'a4',name:'High Prio.',desc:'High priority candidate'},{id:'b4',name:'Med Prio.',desc:'Medium priority candidate'}, {id:'c4',name:'Low Prio.',desc:'Low priority candidate'},{id:'d4',name:'Candidate',desc:'Drug candidate confirmed'}, {id:'e4',name:'Phase I',desc:'Phase I clinical trial'},{id:'f4',name:'Phase II',desc:'Phase II clinical trial'}, {id:'g4',name:'Phase III',desc:'Phase III clinical trial'},{id:'h4',name:'FDA Submit',desc:'FDA submission'}, {id:'a3',name:'Patent',desc:'Patent protection'},{id:'b3',name:'IPFS Pub.',desc:'Open science IPFS publication'}, {id:'c3',name:'Open Access',desc:'Open access publication'},{id:'d3',name:'License',desc:'Commercial license'}, {id:'e3',name:'Pharma Ptnr',desc:'Pharmaceutical partnership'},{id:'f3',name:'Acad. Ptnr',desc:'Academic partnership'}, {id:'g3',name:'NIH Grant',desc:'NIH grant funding'},{id:'h3',name:'EU Horizon',desc:'EU Horizon funding'}, {id:'a2',name:'Novel Mech.',desc:'Novel mechanism discovered'},{id:'b2',name:'Biomarker',desc:'Biomarker identified'}, {id:'c2',name:'Combo Rx',desc:'Combination therapy identified'},{id:'d2',name:'Valid. Hit',desc:'Validated hit compound'}, {id:'e1',name:'Alz. Cand.',desc:'Alzheimer candidate'},{id:'f1',name:'TB Cand.',desc:'TB candidate'}, {id:'g1',name:'Heart Cand.',desc:'Heart failure candidate'},{id:'h1',name:'Published',desc:'Discovery published'}, {id:'a1',name:'Dataset',desc:'Dataset generated'},{id:'b1',name:'Next Iter.',desc:'Next iteration queued'}, {id:'c1',name:'Dead End',desc:'Dead end — pivot required'},{id:'d1',name:'Unexpected',desc:'Unexpected finding'}, ], cases: [ {id:'alzheimer', name:"Alzheimer's Disease — Amyloid-tau pathway disruption", label:'Neurodegeneration'}, {id:'tb-resistant', name:'Drug-Resistant TB — Novel target identification', label:'Infectious Disease'}, {id:'heart-failure', name:'Heart Failure — Metabolic reprogramming', label:'Cardiovascular'}, ] }, rover: { id: "rover", symbol: "∇", name: "Mars Rover Navigation", description: "64 mission nodes. Autonomous planetary navigation. Every sol is a trace. Every discovery is a board position.", nodes: [ {id:'a8',name:'Jezero Base',desc:'Base camp landing site'},{id:'b8',name:'Delta Entry',desc:'River delta entry point'}, {id:'c8',name:'W. Scarp',desc:'Western escarpment'},{id:'d8',name:'Fan Margin',desc:'Fan margin exploration'}, {id:'e8',name:'Crater Rim',desc:'Crater rim traverse'},{id:'f8',name:'Boulder Fld',desc:'Boulder field navigation'}, {id:'g8',name:'Dune Fld',desc:'Dune field crossing'},{id:'h8',name:'Lava Tube',desc:'Lava tube investigation'}, {id:'a7',name:'Cam Survey',desc:'Camera survey pass'},{id:'b7',name:'Chem. Scan',desc:'ChemCam spectroscopy'}, {id:'c7',name:'Drill Site',desc:'Core sample drilling'},{id:'d7',name:'Atm. Read.',desc:'Atmosphere reading'}, {id:'e7',name:'Seismic',desc:'Seismic monitoring'},{id:'f7',name:'Radar Pulse',desc:'Ground-penetrating radar'}, {id:'g7',name:'Soil Sample',desc:'Soil sample collection'},{id:'h7',name:'Rock Core',desc:'Rock core sample'}, {id:'a6',name:'Basalt',desc:'Basalt rock identified'},{id:'b6',name:'Carbonate',desc:'Carbonate minerals found'}, {id:'c6',name:'Sulfate',desc:'Sulfate deposits found'},{id:'d6',name:'Silica',desc:'Silica deposits found'}, {id:'e6',name:'Olivine',desc:'Olivine crystals found'},{id:'f6',name:'Perchlorate',desc:'Perchlorate detected'}, {id:'g6',name:'Organics',desc:'Organic molecules detected'},{id:'h6',name:'Biosignature',desc:'Potential biosignature found'}, {id:'a5',name:'Flat Terr.',desc:'Flat terrain — safe traverse'},{id:'b5',name:'Slope 15deg',desc:'15-degree slope navigation'}, {id:'c5',name:'Rocky Fld',desc:'Rocky field obstacle avoidance'},{id:'d5',name:'Sand Trap',desc:'Sand trap navigation hazard'}, {id:'e5',name:'Dust Storm',desc:'Dust storm protocol activated'},{id:'f5',name:'Night Mode',desc:'Night mode operations'}, {id:'g5',name:'Low Power',desc:'Low power mode conservation'},{id:'h5',name:'Comm. Delay',desc:'Communication delay protocol'}, {id:'a4',name:'Cache Site',desc:'Sample cache deposit site'},{id:'b4',name:'Depot A',desc:'Sample depot Alpha'}, {id:'c4',name:'Depot B',desc:'Sample depot Beta'},{id:'d4',name:'Depot C',desc:'Sample depot Gamma'}, {id:'e4',name:'MSR Flag',desc:'Mars Sample Return flagged'},{id:'f4',name:'Priority 1',desc:'Priority 1 sample cached'}, {id:'g4',name:'Priority 2',desc:'Priority 2 sample cached'},{id:'h4',name:'Priority 3',desc:'Priority 3 sample cached'}, {id:'a3',name:'Ingenuity',desc:'Ingenuity helicopter scout'},{id:'b3',name:'Aerial Surv.',desc:'Aerial survey data'}, {id:'c3',name:'Earth Comm.',desc:'Earth communication uplink'},{id:'d3',name:'Science Tbl.',desc:'Science table data transmitted'}, {id:'e3',name:'Rover Health',desc:'Rover health diagnostics'},{id:'f3',name:'Sol Report',desc:'Sol summary report'}, {id:'g3',name:'Navigation',desc:'Navigation path computed'},{id:'h3',name:'Drive Plan',desc:'Drive plan uploaded'}, {id:'a2',name:'Mineralogy',desc:'Mineralogy confirmed'},{id:'b2',name:'Geochemistry',desc:'Geochemistry data'}, {id:'c2',name:'Paleoclimate',desc:'Paleoclimate indicator'},{id:'d2',name:'Habitability',desc:'Habitability assessment'}, {id:'e2',name:'Life Marker',desc:'Life marker candidate'},{id:'f2',name:'Abiotic',desc:'Abiotic origin confirmed'}, {id:'g2',name:'Ambiguous',desc:'Ambiguous result'},{id:'h2',name:'Retest',desc:'Retest required'}, {id:'a1',name:'Discovery',desc:'Major discovery confirmed'},{id:'b1',name:'Cache Compl.',desc:'Cache complete'}, {id:'c1',name:'Science Win',desc:'Science objective achieved'},{id:'d1',name:'MSR Ready',desc:'Ready for Mars Sample Return'}, {id:'e1',name:'Anomaly',desc:'Anomaly detected — investigate'},{id:'f1',name:'Safe Mode',desc:'Safe mode activated'}, {id:'g1',name:'Earth Rcvd.',desc:'Earth confirmed receipt'},{id:'h1',name:'Published',desc:'Discovery published'}, ], cases: [ {id:'jezero-crater', name:'Jezero Crater — Paleolake delta exploration', label:'Astrobiology'}, {id:'three-forks', name:'Three Forks — Ancient river delta mapping', label:'Geomorphology'}, {id:'margin-fan', name:'Margin Fan — Carbonate biosignature hunt', label:'Biosignatures'}, ] }, compliance: { id: "compliance", symbol: "∫", name: "Regulatory Compliance", description: "64 regulatory nodes. Multi-jurisdictional compliance traversal. Every audit is a trace. Every control is a node.", nodes: [ {id:'a8',name:'GDPR Art.5',desc:'Data processing principles'},{id:'b8',name:'GDPR Art.6',desc:'Lawful basis for processing'}, {id:'c8',name:'GDPR Art.17',desc:'Right to erasure'},{id:'d8',name:'GDPR Art.25',desc:'Data protection by design'}, {id:'e8',name:'CCPA §1798',desc:'California consumer rights'},{id:'f8',name:'HIPAA §164',desc:'PHI security safeguards'}, {id:'g8',name:'SOX §302',desc:'CEO/CFO certifications'},{id:'h8',name:'SOX §404',desc:'Internal control assessment'}, {id:'a7',name:'ISO 27001',desc:'Information security management'},{id:'b7',name:'ISO 27701',desc:'Privacy information management'}, {id:'c7',name:'NIST CSF',desc:'Cybersecurity framework'},{id:'d7',name:'PCI DSS v4',desc:'Payment card security'}, {id:'e7',name:'FedRAMP',desc:'Federal cloud authorization'},{id:'f7',name:'DORA',desc:'Digital operational resilience'}, {id:'g7',name:'NIS2',desc:'EU network security directive'},{id:'h7',name:'AI Act',desc:'EU AI regulation compliance'}, {id:'a6',name:'Gap Analysis',desc:'Control gap identification'},{id:'b6',name:'Risk Assess.',desc:'Risk assessment methodology'}, {id:'c6',name:'Control Map',desc:'Control mapping exercise'},{id:'d6',name:'Evidence',desc:'Compliance evidence collection'}, {id:'e6',name:'Policy Rev.',desc:'Policy review and update'},{id:'f6',name:'Training',desc:'Compliance training required'}, {id:'g6',name:'Vendor Mgmt',desc:'Third-party vendor management'},{id:'h6',name:'Incident',desc:'Incident reporting obligation'}, {id:'a5',name:'Technical',desc:'Technical control implementation'},{id:'b5',name:'Admin',desc:'Administrative control'}, {id:'c5',name:'Physical',desc:'Physical security control'},{id:'d5',name:'Preventive',desc:'Preventive control category'}, {id:'e5',name:'Detective',desc:'Detective control category'},{id:'f5',name:'Corrective',desc:'Corrective control category'}, {id:'g5',name:'Compensating',desc:'Compensating control'},{id:'h5',name:'Directive',desc:'Directive control category'}, {id:'a4',name:'DPO Review',desc:'Data Protection Officer review'},{id:'b4',name:'Legal Review',desc:'Legal counsel review'}, {id:'c4',name:'CISO Sign',desc:'CISO sign-off required'},{id:'d4',name:'Board Report',desc:'Board reporting required'}, {id:'e4',name:'Remediation',desc:'Remediation plan required'},{id:'f4',name:'Exception',desc:'Exception request process'}, {id:'g4',name:'Waiver',desc:'Control waiver process'},{id:'h4',name:'Escalation',desc:'Executive escalation required'}, {id:'a3',name:'Internal Aud.',desc:'Internal audit finding'},{id:'b3',name:'External Aud.',desc:'External audit finding'}, {id:'c3',name:'Pen Test',desc:'Penetration test finding'},{id:'d3',name:'Reg. Inspect.',desc:'Regulatory inspection finding'}, {id:'e3',name:'Self-Assess.',desc:'Self-assessment result'},{id:'f3',name:'Continuous',desc:'Continuous monitoring'}, {id:'g3',name:'Attestation',desc:'Management attestation'},{id:'h3',name:'Certification',desc:'Certification renewal'}, {id:'a2',name:'Compliant',desc:'Fully compliant status'},{id:'b2',name:'Partial',desc:'Partially compliant'}, {id:'c2',name:'Non-Compliant',desc:'Non-compliant — action required'},{id:'d2',name:'In Progress',desc:'Remediation in progress'}, {id:'e2',name:'Waived',desc:'Control waived with approval'},{id:'f2',name:'N/A',desc:'Control not applicable'}, {id:'g2',name:'Under Review',desc:'Under regulatory review'},{id:'h2',name:'Disputed',desc:'Finding disputed'}, {id:'a1',name:'Cleared',desc:'Audit cleared — no findings'},{id:'b1',name:'Minor Finding',desc:'Minor finding — no material risk'}, {id:'c1',name:'Major Finding',desc:'Major finding — material risk'},{id:'d1',name:'Critical',desc:'Critical finding — immediate action'}, {id:'e1',name:'Enforcement',desc:'Regulatory enforcement action'},{id:'f1',name:'Fine Imposed',desc:'Financial penalty imposed'}, {id:'g1',name:'Certified',desc:'Certification achieved'},{id:'h1',name:'Renewed',desc:'Certification renewed'}, ], cases: [ {id:'gdpr-data-breach', name:'GDPR Data Breach — 72h notification obligation', label:'Data Protection'}, {id:'sox-internal', name:'SOX §404 — Internal controls over financial reporting', label:'Financial Reporting'}, {id:'hipaa-cloud', name:'HIPAA Cloud Migration — PHI in SaaS platform', label:'Healthcare Security'}, ] }, therapy: { id: "therapy", symbol: "Ψ", name: "Cognitive Therapy Protocol", description: "64 therapeutic nodes. Evidence-based intervention planning. Every session is a trace. Every breakthrough is a node.", nodes: [ {id:'a8',name:'PHQ-9 Depr.',desc:'PHQ-9 depression screening'},{id:'b8',name:'GAD-7 Anx.',desc:'GAD-7 anxiety screening'}, {id:'c8',name:'PCL-5 PTSD',desc:'PCL-5 PTSD screening'},{id:'d8',name:'AUDIT Alc.',desc:'AUDIT alcohol screening'}, {id:'e8',name:'DAST Drug',desc:'DAST drug screening'},{id:'f8',name:'BSSI Suic.',desc:'Beck suicidal ideation scale'}, {id:'g8',name:'YMRS Mania',desc:'Young Mania Rating Scale'},{id:'h8',name:'PANSS Psych',desc:'PANSS psychosis screening'}, {id:'a7',name:'Life Events',desc:'Life events inventory'},{id:'b7',name:'Sleep Study',desc:'Sleep quality assessment'}, {id:'c7',name:'Social Hx.',desc:'Social history and support'},{id:'d7',name:'Trauma Hx.',desc:'Trauma history inventory'}, {id:'e7',name:'Substance',desc:'Substance use history'},{id:'f7',name:'Family Hx.',desc:'Family psychiatric history'}, {id:'g7',name:'Cognitive',desc:'Cognitive assessment'},{id:'h7',name:'Physical Hx.',desc:'Physical health history'}, {id:'a6',name:'MDD',desc:'Major depressive disorder'},{id:'b6',name:'GAD',desc:'Generalized anxiety disorder'}, {id:'c6',name:'PTSD',desc:'Post-traumatic stress disorder'},{id:'d6',name:'Bipolar I',desc:'Bipolar I disorder'}, {id:'e6',name:'Bipolar II',desc:'Bipolar II disorder'},{id:'f6',name:'OCD',desc:'Obsessive-compulsive disorder'}, {id:'g6',name:'AUD',desc:'Alcohol use disorder'},{id:'h6',name:'Schizoph.',desc:'Schizophrenia spectrum'}, {id:'a5',name:'Safety Plan',desc:'Safety planning required'},{id:'b5',name:'Crisis Int.',desc:'Crisis intervention required'}, {id:'c5',name:'Inpatient',desc:'Inpatient admission required'},{id:'d5',name:'IOP',desc:'Intensive outpatient program'}, {id:'e5',name:'Outpatient',desc:'Standard outpatient care'},{id:'f5',name:'Telehealth',desc:'Telehealth appropriate'}, {id:'g5',name:'Peer Supp.',desc:'Peer support recommended'},{id:'h5',name:'Self-Help',desc:'Self-help resources appropriate'}, {id:'a4',name:'CBT',desc:'Cognitive Behavioral Therapy'},{id:'b4',name:'DBT',desc:'Dialectical Behavior Therapy'}, {id:'c4',name:'EMDR',desc:'Eye Movement Desensitization'},{id:'d4',name:'ACT',desc:'Acceptance Commitment Therapy'}, {id:'e4',name:'MI',desc:'Motivational Interviewing'},{id:'f4',name:'IPT',desc:'Interpersonal Therapy'}, {id:'g4',name:'Somatic',desc:'Somatic therapy approach'},{id:'h4',name:'Mindfulness',desc:'Mindfulness-based therapy'}, {id:'a3',name:'SSRI',desc:'SSRI antidepressant'},{id:'b3',name:'SNRI',desc:'SNRI antidepressant'}, {id:'c3',name:'Mood Stab.',desc:'Mood stabilizer medication'},{id:'d3',name:'Antipsych.',desc:'Antipsychotic medication'}, {id:'e3',name:'Anxiolytic',desc:'Anxiolytic medication'},{id:'f3',name:'Sleep Med.',desc:'Sleep medication'}, {id:'g3',name:'No Meds',desc:'Therapy only — no medication'},{id:'h3',name:'Review Meds',desc:'Medication review required'}, {id:'a2',name:'6-Week FU',desc:'6-week follow-up scheduled'},{id:'b2',name:'Monthly FU',desc:'Monthly follow-up scheduled'}, {id:'c2',name:'PRN',desc:'As-needed follow-up'},{id:'d2',name:'Discharge',desc:'Discharge planning initiated'}, {id:'e2',name:'Outcome Msr',desc:'Outcome measures tracked'},{id:'f2',name:'Goals Set',desc:'Therapeutic goals established'}, {id:'g2',name:'Progress',desc:'Progress documented'},{id:'h2',name:'Relapse Prev',desc:'Relapse prevention plan'}, {id:'a1',name:'Stable',desc:'Patient stable — maintained'},{id:'b1',name:'Improved',desc:'Clinically significant improvement'}, {id:'c1',name:'Remission',desc:'Symptom remission achieved'},{id:'d1',name:'Recovery',desc:'Full functional recovery'}, {id:'e1',name:'Refer Out',desc:'Specialty referral required'},{id:'f1',name:'Hospitalize',desc:'Hospitalization required'}, {id:'g1',name:'Step Down',desc:'Step-down care appropriate'},{id:'h1',name:'Maintenance',desc:'Maintenance therapy phase'}, ], cases: [ {id:'veteran-ptsd', name:'Veteran — Combat PTSD with depression comorbidity', label:'PTSD Protocol'}, {id:'adolescent-anxiety', name:'Adolescent 16 — Social anxiety, school avoidance', label:'CBT Adolescent'}, {id:'bipolar-stabilize', name:'Adult 35 — Bipolar I — post-manic stabilization', label:'Mood Stabilization'}, ] }, crisis: { id: "crisis", symbol: "Δ", name: "Crisis Management", description: "64 crisis response nodes. High-stakes decision under uncertainty. Every minute counts. Every action is a trace.", nodes: [ {id:'a8',name:'Cyber Attack',desc:'Active cyber attack detected'},{id:'b8',name:'Data Breach',desc:'Data breach confirmed'}, {id:'c8',name:'Phys. Threat',desc:'Physical threat incident'},{id:'d8',name:'Natl. Disast.',desc:'Natural disaster event'}, {id:'e8',name:'Supply Chain',desc:'Supply chain disruption'},{id:'f8',name:'Pandemic',desc:'Pandemic/epidemic event'}, {id:'g8',name:'Reputational',desc:'Reputational crisis event'},{id:'h8',name:'Financial',desc:'Financial crisis event'}, {id:'a7',name:'Scope',desc:'Define incident scope'},{id:'b7',name:'Severity',desc:'Assess severity level'}, {id:'c7',name:'Impact',desc:'Business impact assessment'},{id:'d7',name:'Timeline',desc:'Establish incident timeline'}, {id:'e7',name:'Stakeholders',desc:'Identify stakeholders'},{id:'f7',name:'Legal Review',desc:'Legal review initiated'}, {id:'g7',name:'Insurer',desc:'Insurance notification'},{id:'h7',name:'Regulators',desc:'Regulatory notification required'}, {id:'a6',name:'CISO Notif.',desc:'CISO notification'},{id:'b6',name:'CEO Notif.',desc:'CEO notification'}, {id:'c6',name:'Board Notif.',desc:'Board notification'},{id:'d6',name:'PR Team',desc:'PR team activated'}, {id:'e6',name:'Legal Counsel',desc:'External legal counsel'},{id:'f6',name:'IR Team',desc:'Incident response team'}, {id:'g6',name:'Crisis Comm.',desc:'Crisis communications lead'},{id:'h6',name:'Exec. Team',desc:'Executive team convened'}, {id:'a5',name:'Isolate',desc:'Isolate affected systems'},{id:'b5',name:'Contain',desc:'Contain incident spread'}, {id:'c5',name:'Eradicate',desc:'Eradicate threat vector'},{id:'d5',name:'Preserve Evid',desc:'Preserve forensic evidence'}, {id:'e5',name:'Notify Users',desc:'User notification required'},{id:'f5',name:'Public Stmt',desc:'Public statement required'}, {id:'g5',name:'Regul. Rpt.',desc:'Regulatory report filed'},{id:'h5',name:'Media Hold',desc:'Media hold implemented'}, {id:'a4',name:'Backup Rest.',desc:'Backup restoration'},{id:'b4',name:'Sys. Recovery',desc:'System recovery'}, {id:'c4',name:'Data Recov.',desc:'Data recovery operation'},{id:'d4',name:'Alt. Ops',desc:'Alternative operations activated'}, {id:'e4',name:'Vendor Supp.',desc:'Vendor support engaged'},{id:'f4',name:'Gov. Supp.',desc:'Government support requested'}, {id:'g4',name:'Community',desc:'Community assistance'},{id:'h4',name:'Mutual Aid',desc:'Mutual aid agreement activated'}, {id:'a3',name:'Root Cause',desc:'Root cause analysis'},{id:'b3',name:'Post-Mortem',desc:'Post-mortem review'}, {id:'c3',name:'Lessons Lrnd',desc:'Lessons learned documented'},{id:'d3',name:'Control Upd.',desc:'Controls updated'}, {id:'e3',name:'Policy Rev.',desc:'Policy review initiated'},{id:'f3',name:'Training',desc:'Training program updated'}, {id:'g3',name:'Monitoring',desc:'Enhanced monitoring deployed'},{id:'h3',name:'Test Plan',desc:'Updated test plan'}, {id:'a2',name:'All Clear',desc:'All clear confirmed'},{id:'b2',name:'Partial Rest.',desc:'Partial restoration achieved'}, {id:'c2',name:'Full Rest.',desc:'Full restoration achieved'},{id:'d2',name:'Ongoing',desc:'Ongoing management required'}, {id:'e2',name:'Litigation',desc:'Litigation initiated'},{id:'f2',name:'Regulatory',desc:'Regulatory action pending'}, {id:'g2',name:'Settled',desc:'Settlement reached'},{id:'h2',name:'Closed',desc:'Incident formally closed'}, {id:'a1',name:'Contained',desc:'Incident fully contained'},{id:'b1',name:'Mitigated',desc:'Risk mitigated'}, {id:'c1',name:'Resolved',desc:'Incident resolved'},{id:'d1',name:'Recovered',desc:'Full recovery achieved'}, {id:'e1',name:'Post-Crisis',desc:'Post-crisis strengthening'},{id:'f1',name:'IR Updated',desc:'IR plan updated'}, {id:'g1',name:'Resilient',desc:'Organizational resilience improved'},{id:'h1',name:'Certified',desc:'Crisis certification renewed'}, ], cases: [ {id:'ransomware-hospital', name:'Hospital Ransomware — Clinical systems offline', label:'Healthcare Continuity'}, {id:'data-breach-pii', name:'PII Data Breach — 2M records exposed', label:'GDPR 72h Response'}, {id:'supply-disruption', name:'Critical Supply Disruption — 72h countdown', label:'Business Continuity'}, ] }, "ai-interp": { id: "ai-interp", symbol: "⊗", name: "AI Interpretability", description: "64 interpretability nodes. XAI audit trail. Every model decision is a board traversal. Every explanation is a trace.", nodes: [ {id:'a8',name:'Input Data',desc:'Raw input data analysis'},{id:'b8',name:'Preprocessing',desc:'Data preprocessing step'}, {id:'c8',name:'Features',desc:'Feature extraction'},{id:'d8',name:'Embeddings',desc:'Embedding representation'}, {id:'e8',name:'Attention',desc:'Attention mechanism'},{id:'f8',name:'Hidden Layer',desc:'Hidden layer activation'}, {id:'g8',name:'Gradient',desc:'Gradient flow analysis'},{id:'h8',name:'Output',desc:'Model output'}, {id:'a7',name:'SHAP',desc:'SHAP value attribution'},{id:'b7',name:'LIME',desc:'LIME local explanation'}, {id:'c7',name:'Grad-CAM',desc:'Gradient-weighted class activation'},{id:'d7',name:'IG',desc:'Integrated gradients'}, {id:'e7',name:'SAGE',desc:'SAGE feature importance'},{id:'f7',name:'Anchors',desc:'Anchor rule extraction'}, {id:'g7',name:'Counterfact.',desc:'Counterfactual explanation'},{id:'h7',name:'Concepts',desc:'TCAV concept attribution'}, {id:'a6',name:'Fair. Metric',desc:'Fairness metric assessment'},{id:'b6',name:'Bias Detect.',desc:'Bias detection analysis'}, {id:'c6',name:'Disparate Imp',desc:'Disparate impact analysis'},{id:'d6',name:'Calibration',desc:'Model calibration check'}, {id:'e6',name:'Uncertainty',desc:'Uncertainty quantification'},{id:'f6',name:'Confidence',desc:'Prediction confidence'}, {id:'g6',name:'OOD Detect.',desc:'Out-of-distribution detection'},{id:'h6',name:'Robustness',desc:'Adversarial robustness'}, {id:'a5',name:'Proxy Model',desc:'Surrogate proxy model'},{id:'b5',name:'Rule Extract',desc:'Rule extraction'}, {id:'c5',name:'Decision Tree',desc:'Decision tree approximation'},{id:'d5',name:'Linear Approx',desc:'Linear approximation'}, {id:'e5',name:'Partial Dep.',desc:'Partial dependence plot'},{id:'f5',name:'ICE Plot',desc:'Individual conditional expectation'}, {id:'g5',name:'ALE Plot',desc:'Accumulated local effects'},{id:'h5',name:'Interact. Det.',desc:'Feature interaction detection'}, {id:'a4',name:'Regulatory',desc:'Regulatory compliance check'},{id:'b4',name:'Audit Log',desc:'Audit log generation'}, {id:'c4',name:'Reproducible',desc:'Reproducibility verification'},{id:'d4',name:'Versioned',desc:'Model version tracked'}, {id:'e4',name:'Human Rev.',desc:'Human review required'},{id:'f4',name:'Override',desc:'Human override mechanism'}, {id:'g4',name:'Appeal',desc:'Appeal process available'},{id:'h4',name:'Approved',desc:'Decision approved and documented'}, {id:'a3',name:'Documentation',desc:'XAI documentation'},{id:'b3',name:'Report Gen.',desc:'Explanation report generated'}, {id:'c3',name:'Dashboard',desc:'XAI monitoring dashboard'},{id:'d3',name:'Alerts',desc:'Explanation drift alerts'}, {id:'e3',name:'Retraining',desc:'Model retraining triggered'},{id:'f3',name:'Data Refresh',desc:'Training data refresh'}, {id:'g3',name:'Architecture',desc:'Architecture review required'},{id:'h3',name:'Benchmark',desc:'Benchmark comparison'}, {id:'a2',name:'Transparent',desc:'Model deemed transparent'},{id:'b2',name:'Explainable',desc:'Explanation satisfactory'}, {id:'c2',name:'Auditable',desc:'Full audit trail available'},{id:'d2',name:'Contested',desc:'Explanation contested'}, {id:'e2',name:'Opaque',desc:'Model remains opaque'},{id:'f2',name:'Deprecated',desc:'Model deprecated'}, {id:'g2',name:'Replaced',desc:'Model replaced'},{id:'h2',name:'Approved',desc:'Final approval granted'}, {id:'a1',name:'XAI Pass',desc:'XAI audit passed'},{id:'b1',name:'Partial XAI',desc:'Partial XAI — monitor'}, {id:'c1',name:'XAI Fail',desc:'XAI audit failed — halt'},{id:'d1',name:'Deployed',desc:'Model deployed with monitoring'}, {id:'e1',name:'Withdrawn',desc:'Model withdrawn from production'},{id:'f1',name:'Appealed',desc:'Decision appealed'}, {id:'g1',name:'Remediated',desc:'Issues remediated'},{id:'h1',name:'Certified',desc:'AI system certified'}, ], cases: [ {id:'credit-scoring', name:'Credit Scoring Model — Adverse action explanation', label:'Financial AI'}, {id:'medical-imaging', name:'Radiology AI — Tumor detection audit', label:'Medical AI'}, {id:'hiring-algorithm', name:'Hiring Algorithm — Disparate impact audit', label:'HR AI Fairness'}, ] } }; // ── LLM Provider Configuration ───────────────────────────────────────────── // ── Onion LLM chain: 8 providers, NEVER fails ────────────────────────────── // Primary: Groq (fast, logprobs) → DeepSeek (smart) → OpenRouter (free) // Fallback: Gemini (Google, free tier) → Cerebras (ultra-fast) → Groq key 2-5 round-robin const PROVIDERS = [ { id: "groq", name: "Groq (llama-3.3-70b-versatile)", url: "https://api.groq.com/openai/v1/chat/completions", model: "llama-3.3-70b-versatile", keyEnv: "GROQ_API_KEY", supportsLogprobs: true, temperature: 0.3, maxTokens: 1200, }, { id: "deepseek", name: "DeepSeek-V3", url: "https://api.deepseek.com/v1/chat/completions", model: "deepseek-chat", keyEnv: "DEEPSEEK_API_KEY", supportsLogprobs: false, temperature: 0.3, maxTokens: 1200, }, { id: "gemini", name: "Gemini 2.0 Flash", url: "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent", model: "gemini-2.0-flash", keyEnv: "GEMINI_API_KEY", supportsLogprobs: false, temperature: 0.3, maxTokens: 1200, isGemini: true, // uses different API shape }, { id: "cerebras", name: "Cerebras (llama-3.3-70b)", url: "https://api.cerebras.ai/v1/chat/completions", model: "llama-3.3-70b", keyEnv: "CEREBRAS_API_KEY", supportsLogprobs: false, temperature: 0.3, maxTokens: 1200, }, { id: "openrouter", name: "OpenRouter (llama-3.3-70b-instruct:free)", url: "https://openrouter.ai/api/v1/chat/completions", model: "meta-llama/llama-3.3-70b-instruct:free", keyEnv: "OPENROUTER_API_KEY", supportsLogprobs: false, temperature: 0.3, maxTokens: 1200, headers: { "HTTP-Referer": "https://www.p2pclaw.com", "X-Title": "P2PCLAW ChessBoard Reasoning Engine", } }, { id: "groq2", name: "Groq Key 2 (llama-3.3-70b)", url: "https://api.groq.com/openai/v1/chat/completions", model: "llama-3.3-70b-versatile", keyEnv: "GROQ_API_KEY_2", supportsLogprobs: true, temperature: 0.3, maxTokens: 1200, }, { id: "deepseek2", name: "DeepSeek Key 2", url: "https://api.deepseek.com/v1/chat/completions", model: "deepseek-chat", keyEnv: "DEEPSEEK_API_KEY_2", supportsLogprobs: false, temperature: 0.3, maxTokens: 1200, }, { id: "openrouter2", name: "OpenRouter Key 2", url: "https://openrouter.ai/api/v1/chat/completions", model: "meta-llama/llama-3.3-70b-instruct:free", keyEnv: "OPENROUTER_API_KEY_2", supportsLogprobs: false, temperature: 0.3, maxTokens: 1200, headers: { "HTTP-Referer": "https://www.p2pclaw.com", "X-Title": "P2PCLAW ChessBoard Reasoning Engine", } }, { id: "groq3", name: "Groq Key 3", url: "https://api.groq.com/openai/v1/chat/completions", model: "llama-3.3-70b-versatile", keyEnv: "GROQ_API_KEY_3", supportsLogprobs: true, temperature: 0.3, maxTokens: 1200, }, ]; // ── Result cache: prevent duplicate LLM calls within 60s for same domain+case ── const reasonCache = new Map(); // key: `${domain}:${case_id}` → {result, expires} // ── Build compact ontology string for prompt ─────────────────────────────── function buildOntologyString(nodes) { return nodes.map(n => `${n.id}:${n.name}${n.desc ? ' - '+n.desc : ''}`).join('\n'); } // ── Build system prompt for reasoning ───────────────────────────────────── function buildPrompt(domain, ontology, caseDescription, context) { const nodeStr = buildOntologyString(ontology.nodes); return { system: `You are the P2PCLAW ChessBoard Reasoning Engine — a formal ontology traversal system. DOMAIN: ${ontology.name} DOMAIN DESCRIPTION: ${ontology.description} You reason by traversing a 64-node board. Each node has a chess ID (a1-h8), a name, and a description. Select 6-10 nodes that best trace the reasoning path for the given case. For each node, provide ONE specific sentence of domain reasoning. End with a concrete, specific verdict and an integer confidence score (0-100). BOARD ONTOLOGY (${ontology.nodes.length} nodes): ${nodeStr} CRITICAL RULES: - path[] must contain ONLY node IDs from the list above (e.g., "b8", "g6", "d1") - reasoning[] length MUST equal path[] length - verdict must be specific with concrete findings — NOT generic - confidence is an integer 0-100 based on evidence strength - Return ONLY valid JSON — no markdown fences, no explanation text`, user: `CASE: ${caseDescription}${context ? '\n\nADDITIONAL CONTEXT: ' + context : ''} Return JSON in EXACTLY this schema: { "path": ["b8", "g6", "c6", "d5", "a5", "f4", "a4", "d1"], "reasoning": [ "Step reasoning for node b8", "Step reasoning for node g6", "... (one per path node)" ], "verdict": "Specific concrete verdict with findings and values", "confidence": 85 }` }; } // ── Parse and validate LLM JSON output ──────────────────────────────────── function parseAndValidate(raw, domain) { const ontology = DOMAIN_ONTOLOGIES[domain]; const validIds = new Set(ontology.nodes.map(n => n.id)); let parsed; // Try multiple JSON extraction strategies try { parsed = JSON.parse(raw); } catch (_) { const fenceMatch = raw.match(/```(?:json)?\n?([\s\S]+?)\n?```/); if (fenceMatch) { try { parsed = JSON.parse(fenceMatch[1]); } catch (_) {} } if (!parsed) { const braceMatch = raw.match(/\{[\s\S]+\}/); if (braceMatch) { try { parsed = JSON.parse(braceMatch[0]); } catch (_) {} } } } if (!parsed || !Array.isArray(parsed.path) || !Array.isArray(parsed.reasoning)) { throw new Error(`LLM JSON parse failed. Raw: ${raw.slice(0, 200)}`); } // Validate all node IDs const invalidIds = parsed.path.filter(id => !validIds.has(id)); if (invalidIds.length > 0) { throw new Error(`LLM returned invalid node IDs: ${invalidIds.join(', ')}`); } if (parsed.path.length < 4) throw new Error("Path too short (< 4 nodes)"); if (parsed.reasoning.length !== parsed.path.length) { // Pad or trim reasoning to match path length while (parsed.reasoning.length < parsed.path.length) { parsed.reasoning.push(`Node ${parsed.path[parsed.reasoning.length]} analysis`); } parsed.reasoning = parsed.reasoning.slice(0, parsed.path.length); } parsed.confidence = Math.max(10, Math.min(99, parseInt(parsed.confidence) || 75)); if (!parsed.verdict || parsed.verdict.length < 10) { parsed.verdict = `${domain} analysis complete. Trace: ${parsed.path.join('-')}. Confidence: ${parsed.confidence}%.`; } return parsed; } // ── Compute confidence from logprobs (Groq feature) ─────────────────────── function computeConfidenceFromLogprobs(logprobs) { if (!logprobs || !logprobs.content || logprobs.content.length === 0) return null; const values = logprobs.content .filter(t => t.logprob !== null && t.logprob > -100) .map(t => t.logprob); if (values.length === 0) return null; const meanLogprob = values.reduce((a, b) => a + b, 0) / values.length; return Math.max(50, Math.min(99, Math.round(Math.exp(meanLogprob) * 100 + 50))); } // ── Real audit hash (SHA-256) ───────────────────────────────────────────── export function computeAuditHash(trace, caseId, timestamp, modelId) { const input = `trace:${trace}|case:${caseId}|ts:${timestamp}|model:${modelId}`; return 'sha256:' + crypto.createHash('sha256').update(input).digest('hex'); } // ── Generate unique trace ID ─────────────────────────────────────────────── function generateTraceId(auditHash, timestamp) { return `wf-${timestamp}-${auditHash.slice(7, 11)}`; } // ── Main LLM call with provider fallback chain ───────────────────────────── async function callLLM(provider, prompt) { const apiKey = process.env[provider.keyEnv]; if (!apiKey) throw new Error(`${provider.keyEnv} not set`); // ── Gemini uses a different API shape ──────────────────────────────────── if (provider.isGemini) { const geminiUrl = `${provider.url}?key=${apiKey}`; const geminiBody = { contents: [{ role: "user", parts: [{ text: `${prompt.system}\n\n${prompt.user}` }] }], generationConfig: { temperature: provider.temperature, maxOutputTokens: provider.maxTokens } }; const response = await fetch(geminiUrl, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(geminiBody), signal: AbortSignal.timeout(25000) }); if (!response.ok) { const errText = await response.text().catch(() => ""); throw new Error(`${provider.id} HTTP ${response.status}: ${errText.slice(0, 200)}`); } const data = await response.json(); const content = data?.candidates?.[0]?.content?.parts?.[0]?.text; if (!content) throw new Error(`${provider.id} returned empty content`); return { content, logprobs: null, modelId: provider.model, providerId: provider.id }; } // ── Standard OpenAI-compatible API ────────────────────────────────────── const body = { model: provider.model, temperature: provider.temperature, max_tokens: provider.maxTokens, messages: [ { role: "system", content: prompt.system }, { role: "user", content: prompt.user } ] }; if (provider.supportsLogprobs) { body.logprobs = true; body.top_logprobs = 1; } const headers = { "Authorization": `Bearer ${apiKey}`, "Content-Type": "application/json", ...(provider.headers || {}) }; const response = await fetch(provider.url, { method: "POST", headers, body: JSON.stringify(body), signal: AbortSignal.timeout(25000) // 25s timeout }); if (!response.ok) { const errText = await response.text().catch(() => ""); throw new Error(`${provider.id} HTTP ${response.status}: ${errText.slice(0, 200)}`); } const data = await response.json(); const content = data?.choices?.[0]?.message?.content; if (!content) throw new Error(`${provider.id} returned empty content`); const logprobs = provider.supportsLogprobs ? data?.choices?.[0]?.logprobs : null; return { content, logprobs, modelId: provider.model, providerId: provider.id }; } // ── Master reasoning function ────────────────────────────────────────────── export async function runWorkflowReason({ domain, caseId, caseDescription, context, agentId, preferredProvider }) { const ontology = DOMAIN_ONTOLOGIES[domain]; if (!ontology) throw new Error(`Unknown domain: ${domain}`); // Check cache (60s TTL for same domain+case) const cacheKey = `${domain}:${caseId || 'custom'}:${caseDescription.slice(0, 50)}`; const cached = reasonCache.get(cacheKey); if (cached && cached.expires > Date.now()) { console.log(`[WORKFLOW-LLM] Cache hit for ${cacheKey}`); // Return a fresh trace ID but same LLM result const ts = Date.now(); const auditHash = computeAuditHash(cached.result.trace, caseId || 'custom', ts, cached.result.llm_model); const traceId = generateTraceId(auditHash, ts); return { ...cached.result, traceId, audit_hash: auditHash, timestamp: ts, cached: true }; } const prompt = buildPrompt(domain, ontology, caseDescription, context); // Determine provider order const providers = [...PROVIDERS]; if (preferredProvider) { const preferred = providers.find(p => p.id === preferredProvider); if (preferred) { const rest = providers.filter(p => p.id !== preferredProvider); providers.splice(0, providers.length, preferred, ...rest); } } const triedProviders = []; let lastError; for (const provider of providers) { try { console.log(`[WORKFLOW-LLM] Trying ${provider.id} for domain:${domain}`); const { content, logprobs, modelId, providerId } = await callLLM(provider, prompt); const parsed = parseAndValidate(content, domain); // Compute confidence: logprobs > LLM-reported > default let confidence = parsed.confidence; let confidenceMethod = "llm-reported"; if (logprobs) { const logprobConf = computeConfidenceFromLogprobs(logprobs); if (logprobConf !== null) { confidence = logprobConf; confidenceMethod = "logprobs"; } } const trace = parsed.path.join('-'); const timestamp = Date.now(); const auditHash = computeAuditHash(trace, caseId || 'custom', timestamp, modelId); const traceId = generateTraceId(auditHash, timestamp); // Build steps with node metadata const steps = parsed.path.map((nodeId, idx) => { const node = ontology.nodes.find(n => n.id === nodeId) || { icon: '·', name: nodeId, desc: '' }; return { step: idx + 1, node_id: nodeId, node_icon: node.icon || '·', node_name: node.name, node_desc: node.desc || '', reasoning: parsed.reasoning[idx] }; }); const result = { traceId, domain, case_id: caseId || null, case_description: caseDescription, trace, steps, verdict: parsed.verdict, confidence, confidence_method: confidenceMethod, audit_hash: auditHash, audit_hash_input: `trace:${trace}|case:${caseId || 'custom'}|ts:${timestamp}|model:${modelId}`, llm_model: modelId, llm_provider: providerId, agent_id: agentId || "anonymous", timestamp, published_paper_id: null, status: "active" }; // Cache result for 60s reasonCache.set(cacheKey, { result, expires: Date.now() + 60000 }); // Evict cache if too large if (reasonCache.size > 200) { const firstKey = reasonCache.keys().next().value; reasonCache.delete(firstKey); } console.log(`[WORKFLOW-LLM] ✓ ${provider.id} | domain:${domain} | trace:${trace} | conf:${confidence}% | hash:${auditHash.slice(0,16)}...`); return result; } catch (err) { console.warn(`[WORKFLOW-LLM] ${provider.id} failed: ${err.message}`); triedProviders.push(provider.id); lastError = err; } } throw new Error(`All LLM providers failed (tried: ${triedProviders.join(', ')}). Last error: ${lastError?.message}`); }