UNPKG

trivium-cognitive-sdk

Version:

Cognitive Architecture SDK with 10 archetypal lenses for comprehensive text analysis

298 lines (263 loc) 8.53 kB
/** * Trivium React Integration * Hooks and components for React applications */ const React = require('react'); const { TriviumMiddleware } = require('./middleware'); // React Hook for cognitive analysis function useTriviumAnalysis(config = {}) { const [middleware] = React.useState(() => new TriviumMiddleware(config)); const [isAnalyzing, setIsAnalyzing] = React.useState(false); const [lastAnalysis, setLastAnalysis] = React.useState(null); const analyzeText = React.useCallback(async (text, pattern) => { if (!text.trim()) return null; setIsAnalyzing(true); try { const result = await middleware.trivium.processWithPattern(text, pattern); setLastAnalysis(result); return result; } catch (error) { console.error('Trivium analysis error:', error); return null; } finally { setIsAnalyzing(false); } }, [middleware]); const analyzeWithLenses = React.useCallback(async (text, lenses) => { if (!text.trim()) return null; setIsAnalyzing(true); try { const result = await middleware.trivium.processText(text, lenses); setLastAnalysis(result); return result; } catch (error) { console.error('Trivium analysis error:', error); return null; } finally { setIsAnalyzing(false); } }, [middleware]); return { analyzeText, analyzeWithLenses, isAnalyzing, lastAnalysis, middleware }; } // React Hook for AI middleware function useTriviumAI(config = {}) { const [middleware] = React.useState(() => new TriviumMiddleware(config)); const enhancedFetch = React.useCallback(async (url, options = {}) => { // Check if this is an AI API call const isAICall = url.includes('api.openai.com') || url.includes('claude.ai') || url.includes('chat') || url.includes('ai'); if (isAICall && options.body) { try { const data = JSON.parse(options.body); const enhanced = await middleware.interceptRequest(data); options.body = JSON.stringify(enhanced); } catch (error) { console.error('Request enhancement error:', error); } } const response = await fetch(url, options); if (isAICall && response.ok) { const data = await response.json(); const enhanced = await middleware.interceptResponse(data, options.body); return new Response(JSON.stringify(enhanced), { status: response.status, statusText: response.statusText, headers: response.headers }); } return response; }, [middleware]); return { enhancedFetch, middleware }; } // React Component for cognitive analysis display function TriviumAnalysisDisplay({ analysis, className = '' }) { if (!analysis) return null; const lensOutputs = Object.entries(analysis.outputs || {}); return React.createElement('div', { className: `trivium-analysis ${className}`, style: { border: '1px solid #e2e8f0', borderRadius: '8px', padding: '16px', marginTop: '16px' } }, [ React.createElement('h3', { key: 'title', style: { marginBottom: '12px', color: '#1a202c' } }, '🧠 Cognitive Analysis'), analysis.pattern && React.createElement('div', { key: 'pattern', style: { backgroundColor: '#f7fafc', padding: '12px', borderRadius: '4px', marginBottom: '16px' } }, [ React.createElement('strong', { key: 'pattern-name' }, `Pattern: ${analysis.pattern}`), analysis.focus && React.createElement('div', { key: 'focus', style: { fontSize: '14px', color: '#4a5568', marginTop: '4px' } }, `Focus: ${analysis.focus}`) ]), React.createElement('div', { key: 'lenses', className: 'lens-outputs' }, lensOutputs.map(([lensType, output]) => React.createElement('div', { key: lensType, style: { marginBottom: '16px', border: '1px solid #e2e8f0', borderRadius: '6px', overflow: 'hidden' } }, [ React.createElement('div', { key: 'header', style: { backgroundColor: '#4299e1', color: 'white', padding: '8px 12px', fontWeight: '600', fontSize: '14px', textTransform: 'uppercase' } }, `${lensType} Lens`), React.createElement('div', { key: 'content', style: { padding: '12px', fontSize: '14px', lineHeight: '1.6', whiteSpace: 'pre-wrap' } }, output) ]) )) ]); } // React Component for cognitive input enhancement function TriviumEnhancedInput({ onAnalyze, placeholder = "Enter text to analyze...", className = '', autoAnalyze = false, selectedLenses = ['ethical', 'logical'] }) { const [text, setText] = React.useState(''); const { analyzeWithLenses, isAnalyzing, lastAnalysis } = useTriviumAnalysis(); const handleAnalyze = React.useCallback(async () => { if (!text.trim()) return; const result = await analyzeWithLenses(text, selectedLenses); if (onAnalyze) onAnalyze(result); }, [text, analyzeWithLenses, selectedLenses, onAnalyze]); React.useEffect(() => { if (autoAnalyze && text.trim()) { const timer = setTimeout(handleAnalyze, 1000); return () => clearTimeout(timer); } }, [text, autoAnalyze, handleAnalyze]); return React.createElement('div', { className: `trivium-enhanced-input ${className}` }, [ React.createElement('textarea', { key: 'textarea', value: text, onChange: (e) => setText(e.target.value), placeholder, style: { width: '100%', minHeight: '120px', padding: '12px', border: '1px solid #e2e8f0', borderRadius: '6px', fontSize: '14px', resize: 'vertical' } }), React.createElement('div', { key: 'controls', style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginTop: '8px' } }, [ React.createElement('div', { key: 'lens-selector', style: { fontSize: '12px', color: '#4a5568' } }, `Active lenses: ${selectedLenses.join(', ')}`), React.createElement('button', { key: 'analyze-btn', onClick: handleAnalyze, disabled: isAnalyzing || !text.trim(), style: { padding: '8px 16px', backgroundColor: isAnalyzing ? '#a0aec0' : '#4299e1', color: 'white', border: 'none', borderRadius: '4px', cursor: isAnalyzing ? 'not-allowed' : 'pointer' } }, isAnalyzing ? 'Analyzing...' : 'Analyze') ]), lastAnalysis && React.createElement(TriviumAnalysisDisplay, { key: 'analysis', analysis: lastAnalysis }) ]); } // React Provider for global Trivium context const TriviumContext = React.createContext(); function TriviumProvider({ children, config = {} }) { const [middleware] = React.useState(() => new TriviumMiddleware(config)); const value = React.useMemo(() => ({ middleware, analyzeText: (text, pattern) => middleware.trivium.processWithPattern(text, pattern), analyzeWithLenses: (text, lenses) => middleware.trivium.processText(text, lenses), interceptRequest: (request) => middleware.interceptRequest(request), interceptResponse: (response, request) => middleware.interceptResponse(response, request) }), [middleware]); return React.createElement(TriviumContext.Provider, { value }, children); } function useTriviumContext() { const context = React.useContext(TriviumContext); if (!context) { throw new Error('useTriviumContext must be used within a TriviumProvider'); } return context; } // Higher-order component for AI enhancement function withTriviumAI(WrappedComponent, config = {}) { return function TriviumEnhancedComponent(props) { const { enhancedFetch, middleware } = useTriviumAI(config); return React.createElement(WrappedComponent, { ...props, triviumFetch: enhancedFetch, triviumMiddleware: middleware }); }; } module.exports = { useTriviumAnalysis, useTriviumAI, TriviumAnalysisDisplay, TriviumEnhancedInput, TriviumProvider, useTriviumContext, withTriviumAI };