@coreason-ai/sensory-core 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/LICENSE +57 -0
- package/NOTICE +21 -0
- package/README.md +60 -0
- package/dist/components/CognitiveIntrospectionPanel.d.ts +15 -0
- package/dist/components/CognitiveIntrospectionPanel.js +45 -0
- package/dist/components/ConstrainedDecodingInspector.d.ts +2 -0
- package/dist/components/ConstrainedDecodingInspector.js +71 -0
- package/dist/components/ConstraintInspector.d.ts +11 -0
- package/dist/components/ConstraintInspector.js +52 -0
- package/dist/components/DynamicToposRenderer.d.ts +17 -0
- package/dist/components/DynamicToposRenderer.js +40 -0
- package/dist/components/ForgePreview.d.ts +9 -0
- package/dist/components/ForgePreview.js +81 -0
- package/dist/components/GlassBox.d.ts +9 -0
- package/dist/components/GlassBox.js +32 -0
- package/dist/components/HardwareProfiler.d.ts +20 -0
- package/dist/components/HardwareProfiler.js +54 -0
- package/dist/components/HolographicAuditTrail.d.ts +21 -0
- package/dist/components/HolographicAuditTrail.js +53 -0
- package/dist/components/KnowledgeTree.d.ts +12 -0
- package/dist/components/KnowledgeTree.js +23 -0
- package/dist/components/LogitVisualizer.d.ts +16 -0
- package/dist/components/LogitVisualizer.js +113 -0
- package/dist/components/ManifestExplorer.d.ts +10 -0
- package/dist/components/ManifestExplorer.js +51 -0
- package/dist/components/MarkovBlanketLens.d.ts +20 -0
- package/dist/components/MarkovBlanketLens.js +45 -0
- package/dist/components/MultimodalCapture.d.ts +13 -0
- package/dist/components/MultimodalCapture.js +59 -0
- package/dist/components/MultimodalProjection.d.ts +8 -0
- package/dist/components/MultimodalProjection.js +39 -0
- package/dist/components/QuorumAdjudicator.d.ts +21 -0
- package/dist/components/QuorumAdjudicator.js +46 -0
- package/dist/components/SensoryUnfolder.d.ts +13 -0
- package/dist/components/SensoryUnfolder.js +77 -0
- package/dist/components/StatusPulse.d.ts +8 -0
- package/dist/components/StatusPulse.js +56 -0
- package/dist/components/TemporalScrubber.d.ts +16 -0
- package/dist/components/TemporalScrubber.js +36 -0
- package/dist/components/ThermodynamicGovernor.d.ts +17 -0
- package/dist/components/ThermodynamicGovernor.js +50 -0
- package/dist/components/TopologicalCanvas.d.ts +27 -0
- package/dist/components/TopologicalCanvas.js +183 -0
- package/dist/components/VFEIndicator.d.ts +15 -0
- package/dist/components/VFEIndicator.js +52 -0
- package/dist/components/VerifiedCapabilityReceipt.d.ts +19 -0
- package/dist/components/VerifiedCapabilityReceipt.js +37 -0
- package/dist/components/nodes/AgentNode.d.ts +14 -0
- package/dist/components/nodes/AgentNode.js +51 -0
- package/dist/components/nodes/SandboxNode.d.ts +11 -0
- package/dist/components/nodes/SandboxNode.js +66 -0
- package/dist/components/nodes/SubstrateNode.d.ts +4 -0
- package/dist/components/nodes/SubstrateNode.js +57 -0
- package/dist/components/nodes/ThermodynamicNode.d.ts +12 -0
- package/dist/components/nodes/ThermodynamicNode.js +52 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +26 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/test/setup.js +1 -0
- package/dist/workers/elkWorker.d.ts +1 -0
- package/dist/workers/elkWorker.js +45 -0
- package/package.json +88 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface AuditNode {
|
|
3
|
+
id: string;
|
|
4
|
+
layer: 'SYNTHESIS' | 'EXTRACTION' | 'SOURCE_DATA' | 'REGISTRY';
|
|
5
|
+
content: string;
|
|
6
|
+
hash: string;
|
|
7
|
+
children?: AuditNode[];
|
|
8
|
+
}
|
|
9
|
+
export interface HolographicAuditTrailProps {
|
|
10
|
+
rootNode: AuditNode;
|
|
11
|
+
onDefeasibleRetraction?: (nodeId: string) => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* HolographicAuditTrail
|
|
15
|
+
*
|
|
16
|
+
* Target Persona: Data Scientist / Quality Auditor
|
|
17
|
+
* Concept: Semantic Zoom & Defeasible Cascades
|
|
18
|
+
* Allows users to zoom through abstraction layers (Sentence -> Database Row -> Source)
|
|
19
|
+
* and trigger defeasible "undo" cascades.
|
|
20
|
+
*/
|
|
21
|
+
export declare const HolographicAuditTrail: React.FC<HolographicAuditTrailProps>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Copyright (c) 2026 CoReason, Inc
|
|
2
|
+
//
|
|
3
|
+
// This software is proprietary and dual-licensed
|
|
4
|
+
// Licensed under the Prosperity Public License 3.0 (the "License")
|
|
5
|
+
// A copy of the license is available at <https://prosperitylicense.com/versions/3.0.0>
|
|
6
|
+
// For details, see the LICENSE file
|
|
7
|
+
// Commercial use beyond a 30-day trial requires a separate license
|
|
8
|
+
//
|
|
9
|
+
// Source Code: <https://github.com/CoReason-AI/coreason-sensory-core>
|
|
10
|
+
import React, { useState } from 'react';
|
|
11
|
+
import { motion, AnimatePresence } from 'framer-motion';
|
|
12
|
+
import { GlassBox } from './GlassBox';
|
|
13
|
+
/**
|
|
14
|
+
* HolographicAuditTrail
|
|
15
|
+
*
|
|
16
|
+
* Target Persona: Data Scientist / Quality Auditor
|
|
17
|
+
* Concept: Semantic Zoom & Defeasible Cascades
|
|
18
|
+
* Allows users to zoom through abstraction layers (Sentence -> Database Row -> Source)
|
|
19
|
+
* and trigger defeasible "undo" cascades.
|
|
20
|
+
*/
|
|
21
|
+
export const HolographicAuditTrail = ({ rootNode, onDefeasibleRetraction }) => {
|
|
22
|
+
const [expandedNodes, setExpandedNodes] = useState(new Set([rootNode.id]));
|
|
23
|
+
const toggleNode = (id) => {
|
|
24
|
+
const next = new Set(expandedNodes);
|
|
25
|
+
if (next.has(id))
|
|
26
|
+
next.delete(id);
|
|
27
|
+
else
|
|
28
|
+
next.add(id);
|
|
29
|
+
setExpandedNodes(next);
|
|
30
|
+
};
|
|
31
|
+
const renderNode = (node, depth = 0) => {
|
|
32
|
+
const isExpanded = expandedNodes.has(node.id);
|
|
33
|
+
const hasChildren = node.children && node.children.length > 0;
|
|
34
|
+
return (React.createElement(motion.div, { key: node.id, initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: 'auto' }, exit: { opacity: 0, height: 0, scale: 0.95, filter: 'blur(4px)' }, transition: { duration: 0.3 }, className: "flex flex-col", style: { marginLeft: depth > 0 ? '1.5rem' : '0' } },
|
|
35
|
+
React.createElement("div", { className: "flex items-start space-x-3 py-2 group relative" },
|
|
36
|
+
depth > 0 && (React.createElement("div", { className: "absolute left-[-1.1rem] top-0 bottom-0 w-px bg-gray-700" })),
|
|
37
|
+
depth > 0 && (React.createElement("div", { className: "absolute left-[-1.1rem] top-5 w-4 h-px bg-gray-700" })),
|
|
38
|
+
React.createElement("div", { className: `mt-1 w-4 h-4 flex items-center justify-center border rounded cursor-pointer transition-colors ${hasChildren ? 'border-[var(--cr-accent-orange)] text-[var(--cr-accent-orange)] hover:bg-[var(--cr-accent-orange)] hover:text-black' : 'border-gray-600 text-gray-600'}`, onClick: () => hasChildren && toggleNode(node.id) }, hasChildren ? (isExpanded ? '−' : '+') : '•'),
|
|
39
|
+
React.createElement("div", { className: "flex-1 flex flex-col bg-[var(--cr-glass-box-black)] rounded p-3 border border-transparent group-hover:border-gray-700 transition-colors" },
|
|
40
|
+
React.createElement("div", { className: "flex justify-between items-center mb-1" },
|
|
41
|
+
React.createElement("span", { className: "text-[10px] font-bold tracking-widest uppercase text-gray-500" }, node.layer),
|
|
42
|
+
React.createElement("span", { className: "text-[10px] font-mono text-gray-600 truncate max-w-[100px]", title: node.hash }, node.hash.substring(0, 8))),
|
|
43
|
+
React.createElement("p", { className: "text-sm text-gray-200 leading-relaxed" }, node.content),
|
|
44
|
+
onDefeasibleRetraction && (React.createElement("div", { className: "mt-2 opacity-0 group-hover:opacity-100 transition-opacity flex justify-end" },
|
|
45
|
+
React.createElement("button", { onClick: () => onDefeasibleRetraction(node.id), className: "text-[10px] uppercase tracking-wider text-red-400 hover:text-red-300 flex items-center space-x-1" },
|
|
46
|
+
React.createElement("span", null, "\u293E Defeasible Retraction")))))),
|
|
47
|
+
isExpanded && hasChildren && (React.createElement("div", { className: "flex flex-col" }, node.children.map(child => renderNode(child, depth + 1))))));
|
|
48
|
+
};
|
|
49
|
+
return (React.createElement(GlassBox, { density: "normal", className: "overflow-hidden" },
|
|
50
|
+
React.createElement("h3", { className: "text-sm font-semibold text-white uppercase tracking-wider mb-4 border-b border-gray-700 pb-2" }, "Holographic Audit Trail"),
|
|
51
|
+
React.createElement("div", { className: "max-h-[400px] overflow-y-auto pr-2 custom-scrollbar" },
|
|
52
|
+
React.createElement(AnimatePresence, null, renderNode(rootNode)))));
|
|
53
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface KnowledgeNode {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
children?: KnowledgeNode[];
|
|
6
|
+
}
|
|
7
|
+
export interface KnowledgeTreeProps {
|
|
8
|
+
data: KnowledgeNode[];
|
|
9
|
+
onSelectNode: (id: string) => void;
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const KnowledgeTree: React.FC<KnowledgeTreeProps>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright (c) 2026 CoReason, Inc
|
|
2
|
+
//
|
|
3
|
+
// This software is proprietary and dual-licensed
|
|
4
|
+
// Licensed under the Prosperity Public License 3.0 (the "License")
|
|
5
|
+
// A copy of the license is available at <https://prosperitylicense.com/versions/3.0.0>
|
|
6
|
+
// For details, see the LICENSE file
|
|
7
|
+
// Commercial use beyond a 30-day trial requires a separate license
|
|
8
|
+
//
|
|
9
|
+
// Source Code: <https://github.com/CoReason-AI/coreason-runtime>
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { cn } from './GlassBox';
|
|
12
|
+
import { ChevronRight, Folder } from 'lucide-react';
|
|
13
|
+
const TreeNode = ({ node, onSelect, depth = 0 }) => {
|
|
14
|
+
return (React.createElement("div", { className: "flex flex-col" },
|
|
15
|
+
React.createElement("div", { className: "flex items-center gap-2 py-1 px-2 hover:bg-white/5 cursor-pointer rounded transition-colors", style: { paddingLeft: `${depth * 16 + 8}px` }, onClick: () => onSelect(node.id) },
|
|
16
|
+
node.children && node.children.length > 0 ? (React.createElement(ChevronRight, { size: 14, className: "text-gray-400" })) : (React.createElement("span", { className: "w-[14px]" })),
|
|
17
|
+
React.createElement(Folder, { size: 14, className: "text-cr-cyan" }),
|
|
18
|
+
React.createElement("span", { className: "font-mono text-sm text-gray-200" }, node.label)),
|
|
19
|
+
node.children && node.children.length > 0 && (React.createElement("div", { className: "flex flex-col" }, node.children.map(child => (React.createElement(TreeNode, { key: child.id, node: child, onSelect: onSelect, depth: depth + 1 })))))));
|
|
20
|
+
};
|
|
21
|
+
export const KnowledgeTree = ({ data, onSelectNode, className }) => {
|
|
22
|
+
return (React.createElement("div", { className: cn('overflow-y-auto border border-[#333] bg-cr-black/50 rounded-xl p-2', className) }, data.map(node => (React.createElement(TreeNode, { key: node.id, node: node, onSelect: onSelectNode })))));
|
|
23
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface TokenLogit {
|
|
3
|
+
token: string;
|
|
4
|
+
probability: number;
|
|
5
|
+
isMasked: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface LogitDistributionEvent {
|
|
8
|
+
nodeId: string;
|
|
9
|
+
tokens: TokenLogit[];
|
|
10
|
+
klDivergence: number;
|
|
11
|
+
}
|
|
12
|
+
interface LogitVisualizerProps {
|
|
13
|
+
nodeId: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const LogitVisualizer: React.FC<LogitVisualizerProps>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// Copyright (c) 2026 CoReason, Inc
|
|
2
|
+
//
|
|
3
|
+
// This software is proprietary and dual-licensed
|
|
4
|
+
// Licensed under the Prosperity Public License 3.0 (the "License")
|
|
5
|
+
// A copy of the license is available at <https://prosperitylicense.com/versions/3.0.0>
|
|
6
|
+
// For details, see the LICENSE file
|
|
7
|
+
// Commercial use beyond a 30-day trial requires a separate license
|
|
8
|
+
//
|
|
9
|
+
// Source Code: <https://github.com/CoReason-AI/coreason-sensory-core>
|
|
10
|
+
import React, { useEffect, useState, useRef } from 'react';
|
|
11
|
+
export const LogitVisualizer = ({ nodeId }) => {
|
|
12
|
+
const [distribution, setDistribution] = useState(null);
|
|
13
|
+
const requestRef = useRef(null);
|
|
14
|
+
const latestEvent = useRef(null);
|
|
15
|
+
// Throttle rendering using requestAnimationFrame to prevent UI freezing from high-frequency SSE
|
|
16
|
+
const animate = () => {
|
|
17
|
+
if (latestEvent.current) {
|
|
18
|
+
setDistribution(latestEvent.current);
|
|
19
|
+
latestEvent.current = null;
|
|
20
|
+
}
|
|
21
|
+
requestRef.current = requestAnimationFrame(animate);
|
|
22
|
+
};
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
requestRef.current = requestAnimationFrame(animate);
|
|
25
|
+
return () => {
|
|
26
|
+
if (requestRef.current)
|
|
27
|
+
cancelAnimationFrame(requestRef.current);
|
|
28
|
+
};
|
|
29
|
+
}, []);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
const handleMessage = (event) => {
|
|
32
|
+
var _a;
|
|
33
|
+
const message = event.data;
|
|
34
|
+
if (message.type === 'LOGIT_UPDATE' && ((_a = message.payload) === null || _a === void 0 ? void 0 : _a.nodeId) === nodeId) {
|
|
35
|
+
latestEvent.current = message.payload;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
window.addEventListener('message', handleMessage);
|
|
39
|
+
return () => window.removeEventListener('message', handleMessage);
|
|
40
|
+
}, [nodeId]);
|
|
41
|
+
if (!distribution) {
|
|
42
|
+
return (React.createElement("div", { className: "glass-panel", style: { padding: '16px', color: 'var(--vscode-descriptionForeground)', fontSize: '12px' } },
|
|
43
|
+
"Awaiting Tensor Routing for ",
|
|
44
|
+
nodeId,
|
|
45
|
+
"..."));
|
|
46
|
+
}
|
|
47
|
+
return (React.createElement("div", { className: "glass-panel", style: {
|
|
48
|
+
padding: '20px',
|
|
49
|
+
minWidth: '340px',
|
|
50
|
+
display: 'flex',
|
|
51
|
+
flexDirection: 'column',
|
|
52
|
+
gap: '16px',
|
|
53
|
+
zIndex: 1000,
|
|
54
|
+
pointerEvents: 'none',
|
|
55
|
+
border: '1px solid rgba(0, 255, 170, 0.2)',
|
|
56
|
+
boxShadow: '0 8px 32px rgba(0, 0, 0, 0.4), inset 0 0 20px rgba(0, 255, 170, 0.05)'
|
|
57
|
+
} },
|
|
58
|
+
React.createElement("style", null, `
|
|
59
|
+
@keyframes maskStrike {
|
|
60
|
+
0% { text-decoration-color: transparent; opacity: 1; }
|
|
61
|
+
50% { text-decoration-color: #ff3366; transform: scale(0.98); }
|
|
62
|
+
100% { text-decoration-color: rgba(255,51,102,0.6); opacity: 0.6; }
|
|
63
|
+
}
|
|
64
|
+
.logit-mask {
|
|
65
|
+
text-decoration: line-through 2px solid transparent;
|
|
66
|
+
animation: maskStrike 0.4s ease-out forwards;
|
|
67
|
+
}
|
|
68
|
+
@keyframes barGlow {
|
|
69
|
+
0% { filter: brightness(1); }
|
|
70
|
+
50% { filter: brightness(1.3); box-shadow: 0 0 15px currentColor; }
|
|
71
|
+
100% { filter: brightness(1); }
|
|
72
|
+
}
|
|
73
|
+
.logit-bar {
|
|
74
|
+
animation: barGlow 0.5s ease-out;
|
|
75
|
+
}
|
|
76
|
+
`),
|
|
77
|
+
React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', borderBottom: '1px solid rgba(255,255,255,0.1)', paddingBottom: '12px' } },
|
|
78
|
+
React.createElement("strong", { style: { fontSize: '13px', letterSpacing: '0.5px', textTransform: 'uppercase' } },
|
|
79
|
+
"Logit Masking: ",
|
|
80
|
+
React.createElement("span", { style: { color: '#00ffaa' } }, nodeId)),
|
|
81
|
+
React.createElement("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' } },
|
|
82
|
+
React.createElement("span", { style: { fontSize: '11px', fontWeight: 'bold', color: distribution.klDivergence > 0.8 ? '#ff3366' : '#00ffaa' } },
|
|
83
|
+
"VFE: ",
|
|
84
|
+
distribution.klDivergence.toFixed(3)),
|
|
85
|
+
React.createElement("div", { style: { width: '40px', height: '4px', background: 'rgba(255,255,255,0.1)', borderRadius: '2px', overflow: 'hidden' } },
|
|
86
|
+
React.createElement("div", { style: {
|
|
87
|
+
height: '100%',
|
|
88
|
+
width: `${Math.min(distribution.klDivergence * 100, 100)}%`,
|
|
89
|
+
background: distribution.klDivergence > 0.8 ? '#ff3366' : '#00ffaa',
|
|
90
|
+
boxShadow: `0 0 8px ${distribution.klDivergence > 0.8 ? '#ff3366' : '#00ffaa'}`
|
|
91
|
+
} })))),
|
|
92
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' } }, distribution.tokens.map((t, idx) => (React.createElement("div", { key: `${t.token}-${idx}`, style: { display: 'flex', alignItems: 'center', gap: '12px', fontSize: '12px', fontFamily: 'monospace' } },
|
|
93
|
+
React.createElement("div", { style: {
|
|
94
|
+
width: '85px',
|
|
95
|
+
textOverflow: 'ellipsis',
|
|
96
|
+
overflow: 'hidden',
|
|
97
|
+
whiteSpace: 'nowrap',
|
|
98
|
+
color: t.isMasked ? '#ff3366' : '#fff',
|
|
99
|
+
background: 'rgba(0,0,0,0.3)',
|
|
100
|
+
padding: '4px 8px',
|
|
101
|
+
borderRadius: '4px',
|
|
102
|
+
border: `1px solid ${t.isMasked ? 'rgba(255, 51, 102, 0.3)' : 'rgba(255, 255, 255, 0.1)'}`
|
|
103
|
+
}, className: t.isMasked ? 'logit-mask' : '' }, t.token === ' ' ? '␣' : t.token),
|
|
104
|
+
React.createElement("div", { style: { flex: 1, height: '6px', background: 'rgba(0,0,0,0.5)', borderRadius: '3px', overflow: 'hidden', position: 'relative' } },
|
|
105
|
+
React.createElement("div", { className: t.isMasked ? '' : 'logit-bar', style: {
|
|
106
|
+
height: '100%',
|
|
107
|
+
width: `${t.isMasked ? 100 : Math.max(t.probability * 100, 2)}%`,
|
|
108
|
+
background: t.isMasked ? '#ff3366' : 'linear-gradient(90deg, #00ffaa, #00b8ff)',
|
|
109
|
+
boxShadow: t.isMasked ? '0 0 10px #ff3366' : '0 0 10px #00ffaa',
|
|
110
|
+
transition: 'width 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275)' // Spring physics
|
|
111
|
+
} })),
|
|
112
|
+
React.createElement("div", { style: { width: '50px', textAlign: 'right', fontWeight: 'bold', color: t.isMasked ? '#ff3366' : '#00ffaa' } }, t.isMasked ? '-∞' : `${(t.probability * 100).toFixed(1)}%`)))))));
|
|
113
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ManifestClass {
|
|
3
|
+
name: string;
|
|
4
|
+
docstring: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ManifestExplorerProps {
|
|
7
|
+
ontologyData?: ManifestClass[];
|
|
8
|
+
onInstantiate: (className: string) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const ManifestExplorer: React.FC<ManifestExplorerProps>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Copyright (c) 2026 CoReason, Inc
|
|
2
|
+
//
|
|
3
|
+
// This software is proprietary and dual-licensed
|
|
4
|
+
// Licensed under the Prosperity Public License 3.0 (the "License")
|
|
5
|
+
// A copy of the license is available at <https://prosperitylicense.com/versions/3.0.0>
|
|
6
|
+
// For details, see the LICENSE file
|
|
7
|
+
// Commercial use beyond a 30-day trial requires a separate license
|
|
8
|
+
//
|
|
9
|
+
// Source Code: <https://github.com/CoReason-AI/coreason-sensory-core>
|
|
10
|
+
import React, { useState } from 'react';
|
|
11
|
+
export const ManifestExplorer = ({ ontologyData = [], onInstantiate }) => {
|
|
12
|
+
const [searchTerm, setSearchTerm] = useState('');
|
|
13
|
+
const filteredClasses = ontologyData.filter(c => c.name.toLowerCase().includes(searchTerm.toLowerCase()));
|
|
14
|
+
return (React.createElement("div", { style: {
|
|
15
|
+
width: '300px',
|
|
16
|
+
height: '100%',
|
|
17
|
+
display: 'flex',
|
|
18
|
+
flexDirection: 'column',
|
|
19
|
+
borderRight: '1px solid var(--vscode-sideBar-border)',
|
|
20
|
+
backgroundColor: 'var(--vscode-sideBar-background)',
|
|
21
|
+
color: 'var(--vscode-sideBar-foreground)',
|
|
22
|
+
fontFamily: 'var(--vscode-font-family)',
|
|
23
|
+
fontSize: 'var(--vscode-font-size)',
|
|
24
|
+
} },
|
|
25
|
+
React.createElement("div", { style: { padding: '10px', borderBottom: '1px solid var(--vscode-sideBar-border)' } },
|
|
26
|
+
React.createElement("h3", { style: { margin: '0 0 10px 0', fontSize: '12px', textTransform: 'uppercase', opacity: 0.8 } }, "Manifest Ontology Explorer"),
|
|
27
|
+
React.createElement("input", { type: "text", placeholder: "Search Ontology...", value: searchTerm, onChange: (e) => setSearchTerm(e.target.value), style: {
|
|
28
|
+
width: '100%',
|
|
29
|
+
padding: '5px',
|
|
30
|
+
backgroundColor: 'var(--vscode-input-background)',
|
|
31
|
+
color: 'var(--vscode-input-foreground)',
|
|
32
|
+
border: '1px solid var(--vscode-input-border)',
|
|
33
|
+
borderRadius: '2px',
|
|
34
|
+
} })),
|
|
35
|
+
React.createElement("div", { style: { flex: 1, overflowY: 'auto', padding: '10px' } }, filteredClasses.map((c) => (React.createElement("div", { key: c.name, style: {
|
|
36
|
+
marginBottom: '15px',
|
|
37
|
+
padding: '8px',
|
|
38
|
+
borderRadius: '4px',
|
|
39
|
+
backgroundColor: 'rgba(255,255,255,0.05)',
|
|
40
|
+
cursor: 'pointer',
|
|
41
|
+
}, onClick: () => onInstantiate(c.name) },
|
|
42
|
+
React.createElement("div", { style: { fontWeight: 'bold', marginBottom: '4px', color: 'var(--vscode-symbolIcon-classForeground)' } }, c.name),
|
|
43
|
+
React.createElement("div", { style: {
|
|
44
|
+
fontSize: '11px',
|
|
45
|
+
opacity: 0.7,
|
|
46
|
+
display: '-webkit-box',
|
|
47
|
+
WebkitLineClamp: 3,
|
|
48
|
+
WebkitBoxOrient: 'vertical',
|
|
49
|
+
overflow: 'hidden'
|
|
50
|
+
} }, c.docstring.split('\n')[0])))))));
|
|
51
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface AgentNode {
|
|
3
|
+
id: string;
|
|
4
|
+
urn: string;
|
|
5
|
+
vfeScore: number;
|
|
6
|
+
status: 'NOMINAL' | 'EPISTEMIC_GAP' | 'COMPUTING';
|
|
7
|
+
}
|
|
8
|
+
export interface MarkovBlanketLensProps {
|
|
9
|
+
nodes: AgentNode[];
|
|
10
|
+
vfeThreshold: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* MarkovBlanketLens
|
|
14
|
+
*
|
|
15
|
+
* Target Persona: Reasoning Engineer
|
|
16
|
+
* Concept: Attention Steering & Variational Free Energy
|
|
17
|
+
* Dims nominal swarm nodes and physically illuminates high-entropy nodes
|
|
18
|
+
* to prevent alert fatigue.
|
|
19
|
+
*/
|
|
20
|
+
export declare const MarkovBlanketLens: React.FC<MarkovBlanketLensProps>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Copyright (c) 2026 CoReason, Inc
|
|
2
|
+
//
|
|
3
|
+
// This software is proprietary and dual-licensed
|
|
4
|
+
// Licensed under the Prosperity Public License 3.0 (the "License")
|
|
5
|
+
// A copy of the license is available at <https://prosperitylicense.com/versions/3.0.0>
|
|
6
|
+
// For details, see the LICENSE file
|
|
7
|
+
// Commercial use beyond a 30-day trial requires a separate license
|
|
8
|
+
//
|
|
9
|
+
// Source Code: <https://github.com/CoReason-AI/coreason-sensory-core>
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { GlassBox } from './GlassBox';
|
|
12
|
+
/**
|
|
13
|
+
* MarkovBlanketLens
|
|
14
|
+
*
|
|
15
|
+
* Target Persona: Reasoning Engineer
|
|
16
|
+
* Concept: Attention Steering & Variational Free Energy
|
|
17
|
+
* Dims nominal swarm nodes and physically illuminates high-entropy nodes
|
|
18
|
+
* to prevent alert fatigue.
|
|
19
|
+
*/
|
|
20
|
+
export const MarkovBlanketLens = ({ nodes, vfeThreshold }) => {
|
|
21
|
+
return (React.createElement(GlassBox, { density: "dense" },
|
|
22
|
+
React.createElement("div", { className: "flex flex-col space-y-4" },
|
|
23
|
+
React.createElement("div", { className: "flex justify-between items-center border-b border-gray-700 pb-2" },
|
|
24
|
+
React.createElement("h3", { className: "text-sm font-semibold text-white tracking-widest uppercase" }, "Markov Blanket Lens"),
|
|
25
|
+
React.createElement("span", { className: "text-xs text-gray-400" },
|
|
26
|
+
"VFE Threshold: ",
|
|
27
|
+
React.createElement("span", { className: "text-white font-mono" }, vfeThreshold.toFixed(2)))),
|
|
28
|
+
React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-3 max-h-[300px] overflow-y-auto pr-1" }, nodes.map(node => {
|
|
29
|
+
const isAnomalous = node.vfeScore >= vfeThreshold;
|
|
30
|
+
const opacityClass = isAnomalous ? 'opacity-100 scale-100' : 'opacity-40 scale-95 grayscale';
|
|
31
|
+
const borderClass = isAnomalous ? 'border-[var(--cr-accent-orange)]' : 'border-gray-800';
|
|
32
|
+
return (React.createElement("div", { key: node.id, className: `flex flex-col p-3 rounded bg-[var(--cr-glass-box-black)] border ${borderClass} ${opacityClass} transition-all duration-500 ease-in-out` },
|
|
33
|
+
React.createElement("div", { className: "flex justify-between items-center mb-2" },
|
|
34
|
+
React.createElement("span", { className: "text-xs font-mono text-gray-300 truncate", title: node.urn }, node.urn.split(':').slice(-2).join(':')),
|
|
35
|
+
node.status === 'COMPUTING' && (React.createElement("span", { className: "relative flex h-2 w-2" },
|
|
36
|
+
React.createElement("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-blue-400 opacity-75" }),
|
|
37
|
+
React.createElement("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-blue-500" }))),
|
|
38
|
+
node.status === 'EPISTEMIC_GAP' && (React.createElement("span", { className: "w-2 h-2 rounded-full bg-[var(--cr-accent-orange)] shadow-[0_0_8px_var(--cr-accent-orange)]" }))),
|
|
39
|
+
React.createElement("div", { className: "flex flex-col mt-1" },
|
|
40
|
+
React.createElement("span", { className: "text-[10px] text-gray-500 uppercase" }, "Variational Free Energy"),
|
|
41
|
+
React.createElement("div", { className: "flex items-end space-x-2" },
|
|
42
|
+
React.createElement("span", { className: `text-lg font-mono ${isAnomalous ? 'text-[var(--cr-accent-orange)]' : 'text-gray-400'}` }, node.vfeScore.toFixed(3)),
|
|
43
|
+
isAnomalous && React.createElement("span", { className: "text-xs text-[var(--cr-accent-orange)] pb-1 mb-0.5" }, "\u26A0\uFE0F Attention Req")))));
|
|
44
|
+
})))));
|
|
45
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface MultimodalCaptureProps {
|
|
3
|
+
audioCaptureEnabled: boolean;
|
|
4
|
+
textCaptureEnabled: boolean;
|
|
5
|
+
videoCaptureEnabled?: boolean;
|
|
6
|
+
onAudioStop?: () => void;
|
|
7
|
+
onVideoStop?: () => void;
|
|
8
|
+
onTextChange?: (text: string) => void;
|
|
9
|
+
onSubmitText?: (text: string) => void;
|
|
10
|
+
currentText?: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const MultimodalCapture: React.FC<MultimodalCaptureProps>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Copyright (c) 2026 CoReason, Inc
|
|
2
|
+
//
|
|
3
|
+
// This software is proprietary and dual-licensed
|
|
4
|
+
// Licensed under the Prosperity Public License 3.0 (the "License")
|
|
5
|
+
// A copy of the license is available at <https://prosperitylicense.com/versions/3.0.0>
|
|
6
|
+
// For details, see the LICENSE file
|
|
7
|
+
// Commercial use beyond a 30-day trial requires a separate license
|
|
8
|
+
//
|
|
9
|
+
// Source Code: <https://github.com/CoReason-AI/coreason-runtime>
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { cn } from './GlassBox';
|
|
12
|
+
import { Mic, Type, StopCircle, Video } from 'lucide-react';
|
|
13
|
+
export const MultimodalCapture = ({ audioCaptureEnabled, textCaptureEnabled, videoCaptureEnabled = false, onAudioStop, onVideoStop, onTextChange, onSubmitText, currentText = '', className }) => {
|
|
14
|
+
return (React.createElement("div", { className: cn('flex flex-col gap-4 p-4 bg-[var(--cr-glass-box-black)] border border-[var(--cr-glass-box-gray)] rounded-lg shadow-lg', className) },
|
|
15
|
+
React.createElement("h3", { className: "text-sm font-mono text-[var(--cr-reverse-white)] border-b border-[var(--cr-glass-box-gray)] pb-2 mb-2 flex items-center gap-2" },
|
|
16
|
+
React.createElement(Mic, { size: 16, className: audioCaptureEnabled ? "text-[var(--cr-accent-orange)] animate-pulse" : "text-gray-500" }),
|
|
17
|
+
React.createElement(Video, { size: 16, className: videoCaptureEnabled ? "text-[var(--cr-accent-cyan)] animate-pulse" : "text-gray-500" }),
|
|
18
|
+
"Multimodal Capture"),
|
|
19
|
+
React.createElement("div", { className: "flex flex-col gap-4" },
|
|
20
|
+
videoCaptureEnabled && (React.createElement("div", { className: "flex items-center justify-between p-3 bg-black/40 rounded-md border border-[var(--cr-accent-cyan)] shadow-[0_0_10px_var(--cr-accent-cyan)]" },
|
|
21
|
+
React.createElement("div", { className: "flex items-center gap-3" },
|
|
22
|
+
React.createElement("div", { className: "w-10 h-10 rounded-full bg-[var(--cr-accent-cyan)]/20 flex items-center justify-center relative" },
|
|
23
|
+
React.createElement("div", { className: "absolute inset-0 rounded-full border border-[var(--cr-accent-cyan)] animate-ping opacity-50" }),
|
|
24
|
+
React.createElement(Video, { size: 20, className: "text-[var(--cr-accent-cyan)] z-10" })),
|
|
25
|
+
React.createElement("div", { className: "flex flex-col" },
|
|
26
|
+
React.createElement("span", { className: "text-xs text-[var(--cr-accent-cyan)] font-mono" }, "Camera Active"),
|
|
27
|
+
React.createElement("span", { className: "text-sm text-[var(--cr-reverse-white)] font-mono" }, "Streaming computer vision frames..."))),
|
|
28
|
+
onVideoStop && (React.createElement("button", { onClick: onVideoStop, className: "p-2 rounded-md hover:bg-white/10 transition-colors text-gray-400 hover:text-white", title: "Stop Video Capture" },
|
|
29
|
+
React.createElement(StopCircle, { size: 24 }))))),
|
|
30
|
+
audioCaptureEnabled && (React.createElement("div", { className: "flex items-center justify-between p-3 bg-black/40 rounded-md border border-[var(--cr-accent-orange)] shadow-[0_0_10px_var(--cr-accent-orange)]" },
|
|
31
|
+
React.createElement("div", { className: "flex items-center gap-3" },
|
|
32
|
+
React.createElement("div", { className: "w-10 h-10 rounded-full bg-[var(--cr-accent-orange)]/20 flex items-center justify-center relative" },
|
|
33
|
+
React.createElement("div", { className: "absolute inset-0 rounded-full border border-[var(--cr-accent-orange)] animate-ping opacity-50" }),
|
|
34
|
+
React.createElement(Mic, { size: 20, className: "text-[var(--cr-accent-orange)] z-10" })),
|
|
35
|
+
React.createElement("div", { className: "flex flex-col" },
|
|
36
|
+
React.createElement("span", { className: "text-xs text-[var(--cr-accent-orange)] font-mono" }, "Microphone Active"),
|
|
37
|
+
React.createElement("span", { className: "text-sm text-[var(--cr-reverse-white)] font-mono" }, "Capturing epistemic audio stream..."))),
|
|
38
|
+
onAudioStop && (React.createElement("button", { onClick: onAudioStop, className: "p-2 rounded-md hover:bg-white/10 transition-colors text-gray-400 hover:text-white", title: "Stop Audio Capture" },
|
|
39
|
+
React.createElement(StopCircle, { size: 24 }))))),
|
|
40
|
+
textCaptureEnabled && (React.createElement("div", { className: "flex flex-col gap-2 p-3 bg-black/40 rounded-md border border-[var(--cr-glass-box-gray)] focus-within:border-[var(--cr-accent-cyan)] focus-within:shadow-[0_0_10px_var(--cr-accent-cyan)] transition-all" },
|
|
41
|
+
React.createElement("div", { className: "flex items-center gap-2 mb-1" },
|
|
42
|
+
React.createElement(Type, { size: 16, className: "text-gray-400" }),
|
|
43
|
+
React.createElement("span", { className: "text-xs text-gray-400 font-mono" }, "Text Telemetry Input")),
|
|
44
|
+
React.createElement("textarea", { className: "w-full bg-transparent text-sm text-[var(--cr-reverse-white)] font-sans resize-none outline-none placeholder:text-gray-600 min-h-[60px]", placeholder: "Enter multimodal text telemetry...", value: currentText, onChange: (e) => onTextChange === null || onTextChange === void 0 ? void 0 : onTextChange(e.target.value), onKeyDown: (e) => {
|
|
45
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
if (currentText.trim() && onSubmitText) {
|
|
48
|
+
onSubmitText(currentText);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} }),
|
|
52
|
+
React.createElement("div", { className: "flex justify-end mt-1" },
|
|
53
|
+
React.createElement("button", { className: "text-xs font-mono text-[var(--cr-accent-cyan)] hover:text-white px-3 py-1 rounded border border-[var(--cr-accent-cyan)] hover:bg-[var(--cr-accent-cyan)]/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed", disabled: !currentText.trim(), onClick: () => {
|
|
54
|
+
if (currentText.trim() && onSubmitText) {
|
|
55
|
+
onSubmitText(currentText);
|
|
56
|
+
}
|
|
57
|
+
} }, "SUBMIT"))))),
|
|
58
|
+
!audioCaptureEnabled && !textCaptureEnabled && !videoCaptureEnabled && (React.createElement("div", { className: "text-xs text-gray-500 font-mono text-center py-4" }, "Capture mechanisms suspended"))));
|
|
59
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface MultimodalProjectionProps {
|
|
3
|
+
projectedAvatarUrn?: string | null;
|
|
4
|
+
projectedAudioUrn?: string | null;
|
|
5
|
+
projectedOverlayText?: string | null;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const MultimodalProjection: React.FC<MultimodalProjectionProps>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Copyright (c) 2026 CoReason, Inc
|
|
2
|
+
//
|
|
3
|
+
// This software is proprietary and dual-licensed
|
|
4
|
+
// Licensed under the Prosperity Public License 3.0 (the "License")
|
|
5
|
+
// A copy of the license is available at <https://prosperitylicense.com/versions/3.0.0>
|
|
6
|
+
// For details, see the LICENSE file
|
|
7
|
+
// Commercial use beyond a 30-day trial requires a separate license
|
|
8
|
+
//
|
|
9
|
+
// Source Code: <https://github.com/CoReason-AI/coreason-runtime>
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { cn } from './GlassBox';
|
|
12
|
+
import { User, Volume2, AlignLeft } from 'lucide-react';
|
|
13
|
+
export const MultimodalProjection = ({ projectedAvatarUrn, projectedAudioUrn, projectedOverlayText, className }) => {
|
|
14
|
+
return (React.createElement("div", { className: cn('flex flex-col gap-4 p-4 bg-[var(--cr-glass-box-black)] border border-[var(--cr-glass-box-gray)] rounded-lg shadow-lg', className) },
|
|
15
|
+
React.createElement("h3", { className: "text-sm font-mono text-[var(--cr-reverse-white)] border-b border-[var(--cr-glass-box-gray)] pb-2 mb-2 flex items-center gap-2" },
|
|
16
|
+
React.createElement(User, { size: 16, className: "text-[var(--cr-accent-cyan)]" }),
|
|
17
|
+
"Multimodal Projection"),
|
|
18
|
+
React.createElement("div", { className: "flex flex-col gap-4" },
|
|
19
|
+
projectedAvatarUrn && (React.createElement("div", { className: "flex items-center gap-3 p-3 bg-black/40 rounded-md border border-[var(--cr-glass-box-gray)]" },
|
|
20
|
+
React.createElement("div", { className: "w-12 h-12 rounded-full bg-[var(--cr-glass-box-gray)] flex items-center justify-center overflow-hidden" },
|
|
21
|
+
React.createElement(User, { size: 24, className: "text-[var(--cr-reverse-white)] opacity-50" })),
|
|
22
|
+
React.createElement("div", { className: "flex flex-col" },
|
|
23
|
+
React.createElement("span", { className: "text-xs text-gray-400 font-mono" }, "Avatar Projection"),
|
|
24
|
+
React.createElement("span", { className: "text-sm text-[var(--cr-reverse-white)] font-mono truncate max-w-[200px]", title: projectedAvatarUrn }, projectedAvatarUrn)))),
|
|
25
|
+
projectedAudioUrn && (React.createElement("div", { className: "flex items-center gap-3 p-3 bg-black/40 rounded-md border border-[var(--cr-glass-box-gray)]" },
|
|
26
|
+
React.createElement("div", { className: "w-10 h-10 rounded-full bg-[var(--cr-glass-box-gray)] flex items-center justify-center" },
|
|
27
|
+
React.createElement(Volume2, { size: 20, className: "text-[var(--cr-accent-cyan)] animate-pulse" })),
|
|
28
|
+
React.createElement("div", { className: "flex flex-col flex-1" },
|
|
29
|
+
React.createElement("span", { className: "text-xs text-gray-400 font-mono" }, "Audio Stream"),
|
|
30
|
+
React.createElement("span", { className: "text-sm text-[var(--cr-reverse-white)] font-mono truncate max-w-[200px]", title: projectedAudioUrn }, projectedAudioUrn),
|
|
31
|
+
React.createElement("audio", { src: `/api/v1/assets/${projectedAudioUrn}`, autoPlay: true, className: "hidden" })))),
|
|
32
|
+
projectedOverlayText && (React.createElement("div", { className: "flex items-start gap-3 p-3 bg-black/40 rounded-md border border-[var(--cr-glass-box-gray)]" },
|
|
33
|
+
React.createElement("div", { className: "w-10 h-10 rounded-md bg-[var(--cr-glass-box-gray)] flex items-center justify-center shrink-0" },
|
|
34
|
+
React.createElement(AlignLeft, { size: 20, className: "text-[var(--cr-reverse-white)]" })),
|
|
35
|
+
React.createElement("div", { className: "flex flex-col" },
|
|
36
|
+
React.createElement("span", { className: "text-xs text-gray-400 font-mono mb-1" }, "Spatial Overlay Text"),
|
|
37
|
+
React.createElement("p", { className: "text-sm text-[var(--cr-reverse-white)] font-sans leading-relaxed" }, projectedOverlayText))))),
|
|
38
|
+
!projectedAvatarUrn && !projectedAudioUrn && !projectedOverlayText && (React.createElement("div", { className: "text-xs text-gray-500 font-mono text-center py-4" }, "No multimodal projections active"))));
|
|
39
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface QuorumAdjudicatorProps {
|
|
3
|
+
epistemicGapId: string;
|
|
4
|
+
question: string;
|
|
5
|
+
experts: {
|
|
6
|
+
id: string;
|
|
7
|
+
role: string;
|
|
8
|
+
status: 'VOTED' | 'DEBATING' | 'PENDING';
|
|
9
|
+
vote?: string;
|
|
10
|
+
}[];
|
|
11
|
+
onVote: (vote: string) => void;
|
|
12
|
+
onSeal: () => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* QuorumAdjudicator
|
|
16
|
+
*
|
|
17
|
+
* Target Persona: Team Leader / Principal Investigator
|
|
18
|
+
* Concept: Multi-Human "Group Think" Swarm Adjudication
|
|
19
|
+
* Replaces singular AI overrides with multi-player cryptographic consensus.
|
|
20
|
+
*/
|
|
21
|
+
export declare const QuorumAdjudicator: React.FC<QuorumAdjudicatorProps>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Copyright (c) 2026 CoReason, Inc
|
|
2
|
+
//
|
|
3
|
+
// This software is proprietary and dual-licensed
|
|
4
|
+
// Licensed under the Prosperity Public License 3.0 (the "License")
|
|
5
|
+
// A copy of the license is available at <https://prosperitylicense.com/versions/3.0.0>
|
|
6
|
+
// For details, see the LICENSE file
|
|
7
|
+
// Commercial use beyond a 30-day trial requires a separate license
|
|
8
|
+
//
|
|
9
|
+
// Source Code: <https://github.com/CoReason-AI/coreason-sensory-core>
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { GlassBox } from './GlassBox';
|
|
12
|
+
/**
|
|
13
|
+
* QuorumAdjudicator
|
|
14
|
+
*
|
|
15
|
+
* Target Persona: Team Leader / Principal Investigator
|
|
16
|
+
* Concept: Multi-Human "Group Think" Swarm Adjudication
|
|
17
|
+
* Replaces singular AI overrides with multi-player cryptographic consensus.
|
|
18
|
+
*/
|
|
19
|
+
export const QuorumAdjudicator = ({ epistemicGapId, question, experts, onVote, onSeal }) => {
|
|
20
|
+
const allVoted = experts.every(e => e.status === 'VOTED');
|
|
21
|
+
return (React.createElement(GlassBox, { className: "border border-[var(--cr-accent-orange)] shadow-[0_0_15px_rgba(255,107,53,0.2)]" },
|
|
22
|
+
React.createElement("div", { className: "flex flex-col space-y-4" },
|
|
23
|
+
React.createElement("div", { className: "flex items-center justify-between" },
|
|
24
|
+
React.createElement("div", { className: "flex items-center space-x-2" },
|
|
25
|
+
React.createElement("span", { className: "relative flex h-3 w-3" },
|
|
26
|
+
React.createElement("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-[var(--cr-accent-orange)] opacity-75" }),
|
|
27
|
+
React.createElement("span", { className: "relative inline-flex rounded-full h-3 w-3 bg-[var(--cr-accent-orange)]" })),
|
|
28
|
+
React.createElement("h3", { className: "text-sm font-semibold text-white uppercase tracking-wider" }, "War Room: Epistemic Gap")),
|
|
29
|
+
React.createElement("span", { className: "text-xs font-mono text-gray-500" }, epistemicGapId)),
|
|
30
|
+
React.createElement("p", { className: "text-gray-300 text-sm italic border-l-2 border-[var(--cr-accent-orange)] pl-3" },
|
|
31
|
+
"\"",
|
|
32
|
+
question,
|
|
33
|
+
"\""),
|
|
34
|
+
React.createElement("div", { className: "flex flex-col space-y-2 mt-4" },
|
|
35
|
+
React.createElement("h4", { className: "text-xs text-gray-400 uppercase tracking-widest mb-1" }, "Expert Quorum"),
|
|
36
|
+
experts.map(expert => (React.createElement("div", { key: expert.id, className: "flex justify-between items-center bg-[var(--cr-glass-box-black)] p-2 rounded" },
|
|
37
|
+
React.createElement("div", { className: "flex items-center space-x-3" },
|
|
38
|
+
React.createElement("div", { className: `w-2 h-2 rounded-full ${expert.status === 'VOTED' ? 'bg-green-500' : expert.status === 'DEBATING' ? 'bg-yellow-500' : 'bg-gray-600'}` }),
|
|
39
|
+
React.createElement("span", { className: "text-sm text-gray-200" }, expert.role)),
|
|
40
|
+
React.createElement("span", { className: "text-xs font-mono text-gray-400" }, expert.vote ? `[${expert.vote}]` : 'AWAITING_CONSENSUS'))))),
|
|
41
|
+
React.createElement("div", { className: "flex space-x-2 pt-2" },
|
|
42
|
+
React.createElement("button", { onClick: () => onVote('APPROVE'), className: "flex-1 bg-transparent border border-gray-600 text-white text-xs py-2 rounded hover:bg-gray-800 transition-colors" }, "Vote: Inject Premise"),
|
|
43
|
+
React.createElement("button", { onClick: onSeal, disabled: !allVoted, className: `flex-1 text-xs py-2 rounded transition-colors font-semibold ${allVoted
|
|
44
|
+
? 'bg-[var(--cr-accent-orange)] text-black hover:bg-orange-600'
|
|
45
|
+
: 'bg-gray-800 text-gray-500 cursor-not-allowed'}` }, "Cryptographic Seal")))));
|
|
46
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface SensoryUnfolderProps {
|
|
3
|
+
urn: string;
|
|
4
|
+
data: any;
|
|
5
|
+
fallback?: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* AGENT INSTRUCTION: This core component performs the recursive JIT unfolding of nested URN visual geometries.
|
|
9
|
+
* CAUSAL AFFORDANCE: Dynamically maps standard URN strings to their corresponding React/WebGL visual enclaves.
|
|
10
|
+
* EPISTEMIC BOUNDS: Gracefully handles missing URN mappings via a localized error boundary and fallback mechanism.
|
|
11
|
+
* MCP ROUTING TRIGGERS: Sensory, Unfolding, JIT, Hot-Swap, URN Registry.
|
|
12
|
+
*/
|
|
13
|
+
export declare const SensoryUnfolder: React.FC<SensoryUnfolderProps>;
|