import { useState, useMemo, useEffect, useCallback } from 'react'; import { apiFetch } from '../api'; import './KnowledgeInput.css'; function KnowledgeInput({ onKnowledgeSubmit, isBusy, status }) { const [text, setText] = useState(''); const [analysis, setAnalysis] = useState(null); const [lastAnalysis, setLastAnalysis] = useState(null); const [isAnalyzing, setIsAnalyzing] = useState(false); const handleSubmit = () => { if (!text.trim() || isBusy) return; onKnowledgeSubmit(text); if (analysis) { setLastAnalysis(analysis); } else { // Fallback if they clicked instantly or text was < 50 chars const charCount = text.length; setLastAnalysis({ metrics: { density: Math.min(charCount / 2000, 1.0), chunks: Math.floor(charCount / 500) + 1, estimated_links: 0, reinforcement_index: 0 }, entities: [], existing_links: [] }); } setText(''); setAnalysis(null); }; // Debounced analysis function useEffect(() => { if (text.length < 50) { setAnalysis(null); return; } const timer = setTimeout(async () => { setIsAnalyzing(true); try { const res = await apiFetch('/api/v1/analyze', { method: 'POST', body: JSON.stringify({ text }) }); if (res.ok) { const data = await res.json(); setAnalysis(data); } } catch (error) { console.error('Analysis failed', error); } finally { setIsAnalyzing(false); } }, 1500); // 1.5s debounce return () => clearTimeout(timer); }, [text]); const displayAnalysis = analysis || lastAnalysis; return (
{/* ── LEFT: The Inscription Terminal ── */}
{status && (
check_circle {status}
)}
auto_awesome

Neural Inscription

Directly seed the core cortex with high-fidelity knowledge.