react-state-basis 0.4.1 → 0.4.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks.ts","../src/core/logger.ts","../src/core/math.ts","../src/core/constants.ts","../src/engine.ts","../src/context.tsx","../src/ui/BasisHUD.tsx","../src/ui/config.ts"],"sourcesContent":["// src/hooks.ts\nimport * as React from 'react';\nimport {\n useState as reactUseState,\n useEffect as reactUseEffect,\n useMemo as reactUseMemo,\n useReducer as reactUseReducer,\n useContext as reactUseContext,\n useSyncExternalStore as reactUseSyncExternalStore,\n createContext as reactCreateContext,\n useRef as reactUseRef,\n useLayoutEffect as reactUseLayoutEffect,\n useCallback as reactUseCallback,\n useTransition as reactUseTransition,\n useDeferredValue as reactUseDeferredValue,\n use as reactUse,\n useOptimistic as reactUseOptimistic,\n useActionState as reactUseActionState\n} from 'react';\n\nimport { registerVariable, unregisterVariable, recordUpdate, beginEffectTracking, endEffectTracking, config } from './engine';\nimport * as engine from './engine';\n\nlet anonCount = 0;\nconst getFallbackLabel = (type: string) => `anon_${type}_${anonCount++}`;\n\ntype GetReducerState<R extends React.Reducer<any, any>> = R extends React.Reducer<infer S, any> ? S : never;\ntype GetReducerAction<R extends React.Reducer<any, any>> = R extends React.Reducer<any, infer A> ? A : never;\n\nexport function useState<S>(initialState: S | (() => S), label?: string): [S, React.Dispatch<React.SetStateAction<S>>] {\n const [val, setVal] = reactUseState(initialState);\n\n const effectiveLabel = reactUseRef(label || getFallbackLabel('state')).current;\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const setter = reactUseCallback((newValue: any) => {\n if (recordUpdate(effectiveLabel)) {\n setVal(newValue);\n }\n }, [effectiveLabel]);\n\n return [val, setter];\n}\n\nexport function useRef<T>(initialValue: T): React.RefObject<T>;\nexport function useRef<T>(initialValue: T | null): React.RefObject<T>;\nexport function useRef<T = undefined>(): React.MutableRefObject<T | undefined>;\nexport function useRef<T>(initialValue?: T, _label?: string): any { return reactUseRef(initialValue); }\n\nexport function useReducer<R extends React.Reducer<any, any>, I>(\n reducer: R,\n initialArg: I,\n init?: any,\n label?: string\n): [GetReducerState<R>, React.Dispatch<GetReducerAction<R>>] {\n\n const isLazyInit = typeof init === 'function';\n const providedLabel = isLazyInit ? label : (typeof init === 'string' ? init : undefined);\n const effectiveLabel = reactUseRef(providedLabel || getFallbackLabel('reducer')).current;\n\n const [state, dispatch] = reactUseReducer(\n reducer,\n initialArg,\n isLazyInit ? init : undefined\n );\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const basisDispatch = reactUseCallback((action: any) => {\n if (recordUpdate(effectiveLabel)) {\n dispatch(action);\n }\n }, [effectiveLabel]);\n\n return [state, basisDispatch] as any;\n}\n\nexport function useMemo<T>(factory: () => T, deps: React.DependencyList | undefined, label?: string): T {\n const effectiveLabel = label || 'anonymous_projection';\n reactUseEffect(() => { if (config.debug) console.log(`%c [Basis] Valid Projection: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\"); }, [effectiveLabel]);\n return reactUseMemo(factory, deps || []);\n}\n\nexport function useCallback<T extends (...args: any[]) => any>(callback: T, deps: React.DependencyList, label?: string): T {\n const effectiveLabel = label || 'anonymous_callback';\n reactUseEffect(() => { if (config.debug) console.log(`%c [Basis] Stable Callback: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\"); }, [effectiveLabel]);\n return reactUseCallback(callback, deps);\n}\n\nexport function useEffect(effect: React.EffectCallback, deps?: React.DependencyList, label?: string) {\n const effectiveLabel = label || 'anonymous_effect';\n reactUseEffect(() => { beginEffectTracking(effectiveLabel); const cleanup = effect(); endEffectTracking(); return cleanup; }, deps);\n}\n\nexport function useLayoutEffect(effect: React.EffectCallback, deps?: React.DependencyList, label?: string) {\n const effectiveLabel = label || 'anonymous_layout_effect';\n reactUseLayoutEffect(() => { beginEffectTracking(effectiveLabel); const cleanup = effect(); endEffectTracking(); return cleanup; }, deps);\n}\n\nexport function useTransition(_label?: string): [boolean, (callback: () => void) => void] {\n const [isPending, startTransition] = reactUseTransition();\n const effectiveLabel = _label || 'anonymous_transition';\n const basisStartTransition = (callback: () => void) => {\n if (config.debug) console.log(`%c [Basis] Transition Started: \"${effectiveLabel}\" `, \"color: #e67e22; font-weight: bold;\");\n startTransition(callback);\n };\n return [isPending, basisStartTransition];\n}\n\nexport function useDeferredValue<T>(value: T, initialValueOrLabel?: T | string, label?: string): T {\n const isLabelAsSecondArg = typeof initialValueOrLabel === 'string' && label === undefined;\n const actualInitialValue = isLabelAsSecondArg ? undefined : initialValueOrLabel as T;\n const effectiveLabel = isLabelAsSecondArg ? (initialValueOrLabel as string) : (label || 'anonymous_deferred');\n const deferredValue = reactUseDeferredValue(value, actualInitialValue);\n reactUseEffect(() => { if (config.debug && value !== deferredValue) console.log(`%c [Basis] Value Deferred: \"${effectiveLabel}\" `, \"color: #e67e22; font-weight: bold;\"); }, [value, deferredValue, effectiveLabel]);\n return deferredValue;\n}\n\nexport function createContext<T>(defaultValue: T, label?: string): React.Context<T> {\n const context = reactCreateContext(defaultValue);\n if (label) (context as any)._basis_label = label;\n return context;\n}\n\nexport const useContext = reactUseContext;\nexport const useId = (label?: string) => React.useId();\nexport const useDebugValue = React.useDebugValue;\nexport const useImperativeHandle = React.useImperativeHandle;\nexport const useInsertionEffect = React.useInsertionEffect;\nexport const useSyncExternalStore = (reactUseSyncExternalStore as any);\n\nexport function use<T>(usable: React.Usable<T>): T {\n return reactUse(usable);\n}\n\nexport function useOptimistic<S, P>(\n passthrough: S,\n reducer?: (state: S, payload: P) => S,\n label?: string\n): [S, (payload: P) => void] {\n const effectiveLabel = label || 'anonymous_optimistic';\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const [state, reactAddOptimistic] = (React as any).useOptimistic(passthrough, reducer) as [S, (p: P) => void];\n\n const addOptimistic = reactUseCallback((payload: P) => {\n if (recordUpdate(effectiveLabel)) {\n reactAddOptimistic(payload);\n }\n }, [effectiveLabel, reactAddOptimistic]);\n\n return [state, addOptimistic];\n}\n\nexport function useActionState<State, Payload>(\n action: (state: State, payload: Payload) => Promise<State> | State,\n initialState: State,\n permalink?: string,\n label?: string\n): [state: State, dispatch: (payload: Payload) => void, isPending: boolean] {\n\n const isLabelAsThirdArg = typeof permalink === 'string' && label === undefined;\n const actualPermalink = isLabelAsThirdArg ? undefined : permalink;\n const effectiveLabel = isLabelAsThirdArg ? (permalink as string) : (label || 'anonymous_action_state');\n\n const [state, reactDispatch, isPending] = (React as any).useActionState(\n action,\n initialState,\n actualPermalink\n ) as [State, (p: Payload) => void, boolean];\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => unregisterVariable(effectiveLabel);\n }, [effectiveLabel]);\n\n const basisDispatch = reactUseCallback((payload: Payload) => {\n if (recordUpdate(effectiveLabel)) {\n reactDispatch(payload);\n }\n }, [effectiveLabel, reactDispatch]);\n\n return [state, basisDispatch, isPending];\n}\n\nexport const __test__ = { registerVariable, unregisterVariable, recordUpdate, beginEffectTracking, endEffectTracking, history: (engine as any).history, currentTickBatch: (engine as any).currentTickBatch };","// src/core/logger.ts\n\nconst isWeb = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\nconst LAST_LOG_TIMES = new Map<string, number>();\nconst LOG_COOLDOWN = 5000; // 5 seconds between same alerts\n\nconst STYLES = {\n basis: \"background: #6c5ce7; color: white; font-weight: bold; padding: 2px 6px; border-radius: 3px;\",\n version: \"background: #a29bfe; color: #2d3436; padding: 2px 6px; border-radius: 3px; margin-left: -4px;\",\n headerRed: \"background: #d63031; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerBlue: \"background: #0984e3; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerGreen: \"background: #00b894; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n label: \"background: #dfe6e9; color: #2d3436; padding: 0 4px; border-radius: 3px; font-family: monospace; font-weight: bold; border: 1px solid #b2bec3;\",\n location: \"color: #0984e3; font-family: monospace; font-weight: bold;\",\n codeBlock: \"background: #1e1e1e; color: #9cdcfe; padding: 8px 12px; display: block; margin: 4px 0; border-left: 3px solid #00b894; font-family: monospace; line-height: 1.4; border-radius: 0 3px 3px 0;\",\n subText: \"color: #636e72; font-size: 11px;\",\n bold: \"font-weight: bold;\"\n};\n\nconst parseLabel = (label: string) => {\n const parts = label.split(' -> ');\n return { file: parts[0] || \"Unknown\", name: parts[1] || label };\n};\n\nconst shouldLog = (key: string) => {\n const now = Date.now();\n const last = LAST_LOG_TIMES.get(key) || 0;\n\n if (now - last > LOG_COOLDOWN) {\n LAST_LOG_TIMES.set(key, now);\n\n if (LAST_LOG_TIMES.size > 100) {\n const cutoff = now - 3600000; // 1 hour\n for (const [k, v] of LAST_LOG_TIMES.entries()) {\n if (v < cutoff) LAST_LOG_TIMES.delete(k);\n }\n }\n return true;\n }\n return false;\n};\n\nexport const displayBootLog = (windowSize: number) => {\n if (!isWeb) return;\n console.log(\n `%cBasis%cAuditor%c | Temporal Analysis Active (Window: ${windowSize})`,\n STYLES.basis, STYLES.version, \"color: #636e72; font-style: italic; margin-left: 8px;\"\n );\n};\n\nexport const displayRedundancyAlert = (labelA: string, labelB: string, sim: number) => {\n if (!isWeb || !shouldLog(`redundant-${labelA}-${labelB}`)) return;\n\n const infoA = parseLabel(labelA);\n const infoB = parseLabel(labelB);\n\n console.group(`%c šŸ“ BASIS | REDUNDANT PATTERN `, STYLES.headerRed);\n console.log(`%cšŸ“ Location: %c${infoA.file}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cObservation:%c %c${infoA.name}%c and %c${infoB.name}%c move together.\\n` +\n `%cOne is likely a direct mirror of the other. Confidence: ${(sim * 100).toFixed(0)}%`,\n STYLES.bold,\n \"\",\n STYLES.label,\n \"\",\n STYLES.label,\n \"\",\n STYLES.subText\n );\n\n console.log(\n `%cAction:%c Refactor %c${infoB.name}%c to useMemo.`,\n \"color: #00b894; font-weight: bold;\", \"\", \"color: #e84393; font-weight: bold;\", \"\"\n );\n console.groupEnd();\n};\n\nexport const displayCausalHint = (targetLabel: string, sourceLabel: string, method: 'math' | 'tracking' = 'math') => {\n const key = `causal-${sourceLabel}-${targetLabel}`;\n if (!isWeb || !shouldLog(key)) return;\n\n const target = parseLabel(targetLabel);\n const source = parseLabel(sourceLabel);\n\n console.groupCollapsed(\n `%c šŸ’” BASIS | ${method === 'math' ? 'DETECTED' : 'TRACKED'} SYNC LEAK `,\n STYLES.headerBlue\n );\n console.log(`%cšŸ“ Location: %c${target.file}`, STYLES.bold, STYLES.location);\n console.log(\n `%cFlow:%c %c${source.name}%c āž” Effect āž” %c${target.name}%c`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n console.log(\n `%cContext:%c ${method === 'math'\n ? 'The engine detected a consistent 20ms lag between these updates.'\n : 'This was caught during React effect execution.'}\\n` +\n `%cResult:%c This creates a %cDouble Render Cycle%c.`,\n STYLES.bold, \"\", STYLES.bold, \"\", \"color: #d63031; font-weight: bold;\", \"\"\n );\n console.groupEnd();\n};\n\nexport const displayInfiniteLoop = (label: string) => {\n if (!isWeb) return;\n const info = parseLabel(label);\n console.group(`%c šŸ›‘ BASIS CRITICAL | CIRCUIT BREAKER `, STYLES.headerRed);\n console.error(`Infinite oscillation on: %c${info.name}%c`, \"color: white; background: #d63031; padding: 2px 4px;\", \"\");\n console.groupEnd();\n};\n\nexport const displayHealthReport = (\n history: Map<string, number[]>,\n similarityFn: (A: number[], B: number[]) => number,\n threshold: number\n) => {\n const entries = Array.from(history.entries());\n const totalVars = entries.length;\n if (totalVars === 0) return;\n\n const clusters: string[][] = [];\n const processed = new Set<string>();\n let independentCount = 0;\n\n entries.forEach(([labelA, vecA]) => {\n if (processed.has(labelA)) return;\n const currentCluster = [labelA];\n processed.add(labelA);\n entries.forEach(([labelB, vecB]) => {\n if (labelA === labelB || processed.has(labelB)) return;\n const sim = similarityFn(vecA, vecB);\n if (sim > threshold) {\n currentCluster.push(labelB);\n processed.add(labelB);\n }\n });\n if (currentCluster.length > 1) {\n clusters.push(currentCluster);\n } else {\n independentCount++;\n }\n });\n\n const systemRank = independentCount + clusters.length;\n const healthScore = (systemRank / totalVars) * 100;\n\n if (isWeb) {\n console.group(`%c šŸ“Š BASIS | ARCHITECTURAL HEALTH REPORT `, STYLES.headerGreen);\n console.log(\n `%cArchitectural Health Score: %c${healthScore.toFixed(1)}% %c(State Distribution: ${systemRank}/${totalVars})`,\n STYLES.bold,\n `color: ${healthScore > 85 ? '#00b894' : '#d63031'}; font-size: 16px; font-weight: bold;`,\n \"color: #636e72; font-style: italic;\"\n );\n\n if (clusters.length > 0) {\n console.log(`%cDetected ${clusters.length} Synchronized Update Clusters:`, \"font-weight: bold; color: #e17055; margin-top: 10px;\");\n clusters.forEach((cluster, idx) => {\n const names = cluster.map(l => parseLabel(l).name).join(' ⟷ ');\n console.log(` %c${idx + 1}%c ${names}`, \"background: #e17055; color: white; border-radius: 50%; padding: 0 5px;\", \"font-family: monospace;\");\n });\n console.log(\"%cšŸ’” Action: Variables in a cluster move together. Try refactoring them into a single state object or use useMemo for derived values.\", STYLES.subText);\n } else {\n console.log(\"%c✨ All state variables have optimal distribution. Your Basis is healthy.\", \"color: #00b894; font-weight: bold; margin-top: 10px;\");\n }\n\n if (totalVars > 0 && totalVars < 15) {\n console.groupCollapsed(\"%cView Full Correlation Matrix\", \"color: #636e72; font-size: 11px;\");\n const matrix: any = {};\n entries.forEach(([labelA]) => {\n const nameA = parseLabel(labelA).name;\n matrix[nameA] = {};\n entries.forEach(([labelB]) => {\n const nameB = parseLabel(labelB).name;\n const sim = similarityFn(history.get(labelA)!, history.get(labelB)!);\n matrix[nameA][nameB] = sim > threshold ? `āŒ ${(sim * 100).toFixed(0)}%` : `āœ…`;\n });\n });\n console.table(matrix);\n console.groupEnd();\n }\n console.groupEnd();\n } else {\n console.log(`[BASIS HEALTH] Score: ${healthScore.toFixed(1)}% (State Distribution: ${systemRank}/${totalVars})`);\n }\n};","// src/core/math.ts\n\nexport const calculateSimilarityWithOffset = (\n A: number[],\n B: number[],\n offsetA: number,\n offsetB: number,\n length: number\n): number => {\n let dot = 0;\n let magA = 0;\n let magB = 0;\n\n for (let i = 0; i < length; i++) {\n const valA = A[i + offsetA];\n const valB = B[i + offsetB];\n\n dot += valA * valB;\n magA += valA * valA;\n magB += valB * valB;\n }\n\n if (magA === 0 || magB === 0) return 0;\n\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n};\n\n\nexport const calculateCosineSimilarity = (A: number[], B: number[]): number => {\n return calculateSimilarityWithOffset(A, B, 0, 0, A.length);\n};","// src/core/constants.ts\n\nexport const WINDOW_SIZE = 50;\nexport const SIMILARITY_THRESHOLD = 0.88;\nexport const LOOP_THRESHOLD = 150;\nexport const LOOP_WINDOW_MS = 1000;\nexport const ANALYSIS_INTERVAL = 5;\n\nexport const VOLATILITY_THRESHOLD = 25;","// src/engine.ts\n\nimport * as UI from './core/logger';\nimport { calculateSimilarityWithOffset, calculateCosineSimilarity } from './core/math';\nimport {\n WINDOW_SIZE,\n SIMILARITY_THRESHOLD,\n LOOP_THRESHOLD,\n LOOP_WINDOW_MS,\n ANALYSIS_INTERVAL,\n VOLATILITY_THRESHOLD\n} from './core/constants';\n\ninterface BasisEngineState {\n config: { debug: boolean };\n history: Map<string, number[]>;\n currentTickBatch: Set<string>;\n redundantLabels: Set<string>;\n booted: boolean;\n updateLog: { label: string; ts: number }[];\n tick: number;\n isBatching: boolean;\n currentEffectSource: string | null;\n}\n\nconst GLOBAL_KEY = '__BASIS_ENGINE_INSTANCE__';\n\nconst getGlobalInstance = (): BasisEngineState => {\n const g = (typeof window !== 'undefined' ? window : global) as any;\n if (!g[GLOBAL_KEY]) {\n g[GLOBAL_KEY] = {\n config: { debug: false },\n history: new Map<string, number[]>(),\n currentTickBatch: new Set<string>(),\n redundantLabels: new Set<string>(),\n booted: false,\n updateLog: [],\n tick: 0,\n isBatching: false,\n currentEffectSource: null\n };\n }\n return g[GLOBAL_KEY];\n};\n\nconst instance = getGlobalInstance();\n\nexport const config = instance.config;\nexport const history = instance.history;\nexport const currentTickBatch = instance.currentTickBatch;\nexport const redundantLabels = instance.redundantLabels;\n\nexport const configureBasis = (newConfig: Partial<{ debug: boolean }>) => {\n Object.assign(instance.config, newConfig);\n\n if (instance.config.debug && !instance.booted) {\n UI.displayBootLog(WINDOW_SIZE);\n instance.booted = true;\n }\n};\n\n/**\n * HELPER: Compares two vectors across three temporal planes:\n * 1. Sync (Same 20ms window)\n * 2. Lag A (B follows A) (A happens at T, B happens at T+1)\n * 3. Lag B (A follows B) (B happens at T, A happens at T+1)\n */\nconst getTemporalSimilarity = (vecA: number[], vecB: number[]) => {\n const L = vecA.length;\n\n const sync = calculateSimilarityWithOffset(vecA, vecB, 0, 0, L);\n const bFollowsA = calculateSimilarityWithOffset(vecA, vecB, 0, 1, L - 1);\n const aFollowsB = calculateSimilarityWithOffset(vecA, vecB, 1, 0, L - 1);\n\n return { sync, bFollowsA, aFollowsB };\n};\n\nconst getPulseDensity = (vec: number[]): number => {\n let sum = 0;\n for (let i = 0; i < vec.length; i++) sum += vec[i];\n return sum;\n};\n\nconst analyzeBasis = () => {\n if (!instance.config.debug) {\n instance.redundantLabels.clear();\n return;\n }\n\n const entries = Array.from(instance.history.entries()).map(([label, vec]) => ({\n label,\n vec,\n density: getPulseDensity(vec)\n })).filter(e => e.density >= 2);\n\n if (entries.length < 2) return;\n\n const newRedundant = new Set<string>();\n\n for (let i = 0; i < entries.length; i++) {\n for (let j = i + 1; j < entries.length; j++) {\n const entryA = entries[i];\n const entryB = entries[j];\n\n const { sync, bFollowsA, aFollowsB } = getTemporalSimilarity(entryA.vec, entryB.vec);\n const maxSim = Math.max(sync, bFollowsA, aFollowsB);\n\n if (maxSim > SIMILARITY_THRESHOLD) {\n const isBothVolatile = entryA.density > VOLATILITY_THRESHOLD && entryB.density > VOLATILITY_THRESHOLD;\n\n if (sync === maxSim) {\n // HEURISTIC: If both are high-frequency streams (e.g. 60fps), \n // we suppress \"Redundancy\" alerts because the relationship is likely intentional/hardware-driven.\n if (!isBothVolatile) {\n newRedundant.add(entryA.label);\n newRedundant.add(entryB.label);\n UI.displayRedundancyAlert(entryA.label, entryB.label, sync);\n }\n }\n else if (bFollowsA === maxSim) {\n // We NEVER suppress Causal Hints. If a high-density stream \n // triggers another variable, that is ALWAYS a performance leak.\n UI.displayCausalHint(entryB.label, entryA.label, 'math');\n }\n else if (aFollowsB === maxSim) {\n UI.displayCausalHint(entryA.label, entryB.label, 'math');\n }\n }\n }\n }\n\n instance.redundantLabels.clear();\n newRedundant.forEach(label => instance.redundantLabels.add(label));\n};\n\nexport const recordUpdate = (label: string): boolean => {\n if (!instance.config.debug) return true;\n\n const now = Date.now();\n\n // CIRCUIT BREAKER\n instance.updateLog.push({ label, ts: now });\n\n if (instance.updateLog.length > 200) {\n instance.updateLog = instance.updateLog.filter(e => now - e.ts < LOOP_WINDOW_MS);\n }\n\n const updateCount = instance.updateLog.filter(e => e.label === label).length;\n\n if (updateCount > LOOP_THRESHOLD) {\n UI.displayInfiniteLoop(label);\n return false;\n }\n\n // DIRECT CAUSAL TRACKING\n if (instance.currentEffectSource && instance.currentEffectSource !== label) {\n UI.displayCausalHint(label, instance.currentEffectSource, 'tracking');\n }\n\n instance.currentTickBatch.add(label);\n\n if (!instance.isBatching) {\n instance.isBatching = true;\n\n setTimeout(() => {\n instance.tick++;\n\n instance.history.forEach((vec, l) => {\n vec.shift();\n vec.push(instance.currentTickBatch.has(l) ? 1 : 0);\n });\n\n instance.currentTickBatch.clear();\n instance.isBatching = false;\n\n if (instance.tick % ANALYSIS_INTERVAL === 0) {\n analyzeBasis();\n }\n }, 20);\n }\n\n return true;\n};\n\n// LIFECYCLE \nexport const beginEffectTracking = (label: string) => {\n if (instance.config.debug) instance.currentEffectSource = label;\n};\n\nexport const endEffectTracking = () => {\n instance.currentEffectSource = null;\n};\n\nexport const registerVariable = (label: string) => {\n if (!instance.config.debug) return;\n\n if (!instance.history.has(label)) {\n instance.history.set(label, new Array(WINDOW_SIZE).fill(0));\n }\n};\n\nexport const unregisterVariable = (label: string) => {\n instance.history.delete(label);\n};\n\nexport const printBasisHealthReport = (threshold = 0.5) => {\n if (!instance.config.debug) {\n console.warn(\"[Basis] Cannot generate report. Debug mode is OFF.\");\n return;\n }\n UI.displayHealthReport(instance.history, calculateCosineSimilarity, threshold);\n};\n\nif (typeof window !== 'undefined') {\n (window as any).printBasisReport = printBasisHealthReport;\n}\n\nexport const __testEngine__ = {\n instance,\n config: instance.config,\n history: instance.history,\n currentTickBatch: instance.currentTickBatch,\n configureBasis,\n registerVariable,\n recordUpdate,\n printBasisHealthReport,\n beginEffectTracking,\n endEffectTracking,\n};","// src/context.tsx\n\nimport React, { createContext, useContext, ReactNode, useLayoutEffect } from 'react';\nimport { configureBasis } from './engine';\nimport { BasisHUD } from './ui/BasisHUD';\n\nconst BasisContext = createContext({ debug: false });\nconst isWeb = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\ninterface BasisProviderProps {\n children: ReactNode;\n debug?: boolean;\n}\n\nexport const BasisProvider: React.FC<BasisProviderProps> = ({ children, debug = true }) => {\n useLayoutEffect(() => {\n configureBasis({ debug });\n if (isWeb) {\n (window as any)._basis_debug = debug;\n }\n }, [debug]);\n\n return (\n <BasisContext.Provider value={{ debug }}>\n {children}\n {(debug && isWeb) && <BasisHUD />}\n </BasisContext.Provider>\n );\n};\n\nexport const useBasisConfig = () => useContext(BasisContext);","// src/ui/BasisHUD.tsx\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { history, redundantLabels } from '../engine';\nimport { HUD_DIMENSIONS as DIM, getHUDContainerStyle, HUD_THEME as THEME } from './config';\n\nexport const BasisHUD: React.FC = () => {\n const [isExpanded, setIsExpanded] = useState(false);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n if (!isExpanded) return;\n\n let animationFrame: number;\n\n const draw = () => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const entries = Array.from(history.entries());\n const dpr = window.devicePixelRatio || 1;\n\n const rawWidth = (DIM.WINDOW_SIZE * DIM.COL_WIDTH) + DIM.LABEL_WIDTH + (DIM.PADDING * 2);\n const rawHeight = Math.max(entries.length * DIM.ROW_HEIGHT + (DIM.PADDING * 2), 60);\n\n updateCanvasSize(canvas, rawWidth, rawHeight, dpr);\n\n ctx.save();\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, rawWidth, rawHeight);\n\n if (entries.length === 0) {\n renderEmptyState(ctx);\n } else {\n renderMatrix(ctx, entries);\n }\n\n ctx.restore();\n animationFrame = requestAnimationFrame(draw);\n };\n\n draw();\n return () => cancelAnimationFrame(animationFrame);\n }, [isExpanded]);\n\n return (\n <div style={getHUDContainerStyle(isExpanded)} onClick={() => setIsExpanded(!isExpanded)}>\n <HUDHeader isExpanded={isExpanded} />\n {isExpanded && (\n <div style={{ padding: '10px 14px 15px 14px' }}>\n <canvas ref={canvasRef} style={{ display: 'block' }} />\n <HUDFooter />\n </div>\n )}\n </div>\n );\n};\n\nfunction updateCanvasSize(canvas: HTMLCanvasElement, w: number, h: number, dpr: number) {\n const targetW = Math.floor(w * dpr);\n const targetH = Math.floor(h * dpr);\n if (canvas.width !== targetW || canvas.height !== targetH) {\n canvas.width = targetW;\n canvas.height = targetH;\n canvas.style.width = `${w}px`;\n canvas.style.height = `${h}px`;\n }\n}\n\nfunction renderEmptyState(ctx: CanvasRenderingContext2D) {\n ctx.fillStyle = THEME.textDim;\n ctx.font = '11px Inter, sans-serif';\n ctx.fillText('Waiting for state transitions...', DIM.PADDING, 30);\n}\n\nfunction renderMatrix(ctx: CanvasRenderingContext2D, entries: [string, number[]][]) {\n entries.forEach(([label, vector], rowIndex) => {\n const y = rowIndex * DIM.ROW_HEIGHT + DIM.PADDING;\n const stateName = label.split(' -> ')[1] || label;\n\n // v0.4.1 Volatility Logic\n const density = vector.reduce((acc, bit) => acc + bit, 0);\n const isVolatile = density > 25;\n const isRedundant = redundantLabels.has(label);\n\n vector.forEach((bit, colIndex) => {\n const x = colIndex * DIM.COL_WIDTH + DIM.PADDING;\n ctx.fillStyle = bit === 1\n ? (isRedundant ? THEME.error : THEME.success)\n : THEME.grid;\n\n const w = DIM.COL_WIDTH - 1.5;\n const h = DIM.ROW_HEIGHT - 4;\n\n if (ctx.roundRect) {\n ctx.beginPath();\n ctx.roundRect(x, y, w, h, DIM.RADIUS);\n ctx.fill();\n } else {\n ctx.fillRect(x, y, w, h);\n }\n });\n\n const textX = (DIM.WINDOW_SIZE * DIM.COL_WIDTH) + DIM.PADDING + 10;\n\n ctx.fillStyle = isRedundant\n ? THEME.error\n : (isVolatile ? THEME.success : THEME.text);\n\n ctx.font = `${(isRedundant || isVolatile) ? '600' : '400'} 11px Inter, Menlo, monospace`;\n\n let prefix = \"\";\n if (isRedundant) prefix = \"! \";\n else if (isVolatile) prefix = \"~ \";\n\n const cleanName = prefix + stateName;\n const truncatedName = cleanName.length > 18 ? cleanName.substring(0, 16) + '..' : cleanName;\n ctx.fillText(truncatedName, textX, y + 9);\n });\n}\n\nconst HUDHeader: React.FC<{ isExpanded: boolean }> = ({ isExpanded }) => (\n <div style={{\n padding: '10px 14px',\n backgroundColor: isExpanded ? THEME.header : 'transparent',\n color: isExpanded ? 'white' : THEME.header,\n fontWeight: 600, fontSize: '11px', letterSpacing: '0.05em',\n display: 'flex', justifyContent: 'space-between', alignItems: 'center',\n transition: 'background 0.3s'\n }}>\n <span>{isExpanded ? 'STATE BASIS MATRIX' : 'šŸ“ BASIS ACTIVE'}</span>\n {isExpanded && <span style={{ opacity: 0.8, fontSize: '9px' }}>R50</span>}\n </div>\n);\n\nconst HUDFooter: React.FC = () => (\n <div style={{\n marginTop: '12px', paddingTop: '8px', borderTop: `1px solid ${THEME.grid}`,\n color: THEME.textDim, fontSize: '9px', display: 'flex', justifyContent: 'space-between'\n }}>\n <span>LINEAR DEPENDENCY AUDIT</span>\n <span>THRESHOLD 0.88</span>\n </div>\n);\n","// src/ui/config.ts\n\nimport { WINDOW_SIZE } from '../core/constants';\n\nexport const HUD_DIMENSIONS = {\n WINDOW_SIZE,\n ROW_HEIGHT: 16,\n COL_WIDTH: 5,\n LABEL_WIDTH: 100,\n PADDING: 10,\n RADIUS: 1.5,\n};\n\nexport const HUD_THEME = {\n bg: 'rgba(15, 23, 42, 0.95)',\n border: '#334155',\n header: '#8b5cf6',\n text: '#f1f5f9',\n textDim: '#94a3b8',\n success: '#10b981',\n error: '#ef4444',\n grid: '#1e293b',\n};\n\nexport const getHUDContainerStyle = (isExpanded: boolean): React.CSSProperties => ({\n position: 'fixed',\n bottom: '20px',\n right: '20px',\n backgroundColor: HUD_THEME.bg,\n border: `1px solid ${HUD_THEME.border}`,\n borderRadius: '12px',\n backdropFilter: 'blur(8px)',\n boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.3), 0 8px 10px -6px rgba(0, 0, 0, 0.3)',\n zIndex: 999999,\n overflow: 'hidden',\n width: isExpanded ? '380px' : '130px',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n cursor: 'pointer',\n userSelect: 'none',\n WebkitUserSelect: 'none'\n});"],"mappings":"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","names":["history","useId","useDebugValue","useImperativeHandle","useInsertionEffect","useOptimistic","useActionState","useLayoutEffect","useEffect","useRef","useState","useState","useRef","useEffect","jsx","jsxs","isWeb","useLayoutEffect"]}
1
+ {"version":3,"sources":["../src/hooks.ts","../src/core/math.ts","../src/core/logger.ts","../src/core/constants.ts","../src/engine.ts","../src/context.tsx","../src/ui/BasisHUD.tsx","../src/ui/config.ts"],"sourcesContent":["// src/hooks.ts\n\nimport * as React from 'react';\nimport {\n useState as reactUseState,\n useEffect as reactUseEffect,\n useMemo as reactUseMemo,\n useReducer as reactUseReducer,\n useContext as reactUseContext,\n useSyncExternalStore as reactUseSyncExternalStore,\n createContext as reactCreateContext,\n useRef as reactUseRef,\n useLayoutEffect as reactUseLayoutEffect,\n useCallback as reactUseCallback,\n useTransition as reactUseTransition,\n useDeferredValue as reactUseDeferredValue,\n use as reactUse,\n useOptimistic as reactUseOptimistic,\n useActionState as reactUseActionState\n} from 'react';\n\nimport { registerVariable, unregisterVariable, recordUpdate, beginEffectTracking, endEffectTracking, config } from './engine';\nimport * as engine from './engine';\n\nlet anonCount = 0;\nconst getFallbackLabel = (type: string) => `anon_${type}_${anonCount++}`;\n\ntype GetReducerState<R extends React.Reducer<any, any>> = R extends React.Reducer<infer S, any> ? S : never;\ntype GetReducerAction<R extends React.Reducer<any, any>> = R extends React.Reducer<any, infer A> ? A : never;\n\nexport function useState<S>(initialState: S | (() => S), label?: string): [S, React.Dispatch<React.SetStateAction<S>>] {\n const [val, setVal] = reactUseState(initialState);\n const effectiveLabel = reactUseRef(label || getFallbackLabel('state')).current;\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => { unregisterVariable(effectiveLabel); };\n }, [effectiveLabel]);\n\n const setter = reactUseCallback((newValue: any) => {\n if (recordUpdate(effectiveLabel)) {\n setVal(newValue);\n }\n }, [effectiveLabel]);\n\n return [val, setter];\n}\n\nexport function useRef<T>(initialValue: T): React.RefObject<T>;\nexport function useRef<T>(initialValue: T | null): React.RefObject<T>;\nexport function useRef<T = undefined>(): React.MutableRefObject<T | undefined>;\nexport function useRef<T>(initialValue?: T, _label?: string): any { return reactUseRef(initialValue); }\n\nexport function useReducer<R extends React.Reducer<any, any>, I>(\n reducer: R,\n initialArg: I,\n init?: any,\n label?: string\n): [GetReducerState<R>, React.Dispatch<GetReducerAction<R>>] {\n\n const isLazyInit = typeof init === 'function';\n const providedLabel = isLazyInit ? label : (typeof init === 'string' ? init : undefined);\n const effectiveLabel = reactUseRef(providedLabel || getFallbackLabel('reducer')).current;\n\n const [state, dispatch] = reactUseReducer(\n reducer,\n initialArg,\n isLazyInit ? init : undefined\n );\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => { unregisterVariable(effectiveLabel); };\n }, [effectiveLabel]);\n\n const basisDispatch = reactUseCallback((action: any) => {\n if (recordUpdate(effectiveLabel)) {\n dispatch(action);\n }\n }, [effectiveLabel]);\n\n return [state, basisDispatch] as any;\n}\n\nexport function useMemo<T>(factory: () => T, deps: React.DependencyList | undefined, label?: string): T {\n const effectiveLabel = label || 'anonymous_projection';\n reactUseEffect(() => { if (config.debug) console.log(`%c [Basis] Valid Projection: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\"); }, [effectiveLabel]);\n return reactUseMemo(factory, deps || []);\n}\n\nexport function useCallback<T extends (...args: any[]) => any>(callback: T, deps: React.DependencyList, label?: string): T {\n const effectiveLabel = label || 'anonymous_callback';\n reactUseEffect(() => { if (config.debug) console.log(`%c [Basis] Stable Callback: \"${effectiveLabel}\" `, \"color: #2ecc71; font-weight: bold;\"); }, [effectiveLabel]);\n return reactUseCallback(callback, deps);\n}\n\nexport function useEffect(effect: React.EffectCallback, deps?: React.DependencyList, label?: string) {\n const effectiveLabel = label || 'anonymous_effect';\n reactUseEffect(() => { beginEffectTracking(effectiveLabel); const cleanup = effect(); endEffectTracking(); return cleanup; }, deps);\n}\n\nexport function useLayoutEffect(effect: React.EffectCallback, deps?: React.DependencyList, label?: string) {\n const effectiveLabel = label || 'anonymous_layout_effect';\n reactUseLayoutEffect(() => { beginEffectTracking(effectiveLabel); const cleanup = effect(); endEffectTracking(); return cleanup; }, deps);\n}\n\nexport function useTransition(_label?: string): [boolean, (callback: () => void) => void] {\n const [isPending, startTransition] = reactUseTransition();\n const effectiveLabel = _label || 'anonymous_transition';\n const basisStartTransition = (callback: () => void) => {\n if (config.debug) console.log(`%c [Basis] Transition Started: \"${effectiveLabel}\" `, \"color: #e67e22; font-weight: bold;\");\n startTransition(callback);\n };\n return [isPending, basisStartTransition];\n}\n\nexport function useDeferredValue<T>(value: T, initialValueOrLabel?: T | string, label?: string): T {\n const isLabelAsSecondArg = typeof initialValueOrLabel === 'string' && label === undefined;\n const actualInitialValue = isLabelAsSecondArg ? undefined : initialValueOrLabel as T;\n const effectiveLabel = isLabelAsSecondArg ? (initialValueOrLabel as string) : (label || 'anonymous_deferred');\n const deferredValue = reactUseDeferredValue(value, actualInitialValue);\n reactUseEffect(() => { if (config.debug && value !== deferredValue) console.log(`%c [Basis] Value Deferred: \"${effectiveLabel}\" `, \"color: #e67e22; font-weight: bold;\"); }, [value, deferredValue, effectiveLabel]);\n return deferredValue;\n}\n\nexport function createContext<T>(defaultValue: T, label?: string): React.Context<T> {\n const context = reactCreateContext(defaultValue);\n if (label) (context as any)._basis_label = label;\n return context;\n}\n\nexport const useContext = reactUseContext;\nexport const useId = (label?: string) => React.useId();\nexport const useDebugValue = React.useDebugValue;\nexport const useImperativeHandle = React.useImperativeHandle;\nexport const useInsertionEffect = React.useInsertionEffect;\nexport const useSyncExternalStore = (reactUseSyncExternalStore as any);\n\nexport function use<T>(usable: React.Usable<T>): T {\n return reactUse(usable);\n}\n\nexport function useOptimistic<S, P>(\n passthrough: S,\n reducer?: (state: S, payload: P) => S,\n label?: string\n): [S, (payload: P) => void] {\n const effectiveLabel = label || 'anonymous_optimistic';\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => { unregisterVariable(effectiveLabel); };\n }, [effectiveLabel]);\n\n const [state, reactAddOptimistic] = (React as any).useOptimistic(passthrough, reducer) as [S, (p: P) => void];\n\n const addOptimistic = reactUseCallback((payload: P) => {\n if (recordUpdate(effectiveLabel)) {\n reactAddOptimistic(payload);\n }\n }, [effectiveLabel, reactAddOptimistic]);\n\n return [state, addOptimistic];\n}\n\nexport function useActionState<State, Payload>(\n action: (state: State, payload: Payload) => Promise<State> | State,\n initialState: State,\n permalink?: string,\n label?: string\n): [state: State, dispatch: (payload: Payload) => void, isPending: boolean] {\n\n const isLabelAsThirdArg = typeof permalink === 'string' && label === undefined;\n const actualPermalink = isLabelAsThirdArg ? undefined : permalink;\n const effectiveLabel = isLabelAsThirdArg ? (permalink as string) : (label || 'anonymous_action_state');\n\n const [state, reactDispatch, isPending] = (React as any).useActionState(\n action,\n initialState,\n actualPermalink\n ) as [State, (p: Payload) => void, boolean];\n\n reactUseEffect(() => {\n registerVariable(effectiveLabel);\n return () => { unregisterVariable(effectiveLabel); };\n }, [effectiveLabel]);\n\n const basisDispatch = reactUseCallback((payload: Payload) => {\n if (recordUpdate(effectiveLabel)) {\n reactDispatch(payload);\n }\n }, [effectiveLabel, reactDispatch]);\n\n return [state, basisDispatch, isPending];\n}\n\nexport const __test__ = { registerVariable, unregisterVariable, recordUpdate, beginEffectTracking, endEffectTracking, history: (engine as any).history, currentTickBatch: (engine as any).currentTickBatch };","// src/core/math.ts\n\nexport const calculateSimilarityCircular = (\n bufferA: Uint8Array,\n headA: number,\n bufferB: Uint8Array,\n headB: number,\n offset: number\n): number => {\n const L = bufferA.length;\n let dot = 0;\n let magA = 0;\n let magB = 0;\n\n const headOffset = headB - headA + offset;\n\n for (let i = 0; i < L; i++) {\n const valA = bufferA[i];\n\n let iB = i + headOffset;\n if (iB < 0) iB += L;\n else if (iB >= L) iB -= L;\n\n const valB = bufferB[iB];\n\n dot += valA * valB;\n magA += valA * valA;\n magB += valB * valB;\n }\n\n if (magA === 0 || magB === 0) return 0;\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n};\n\nexport const calculateCosineSimilarity = (A: Uint8Array, B: Uint8Array): number => {\n let dot = 0, magA = 0, magB = 0;\n for (let i = 0; i < A.length; i++) {\n dot += A[i] * B[i];\n magA += A[i] * A[i];\n magB += B[i] * B[i];\n }\n return (magA === 0 || magB === 0) ? 0 : dot / (Math.sqrt(magA) * Math.sqrt(magB));\n};","// src/core/logger.ts\n\nimport { calculateCosineSimilarity } from \"./math\";\n\nconst isWeb = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\ninterface RingBufferMetadata {\n buffer: Uint8Array;\n head: number;\n options: any;\n}\n\nconst LAST_LOG_TIMES = new Map<string, number>();\nconst LOG_COOLDOWN = 5000; // 5 seconds suppression between identical alerts\n\nconst STYLES = {\n basis: \"background: #6c5ce7; color: white; font-weight: bold; padding: 2px 6px; border-radius: 3px;\",\n version: \"background: #a29bfe; color: #2d3436; padding: 2px 6px; border-radius: 3px; margin-left: -4px;\",\n headerRed: \"background: #d63031; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerBlue: \"background: #0984e3; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n headerGreen: \"background: #00b894; color: white; font-weight: bold; padding: 4px 8px; border-radius: 4px;\",\n label: \"background: #dfe6e9; color: #2d3436; padding: 0 4px; border-radius: 3px; font-family: monospace; font-weight: bold; border: 1px solid #b2bec3;\",\n location: \"color: #0984e3; font-family: monospace; font-weight: bold;\",\n impact: \"background: #f1f2f6; color: #2f3542; padding: 0 4px; border-radius: 3px; font-weight: bold;\",\n subText: \"color: #636e72; font-size: 11px;\",\n bold: \"font-weight: bold;\",\n actionMemo: \"color: #00b894; font-weight: bold; border: 1px solid #00b894; padding: 0 4px; border-radius: 3px;\",\n actionDelete: \"color: #d63031; font-weight: bold; border: 1px solid #d63031; padding: 0 4px; border-radius: 3px;\"\n};\n\nconst parseLabel = (label: string) => {\n const parts = label.split(' -> ');\n return { file: parts[0] || \"Unknown\", name: parts[1] || label };\n};\n\nconst shouldLog = (key: string) => {\n const now = Date.now();\n const last = LAST_LOG_TIMES.get(key) || 0;\n\n if (now - last > LOG_COOLDOWN) {\n LAST_LOG_TIMES.set(key, now);\n\n // Garbage collection for log times\n if (LAST_LOG_TIMES.size > 100) {\n const cutoff = now - 3600000; // 1 hour\n for (const [k, v] of LAST_LOG_TIMES.entries()) {\n if (v < cutoff) LAST_LOG_TIMES.delete(k);\n }\n }\n return true;\n }\n return false;\n};\n\nexport const displayBootLog = (windowSize: number) => {\n if (!isWeb) return;\n console.log(\n `%cBasis%cAuditor%c | Temporal Analysis Active (Window: ${windowSize})`,\n STYLES.basis, STYLES.version, \"color: #636e72; font-style: italic; margin-left: 8px;\"\n );\n};\n\nexport const displayRedundancyAlert = (labelA: string, labelB: string, sim: number) => {\n if (!isWeb || !shouldLog(`redundant-${labelA}-${labelB}`)) return;\n\n const infoA = parseLabel(labelA);\n const infoB = parseLabel(labelB);\n\n console.group(`%c ā™Š BASIS | TWIN STATE DETECTED `, STYLES.headerRed);\n console.log(`%cšŸ“ Location: %c${infoA.file}`, STYLES.bold, STYLES.location);\n\n console.log(\n `%cThe Rhythm:%c %c${infoA.name}%c and %c${infoB.name}%c are moving in perfect sync.\\n` +\n `%cThis indicates that one is a redundant shadow of the other. Confidence: ${(sim * 100).toFixed(0)}%`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\", STYLES.subText\n );\n\n console.log(\n `%cRecommended Fix:%c Derive %c${infoB.name}%c from %c${infoA.name}%c during the render pass.`,\n STYLES.bold, \"\", STYLES.actionMemo, \"\", STYLES.bold, \"\"\n );\n console.groupEnd();\n};\n\nexport const displayCausalHint = (targetLabel: string, sourceLabel: string, method: 'math' | 'tracking' = 'math') => {\n const key = `causal-${sourceLabel}-${targetLabel}`;\n if (!isWeb || !shouldLog(key)) return;\n\n const target = parseLabel(targetLabel);\n const source = parseLabel(sourceLabel);\n\n console.groupCollapsed(\n `%c ⚔ BASIS | DOUBLE RENDER CYCLE `,\n STYLES.headerBlue\n );\n console.log(`%cšŸ“ Location: %c${target.file}`, STYLES.bold, STYLES.location);\n console.log(\n `%cThe Rhythm:%c %c${source.name}%c pulses, then %c${target.name}%c pulses one frame later.`,\n STYLES.bold, \"\", STYLES.label, \"\", STYLES.label, \"\"\n );\n console.log(\n `%cThe Impact:%c You are forcing %c2 render passes%c for a single logical change.`,\n STYLES.bold, \"\", STYLES.impact, \"\"\n );\n console.log(\n `%cRecommended Fix:%c Remove the useEffect. Calculate %c${target.name}%c as a derived value or projection.`,\n STYLES.bold, \"\", STYLES.actionDelete, \"\"\n );\n console.groupEnd();\n};\n\nexport const displayViolentBreaker = (label: string, count: number, threshold: number) => {\n if (!isWeb) return;\n const parts = label.split(' -> ');\n\n console.group(\n `%c āš ļø CRITICAL SYSTEM ALERT | BASIS ENGINE `,\n 'background: #dc2626; color: white; font-weight: bold; padding: 8px 16px; font-size: 14px;'\n );\n console.error(\n `%c━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`,\n 'color: #dc2626; font-weight: bold;'\n );\n console.error(\n `%cINFINITE LOOP DETECTED\\n\\n` +\n `%cVariable: %c${parts[1] || label}\\n` +\n `%cUpdate Frequency: %c${count} updates/sec\\n` +\n `%cExpected Maximum: %c${threshold} updates\\n\\n` +\n `%c━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`,\n 'color: #dc2626; font-size: 16px; font-weight: bold;',\n 'color: #71717a; font-weight: bold;', `color: white; background: #dc2626; padding: 2px 8px;`,\n 'color: #71717a; font-weight: bold;', `color: #fbbf24; font-weight: bold;`,\n 'color: #71717a; font-weight: bold;', `color: #fbbf24; font-weight: bold;`,\n 'color: #dc2626; font-weight: bold;'\n );\n console.log(\n `%cDIAGNOSTICS:\\n` +\n `1. Check for setState inside the render body.\\n` +\n `2. Verify useEffect dependencies (missing or unstable refs).\\n` +\n `3. Look for circular chains (State A -> B -> A).\\n\\n` +\n `%cSYSTEM ACTION: Update BLOCKED. Fix your code to resume monitoring.`,\n 'color: #71717a;', 'color: #dc2626; font-weight: bold;'\n );\n console.groupEnd();\n};\n\nexport const displayHealthReport = (history: Map<string, RingBufferMetadata>, threshold: number) => {\n const entries = Array.from(history.entries());\n const totalVars = entries.length;\n if (totalVars === 0) return;\n\n const clusters: string[][] = [];\n const processed = new Set<string>();\n let independentCount = 0;\n\n // Decompose subspaces\n entries.forEach(([labelA, metaA]) => {\n if (processed.has(labelA)) return;\n const currentCluster = [labelA];\n processed.add(labelA);\n entries.forEach(([labelB, metaB]) => {\n if (labelA === labelB || processed.has(labelB)) return;\n const sim = calculateCosineSimilarity(metaA.buffer, metaB.buffer);\n if (sim > threshold) {\n currentCluster.push(labelB);\n processed.add(labelB);\n }\n });\n if (currentCluster.length > 1) clusters.push(currentCluster); else independentCount++;\n });\n\n const systemRank = independentCount + clusters.length;\n const healthScore = (systemRank / totalVars) * 100;\n\n if (isWeb) {\n console.group(`%c šŸ“Š BASIS | ARCHITECTURAL HEALTH REPORT `, STYLES.headerGreen);\n console.log(\n `%cSystem Efficiency: %c${healthScore.toFixed(1)}% %c(Basis Vectors: ${systemRank} / Total Hooks: ${totalVars})`,\n STYLES.bold,\n `color: ${healthScore > 85 ? '#00b894' : '#d63031'}; font-size: 16px; font-weight: bold;`,\n \"color: #636e72; font-style: italic;\"\n );\n\n if (clusters.length > 0) {\n console.log(`%cDetected ${clusters.length} Entangled Clusters:`, \"font-weight: bold; color: #e17055; margin-top: 10px;\");\n clusters.forEach((cluster, idx) => {\n const names = cluster.map(l => parseLabel(l).name).join(' ⟷ ');\n console.log(` %c${idx + 1}%c ${names}`, \"background: #e17055; color: white; border-radius: 50%; padding: 0 5px;\", \"font-family: monospace;\");\n });\n console.log(\"%cšŸ’” Analysis: These variables are mirrored. Storing them separately creates unnecessary work for React.\", STYLES.subText);\n } else {\n console.log(\"%c✨ All state variables are independent. Your architectural Basis is healthy.\", \"color: #00b894; font-weight: bold; margin-top: 10px;\");\n }\n\n if (totalVars > 0 && totalVars < 20) {\n console.groupCollapsed(\"%cView Full Correlation Matrix\", \"color: #636e72; font-size: 11px;\");\n const matrix: any = {};\n entries.forEach(([labelA, metaA]) => {\n const nameA = parseLabel(labelA).name;\n matrix[nameA] = {};\n entries.forEach(([labelB, metaB]) => {\n const nameB = parseLabel(labelB).name;\n const sim = calculateCosineSimilarity(metaA.buffer, metaB.buffer);\n matrix[nameA][nameB] = sim > threshold ? `āŒ ${(sim * 100).toFixed(0)}%` : `āœ…`;\n });\n });\n console.table(matrix);\n console.groupEnd();\n }\n console.groupEnd();\n }\n};","// src/core/constants.ts\n\nexport const WINDOW_SIZE = 50;\nexport const SIMILARITY_THRESHOLD = 0.88;\nexport const LOOP_THRESHOLD = 150;\nexport const LOOP_WINDOW_MS = 1000;\nexport const ANALYSIS_INTERVAL = 5;\n\nexport const VOLATILITY_THRESHOLD = 25;","// src/engine.ts\n\nimport * as UI from './core/logger';\nimport { calculateSimilarityCircular } from './core/math';\nimport {\n WINDOW_SIZE,\n SIMILARITY_THRESHOLD,\n LOOP_THRESHOLD,\n ANALYSIS_INTERVAL,\n VOLATILITY_THRESHOLD\n} from './core/constants';\n\nexport interface StateOptions { label?: string; suppressAll?: boolean; }\ninterface RingBufferMetadata { buffer: Uint8Array; head: number; options: StateOptions; }\ninterface PerformanceMetrics { lastAnalysisTimeMs: number; comparisonCount: number; lastAnalysisTimestamp: number; }\n\ninterface BasisEngineState {\n config: { debug: boolean };\n history: Map<string, RingBufferMetadata>;\n currentTickBatch: Set<string>;\n redundantLabels: Set<string>;\n booted: boolean;\n tick: number;\n isBatching: boolean;\n currentEffectSource: string | null;\n pausedVariables: Set<string>;\n metrics: PerformanceMetrics;\n alertCount: number;\n loopCounters: Map<string, number>;\n lastCleanup: number;\n}\n\nconst BASIS_INSTANCE_KEY = Symbol.for('__basis_engine_instance__');\n\nconst getGlobalInstance = (): BasisEngineState => {\n const root = globalThis as any;\n if (!root[BASIS_INSTANCE_KEY]) {\n root[BASIS_INSTANCE_KEY] = {\n config: { debug: false },\n history: new Map(),\n currentTickBatch: new Set(),\n redundantLabels: new Set(),\n booted: false,\n tick: 0,\n isBatching: false,\n currentEffectSource: null,\n pausedVariables: new Set(),\n metrics: { lastAnalysisTimeMs: 0, comparisonCount: 0, lastAnalysisTimestamp: 0 },\n alertCount: 0,\n loopCounters: new Map(),\n lastCleanup: Date.now()\n };\n }\n return root[BASIS_INSTANCE_KEY];\n};\n\nconst instance = getGlobalInstance();\nexport const { config, history, redundantLabels, currentTickBatch } = instance;\n\n// Internal registries\nlet currentTickRegistry: Record<string, boolean> = {};\nconst dirtyLabels = new Set<string>();\n\n/**\n * HEURISTIC ANALYSIS (O(D * N))\n * Runs in idle time to detect architectural debt.\n */\nconst analyzeBasis = () => {\n if (!instance.config.debug) {\n instance.redundantLabels.clear();\n return;\n }\n\n const scheduler = (globalThis as any).requestIdleCallback || ((cb: any) => setTimeout(cb, 1));\n\n scheduler(() => {\n const analysisStart = performance.now();\n if (dirtyLabels.size === 0) return;\n\n const allEntries: { label: string; meta: RingBufferMetadata; density: number }[] = [];\n const dirtyEntries: { label: string; meta: RingBufferMetadata; density: number }[] = [];\n\n // Pre-pass\n instance.history.forEach((meta, label) => {\n if (meta.options.suppressAll) return;\n let density = 0;\n for (let k = 0; k < meta.buffer.length; k++) density += meta.buffer[k];\n if (density >= 2) {\n const entry = { label, meta, density };\n allEntries.push(entry);\n if (dirtyLabels.has(label)) dirtyEntries.push(entry);\n }\n });\n\n if (dirtyEntries.length === 0 || allEntries.length < 2) {\n dirtyLabels.clear();\n return;\n }\n\n const nextRedundant = new Set<string>();\n let compCount = 0;\n\n // Persist existing redundancy for non-moving parts\n instance.redundantLabels.forEach(l => { if (!dirtyLabels.has(l)) nextRedundant.add(l); });\n\n // Pairwise Reactive Loop\n for (const dirtyEntry of dirtyEntries) {\n for (const otherEntry of allEntries) {\n if (dirtyEntry.label === otherEntry.label) continue;\n\n // Zero Double-Math\n if (dirtyLabels.has(otherEntry.label) && dirtyEntry.label > otherEntry.label) continue;\n\n compCount++;\n const sync = calculateSimilarityCircular(dirtyEntry.meta.buffer, dirtyEntry.meta.head, otherEntry.meta.buffer, otherEntry.meta.head, 0);\n const bA = calculateSimilarityCircular(dirtyEntry.meta.buffer, dirtyEntry.meta.head, otherEntry.meta.buffer, otherEntry.meta.head, 1);\n const aB = calculateSimilarityCircular(dirtyEntry.meta.buffer, dirtyEntry.meta.head, otherEntry.meta.buffer, otherEntry.meta.head, -1);\n const maxSim = Math.max(sync, bA, aB);\n\n if (maxSim > SIMILARITY_THRESHOLD) {\n const bothVolatile = dirtyEntry.density > VOLATILITY_THRESHOLD && otherEntry.density > VOLATILITY_THRESHOLD;\n if (sync === maxSim && !bothVolatile) {\n nextRedundant.add(dirtyEntry.label); nextRedundant.add(otherEntry.label);\n UI.displayRedundancyAlert(dirtyEntry.label, otherEntry.label, sync);\n } else if (bA === maxSim) UI.displayCausalHint(otherEntry.label, dirtyEntry.label, 'math');\n else if (aB === maxSim) UI.displayCausalHint(dirtyEntry.label, otherEntry.label, 'math');\n }\n }\n }\n\n dirtyLabels.clear();\n instance.redundantLabels.clear();\n nextRedundant.forEach(l => instance.redundantLabels.add(l));\n instance.metrics.lastAnalysisTimeMs = performance.now() - analysisStart;\n instance.metrics.comparisonCount = compCount;\n instance.metrics.lastAnalysisTimestamp = Date.now();\n });\n};\n\nconst processHeartbeat = () => {\n instance.tick++;\n instance.history.forEach((meta, label) => {\n meta.buffer[meta.head] = instance.currentTickBatch.has(label) ? 1 : 0;\n meta.head = (meta.head + 1) % WINDOW_SIZE;\n });\n instance.currentTickBatch.clear();\n currentTickRegistry = {};\n instance.isBatching = false;\n if (instance.tick % ANALYSIS_INTERVAL === 0) analyzeBasis();\n};\n\n/**\n * INTERCEPTION LAYER\n * Called by hook proxies to record state pulses.\n */\nexport const recordUpdate = (label: string): boolean => {\n if (!instance.config.debug) return true;\n if (instance.pausedVariables.has(label)) return false;\n\n const now = Date.now();\n if (now - instance.lastCleanup > 1000) {\n instance.loopCounters.clear();\n instance.lastCleanup = now;\n }\n\n const count = (instance.loopCounters.get(label) || 0) + 1;\n instance.loopCounters.set(label, count);\n\n // SECURITY: HARD CIRCUIT BREAKER\n if (count > LOOP_THRESHOLD) {\n UI.displayViolentBreaker(label, count, LOOP_THRESHOLD);\n instance.pausedVariables.add(label);\n return false;\n }\n\n // CAUSAL TRACKING\n if (instance.currentEffectSource && instance.currentEffectSource !== label) {\n UI.displayCausalHint(label, instance.currentEffectSource, 'tracking');\n }\n\n // PERFORMANCE: ATOMIC BAILOUT\n if (currentTickRegistry[label]) return true;\n\n currentTickRegistry[label] = true;\n instance.currentTickBatch.add(label);\n dirtyLabels.add(label);\n\n if (!instance.isBatching) {\n instance.isBatching = true;\n requestAnimationFrame(processHeartbeat);\n }\n\n return true;\n};\n\n// --- LIFECYCLE ---\n\nexport const configureBasis = (c: any) => {\n Object.assign(instance.config, c);\n if (instance.config.debug && !instance.booted) {\n UI.displayBootLog(WINDOW_SIZE);\n instance.booted = true;\n }\n};\n\nexport const registerVariable = (l: string, o: StateOptions = {}) => {\n if (!instance.config.debug || o.suppressAll) return;\n if (!instance.history.has(l)) {\n instance.history.set(l, { buffer: new Uint8Array(WINDOW_SIZE), head: 0, options: o });\n }\n};\n\nexport const unregisterVariable = (l: string) => {\n instance.history.delete(l);\n};\n\nexport const beginEffectTracking = (l: string) => {\n if (instance.config.debug) instance.currentEffectSource = l;\n};\n\nexport const endEffectTracking = () => {\n instance.currentEffectSource = null;\n};\n\n/**\n * DISPLAY: window.printBasisReport()\n */\nexport const printBasisHealthReport = (threshold = 0.5) => {\n if (!instance.config.debug) {\n console.warn('[Basis] Cannot generate report. Debug mode is OFF.');\n return;\n }\n UI.displayHealthReport(instance.history, threshold);\n};\n\nexport const getBasisMetrics = () => ({\n engine: 'v0.4.2 (Ring Buffer)',\n hooks: instance.history.size,\n load: instance.metrics.comparisonCount,\n analysis_ms: instance.metrics.lastAnalysisTimeMs.toFixed(3)\n});\n\n// Global Attachments\nif (typeof window !== 'undefined') {\n (window as any).printBasisReport = printBasisHealthReport;\n (window as any).getBasisMetrics = getBasisMetrics;\n}\n\nexport const __testEngine__ = {\n instance,\n history: instance.history,\n configureBasis,\n registerVariable,\n unregisterVariable,\n recordUpdate,\n printBasisHealthReport,\n beginEffectTracking,\n endEffectTracking\n};","// src/context.tsx\n\nimport React, { createContext, useContext, ReactNode, useLayoutEffect } from 'react';\nimport { configureBasis } from './engine';\nimport { BasisHUD } from './ui/BasisHUD';\n\nconst BasisContext = createContext({ debug: false });\nconst isWeb = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\ninterface BasisProviderProps {\n children: ReactNode;\n debug?: boolean;\n}\n\nexport const BasisProvider: React.FC<BasisProviderProps> = ({ children, debug = true }) => {\n useLayoutEffect(() => {\n configureBasis({ debug });\n if (isWeb) {\n (window as any)._basis_debug = debug;\n }\n }, [debug]);\n\n return (\n <BasisContext.Provider value={{ debug }}>\n {children}\n {(debug && isWeb) && <BasisHUD />}\n </BasisContext.Provider>\n );\n};\n\nexport const useBasisConfig = () => useContext(BasisContext);","// src/ui/BasisHUD.tsx\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { history, redundantLabels } from '../engine';\nimport { HUD_DIMENSIONS as DIM, getHUDContainerStyle, HUD_THEME as THEME } from './config';\n\nexport const BasisHUD: React.FC = () => {\n const [isExpanded, setIsExpanded] = useState(false);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n if (!isExpanded) return;\n\n let animationFrame: number;\n let isMounted = true;\n\n const draw = () => {\n if (!isMounted) return;\n\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const entries = Array.from(history.entries());\n const dpr = window.devicePixelRatio || 1;\n\n const rawWidth = DIM.WINDOW_SIZE * DIM.COL_WIDTH + DIM.LABEL_WIDTH + DIM.PADDING * 2;\n const rawHeight = Math.max(entries.length * DIM.ROW_HEIGHT + DIM.PADDING * 2, 60);\n\n updateCanvasSize(canvas, rawWidth, rawHeight, dpr);\n\n ctx.save();\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, rawWidth, rawHeight);\n\n if (entries.length === 0) {\n renderEmptyState(ctx);\n } else {\n renderMatrix(ctx, entries);\n }\n\n ctx.restore();\n animationFrame = requestAnimationFrame(draw);\n };\n\n draw();\n\n return () => {\n isMounted = false;\n cancelAnimationFrame(animationFrame);\n };\n }, [isExpanded]);\n\n return (\n <div style={getHUDContainerStyle(isExpanded)} onClick={() => setIsExpanded(!isExpanded)}>\n <HUDHeader isExpanded={isExpanded} />\n {isExpanded && (\n <div style={{ padding: '10px 14px 15px 14px' }}>\n <canvas ref={canvasRef} style={{ display: 'block' }} />\n <HUDFooter />\n </div>\n )}\n </div>\n );\n};\n\nfunction updateCanvasSize(canvas: HTMLCanvasElement, w: number, h: number, dpr: number) {\n const targetW = Math.floor(w * dpr);\n const targetH = Math.floor(h * dpr);\n if (canvas.width !== targetW || canvas.height !== targetH) {\n canvas.width = targetW;\n canvas.height = targetH;\n canvas.style.width = `${w}px`;\n canvas.style.height = `${h}px`;\n }\n}\n\nfunction renderEmptyState(ctx: CanvasRenderingContext2D) {\n ctx.fillStyle = THEME.textDim;\n ctx.font = '11px Inter, sans-serif';\n ctx.fillText('Waiting for state transitions...', DIM.PADDING, 30);\n}\n\nfunction renderMatrix(ctx: CanvasRenderingContext2D, entries: [string, any][]) {\n const L = DIM.WINDOW_SIZE;\n const colW = DIM.COL_WIDTH;\n const rowH = DIM.ROW_HEIGHT;\n const pad = DIM.PADDING;\n const cellW = colW - 1.5;\n const cellH = rowH - 4;\n\n // 1. BATCH THE PATHS\n const gridPath = new Path2D();\n const successPath = new Path2D();\n const errorPath = new Path2D();\n\n ctx.font = \"11px Inter, Menlo, monospace\";\n\n let rowIndex = 0;\n for (const [label, meta] of entries) {\n const y = rowIndex * rowH + pad;\n const isRedundant = redundantLabels.has(label);\n const { buffer, head } = meta;\n\n let uiPos = 0;\n\n const addToPath = (val: number, xIdx: number) => {\n const x = xIdx * colW + pad;\n if (val === 1) {\n (isRedundant ? errorPath : successPath).rect(x, y, cellW, cellH);\n } else {\n gridPath.rect(x, y, cellW, cellH);\n }\n };\n\n // Part 1: Head to End (Old data)\n for (let i = head; i < L; i++) addToPath(buffer[i], uiPos++);\n // Part 2: Start to Head (New data)\n for (let i = 0; i < head; i++) addToPath(buffer[i], uiPos++);\n\n // 2. LABELS\n const stateName = label.split(' -> ')[1] || label;\n const textX = (L * colW) + pad + 10;\n\n // We only recalculate density here because it's for UI only\n let density = 0;\n for (let i = 0; i < L; i++) density += buffer[i];\n const isVolatile = density > 25;\n\n ctx.fillStyle = isRedundant ? THEME.error : (isVolatile ? THEME.success : THEME.text);\n ctx.fillText((isRedundant ? \"! \" : isVolatile ? \"~ \" : \"\") + stateName, textX, y + 9);\n\n rowIndex++;\n }\n\n // 3. EXECUTE ONLY 3 DRAWS\n ctx.fillStyle = THEME.grid; ctx.fill(gridPath);\n ctx.fillStyle = THEME.success; ctx.fill(successPath);\n ctx.fillStyle = THEME.error; ctx.fill(errorPath);\n}\n\nconst HUDHeader: React.FC<{ isExpanded: boolean }> = ({ isExpanded }) => (\n <div\n style={{\n padding: '10px 14px',\n backgroundColor: isExpanded ? THEME.header : 'transparent',\n color: isExpanded ? 'white' : THEME.header,\n fontWeight: 600,\n fontSize: '11px',\n letterSpacing: '0.05em',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n transition: 'background 0.3s',\n }}\n >\n <span>{isExpanded ? 'STATE BASIS MATRIX' : 'šŸ“ BASIS ACTIVE'}</span>\n {isExpanded && <span style={{ opacity: 0.8, fontSize: '9px' }}>v0.4.2</span>}\n </div>\n);\n\nconst HUDFooter: React.FC = () => (\n <div\n style={{\n marginTop: '12px',\n paddingTop: '8px',\n borderTop: `1px solid ${THEME.grid}`,\n color: THEME.textDim,\n fontSize: '9px',\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n <span>RING BUFFER ENGINE</span>\n <span>ZERO ALLOC</span>\n </div>\n);","// src/ui/config.ts\n\nimport { WINDOW_SIZE } from '../core/constants';\n\nexport const HUD_DIMENSIONS = {\n WINDOW_SIZE,\n ROW_HEIGHT: 16,\n COL_WIDTH: 5,\n LABEL_WIDTH: 100,\n PADDING: 10,\n RADIUS: 1.5,\n};\n\nexport const HUD_THEME = {\n bg: 'rgba(15, 23, 42, 0.95)',\n border: '#334155',\n header: '#8b5cf6',\n text: '#f1f5f9',\n textDim: '#94a3b8',\n success: '#10b981',\n error: '#ef4444',\n grid: '#1e293b',\n};\n\nexport const getHUDContainerStyle = (isExpanded: boolean): React.CSSProperties => ({\n position: 'fixed',\n bottom: '20px',\n right: '20px',\n backgroundColor: HUD_THEME.bg,\n border: `1px solid ${HUD_THEME.border}`,\n borderRadius: '12px',\n backdropFilter: 'blur(8px)',\n boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.3), 0 8px 10px -6px rgba(0, 0, 0, 0.3)',\n zIndex: 999999,\n overflow: 'hidden',\n width: isExpanded ? '380px' : '130px',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n cursor: 'pointer',\n userSelect: 'none',\n WebkitUserSelect: 'none'\n});"],"mappings":"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","names":["history","useId","useDebugValue","useImperativeHandle","useInsertionEffect","useOptimistic","useActionState","useLayoutEffect","useEffect","useRef","useState","useState","useRef","useEffect","jsx","jsxs","isWeb","useLayoutEffect"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-state-basis",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "Runtime state profiler for React that detects redundant state, update chains, and infinite loops by tracking when state updates happen.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",