@signaltree/guardrails 4.0.12

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/guardrails.ts","../src/lib/rules.ts"],"names":["isFunction","value","isString","isObjectLike","resolveEnabledFlag","option","undefined","supportsMiddleware","tree","candidate","addTap","removeTap","tryStructuredClone","cloneFn","globalThis","structuredClone","isDevEnvironment","__DEV__","process","env","ngDevMode","Boolean","MAX_TIMING_SAMPLES","RECOMPUTATION_WINDOW_MS","withGuardrails","config","enabled","console","warn","stats","createRuntimeStats","context","issues","hotPaths","currentUpdate","suppressed","timings","hotPathData","Map","issueMap","signalUsage","memoryHistory","recomputationLog","disposed","middlewareId","treeId","Math","random","toString","slice","middleware","createGuardrailsMiddleware","stopMonitoring","startMonitoring","teardown","originalDestroy","destroy","bind","createAPI","updateCount","totalUpdateTime","avgUpdateTime","p50UpdateTime","p95UpdateTime","p99UpdateTime","maxUpdateTime","recomputationCount","recomputationsPerSecond","signalCount","signalRetention","unreadSignalCount","memoryGrowthRate","hotPathCount","violationCount","id","before","action","payload","state","metadata","extractMetadata","shouldSuppressUpdate","details","collectUpdateDetails","startTime","performance","now","detail","analyzePreUpdate","after","_action","_payload","_previousState","newState","pending","duration","max","timestamp","Date","recomputations","length","updateTimingStats","index","entries","latest","getValueAtPath","segments","diffRatio","calculateDiffRatio","oldValue","analyzePostUpdate","trackHotPath","path","trackSignalUsage","updateSignalStats","recordRecomputations","updatePercentiles","sorted","sort","a","b","floor","newValue","isComparableRecord","Object","is","oldKeys","Set","keys","newKeys","allKeys","changed","key","has","size","customRules","rule","evaluateRule","isPrimary","budgets","addIssue","type","severity","message","toFixed","count","minDiff","analysis","minDiffForParentReplace","warnParentReplace","pathKey","Array","isArray","join","windowMs","data","get","lastUpdate","durations","set","push","threshold","updatesPerSecond","p95","avg","reduce","sum","d","updateHotPath","heatScore","min","downstreamEffects","avgDuration","p95Duration","entry","updates","lastSeen","retentionWindow","memoryLeaks","checkInterval","historyWindow","staleCount","values","filter","baseline","growth","i","hotPath","existing","find","h","assign","topN","ruleContext","handleFailure","name","result","test","Promise","then","outcome","catch","error","issue","reporting","aggregateWarnings","mode","Error","suppressGuardrails","suppression","respectMetadata","autoSuppress","intent","source","some","interval","setInterval","clearInterval","checkMemory","maybeReport","retentionThreshold","growthThreshold","growthRate","exceedsRetention","exceedsGrowth","report","generateReport","customReporter","reportToConsole","clear","verbose","group","logIssues","logHotPaths","logVerboseStats","groupEnd","prefix","getSeverityPrefix","countSuffix","log","hp","memoryCurrent","memoryLimit","maxMemory","recomputationCurrent","recomputationLimit","maxRecomputations","updateTime","createBudgetItem","memory","from","recommendations","generateRecommendations","current","limit","usage","status","getReport","getStats","suppress","fn","was","dispose","finalReport","stateSnapshot","visit","currentState","captureValue","child","segment","isPlainObject","proto","getPrototypeOf","prototype","shift","rules","noDeepNesting","maxDepth","description","ctx","tags","noFunctionsInState","noCacheInPersistence","includes","maxPayloadSize","maxKB","JSON","stringify","kb","noSensitiveData","sensitiveKeys","toLowerCase"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SignalTree Guardrails Enhancer v1.1\n * Development-only performance monitoring and anti-pattern detection\n * @packageDocumentation\n */\n\nimport type { Middleware, SignalTree } from '@signaltree/core';\n\nimport type {\n GuardrailsConfig,\n GuardrailsAPI,\n GuardrailsReport,\n RuntimeStats,\n GuardrailIssue,\n HotPath,\n UpdateMetadata,\n RuleContext,\n BudgetStatus,\n BudgetItem,\n GuardrailRule,\n} from './types';\n\n// Dev environment detection\ndeclare const __DEV__: boolean | undefined;\ndeclare const ngDevMode: boolean | undefined;\ndeclare const process:\n | {\n env?: Record<string, string | undefined>;\n }\n | undefined;\n\ntype EnabledOption = boolean | (() => boolean);\n\ntype MiddlewareCapableTree<T extends Record<string, unknown>> =\n SignalTree<T> & {\n addTap: (middleware: Middleware<T>) => void;\n removeTap: (id: string) => void;\n };\n\nfunction isFunction<T extends (...args: never[]) => unknown>(\n value: unknown\n): value is T {\n return typeof value === 'function';\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction resolveEnabledFlag(option?: EnabledOption): boolean {\n if (option === undefined) {\n return true;\n }\n if (isFunction<() => boolean>(option)) {\n try {\n return option();\n } catch {\n return true;\n }\n }\n return option;\n}\n\nfunction supportsMiddleware<T extends Record<string, unknown>>(\n tree: SignalTree<T>\n): tree is MiddlewareCapableTree<T> {\n const candidate = tree as Partial<MiddlewareCapableTree<T>>;\n return isFunction(candidate.addTap) && isFunction(candidate.removeTap);\n}\n\nfunction tryStructuredClone<T>(value: T): T {\n const cloneFn = (\n globalThis as typeof globalThis & {\n structuredClone?: <U>(input: U) => U;\n }\n ).structuredClone;\n\n if (isFunction(cloneFn)) {\n try {\n return cloneFn(value);\n } catch {\n // Fall through to return original value.\n }\n }\n\n return value;\n}\n\nfunction isDevEnvironment(): boolean {\n if (__DEV__ !== undefined) return __DEV__;\n if (process?.env?.['NODE_ENV'] === 'production') return false;\n if (ngDevMode != null) return Boolean(ngDevMode);\n return true;\n}\n\ninterface UpdateDetail {\n path: string;\n segments: string[];\n newValue: unknown;\n oldValue: unknown;\n}\n\ninterface PendingUpdate {\n action: string;\n startTime: number;\n metadata?: UpdateMetadata;\n details: UpdateDetail[];\n}\n\ninterface GuardrailsContext<\n T extends Record<string, unknown> = Record<string, unknown>\n> {\n tree: SignalTree<T>;\n config: GuardrailsConfig<T>;\n stats: RuntimeStats;\n issues: GuardrailIssue[];\n hotPaths: HotPath[];\n currentUpdate: PendingUpdate | null;\n suppressed: boolean;\n timings: number[];\n hotPathData: Map<\n string,\n { count: number; lastUpdate: number; durations: number[] }\n >;\n issueMap: Map<string, GuardrailIssue>;\n signalUsage: Map<string, { updates: number; lastSeen: number }>;\n memoryHistory: Array<{ timestamp: number; count: number }>;\n recomputationLog: number[];\n middlewareId?: string;\n disposed: boolean;\n}\n\nconst MAX_TIMING_SAMPLES = 1000;\nconst RECOMPUTATION_WINDOW_MS = 1000;\n\n/**\n * Creates a guardrails enhancer for dev-only monitoring\n */\nexport function withGuardrails<T extends Record<string, unknown>>(\n config: GuardrailsConfig<T> = {}\n): (tree: SignalTree<T>) => SignalTree<T> {\n return (tree: SignalTree<T>) => {\n const enabled = resolveEnabledFlag(config.enabled);\n\n if (!isDevEnvironment() || !enabled) {\n return tree;\n }\n\n if (!supportsMiddleware(tree)) {\n console.warn(\n '[Guardrails] Tree does not expose middleware hooks; guardrails disabled.'\n );\n return tree;\n }\n\n const stats = createRuntimeStats();\n const context: GuardrailsContext<T> = {\n tree,\n config,\n stats,\n issues: [],\n hotPaths: [],\n currentUpdate: null,\n suppressed: false,\n timings: [],\n hotPathData: new Map(),\n issueMap: new Map(),\n signalUsage: new Map(),\n memoryHistory: [],\n recomputationLog: [],\n disposed: false,\n };\n\n const middlewareId = `guardrails:${config.treeId ?? 'tree'}:${Math.random()\n .toString(36)\n .slice(2)}`;\n context.middlewareId = middlewareId;\n\n const middleware = createGuardrailsMiddleware(context);\n tree.addTap(middleware);\n\n const stopMonitoring = startMonitoring(context);\n\n const teardown = () => {\n if (context.disposed) return;\n context.disposed = true;\n stopMonitoring();\n try {\n tree.removeTap(middlewareId);\n } catch {\n // ignore if removal fails\n }\n };\n\n const originalDestroy = tree.destroy?.bind(tree);\n tree.destroy = () => {\n teardown();\n if (originalDestroy) {\n originalDestroy();\n }\n };\n\n (tree as unknown as Record<string, unknown>)['__guardrails'] = createAPI(\n context,\n teardown\n );\n\n return tree;\n };\n}\n\nfunction createRuntimeStats(): RuntimeStats {\n return {\n updateCount: 0,\n totalUpdateTime: 0,\n avgUpdateTime: 0,\n p50UpdateTime: 0,\n p95UpdateTime: 0,\n p99UpdateTime: 0,\n maxUpdateTime: 0,\n recomputationCount: 0,\n recomputationsPerSecond: 0,\n signalCount: 0,\n signalRetention: 0,\n unreadSignalCount: 0,\n memoryGrowthRate: 0,\n hotPathCount: 0,\n violationCount: 0,\n };\n}\n\nfunction createGuardrailsMiddleware<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): Middleware<T> {\n return {\n id: context.middlewareId ?? 'guardrails',\n before: (action: string, payload: unknown, state: T): boolean => {\n if (context.suppressed) {\n context.currentUpdate = null;\n return !context.disposed;\n }\n\n const metadata = extractMetadata(payload);\n if (shouldSuppressUpdate(context, metadata)) {\n context.currentUpdate = null;\n return !context.disposed;\n }\n\n const details = collectUpdateDetails(payload, state);\n context.currentUpdate = {\n action,\n startTime: performance.now(),\n metadata,\n details,\n };\n\n for (const detail of details) {\n analyzePreUpdate(context, detail, metadata);\n }\n\n return !context.disposed;\n },\n after: (\n _action: string,\n _payload: unknown,\n _previousState: T,\n newState: T\n ): void => {\n const pending = context.currentUpdate;\n if (!pending) return;\n\n const duration = Math.max(0, performance.now() - pending.startTime);\n const timestamp = Date.now();\n const recomputations = Math.max(0, pending.details.length - 1);\n updateTimingStats(context, duration);\n\n for (const [index, detail] of pending.details.entries()) {\n const latest = getValueAtPath(newState, detail.segments);\n const diffRatio = calculateDiffRatio(detail.oldValue, latest);\n analyzePostUpdate(context, detail, duration, diffRatio, index === 0);\n trackHotPath(context, detail.path, duration);\n trackSignalUsage(context, detail.path, timestamp);\n }\n\n updateSignalStats(context, timestamp);\n recordRecomputations(context, recomputations, timestamp);\n\n context.currentUpdate = null;\n },\n };\n}\n\nfunction updatePercentiles<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (context.timings.length === 0) return;\n\n const sorted = [...context.timings].sort((a, b) => a - b);\n context.stats.p50UpdateTime = sorted[Math.floor(sorted.length * 0.5)] || 0;\n context.stats.p95UpdateTime = sorted[Math.floor(sorted.length * 0.95)] || 0;\n context.stats.p99UpdateTime = sorted[Math.floor(sorted.length * 0.99)] || 0;\n}\n\nfunction calculateDiffRatio(oldValue: unknown, newValue: unknown): number {\n if (!isComparableRecord(oldValue) || !isComparableRecord(newValue)) {\n return Object.is(oldValue, newValue) ? 0 : 1;\n }\n if (oldValue === newValue) return 0;\n\n const oldKeys = new Set(Object.keys(oldValue));\n const newKeys = new Set(Object.keys(newValue));\n const allKeys = new Set([...oldKeys, ...newKeys]);\n\n let changed = 0;\n for (const key of allKeys) {\n if (\n !oldKeys.has(key) ||\n !newKeys.has(key) ||\n oldValue[key] !== newValue[key]\n ) {\n changed++;\n }\n }\n\n return allKeys.size === 0 ? 0 : changed / allKeys.size;\n}\n\nfunction analyzePreUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n detail: UpdateDetail,\n metadata?: UpdateMetadata\n): void {\n if (!context.config.customRules) return;\n\n for (const rule of context.config.customRules) {\n evaluateRule(context, rule, {\n path: detail.segments,\n value: detail.newValue,\n oldValue: detail.oldValue,\n metadata,\n tree: context.tree,\n stats: context.stats,\n });\n }\n}\n\nfunction analyzePostUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n detail: UpdateDetail,\n duration: number,\n diffRatio: number,\n isPrimary: boolean\n): void {\n if (\n isPrimary &&\n context.config.budgets?.maxUpdateTime &&\n duration > context.config.budgets.maxUpdateTime\n ) {\n addIssue(context, {\n type: 'budget',\n severity: 'error',\n message: `Update took ${duration.toFixed(2)}ms (budget: ${\n context.config.budgets.maxUpdateTime\n }ms)`,\n path: detail.path,\n count: 1,\n });\n }\n\n const minDiff = context.config.analysis?.minDiffForParentReplace ?? 0.8;\n if (context.config.analysis?.warnParentReplace && diffRatio > minDiff) {\n addIssue(context, {\n type: 'analysis',\n severity: 'warning',\n message: `High diff ratio (${(diffRatio * 100).toFixed(\n 0\n )}%) - consider scoped updates`,\n path: detail.path,\n count: 1,\n diffRatio,\n });\n }\n}\n\nfunction trackHotPath<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n path: string,\n duration: number\n): void {\n if (!context.config.hotPaths?.enabled) return;\n\n const pathKey = Array.isArray(path) ? path.join('.') : path;\n const now = Date.now();\n const windowMs = context.config.hotPaths.windowMs || 1000;\n\n let data = context.hotPathData.get(pathKey);\n if (!data) {\n data = { count: 0, lastUpdate: now, durations: [] };\n context.hotPathData.set(pathKey, data);\n }\n\n // Reset if outside window\n if (now - data.lastUpdate > windowMs) {\n data.count = 0;\n data.durations = [];\n }\n\n data.count++;\n data.durations.push(duration);\n data.lastUpdate = now;\n\n // Check threshold\n const threshold = context.config.hotPaths.threshold || 10;\n const updatesPerSecond = (data.count / windowMs) * 1000;\n\n if (updatesPerSecond > threshold) {\n const sorted = [...data.durations].sort((a, b) => a - b);\n const p95 = sorted[Math.floor(sorted.length * 0.95)] || 0;\n const avg =\n data.durations.reduce((sum, d) => sum + d, 0) / data.durations.length;\n\n updateHotPath(context, {\n path: pathKey,\n updatesPerSecond,\n heatScore: Math.min(100, (updatesPerSecond / threshold) * 50),\n downstreamEffects: 0, // Would need dev hooks\n avgDuration: avg,\n p95Duration: p95,\n });\n }\n}\n\nfunction trackSignalUsage<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n path: string,\n timestamp: number\n): void {\n const key = Array.isArray(path) ? path.join('.') : path;\n const entry = context.signalUsage.get(key) ?? {\n updates: 0,\n lastSeen: timestamp,\n };\n entry.updates += 1;\n entry.lastSeen = timestamp;\n context.signalUsage.set(key, entry);\n}\n\nfunction updateSignalStats<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n timestamp: number\n): void {\n const retentionWindow = context.config.memoryLeaks?.checkInterval ?? 5000;\n const historyWindow = Math.max(retentionWindow, 1000);\n\n const signalCount = context.signalUsage.size;\n context.stats.signalCount = signalCount;\n\n const staleCount = [...context.signalUsage.values()].filter(\n (entry) => timestamp - entry.lastSeen > retentionWindow\n ).length;\n context.stats.signalRetention = staleCount;\n context.stats.unreadSignalCount = 0;\n\n context.memoryHistory.push({ timestamp, count: signalCount });\n context.memoryHistory = context.memoryHistory.filter(\n (entry) => timestamp - entry.timestamp <= historyWindow\n );\n\n const baseline = context.memoryHistory[0]?.count ?? signalCount;\n const growth =\n baseline === 0 ? 0 : (signalCount - baseline) / Math.max(1, baseline);\n context.stats.memoryGrowthRate = growth;\n}\n\nfunction recordRecomputations<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n count: number,\n timestamp: number\n): void {\n if (count > 0) {\n context.stats.recomputationCount += count;\n for (let i = 0; i < count; i++) {\n context.recomputationLog.push(timestamp);\n }\n }\n\n if (context.recomputationLog.length) {\n context.recomputationLog = context.recomputationLog.filter(\n (value) => timestamp - value <= RECOMPUTATION_WINDOW_MS\n );\n }\n\n context.stats.recomputationsPerSecond = context.recomputationLog.length;\n}\n\nfunction updateHotPath<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n hotPath: HotPath\n): void {\n const existing = context.hotPaths.find((h) => h.path === hotPath.path);\n if (existing) {\n Object.assign(existing, hotPath);\n } else {\n context.hotPaths.push(hotPath);\n const topN = context.config.hotPaths?.topN || 5;\n if (context.hotPaths.length > topN) {\n context.hotPaths.sort((a, b) => b.heatScore - a.heatScore);\n context.hotPaths.length = topN;\n }\n }\n context.stats.hotPathCount = context.hotPaths.length;\n}\n\nfunction evaluateRule<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n rule: GuardrailRule<T>,\n ruleContext: RuleContext<T>\n): void {\n const handleFailure = () => {\n const message =\n typeof rule.message === 'function'\n ? rule.message(ruleContext)\n : rule.message;\n\n addIssue(context, {\n type: 'rule',\n severity: rule.severity || 'warning',\n message,\n path: ruleContext.path.join('.'),\n count: 1,\n metadata: { rule: rule.name },\n });\n };\n\n try {\n const result = rule.test(ruleContext);\n if (result instanceof Promise) {\n result\n .then((outcome) => {\n if (!outcome) {\n handleFailure();\n }\n })\n .catch((error) => {\n console.warn(`[Guardrails] Rule ${rule.name} rejected:`, error);\n });\n return;\n }\n\n if (!result) {\n handleFailure();\n }\n } catch (error) {\n // Rule threw, log but don't halt\n console.warn(`[Guardrails] Rule ${rule.name} threw error:`, error);\n }\n}\n\nfunction addIssue<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n issue: GuardrailIssue\n): void {\n if (context.suppressed) return;\n\n // Aggregate similar issues\n if (context.config.reporting?.aggregateWarnings !== false) {\n const key = `${issue.type}:${issue.path}:${issue.message}`;\n const existing = context.issueMap.get(key);\n if (existing) {\n existing.count++;\n return;\n }\n context.issueMap.set(key, issue);\n }\n\n context.issues.push(issue);\n context.stats.violationCount++;\n\n // Throw mode\n if (context.config.mode === 'throw') {\n throw new Error(`[Guardrails] ${issue.message}`);\n }\n}\n\nfunction shouldSuppressUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n metadata?: UpdateMetadata\n): boolean {\n if (context.suppressed) return true;\n if (!metadata) return false;\n\n if (\n metadata.suppressGuardrails &&\n context.config.suppression?.respectMetadata !== false\n ) {\n return true;\n }\n\n const autoSuppress = new Set<string>(\n context.config.suppression?.autoSuppress ?? []\n );\n\n return [metadata.intent, metadata.source].some(\n (value) => isString(value) && autoSuppress.has(value)\n );\n}\n\nfunction startMonitoring<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): () => void {\n const interval = setInterval(() => {\n if (context.disposed) {\n clearInterval(interval);\n return;\n }\n checkMemory(context);\n maybeReport(context);\n }, context.config.reporting?.interval || 5000);\n\n return () => clearInterval(interval);\n}\n\nfunction checkMemory<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (!context.config.memoryLeaks?.enabled) return;\n\n const now = Date.now();\n const retentionWindow = context.config.memoryLeaks?.checkInterval ?? 5000;\n const retentionThreshold =\n context.config.memoryLeaks?.retentionThreshold ?? 100;\n const growthThreshold = context.config.memoryLeaks?.growthRate ?? 0.2;\n\n const staleCount = [...context.signalUsage.values()].filter(\n (entry) => now - entry.lastSeen > retentionWindow\n ).length;\n context.stats.signalRetention = staleCount;\n\n const exceedsRetention = context.stats.signalRetention > retentionThreshold;\n const exceedsGrowth = context.stats.memoryGrowthRate > growthThreshold;\n\n if (exceedsRetention || exceedsGrowth) {\n addIssue(context, {\n type: 'memory',\n severity: 'warning',\n message: `Potential memory leak detected (signals: ${\n context.stats.signalCount\n }, growth ${(context.stats.memoryGrowthRate * 100).toFixed(1)}%)`,\n path: 'root',\n count: 1,\n metadata: {\n signalCount: context.stats.signalCount,\n growth: context.stats.memoryGrowthRate,\n },\n });\n }\n}\n\nfunction maybeReport<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (context.config.reporting?.console === false) return;\n\n const report = generateReport(context);\n\n if (context.config.reporting?.customReporter) {\n context.config.reporting.customReporter(report);\n }\n\n if (context.config.reporting?.console && context.issues.length > 0) {\n reportToConsole(report, context.config.reporting.console === 'verbose');\n }\n\n // Clear issues after reporting\n context.issues = [];\n context.issueMap.clear();\n}\n\nfunction reportToConsole(report: GuardrailsReport, verbose: boolean): void {\n console.group('[Guardrails] Performance Report');\n logIssues(report.issues);\n logHotPaths(report.hotPaths);\n if (verbose) {\n logVerboseStats(report);\n }\n console.groupEnd();\n}\n\nfunction logIssues(issues: GuardrailIssue[]): void {\n if (issues.length === 0) return;\n console.warn(`${issues.length} issues detected:`);\n for (const issue of issues) {\n const prefix = getSeverityPrefix(issue.severity);\n const countSuffix = issue.count > 1 ? ` (x${issue.count})` : '';\n const message = `${prefix} [${issue.type}] ${issue.message}${countSuffix}`;\n console.log(` ${message}`);\n }\n}\n\nfunction logHotPaths(hotPaths: HotPath[]): void {\n if (hotPaths.length === 0) return;\n console.log(`\\nHot Paths (${hotPaths.length}):`);\n for (const hp of hotPaths) {\n const entry = ` 🔥 ${hp.path}: ${hp.updatesPerSecond.toFixed(\n 1\n )}/s (heat: ${hp.heatScore.toFixed(0)})`;\n console.log(entry);\n }\n}\n\nfunction logVerboseStats(report: GuardrailsReport): void {\n console.log('\\nStats:', report.stats);\n console.log('Budgets:', report.budgets);\n}\n\nfunction getSeverityPrefix(severity: GuardrailIssue['severity']): string {\n if (severity === 'error') return '❌';\n if (severity === 'warning') return '⚠️';\n return 'ℹ️';\n}\n\nfunction generateReport<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): GuardrailsReport {\n const memoryCurrent = context.stats.signalCount;\n const memoryLimit = context.config.budgets?.maxMemory ?? 50;\n const recomputationCurrent = context.stats.recomputationsPerSecond;\n const recomputationLimit = context.config.budgets?.maxRecomputations ?? 100;\n\n const budgets: BudgetStatus = {\n updateTime: createBudgetItem(\n context.stats.avgUpdateTime,\n context.config.budgets?.maxUpdateTime || 16\n ),\n memory: createBudgetItem(memoryCurrent, memoryLimit),\n recomputations: createBudgetItem(recomputationCurrent, recomputationLimit),\n };\n\n return {\n timestamp: Date.now(),\n treeId: context.config.treeId,\n issues: Array.from(context.issueMap.values()),\n hotPaths: context.hotPaths,\n budgets,\n stats: context.stats,\n recommendations: generateRecommendations(context),\n };\n}\n\nfunction createBudgetItem(current: number, limit: number): BudgetItem {\n if (limit <= 0) {\n return {\n current,\n limit,\n usage: 0,\n status: 'ok',\n };\n }\n\n const usage = (current / limit) * 100;\n const threshold = 80;\n let status: BudgetItem['status'];\n if (usage > 100) {\n status = 'exceeded';\n } else if (usage > threshold) {\n status = 'warning';\n } else {\n status = 'ok';\n }\n return {\n current,\n limit,\n usage,\n status,\n };\n}\n\nfunction generateRecommendations<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): string[] {\n const recommendations: string[] = [];\n\n if (context.hotPaths.length > 0) {\n recommendations.push(\n 'Consider batching or debouncing updates to hot paths'\n );\n }\n\n if (context.stats.avgUpdateTime > 10) {\n recommendations.push('Average update time is high - review update logic');\n }\n\n return recommendations;\n}\n\nfunction createAPI<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n teardown: () => void\n): GuardrailsAPI {\n return {\n getReport: () => generateReport(context),\n getStats: () => context.stats,\n suppress: (fn: () => void) => {\n const was = context.suppressed;\n context.suppressed = true;\n try {\n fn();\n } finally {\n context.suppressed = was;\n }\n },\n dispose: () => {\n teardown();\n const finalReport = generateReport(context);\n if (context.config.reporting?.console !== false) {\n console.log('[Guardrails] Final report on disposal:', finalReport);\n }\n if (context.config.reporting?.customReporter) {\n context.config.reporting.customReporter(finalReport);\n }\n },\n };\n}\n\nfunction extractMetadata(payload: unknown): UpdateMetadata | undefined {\n if (!isObjectLike(payload)) return undefined;\n const candidate = (payload as Record<string, unknown>)['metadata'];\n return isObjectLike(candidate) ? (candidate as UpdateMetadata) : undefined;\n}\n\nfunction collectUpdateDetails(\n payload: unknown,\n stateSnapshot: unknown\n): UpdateDetail[] {\n const details: UpdateDetail[] = [];\n\n const visit = (value: unknown, segments: string[], currentState: unknown) => {\n const path = segments.length ? segments.join('.') : 'root';\n const oldValue = captureValue(currentState);\n\n if (isObjectLike(value)) {\n details.push({\n path,\n segments: [...segments],\n newValue: value,\n oldValue,\n });\n for (const [key, child] of Object.entries(value)) {\n visit(\n child,\n [...segments, key],\n isObjectLike(currentState)\n ? (currentState as Record<string, unknown>)[key]\n : undefined\n );\n }\n return;\n }\n\n details.push({ path, segments: [...segments], newValue: value, oldValue });\n };\n\n if (isObjectLike(payload)) {\n visit(payload, [], stateSnapshot);\n } else {\n details.push({\n path: 'root',\n segments: [],\n newValue: payload,\n oldValue: captureValue(stateSnapshot),\n });\n }\n\n if (details.length === 0) {\n details.push({\n path: 'root',\n segments: [],\n newValue: payload,\n oldValue: captureValue(stateSnapshot),\n });\n }\n\n return details;\n}\n\nfunction getValueAtPath(source: unknown, segments: string[]): unknown {\n let current = source;\n for (const segment of segments) {\n if (!isObjectLike(current)) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n}\n\nfunction captureValue<T>(value: T): T {\n return tryStructuredClone(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object') return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction updateTimingStats<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n duration: number\n): void {\n context.timings.push(duration);\n if (context.timings.length > MAX_TIMING_SAMPLES) {\n context.timings.shift();\n }\n\n context.stats.updateCount++;\n context.stats.totalUpdateTime += duration;\n context.stats.avgUpdateTime =\n context.stats.totalUpdateTime / context.stats.updateCount;\n context.stats.maxUpdateTime = Math.max(context.stats.maxUpdateTime, duration);\n\n updatePercentiles(context);\n}\n\nfunction isComparableRecord(value: unknown): value is Record<string, unknown> {\n return isPlainObject(value);\n}\n","/**\n * Prebuilt Guardrail Rules\n * @packageDocumentation\n */\n\nimport type { GuardrailRule } from './types';\n\nexport const rules = {\n /**\n * Prevents deep nesting beyond specified depth\n */\n noDeepNesting: (maxDepth = 5): GuardrailRule => ({\n name: 'no-deep-nesting',\n description: `Prevents nesting deeper than ${maxDepth} levels`,\n test: (ctx) => ctx.path.length <= maxDepth,\n message: (ctx) => `Path too deep: ${ctx.path.join('.')} (${ctx.path.length} levels, max: ${maxDepth})`,\n severity: 'warning',\n tags: ['architecture', 'complexity'],\n }),\n \n /**\n * Prevents storing functions in state (breaks serialization)\n */\n noFunctionsInState: (): GuardrailRule => ({\n name: 'no-functions',\n description: 'Functions break serialization',\n test: (ctx) => typeof ctx.value !== 'function',\n message: 'Functions cannot be stored in state (breaks serialization)',\n severity: 'error',\n tags: ['serialization', 'data'],\n }),\n \n /**\n * Prevents cache from being persisted\n */\n noCacheInPersistence: (): GuardrailRule => ({\n name: 'no-cache-persistence',\n description: 'Prevent cache from being persisted',\n test: (ctx) => {\n if (ctx.metadata?.source === 'serialization' && ctx.path.includes('cache')) {\n return false;\n }\n return true;\n },\n message: 'Cache should not be persisted',\n severity: 'warning',\n tags: ['persistence', 'cache'],\n }),\n \n /**\n * Limits payload size\n */\n maxPayloadSize: (maxKB = 100): GuardrailRule => ({\n name: 'max-payload-size',\n description: `Limit payload size to ${maxKB}KB`,\n test: (ctx) => {\n try {\n const size = JSON.stringify(ctx.value).length;\n return size < maxKB * 1024;\n } catch {\n return true; // Can't serialize, let it pass\n }\n },\n message: (ctx) => {\n const size = JSON.stringify(ctx.value).length;\n const kb = (size / 1024).toFixed(1);\n return `Payload size ${kb}KB exceeds limit of ${maxKB}KB`;\n },\n severity: 'warning',\n tags: ['performance', 'data'],\n }),\n \n /**\n * Prevents storing sensitive data\n */\n noSensitiveData: (sensitiveKeys: string[] = ['password', 'token', 'secret', 'apiKey']): GuardrailRule => ({\n name: 'no-sensitive-data',\n description: 'Prevents storing sensitive data',\n test: (ctx) => {\n return !ctx.path.some(segment => \n sensitiveKeys.some(key => \n typeof segment === 'string' && segment.toLowerCase().includes(key.toLowerCase())\n )\n );\n },\n message: (ctx) => `Sensitive data detected in path: ${ctx.path.join('.')}`,\n severity: 'error',\n tags: ['security', 'data'],\n }),\n};\n"]}
package/dist/noop.cjs ADDED
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+
6
+ // src/noop.ts
7
+ var noopRule = /* @__PURE__ */ __name((name) => ({
8
+ name,
9
+ description: "No-op guardrail",
10
+ test: /* @__PURE__ */ __name(() => true, "test"),
11
+ message: "",
12
+ severity: "info"
13
+ }), "noopRule");
14
+ function withGuardrails(config) {
15
+ return (tree) => {
16
+ return tree;
17
+ };
18
+ }
19
+ __name(withGuardrails, "withGuardrails");
20
+ var rules = {
21
+ noDeepNesting: /* @__PURE__ */ __name(() => noopRule("noop"), "noDeepNesting"),
22
+ noFunctionsInState: /* @__PURE__ */ __name(() => noopRule("noop"), "noFunctionsInState"),
23
+ noCacheInPersistence: /* @__PURE__ */ __name(() => noopRule("noop"), "noCacheInPersistence"),
24
+ maxPayloadSize: /* @__PURE__ */ __name(() => noopRule("noop"), "maxPayloadSize"),
25
+ noSensitiveData: /* @__PURE__ */ __name(() => noopRule("noop"), "noSensitiveData")
26
+ };
27
+
28
+ exports.rules = rules;
29
+ exports.withGuardrails = withGuardrails;
30
+ //# sourceMappingURL=noop.cjs.map
31
+ //# sourceMappingURL=noop.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/noop.ts"],"names":["noopRule","name","description","test","message","severity","withGuardrails","config","tree","rules","noDeepNesting","noFunctionsInState","noCacheInPersistence","maxPayloadSize","noSensitiveData"],"mappings":";;;;;;AASA,IAAMA,QAAAA,2BAAYC,IAAAA,MAAiC;AACjDA,EAAAA,IAAAA;EACAC,WAAAA,EAAa,iBAAA;AACbC,EAAAA,IAAAA,+BAAY,IAAA,EAAN,MAAA,CAAA;EACNC,OAAAA,EAAS,EAAA;EACTC,QAAAA,EAAU;AACZ,CAAA,CAAA,EANiB,UAAA,CAAA;AAQV,SAASC,eACdC,MAAAA,EAAyB;AAEzB,EAAA,OAAO,CAACC,IAAAA,KAAAA;AAIN,IAAA,OAAOA,IAAAA;AACT,EAAA,CAAA;AACF;AATgBF,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AAWT,IAAMG,KAAAA,GAAQ;EACnBC,aAAAA,kBAAe,MAAA,CAAA,MAAMV,QAAAA,CAAS,MAAA,CAAA,EAAf,eAAA,CAAA;EACfW,kBAAAA,kBAAoB,MAAA,CAAA,MAAMX,QAAAA,CAAS,MAAA,CAAA,EAAf,oBAAA,CAAA;EACpBY,oBAAAA,kBAAsB,MAAA,CAAA,MAAMZ,QAAAA,CAAS,MAAA,CAAA,EAAf,sBAAA,CAAA;EACtBa,cAAAA,kBAAgB,MAAA,CAAA,MAAMb,QAAAA,CAAS,MAAA,CAAA,EAAf,gBAAA,CAAA;EAChBc,eAAAA,kBAAiB,MAAA,CAAA,MAAMd,QAAAA,CAAS,MAAA,CAAA,EAAf,iBAAA;AACnB","file":"noop.cjs","sourcesContent":["/**\n * Production no-op module\n * This module exports empty implementations to ensure zero production cost\n */\n\nimport type { SignalTree } from '@signaltree/core';\n\nimport type { GuardrailsConfig, GuardrailRule } from './lib/types';\n\nconst noopRule = (name: string): GuardrailRule => ({\n name,\n description: 'No-op guardrail',\n test: () => true,\n message: '',\n severity: 'info',\n});\n\nexport function withGuardrails<T extends Record<string, unknown>>(\n config?: GuardrailsConfig\n): (tree: SignalTree<T>) => SignalTree<T> {\n return (tree) => {\n if (config) {\n // Production build ignores guardrail configuration\n }\n return tree;\n };\n}\n\nexport const rules = {\n noDeepNesting: () => noopRule('noop'),\n noFunctionsInState: () => noopRule('noop'),\n noCacheInPersistence: () => noopRule('noop'),\n maxPayloadSize: () => noopRule('noop'),\n noSensitiveData: () => noopRule('noop'),\n};\n\nexport type * from './lib/types';\n"]}
@@ -0,0 +1,19 @@
1
+ import { SignalTree } from '@signaltree/core';
2
+ import { G as GuardrailsConfig, a as GuardrailRule } from './types-DfZ9n1yX.cjs';
3
+ export { d as BudgetItem, B as BudgetStatus, c as GuardrailIssue, f as GuardrailsAPI, e as GuardrailsReport, H as HotPath, R as RuleContext, b as RuntimeStats, U as UpdateMetadata } from './types-DfZ9n1yX.cjs';
4
+
5
+ /**
6
+ * Production no-op module
7
+ * This module exports empty implementations to ensure zero production cost
8
+ */
9
+
10
+ declare function withGuardrails<T extends Record<string, unknown>>(config?: GuardrailsConfig): (tree: SignalTree<T>) => SignalTree<T>;
11
+ declare const rules: {
12
+ noDeepNesting: () => GuardrailRule<Record<string, unknown>>;
13
+ noFunctionsInState: () => GuardrailRule<Record<string, unknown>>;
14
+ noCacheInPersistence: () => GuardrailRule<Record<string, unknown>>;
15
+ maxPayloadSize: () => GuardrailRule<Record<string, unknown>>;
16
+ noSensitiveData: () => GuardrailRule<Record<string, unknown>>;
17
+ };
18
+
19
+ export { GuardrailRule, GuardrailsConfig, rules, withGuardrails };
package/dist/noop.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { SignalTree } from '@signaltree/core';
2
+ import { G as GuardrailsConfig, a as GuardrailRule } from './types-DfZ9n1yX.js';
3
+ export { d as BudgetItem, B as BudgetStatus, c as GuardrailIssue, f as GuardrailsAPI, e as GuardrailsReport, H as HotPath, R as RuleContext, b as RuntimeStats, U as UpdateMetadata } from './types-DfZ9n1yX.js';
4
+
5
+ /**
6
+ * Production no-op module
7
+ * This module exports empty implementations to ensure zero production cost
8
+ */
9
+
10
+ declare function withGuardrails<T extends Record<string, unknown>>(config?: GuardrailsConfig): (tree: SignalTree<T>) => SignalTree<T>;
11
+ declare const rules: {
12
+ noDeepNesting: () => GuardrailRule<Record<string, unknown>>;
13
+ noFunctionsInState: () => GuardrailRule<Record<string, unknown>>;
14
+ noCacheInPersistence: () => GuardrailRule<Record<string, unknown>>;
15
+ maxPayloadSize: () => GuardrailRule<Record<string, unknown>>;
16
+ noSensitiveData: () => GuardrailRule<Record<string, unknown>>;
17
+ };
18
+
19
+ export { GuardrailRule, GuardrailsConfig, rules, withGuardrails };
package/dist/noop.js ADDED
@@ -0,0 +1,28 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/noop.ts
5
+ var noopRule = /* @__PURE__ */ __name((name) => ({
6
+ name,
7
+ description: "No-op guardrail",
8
+ test: /* @__PURE__ */ __name(() => true, "test"),
9
+ message: "",
10
+ severity: "info"
11
+ }), "noopRule");
12
+ function withGuardrails(config) {
13
+ return (tree) => {
14
+ return tree;
15
+ };
16
+ }
17
+ __name(withGuardrails, "withGuardrails");
18
+ var rules = {
19
+ noDeepNesting: /* @__PURE__ */ __name(() => noopRule("noop"), "noDeepNesting"),
20
+ noFunctionsInState: /* @__PURE__ */ __name(() => noopRule("noop"), "noFunctionsInState"),
21
+ noCacheInPersistence: /* @__PURE__ */ __name(() => noopRule("noop"), "noCacheInPersistence"),
22
+ maxPayloadSize: /* @__PURE__ */ __name(() => noopRule("noop"), "maxPayloadSize"),
23
+ noSensitiveData: /* @__PURE__ */ __name(() => noopRule("noop"), "noSensitiveData")
24
+ };
25
+
26
+ export { rules, withGuardrails };
27
+ //# sourceMappingURL=noop.js.map
28
+ //# sourceMappingURL=noop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/noop.ts"],"names":["noopRule","name","description","test","message","severity","withGuardrails","config","tree","rules","noDeepNesting","noFunctionsInState","noCacheInPersistence","maxPayloadSize","noSensitiveData"],"mappings":";;;;AASA,IAAMA,QAAAA,2BAAYC,IAAAA,MAAiC;AACjDA,EAAAA,IAAAA;EACAC,WAAAA,EAAa,iBAAA;AACbC,EAAAA,IAAAA,+BAAY,IAAA,EAAN,MAAA,CAAA;EACNC,OAAAA,EAAS,EAAA;EACTC,QAAAA,EAAU;AACZ,CAAA,CAAA,EANiB,UAAA,CAAA;AAQV,SAASC,eACdC,MAAAA,EAAyB;AAEzB,EAAA,OAAO,CAACC,IAAAA,KAAAA;AAIN,IAAA,OAAOA,IAAAA;AACT,EAAA,CAAA;AACF;AATgBF,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AAWT,IAAMG,KAAAA,GAAQ;EACnBC,aAAAA,kBAAe,MAAA,CAAA,MAAMV,QAAAA,CAAS,MAAA,CAAA,EAAf,eAAA,CAAA;EACfW,kBAAAA,kBAAoB,MAAA,CAAA,MAAMX,QAAAA,CAAS,MAAA,CAAA,EAAf,oBAAA,CAAA;EACpBY,oBAAAA,kBAAsB,MAAA,CAAA,MAAMZ,QAAAA,CAAS,MAAA,CAAA,EAAf,sBAAA,CAAA;EACtBa,cAAAA,kBAAgB,MAAA,CAAA,MAAMb,QAAAA,CAAS,MAAA,CAAA,EAAf,gBAAA,CAAA;EAChBc,eAAAA,kBAAiB,MAAA,CAAA,MAAMd,QAAAA,CAAS,MAAA,CAAA,EAAf,iBAAA;AACnB","file":"noop.js","sourcesContent":["/**\n * Production no-op module\n * This module exports empty implementations to ensure zero production cost\n */\n\nimport type { SignalTree } from '@signaltree/core';\n\nimport type { GuardrailsConfig, GuardrailRule } from './lib/types';\n\nconst noopRule = (name: string): GuardrailRule => ({\n name,\n description: 'No-op guardrail',\n test: () => true,\n message: '',\n severity: 'info',\n});\n\nexport function withGuardrails<T extends Record<string, unknown>>(\n config?: GuardrailsConfig\n): (tree: SignalTree<T>) => SignalTree<T> {\n return (tree) => {\n if (config) {\n // Production build ignores guardrail configuration\n }\n return tree;\n };\n}\n\nexport const rules = {\n noDeepNesting: () => noopRule('noop'),\n noFunctionsInState: () => noopRule('noop'),\n noCacheInPersistence: () => noopRule('noop'),\n maxPayloadSize: () => noopRule('noop'),\n noSensitiveData: () => noopRule('noop'),\n};\n\nexport type * from './lib/types';\n"]}
@@ -0,0 +1,255 @@
1
+ import { SignalTree } from '@signaltree/core';
2
+
3
+ /**
4
+ * SignalTree Guardrails - Type Definitions
5
+ * @packageDocumentation
6
+ */
7
+
8
+ interface GuardrailsConfig<T extends Record<string, unknown> = Record<string, unknown>> {
9
+ /** Behavior mode: warn (console), throw (errors), or silent (collect only) */
10
+ mode?: 'warn' | 'throw' | 'silent';
11
+ /** Enable/disable guardrails */
12
+ enabled?: boolean | (() => boolean);
13
+ /** Performance budget limits */
14
+ budgets?: {
15
+ /** Max milliseconds per update (default: 16) */
16
+ maxUpdateTime?: number;
17
+ /** Max memory in MB (default: 50) */
18
+ maxMemory?: number;
19
+ /** Max recomputations per second (default: 100) */
20
+ maxRecomputations?: number;
21
+ /** Max tree nesting depth (default: 10) */
22
+ maxTreeDepth?: number;
23
+ /** Alert when % of budget used (default: 0.8) */
24
+ alertThreshold?: number;
25
+ };
26
+ /** Hot path analysis configuration */
27
+ hotPaths?: {
28
+ /** Enable hot path detection */
29
+ enabled?: boolean;
30
+ /** Updates/second to consider "hot" (default: 10) */
31
+ threshold?: number;
32
+ /** Track top N hot paths (default: 5) */
33
+ topN?: number;
34
+ /** Track downstream effects */
35
+ trackDownstream?: boolean;
36
+ /** Time window for rate calculation in ms (default: 1000) */
37
+ windowMs?: number;
38
+ };
39
+ /** Memory leak detection */
40
+ memoryLeaks?: {
41
+ /** Enable memory leak detection */
42
+ enabled?: boolean;
43
+ /** Check interval in ms (default: 5000) */
44
+ checkInterval?: number;
45
+ /** Max signals before warning (default: 100) */
46
+ retentionThreshold?: number;
47
+ /** Growth rate % to trigger warning (default: 0.2) */
48
+ growthRate?: number;
49
+ /** Track signals never read */
50
+ trackUnread?: boolean;
51
+ };
52
+ /** Custom rules */
53
+ customRules?: GuardrailRule<T>[];
54
+ /** Intent-aware suppression */
55
+ suppression?: {
56
+ /** Auto-suppress for these intents */
57
+ autoSuppress?: Array<'hydrate' | 'reset' | 'bulk' | 'migration' | 'time-travel' | 'serialization'>;
58
+ /** Honor suppressGuardrails metadata flag */
59
+ respectMetadata?: boolean;
60
+ };
61
+ /** Read/write analysis */
62
+ analysis?: {
63
+ /** Forbid reading entire tree root */
64
+ forbidRootRead?: boolean;
65
+ /** Forbid reading slice roots */
66
+ forbidSliceRootRead?: boolean | string[];
67
+ /** Max dependencies per computed */
68
+ maxDepsPerComputed?: number;
69
+ /** Warn on parent replacement */
70
+ warnParentReplace?: boolean;
71
+ /** Min diff ratio to justify parent replace (default: 0.8) */
72
+ minDiffForParentReplace?: number;
73
+ /** Detect thrashing */
74
+ detectThrashing?: boolean;
75
+ /** Max reruns per second before thrashing */
76
+ maxRerunsPerSecond?: number;
77
+ };
78
+ /** Reporting configuration */
79
+ reporting?: {
80
+ /** Report interval in ms (default: 5000) */
81
+ interval?: number;
82
+ /** Console output: false, true, or 'verbose' */
83
+ console?: boolean | 'verbose';
84
+ /** Custom reporter function */
85
+ customReporter?: (report: GuardrailsReport) => void;
86
+ /** Aggregate similar warnings */
87
+ aggregateWarnings?: boolean;
88
+ /** Max issues per report */
89
+ maxIssuesPerReport?: number;
90
+ };
91
+ /** Tree identifier for multi-tree scenarios */
92
+ treeId?: string;
93
+ }
94
+ interface UpdateMetadata {
95
+ /** Intent of the update */
96
+ intent?: 'hydrate' | 'reset' | 'bulk' | 'migration' | 'user' | 'system';
97
+ /** Source of the update */
98
+ source?: 'serialization' | 'time-travel' | 'devtools' | 'user' | 'system';
99
+ /** Suppress guardrails for this update */
100
+ suppressGuardrails?: boolean;
101
+ /** Timestamp */
102
+ timestamp?: number;
103
+ /** Correlation ID for related updates */
104
+ correlationId?: string;
105
+ /** Additional metadata */
106
+ [key: string]: unknown;
107
+ }
108
+ interface GuardrailRule<T extends Record<string, unknown> = Record<string, unknown>> {
109
+ /** Rule name */
110
+ name: string;
111
+ /** Description */
112
+ description?: string;
113
+ /** Test function */
114
+ test: (context: RuleContext<T>) => boolean | Promise<boolean>;
115
+ /** Error message or message function */
116
+ message: string | ((context: RuleContext<T>) => string);
117
+ /** Severity level */
118
+ severity?: 'error' | 'warning' | 'info';
119
+ /** Optional fix function */
120
+ fix?: (context: RuleContext<T>) => void;
121
+ /** Tags for filtering/grouping */
122
+ tags?: string[];
123
+ }
124
+ interface RuleContext<T extends Record<string, unknown> = Record<string, unknown>> {
125
+ /** Path to the value */
126
+ path: string[];
127
+ /** New value */
128
+ value: unknown;
129
+ /** Previous value */
130
+ oldValue?: unknown;
131
+ /** Update metadata */
132
+ metadata?: UpdateMetadata;
133
+ /** The tree instance */
134
+ tree: SignalTree<T>;
135
+ /** Update duration in ms */
136
+ duration?: number;
137
+ /** Diff ratio (0-1) */
138
+ diffRatio?: number;
139
+ /** Recomputation count */
140
+ recomputeCount?: number;
141
+ /** Downstream effects count */
142
+ downstreamEffects?: number;
143
+ /** Is signal unread */
144
+ isUnread?: boolean;
145
+ /** Runtime statistics */
146
+ stats: RuntimeStats;
147
+ }
148
+ interface RuntimeStats {
149
+ /** Total update count */
150
+ updateCount: number;
151
+ /** Total update time in ms */
152
+ totalUpdateTime: number;
153
+ /** Average update time in ms */
154
+ avgUpdateTime: number;
155
+ /** P50 update time in ms */
156
+ p50UpdateTime: number;
157
+ /** P95 update time in ms */
158
+ p95UpdateTime: number;
159
+ /** P99 update time in ms */
160
+ p99UpdateTime: number;
161
+ /** Max update time in ms */
162
+ maxUpdateTime: number;
163
+ /** Total recomputation count */
164
+ recomputationCount: number;
165
+ /** Recomputations per second */
166
+ recomputationsPerSecond: number;
167
+ /** Total signal count */
168
+ signalCount: number;
169
+ /** Signal retention */
170
+ signalRetention: number;
171
+ /** Unread signal count */
172
+ unreadSignalCount: number;
173
+ /** Memory growth rate */
174
+ memoryGrowthRate: number;
175
+ /** Hot path count */
176
+ hotPathCount: number;
177
+ /** Violation count */
178
+ violationCount: number;
179
+ }
180
+ interface GuardrailIssue {
181
+ /** Issue type */
182
+ type: 'budget' | 'hot-path' | 'memory' | 'rule' | 'analysis';
183
+ /** Severity */
184
+ severity: 'error' | 'warning' | 'info';
185
+ /** Message */
186
+ message: string;
187
+ /** Path */
188
+ path?: string;
189
+ /** Occurrence count */
190
+ count: number;
191
+ /** Diff ratio if applicable */
192
+ diffRatio?: number;
193
+ /** Additional metadata */
194
+ metadata?: Record<string, unknown>;
195
+ }
196
+ interface HotPath {
197
+ /** Path */
198
+ path: string;
199
+ /** Updates per second */
200
+ updatesPerSecond: number;
201
+ /** Heat score (0-100) */
202
+ heatScore: number;
203
+ /** Downstream effects count */
204
+ downstreamEffects: number;
205
+ /** Average duration in ms */
206
+ avgDuration: number;
207
+ /** P95 duration in ms */
208
+ p95Duration: number;
209
+ }
210
+ interface BudgetStatus {
211
+ /** Update time budget */
212
+ updateTime: BudgetItem;
213
+ /** Memory budget */
214
+ memory: BudgetItem;
215
+ /** Recomputation budget */
216
+ recomputations: BudgetItem;
217
+ }
218
+ interface BudgetItem {
219
+ /** Current value */
220
+ current: number;
221
+ /** Budget limit */
222
+ limit: number;
223
+ /** Usage percentage */
224
+ usage: number;
225
+ /** Status */
226
+ status: 'ok' | 'warning' | 'exceeded';
227
+ }
228
+ interface GuardrailsReport {
229
+ /** Report timestamp */
230
+ timestamp: number;
231
+ /** Tree ID if configured */
232
+ treeId?: string;
233
+ /** Issues detected */
234
+ issues: GuardrailIssue[];
235
+ /** Hot paths */
236
+ hotPaths: HotPath[];
237
+ /** Budget status */
238
+ budgets: BudgetStatus;
239
+ /** Runtime statistics */
240
+ stats: RuntimeStats;
241
+ /** Recommendations */
242
+ recommendations: string[];
243
+ }
244
+ interface GuardrailsAPI {
245
+ /** Get current report */
246
+ getReport(): GuardrailsReport;
247
+ /** Get runtime stats */
248
+ getStats(): RuntimeStats;
249
+ /** Suppress guardrails during function execution */
250
+ suppress(fn: () => void): void;
251
+ /** Dispose and cleanup */
252
+ dispose(): void;
253
+ }
254
+
255
+ export type { BudgetStatus as B, GuardrailsConfig as G, HotPath as H, RuleContext as R, UpdateMetadata as U, GuardrailRule as a, RuntimeStats as b, GuardrailIssue as c, BudgetItem as d, GuardrailsReport as e, GuardrailsAPI as f };