@omiron33/omi-neuron-web 0.2.21 → 0.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +157 -1
- package/dist/{NeuronWebExplorer-lBM0Jcf9.d.ts → NeuronWebExplorer-CB7Vkkce.d.cts} +5 -1
- package/dist/{NeuronWebExplorer-7sRtXdqa.d.cts → NeuronWebExplorer-DFyhvtXO.d.ts} +5 -1
- package/dist/api/index.d.cts +3 -3
- package/dist/api/index.d.ts +3 -3
- package/dist/{chunk-XSDOIONK.js → chunk-E4TZDZ5U.js} +353 -7
- package/dist/chunk-E4TZDZ5U.js.map +1 -0
- package/dist/{chunk-5SZ37JXQ.cjs → chunk-HOW2F2KP.cjs} +353 -6
- package/dist/chunk-HOW2F2KP.cjs.map +1 -0
- package/dist/{edge-U2Qgwg-K.d.cts → cluster-CU_pBUcK.d.cts} +123 -1
- package/dist/{edge-U2Qgwg-K.d.ts → cluster-CU_pBUcK.d.ts} +123 -1
- package/dist/index.cjs +655 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +66 -7
- package/dist/index.d.ts +66 -7
- package/dist/index.js +641 -4
- package/dist/index.js.map +1 -1
- package/dist/{query-helpers-DMnkjfO0.d.cts → query-helpers-CA23s1ct.d.cts} +2 -102
- package/dist/{query-helpers-BpVwXZJk.d.ts → query-helpers-CdDGFiK3.d.ts} +2 -102
- package/dist/visualization/index.cjs +18 -14
- package/dist/visualization/index.d.cts +9 -5
- package/dist/visualization/index.d.ts +9 -5
- package/dist/visualization/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5SZ37JXQ.cjs.map +0 -1
- package/dist/chunk-XSDOIONK.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/schemas/cluster.ts","../src/core/events/helpers.ts","../src/core/events/middleware/logging.ts","../src/core/events/middleware/validation.ts","../src/core/analysis/data-processor.ts","../src/core/analysis/scoring-engine.ts","../src/core/providers/testing/mock-embedding-provider.ts","../src/core/providers/testing/mock-llm-provider.ts","../src/config/client.ts","../src/version.ts","../src/config/server.ts","../src/config/index.ts","../src/react/hooks/useNeuronNodes.ts","../src/react/hooks/useNeuronAnalysis.ts","../src/react/hooks/useNeuronJobStream.ts","../src/react/hooks/useNeuronSuggestions.ts","../src/react/hooks/useNeuronSettings.ts","../src/react/hooks/useNeuronSearch.ts","../src/react/hooks/useNeuronEvents.ts","../src/react/api-client.ts","../src/react/NeuronWebProvider.tsx"],"names":["z","createEvent","nodeCreateSchema","slugify","crypto","DEFAULT_VISUALIZATION_SETTINGS","DEFAULT_ANALYSIS_SETTINGS","useNeuronContext","useState","useCallback","useEffect","useRef","useMemo","EventBus","NeuronContext"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod';\n\nexport const clusteringConfigSchema = z.object({\n algorithm: z.enum(['kmeans', 'dbscan', 'hierarchical']),\n clusterCount: z.coerce.number().int().min(1).optional(),\n minClusterSize: z.coerce.number().int().min(1).optional(),\n similarityThreshold: z.coerce.number().min(0).max(1).optional(),\n epsilon: z.coerce.number().min(0).optional(),\n minSamples: z.coerce.number().int().min(1).optional(),\n});\n\nexport const clusterCreateSchema = z.object({\n label: z.string().min(1).max(255),\n clusterType: z.string().max(100).optional(),\n centroid: z.array(z.number()).optional(),\n memberCount: z.number().int().min(0).optional(),\n avgSimilarity: z.number().min(0).max(1).optional(),\n cohesion: z.number().min(0).max(1).optional(),\n description: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const clusterUpdateSchema = clusterCreateSchema.partial();\n\nexport type ClusteringConfigInput = z.infer<typeof clusteringConfigSchema>;\nexport type ClusterCreateInput = z.infer<typeof clusterCreateSchema>;\nexport type ClusterUpdateInput = z.infer<typeof clusterUpdateSchema>;\n","import type {\n AnalysisCompletedEventPayload,\n AnalysisFailedEventPayload,\n AnalysisProgressEventPayload,\n AnalysisStartedEventPayload,\n EdgeCreatedEventPayload,\n EdgeDeletedEventPayload,\n EdgeUpdatedEventPayload,\n EventSource,\n NeuronEvent,\n NeuronEventType,\n NodeBatchCreatedEventPayload,\n NodeCreatedEventPayload,\n NodeDeletedEventPayload,\n NodeUpdatedEventPayload,\n} from '../types/events';\nimport { createEvent } from './event-bus';\n\nexport const createNodeEvent = (\n type: 'node:created' | 'node:updated' | 'node:deleted' | 'node:batch_created',\n payload:\n | NodeCreatedEventPayload\n | NodeUpdatedEventPayload\n | NodeDeletedEventPayload\n | NodeBatchCreatedEventPayload,\n source: EventSource = 'system'\n): NeuronEvent => createEvent(type, payload, source);\n\nexport const createEdgeEvent = (\n type: 'edge:created' | 'edge:updated' | 'edge:deleted',\n payload: EdgeCreatedEventPayload | EdgeUpdatedEventPayload | EdgeDeletedEventPayload,\n source: EventSource = 'system'\n): NeuronEvent => createEvent(type, payload, source);\n\nexport const createAnalysisEvent = (\n type: 'analysis:started' | 'analysis:progress' | 'analysis:completed' | 'analysis:failed',\n payload:\n | AnalysisStartedEventPayload\n | AnalysisProgressEventPayload\n | AnalysisCompletedEventPayload\n | AnalysisFailedEventPayload,\n source: EventSource = 'analysis'\n): NeuronEvent => createEvent(type, payload, source);\n\nexport const createGenericEvent = <T>(\n type: NeuronEventType,\n payload: T,\n source: EventSource = 'system'\n): NeuronEvent<T> => createEvent(type, payload, source);\n","import type { EventMiddleware } from '../event-bus';\n\nexport const loggingMiddleware: EventMiddleware = (event, next) => {\n // eslint-disable-next-line no-console\n console.debug(`[omi-neuron:event] ${event.type}`, event);\n void next();\n};\n","import type { EventMiddleware } from '../event-bus';\n\nexport const validationMiddleware: EventMiddleware = (event, next) => {\n if (!event.type) {\n throw new Error('Event missing type');\n }\n if (!event.timestamp) {\n throw new Error('Event missing timestamp');\n }\n return next();\n};\n","import slugify from 'slugify';\nimport { nodeCreateSchema } from '../schemas/node';\nimport type { NeuronNodeCreate } from '../types/node';\n\nexport interface ProcessingOptions {\n skipDuplicates?: boolean;\n updateOnConflict?: boolean;\n defaultNodeType?: string;\n defaultDomain?: string;\n contentFields?: string[];\n labelField?: string;\n slugField?: string;\n metadataFields?: string[];\n}\n\nconst stripHtml = (value: string) => value.replace(/<[^>]+>/g, ' ');\n\nconst normalizeValue = (value: unknown): string | undefined => {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value.toISOString();\n if (Array.isArray(value)) return value.map((item) => normalizeValue(item)).filter(Boolean).join(' ');\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\nconst flattenObject = (obj: Record<string, unknown>, prefix = ''): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const nextKey = prefix ? `${prefix}.${key}` : key;\n if (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\n Object.assign(result, flattenObject(value as Record<string, unknown>, nextKey));\n } else {\n result[nextKey] = value;\n }\n }\n return result;\n};\n\nexport class DataProcessor {\n constructor(private options: ProcessingOptions = {}) {}\n\n processItem(item: Record<string, unknown>): NeuronNodeCreate {\n const flattened = flattenObject(item);\n const labelField = this.options.labelField ?? 'label';\n const label = normalizeValue(flattened[labelField]) ?? 'Untitled';\n\n const slugField = this.options.slugField;\n const slug = slugField ? normalizeValue(flattened[slugField]) : undefined;\n\n const content = this.extractContent(flattened);\n const metadata = this.extractMetadata(flattened);\n\n const node: NeuronNodeCreate = {\n slug,\n label,\n nodeType: this.options.defaultNodeType,\n domain: this.options.defaultDomain,\n content,\n metadata,\n };\n\n return nodeCreateSchema.parse(node);\n }\n\n processBatch(items: Record<string, unknown>[]): {\n nodes: NeuronNodeCreate[];\n errors: Array<{ index: number; error: string }>;\n } {\n const nodes: NeuronNodeCreate[] = [];\n const errors: Array<{ index: number; error: string }> = [];\n\n items.forEach((item, index) => {\n try {\n nodes.push(this.processItem(item));\n } catch (error) {\n errors.push({\n index,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n\n return { nodes, errors };\n }\n\n processJSON(json: string): NeuronNodeCreate[] {\n const parsed = JSON.parse(json);\n if (Array.isArray(parsed)) {\n return this.processBatch(parsed).nodes;\n }\n return [this.processItem(parsed)];\n }\n\n processCSV(csv: string): NeuronNodeCreate[] {\n const lines = csv.trim().split(/\\r?\\n/);\n if (lines.length === 0) return [];\n const headers = lines[0].split(',').map((h) => h.trim());\n const items = lines.slice(1).map((line) => {\n const values = line.split(',');\n const item: Record<string, unknown> = {};\n headers.forEach((header, idx) => {\n item[header] = values[idx]?.trim();\n });\n return item;\n });\n return this.processBatch(items).nodes;\n }\n\n generateSlug(label: string, existingSlugs: Set<string> = new Set()): string {\n const base = slugify(label, { lower: true, strict: true, trim: true }).slice(0, 255);\n if (!existingSlugs.has(base)) return base;\n let suffix = 1;\n let slug = `${base}-${suffix}`;\n while (existingSlugs.has(slug)) {\n suffix += 1;\n slug = `${base}-${suffix}`;\n }\n return slug;\n }\n\n extractContent(item: Record<string, unknown>): string {\n const fields = this.options.contentFields ?? ['label', 'summary', 'description', 'content'];\n const parts = fields\n .map((field) => normalizeValue(item[field]))\n .filter((value): value is string => Boolean(value));\n const joined = parts.join(' ');\n return stripHtml(joined).replace(/\\s+/g, ' ').trim();\n }\n\n detectDuplicates(nodes: NeuronNodeCreate[]): {\n unique: NeuronNodeCreate[];\n duplicates: Array<{ node: NeuronNodeCreate; reason: string }>;\n } {\n const seen = new Set<string>();\n const unique: NeuronNodeCreate[] = [];\n const duplicates: Array<{ node: NeuronNodeCreate; reason: string }> = [];\n\n nodes.forEach((node) => {\n const slug = node.slug ?? this.generateSlug(node.label, seen);\n if (seen.has(slug)) {\n duplicates.push({ node, reason: `Duplicate slug: ${slug}` });\n return;\n }\n seen.add(slug);\n unique.push({ ...node, slug });\n });\n\n return { unique, duplicates };\n }\n\n private extractMetadata(item: Record<string, unknown>): Record<string, unknown> | undefined {\n if (!this.options.metadataFields?.length) return undefined;\n const metadata: Record<string, unknown> = {};\n this.options.metadataFields.forEach((field) => {\n if (field in item) {\n metadata[field] = item[field];\n }\n });\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n }\n}\n","import type { Database } from '../../storage/database';\nimport type { NeuronNode } from '../types/node';\n\nexport interface ScoringConfig {\n similarityWeight: number;\n connectionWeight: number;\n recencyWeight: number;\n domainBoost: number;\n}\n\nexport interface ScoredNode {\n node: NeuronNode;\n score: number;\n breakdown: {\n similarity: number;\n connections: number;\n recency: number;\n domainMatch: number;\n };\n}\n\nconst DEFAULT_CONFIG: ScoringConfig = {\n similarityWeight: 0.6,\n connectionWeight: 0.2,\n recencyWeight: 0.1,\n domainBoost: 0.1,\n};\n\nexport class ScoringEngine {\n private config: ScoringConfig;\n\n constructor(private db: Database, config?: ScoringConfig) {\n this.config = { ...DEFAULT_CONFIG, ...(config ?? {}) };\n }\n\n cosineSimilarity(a: number[], b: number[]): number {\n let dot = 0;\n let magA = 0;\n let magB = 0;\n for (let i = 0; i < a.length; i += 1) {\n dot += a[i] * b[i];\n magA += a[i] * a[i];\n magB += b[i] * b[i];\n }\n if (magA === 0 || magB === 0) return 0;\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n }\n\n async semanticSimilarity(nodeA: string, nodeB: string): Promise<number> {\n const rows = await this.db.query<{ similarity: number }>(\n 'SELECT 1 - (a.embedding <=> b.embedding) as similarity FROM nodes a JOIN nodes b ON b.id = $2 WHERE a.id = $1',\n [nodeA, nodeB]\n );\n return rows[0]?.similarity ?? 0;\n }\n\n async scoreForQuery(queryEmbedding: number[], nodeIds?: string[]): Promise<ScoredNode[]> {\n const filterClause = nodeIds?.length ? 'AND id = ANY($2)' : '';\n const values = nodeIds?.length ? [queryEmbedding, nodeIds] : [queryEmbedding];\n const nodes = await this.db.query<NeuronNode & { similarity: number }>(\n `SELECT *, 1 - (embedding <=> $1) as similarity FROM nodes WHERE embedding IS NOT NULL ${filterClause} ORDER BY embedding <=> $1`,\n values\n );\n\n return nodes.map((node) => this.applyScoring(node, node.similarity ?? 0));\n }\n\n async findSimilar(nodeId: string, limit = 10, excludeConnected = false): Promise<ScoredNode[]> {\n const base = excludeConnected\n ? `SELECT id FROM nodes WHERE id NOT IN (SELECT to_node_id FROM edges WHERE from_node_id = $1)`\n : `SELECT id FROM nodes WHERE id != $1`;\n const nodes = await this.db.query<NeuronNode & { similarity: number }>(\n `SELECT n.*, 1 - (n.embedding <=> (SELECT embedding FROM nodes WHERE id = $1)) as similarity\n FROM nodes n\n WHERE n.embedding IS NOT NULL AND n.id IN (${base})\n ORDER BY n.embedding <=> (SELECT embedding FROM nodes WHERE id = $1)\n LIMIT $2`,\n [nodeId, limit]\n );\n\n return nodes.map((node) => this.applyScoring(node, node.similarity ?? 0));\n }\n\n async calculateNodeImportance(nodeId: string): Promise<number> {\n const row = await this.db.queryOne<{ importance: number }>(\n `WITH edge_weights AS (\n SELECT to_node_id, SUM(strength) as total_inbound\n FROM edges\n GROUP BY to_node_id\n )\n SELECT COALESCE(ew.total_inbound, 0) + (n.connection_count * 0.1) as importance\n FROM nodes n\n LEFT JOIN edge_weights ew ON n.id = ew.to_node_id\n WHERE n.id = $1`,\n [nodeId]\n );\n return row?.importance ?? 0;\n }\n\n async rankAllNodes(): Promise<Array<{ nodeId: string; importance: number }>> {\n const rows = await this.db.query<{ id: string; importance: number }>(\n `WITH edge_weights AS (\n SELECT to_node_id, SUM(strength) as total_inbound\n FROM edges\n GROUP BY to_node_id\n )\n SELECT n.id, COALESCE(ew.total_inbound, 0) + (n.connection_count * 0.1) as importance\n FROM nodes n\n LEFT JOIN edge_weights ew ON n.id = ew.to_node_id\n ORDER BY importance DESC`\n );\n return rows.map((row) => ({ nodeId: row.id, importance: row.importance }));\n }\n\n async scoreRelevance(\n sourceNodeId: string,\n candidateNodeIds: string[],\n context?: string\n ): Promise<ScoredNode[]> {\n const nodes = await this.db.query<NeuronNode & { similarity: number }>(\n `SELECT *, 1 - (embedding <=> (SELECT embedding FROM nodes WHERE id = $1)) as similarity\n FROM nodes\n WHERE embedding IS NOT NULL AND id = ANY($2)\n ORDER BY embedding <=> (SELECT embedding FROM nodes WHERE id = $1)`,\n [sourceNodeId, candidateNodeIds]\n );\n\n return nodes.map((node) => {\n const base = this.applyScoring(node, node.similarity ?? 0);\n if (context) {\n base.score += this.config.domainBoost * 0.1;\n }\n return base;\n });\n }\n\n private applyScoring(node: NeuronNode & { similarity?: number }, similarity: number): ScoredNode {\n const connections = node.connectionCount ?? 0;\n const recency = node.updatedAt ? Math.max(0, 1 - (Date.now() - new Date(node.updatedAt).getTime()) / (1000 * 60 * 60 * 24 * 30)) : 0;\n const domainMatch = 0;\n\n const score =\n similarity * this.config.similarityWeight +\n connections * this.config.connectionWeight +\n recency * this.config.recencyWeight +\n domainMatch * this.config.domainBoost;\n\n return {\n node,\n score,\n breakdown: {\n similarity,\n connections,\n recency,\n domainMatch,\n },\n };\n }\n}\n","import crypto from 'node:crypto';\nimport type { EmbeddingProvider, EmbeddingRequest, EmbeddingResponse } from '../embedding-provider';\n\nexport type MockEmbeddingProviderOptions = {\n dimensions?: number;\n};\n\n/**\n * Deterministic embedding provider for tests.\n * Produces a stable vector per input string (not meaningful semantically).\n */\nexport class MockEmbeddingProvider implements EmbeddingProvider {\n readonly name = 'mock';\n\n private dimensions: number;\n\n constructor(options?: MockEmbeddingProviderOptions) {\n this.dimensions = Math.max(1, options?.dimensions ?? 8);\n }\n\n async embed(request: EmbeddingRequest): Promise<EmbeddingResponse> {\n const inputs = Array.isArray(request.input) ? request.input : [request.input];\n const dims = request.dimensions ?? this.dimensions;\n\n const embeddings = inputs.map((text) => this.embedText(text, dims));\n return {\n embeddings,\n model: request.model,\n usage: {\n promptTokens: inputs.reduce((sum, t) => sum + Math.ceil(t.length / 4), 0),\n totalTokens: inputs.reduce((sum, t) => sum + Math.ceil(t.length / 4), 0),\n },\n };\n }\n\n private embedText(text: string, dims: number): number[] {\n const hash = crypto.createHash('sha256').update(text).digest();\n const vector = new Array(dims).fill(0).map((_, idx) => {\n const byte = hash[idx % hash.length];\n // map 0..255 -> -1..1\n return (byte / 127.5) - 1;\n });\n return vector;\n }\n}\n\n","import type { LLMProvider, LLMRequest, LLMResponse } from '../llm-provider';\n\nexport type MockLLMProviderOptions = {\n responder?: (request: LLMRequest) => Promise<LLMResponse> | LLMResponse;\n defaultJson?: Record<string, unknown>;\n};\n\n/**\n * Deterministic LLM provider for tests.\n * By default returns a minimal JSON payload with hasRelationship=false.\n */\nexport class MockLLMProvider implements LLMProvider {\n readonly name = 'mock';\n\n private responder: (request: LLMRequest) => Promise<LLMResponse>;\n\n constructor(options?: MockLLMProviderOptions) {\n const fallback = options?.defaultJson ?? { hasRelationship: false };\n this.responder = async (request) => {\n const response = options?.responder?.(request);\n if (response) return await response;\n return {\n content: JSON.stringify(fallback),\n model: request.model,\n usage: {\n inputTokens: Math.ceil(request.prompt.length / 4),\n outputTokens: Math.ceil(JSON.stringify(fallback).length / 4),\n totalTokens: Math.ceil((request.prompt.length + JSON.stringify(fallback).length) / 4),\n },\n };\n };\n }\n\n async generate(request: LLMRequest): Promise<LLMResponse> {\n return this.responder(request);\n }\n}\n\n","import type { NeuronClientConfig } from '../core/types/settings';\n\nexport const defineNeuronClientConfig = (config: NeuronClientConfig): NeuronClientConfig => config;\n\n","export const VERSION = '0.2.21';\n","import type { NeuronConfig, NeuronServerConfig, NeuronSettings } from '../core/types/settings';\nimport { DEFAULT_ANALYSIS_SETTINGS, DEFAULT_VISUALIZATION_SETTINGS } from '../core/types/settings';\nimport { VERSION } from '../version';\n\nconst buildDefaultNeuronConfig = (overrides?: Partial<NeuronSettings>): NeuronConfig => ({\n instance: {\n name: overrides?.instance?.name ?? 'default',\n version: overrides?.instance?.version ?? VERSION,\n repoName: overrides?.instance?.repoName ?? 'omi-neuron-web',\n },\n visualization: { ...DEFAULT_VISUALIZATION_SETTINGS, ...(overrides?.visualization ?? {}) },\n analysis: { ...DEFAULT_ANALYSIS_SETTINGS, ...(overrides?.analysis ?? {}) },\n nodeTypes: overrides?.nodeTypes ?? [],\n domains: overrides?.domains ?? [],\n relationshipTypes: overrides?.relationshipTypes ?? [],\n openai: {\n apiKey: '',\n },\n database: {\n mode: 'external',\n port: 5433,\n url: undefined,\n },\n api: {\n basePath: '/api/neuron',\n enableCors: false,\n },\n logging: {\n level: 'info',\n prettyPrint: true,\n },\n});\n\nexport const defineNeuronServerConfig = (config: NeuronServerConfig): NeuronServerConfig => config;\n\n/**\n * Resolve a full legacy `NeuronConfig` from a layered server config.\n * This is primarily a compatibility helper so existing factories can continue to accept `NeuronConfig`.\n */\nexport const resolveNeuronConfig = (server: NeuronServerConfig): NeuronConfig => {\n const base = buildDefaultNeuronConfig(server.settings);\n return {\n ...base,\n openai: server.openai,\n database: server.database,\n storage: server.storage,\n api: { ...base.api, ...(server.api ?? {}) },\n logging: { ...base.logging, ...(server.logging ?? {}) },\n };\n};\n","import type { NeuronConfig } from '../core/types/settings';\nimport type { NeuronClientConfig, NeuronServerConfig } from '../core/types/settings';\nimport { defineNeuronClientConfig } from './client';\nimport { defineNeuronServerConfig, resolveNeuronConfig } from './server';\n\nexport const defineNeuronConfig = (config: NeuronConfig): NeuronConfig => config;\n\nexport { defineNeuronClientConfig, defineNeuronServerConfig, resolveNeuronConfig };\nexport type { NeuronClientConfig, NeuronServerConfig };\n","import { useCallback, useEffect, useState } from 'react';\nimport type { ListNodesParams, NeuronNode, NeuronNodeCreate, NeuronNodeUpdate } from '../../core/types';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport interface UseNeuronNodesOptions {\n initialFilters?: ListNodesParams;\n pageSize?: number;\n}\n\nexport function useNeuronNodes(options?: UseNeuronNodesOptions) {\n const { api } = useNeuronContext();\n const [nodes, setNodes] = useState<NeuronNode[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [page, setPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n\n const fetchNodes = useCallback(async () => {\n setIsLoading(true);\n try {\n const response = await api.nodes.list({\n ...options?.initialFilters,\n page,\n limit: options?.pageSize ?? 50,\n });\n setNodes(response.nodes);\n setTotalPages(response.pagination.totalPages ?? 1);\n setError(null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setIsLoading(false);\n }\n }, [api, options, page]);\n\n useEffect(() => {\n void fetchNodes();\n }, [fetchNodes]);\n\n return {\n nodes,\n isLoading,\n error,\n createNode: async (data: NeuronNodeCreate) => {\n const response = await api.nodes.create({ nodes: [data] });\n await fetchNodes();\n return response.created[0];\n },\n updateNode: async (id: string, data: NeuronNodeUpdate) => {\n const updated = await api.nodes.update(id, data);\n await fetchNodes();\n return updated as NeuronNode;\n },\n deleteNode: async (id: string) => {\n await api.nodes.delete(id);\n await fetchNodes();\n },\n batchCreate: async (nodesInput: NeuronNodeCreate[]) => {\n const response = await api.nodes.create({ nodes: nodesInput });\n await fetchNodes();\n return response.created;\n },\n search: async (query: string) => {\n const response = await api.nodes.list({ search: query });\n setNodes(response.nodes);\n },\n pagination: {\n page,\n totalPages,\n hasNext: page < totalPages,\n hasPrev: page > 1,\n },\n setPage,\n nextPage: () => setPage((prev) => Math.min(prev + 1, totalPages)),\n prevPage: () => setPage((prev) => Math.max(prev - 1, 1)),\n };\n}\n","import { useState } from 'react';\nimport type { AnalysisRequest, AnalysisResponse, AnalysisRun } from '../../core/types';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport function useNeuronAnalysis() {\n const { api } = useNeuronContext();\n const [activeJobs, setActiveJobs] = useState<AnalysisRun[]>([]);\n const [jobHistory, setJobHistory] = useState<AnalysisRun[]>([]);\n const [isRunning, setIsRunning] = useState(false);\n const [currentProgress, setCurrentProgress] = useState<number | null>(null);\n\n const startAnalysis = async (request: AnalysisRequest): Promise<AnalysisResponse> => {\n setIsRunning(true);\n const response = await api.analyze.start(request);\n setActiveJobs((prev) => [...prev, { ...(response as unknown as AnalysisRun) }]);\n return response;\n };\n\n const cancelJob = async (jobId: string) => {\n await api.analyze.cancel(jobId);\n setActiveJobs((prev) => prev.filter((job) => job.id !== jobId));\n };\n\n const getJobStatus = async (jobId: string) => {\n const response = await api.analyze.getStatus(jobId);\n setJobHistory((prev) => [...prev, response.job]);\n setIsRunning(false);\n setCurrentProgress(response.job.progress ?? null);\n return response.job;\n };\n\n return {\n activeJobs,\n jobHistory,\n startAnalysis,\n cancelJob,\n getJobStatus,\n isRunning,\n currentProgress,\n };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { AnalysisProgressSnapshot, AnalysisJobStatus } from '../../core/types';\nimport { createEvent } from '../../core/events/event-bus';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport type UseNeuronJobStreamOptions = {\n jobId: string;\n enabled?: boolean;\n scope?: string;\n transport?: 'auto' | 'sse' | 'poll';\n pollIntervalMs?: number;\n};\n\nexport type UseNeuronJobStreamResult = {\n status: AnalysisJobStatus | null;\n progress: number | null;\n stage?: string;\n snapshot: AnalysisProgressSnapshot | null;\n error: string | null;\n isStreaming: boolean;\n reconnect: () => void;\n stop: () => void;\n};\n\nconst isTerminalStatus = (status: AnalysisJobStatus | null): boolean =>\n status === 'completed' || status === 'failed' || status === 'cancelled';\n\nexport function useNeuronJobStream(options: UseNeuronJobStreamOptions): UseNeuronJobStreamResult {\n const { api, config, events } = useNeuronContext();\n\n const [status, setStatus] = useState<AnalysisJobStatus | null>(null);\n const [snapshot, setSnapshot] = useState<AnalysisProgressSnapshot | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isStreaming, setIsStreaming] = useState(false);\n\n const [stopped, setStopped] = useState(false);\n const [fallbackToPoll, setFallbackToPoll] = useState(false);\n const [nonce, setNonce] = useState(0);\n\n const stopRef = useRef<(() => void) | null>(null);\n const stoppedRef = useRef(false);\n stoppedRef.current = stopped;\n\n const enabled = (options.enabled ?? true) && !stopped;\n const pollIntervalMs = options.pollIntervalMs ?? 1500;\n\n const canUseEventSource = typeof window !== 'undefined' && typeof EventSource !== 'undefined';\n const desiredTransport = options.transport ?? 'auto';\n const effectiveTransport: 'sse' | 'poll' = useMemo(() => {\n if (desiredTransport === 'poll') return 'poll';\n if (desiredTransport === 'sse') return 'sse';\n if (fallbackToPoll) return 'poll';\n return canUseEventSource ? 'sse' : 'poll';\n }, [desiredTransport, fallbackToPoll, canUseEventSource]);\n\n const reconnect = useCallback(() => {\n setStopped(false);\n setFallbackToPoll(false);\n setError(null);\n setNonce((v) => v + 1);\n }, []);\n\n const stop = useCallback(() => {\n setStopped(true);\n stopRef.current?.();\n stopRef.current = null;\n }, []);\n\n useEffect(() => {\n stopRef.current?.();\n stopRef.current = null;\n\n if (!enabled || !options.jobId) {\n setIsStreaming(false);\n return;\n }\n\n if (effectiveTransport === 'poll') {\n setIsStreaming(false);\n\n const controller = new AbortController();\n stopRef.current = () => controller.abort();\n\n const tick = async () => {\n try {\n const response = await api.analyze.getStatus(options.jobId);\n const progressSnapshot = (response.progress ?? null) as AnalysisProgressSnapshot | null;\n\n if (progressSnapshot) {\n setSnapshot(progressSnapshot);\n setStatus(response.job.status ?? 'running');\n events.emit(createEvent('analysis.job.progress', { ...progressSnapshot, jobId: response.job.id, scope: progressSnapshot.scope }, 'api'));\n }\n\n if (isTerminalStatus(response.job.status ?? null)) {\n setStatus(response.job.status);\n return;\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n }\n };\n\n void tick();\n const interval = setInterval(() => {\n if (controller.signal.aborted) return;\n void tick();\n }, pollIntervalMs);\n\n return () => {\n clearInterval(interval);\n controller.abort();\n };\n }\n\n // SSE\n setIsStreaming(true);\n setError(null);\n\n const basePath = config.api.basePath;\n const scope = options.scope ?? null;\n const streamUrl = new URL(`${basePath}/analyze/${options.jobId}/stream`, typeof window !== 'undefined' ? window.location.origin : 'http://localhost');\n if (scope) {\n streamUrl.searchParams.set('scope', scope);\n }\n\n const es = new EventSource(streamUrl.toString());\n\n const safeJson = (value: string): unknown => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n };\n\n const handleProgress = (event: MessageEvent) => {\n const payload = safeJson(event.data) as Partial<AnalysisProgressSnapshot> & { jobId?: string; scope?: string };\n const nextSnapshot: AnalysisProgressSnapshot | null =\n payload && typeof payload === 'object' ? (payload as AnalysisProgressSnapshot) : null;\n if (nextSnapshot) {\n setSnapshot(nextSnapshot);\n setStatus('running');\n events.emit(createEvent('analysis.job.progress', payload, 'api'));\n }\n };\n\n const handleCompleted = (eventType: 'analysis.job.completed' | 'analysis.job.failed' | 'analysis.job.canceled') => (event: MessageEvent) => {\n const payload = safeJson(event.data) as { error?: string };\n if (eventType === 'analysis.job.failed') {\n setStatus('failed');\n const maybeError = payload && typeof payload === 'object' && 'error' in payload ? (payload as { error?: unknown }).error : undefined;\n setError(typeof maybeError === 'string' ? maybeError : 'Job failed');\n } else if (eventType === 'analysis.job.canceled') {\n setStatus('cancelled');\n } else {\n setStatus('completed');\n }\n events.emit(createEvent(eventType, payload, 'api'));\n es.close();\n setIsStreaming(false);\n };\n\n es.addEventListener('analysis.job.progress', handleProgress as EventListener);\n es.addEventListener('analysis.job.completed', handleCompleted('analysis.job.completed') as EventListener);\n es.addEventListener('analysis.job.failed', handleCompleted('analysis.job.failed') as EventListener);\n es.addEventListener('analysis.job.canceled', handleCompleted('analysis.job.canceled') as EventListener);\n\n es.onerror = () => {\n es.close();\n setIsStreaming(false);\n if (desiredTransport === 'auto' && !stoppedRef.current) {\n setFallbackToPoll(true);\n } else {\n setError('SSE connection error');\n }\n };\n\n stopRef.current = () => {\n es.close();\n setIsStreaming(false);\n };\n\n return () => {\n es.close();\n setIsStreaming(false);\n };\n }, [api, config.api.basePath, effectiveTransport, enabled, events, nonce, options.jobId, options.scope, desiredTransport, pollIntervalMs]);\n\n const progress = snapshot ? (typeof snapshot.overallProgress === 'number' ? snapshot.overallProgress : snapshot.progress) : null;\n\n return {\n status,\n progress,\n stage: snapshot?.stage,\n snapshot,\n error,\n isStreaming,\n reconnect,\n stop,\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { SuggestedEdge } from '../../core/types';\nimport type { ListSuggestionsParams } from '../../core/types/api';\nimport { createEvent } from '../../core/events/event-bus';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport type UseNeuronSuggestionsOptions = Omit<ListSuggestionsParams, 'page'> & {\n page?: number;\n};\n\nexport type UseNeuronSuggestionsResult = {\n suggestions: SuggestedEdge[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n approve: (ids: string | string[]) => Promise<void>;\n reject: (ids: string | string[], reason?: string) => Promise<void>;\n};\n\nexport function useNeuronSuggestions(options: UseNeuronSuggestionsOptions = {}): UseNeuronSuggestionsResult {\n const { api, events } = useNeuronContext();\n\n const [suggestions, setSuggestions] = useState<SuggestedEdge[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const params = useMemo(() => ({ ...options }), [options]);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await api.suggestions.list(params);\n setSuggestions(response.suggestions ?? []);\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setIsLoading(false);\n }\n }, [api.suggestions, params]);\n\n const approve = useCallback(\n async (ids: string | string[]) => {\n const list = Array.isArray(ids) ? ids : [ids];\n if (list.length === 0) return;\n\n setError(null);\n\n try {\n let edgeIds: Array<string | null> = [];\n if (list.length === 1) {\n const result = await api.suggestions.approve(list[0]);\n edgeIds = [result.edgeId];\n } else {\n const result = await api.suggestions.bulkApprove({ ids: list });\n edgeIds = result.edgeIds ?? [];\n }\n\n setSuggestions((prev) =>\n prev.map((s) =>\n list.includes(s.id)\n ? { ...s, status: 'approved', approvedEdgeId: s.approvedEdgeId ?? edgeIds[list.indexOf(s.id)] ?? null }\n : s\n )\n );\n\n events.emit(createEvent('edges.suggestion.approved', { ids: list, edgeIds }, 'api'));\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n }\n },\n [api.suggestions, events]\n );\n\n const reject = useCallback(\n async (ids: string | string[], reason?: string) => {\n const list = Array.isArray(ids) ? ids : [ids];\n if (list.length === 0) return;\n\n setError(null);\n try {\n if (list.length === 1) {\n await api.suggestions.reject(list[0], { reason });\n } else {\n await api.suggestions.bulkReject({ ids: list, reason });\n }\n\n setSuggestions((prev) => prev.map((s) => (list.includes(s.id) ? { ...s, status: 'rejected' } : s)));\n events.emit(createEvent('edges.suggestion.rejected', { ids: list, reason }, 'api'));\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n }\n },\n [api.suggestions, events]\n );\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { suggestions, isLoading, error, refresh, approve, reject };\n}\n","import { useState } from 'react';\nimport type { NeuronSettings, NeuronSettingsUpdate, VisualizationSettings } from '../../core/types';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport function useNeuronSettings() {\n const { settings, api, updateSettings } = useNeuronContext();\n const [isLoading] = useState(false);\n const [isUpdating, setIsUpdating] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const update = async (updates: NeuronSettingsUpdate) => {\n try {\n setIsUpdating(true);\n await updateSettings(updates as Partial<NeuronSettings>);\n } catch (err) {\n setError(err as Error);\n } finally {\n setIsUpdating(false);\n }\n };\n\n const reset = async (sections?: string[]) => {\n await api.settings.reset();\n if (sections?.length) {\n await update({});\n }\n };\n\n return {\n settings,\n isLoading,\n isUpdating,\n error,\n updateSettings: update,\n resetSettings: reset,\n setDomainColor: async (domain: string, color: string) => {\n await update({\n visualization: {\n ...(settings.visualization as VisualizationSettings),\n domainColors: { ...settings.visualization.domainColors, [domain]: color },\n },\n });\n },\n setVisualization: async (updates: Partial<VisualizationSettings>) => {\n await update({ visualization: updates });\n },\n };\n}\n","import { useState } from 'react';\nimport type { FindSimilarOptions, SearchResult, SemanticSearchOptions } from '../../core/types';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport function useNeuronSearch() {\n const { api } = useNeuronContext();\n const [results, setResults] = useState<SearchResult[]>([]);\n const [isSearching, setIsSearching] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const search = async (query: string, options?: SemanticSearchOptions) => {\n setIsSearching(true);\n try {\n const response = await api.search.semantic({ query, ...options });\n setResults(response.results as SearchResult[]);\n setError(null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setIsSearching(false);\n }\n };\n\n const findSimilar = async (nodeId: string, options?: FindSimilarOptions) => {\n setIsSearching(true);\n try {\n const response = await api.search.similar({ nodeId, ...options });\n setResults(response.results as SearchResult[]);\n setError(null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setIsSearching(false);\n }\n };\n\n return {\n results,\n isSearching,\n error,\n search,\n findSimilar,\n clearResults: () => setResults([]),\n };\n}\n","import { useEffect } from 'react';\nimport type { AnalysisRun, NeuronEventType, NeuronNode } from '../../core/types';\nimport type {\n AnalysisCompletedEventPayload,\n AnalysisFailedEventPayload,\n AnalysisProgressEventPayload,\n AnalysisStartedEventPayload,\n EventHandler,\n EventSubscription,\n NodeCreatedEventPayload,\n NodeDeletedEventPayload,\n NodeUpdatedEventPayload,\n} from '../../core/types/events';\nimport { useNeuronContext } from './useNeuronContext';\nimport { createEvent } from '../../core/events/event-bus';\n\nexport function useNeuronEvents() {\n const { events } = useNeuronContext();\n\n return {\n subscribe: <T>(type: NeuronEventType, handler: EventHandler<T>) => {\n useEffect(() => {\n const sub = events.subscribe(type, handler);\n return () => sub.unsubscribe();\n }, [type, handler]);\n },\n emit: <T>(type: NeuronEventType, payload: T) => {\n events.emit(createEvent(type, payload, 'ui'));\n },\n };\n}\n\nexport function useNodeEvents(handlers: {\n onCreated?: (node: NeuronNode) => void;\n onUpdated?: (node: NeuronNode) => void;\n onDeleted?: (nodeId: string) => void;\n}): void {\n const { events } = useNeuronContext();\n\n useEffect(() => {\n const subs: EventSubscription[] = [];\n if (handlers.onCreated) {\n subs.push(\n events.subscribe('node:created', (event) =>\n handlers.onCreated?.((event.payload as NodeCreatedEventPayload).node)\n )\n );\n }\n if (handlers.onUpdated) {\n subs.push(\n events.subscribe('node:updated', (event) =>\n handlers.onUpdated?.((event.payload as NodeUpdatedEventPayload).node)\n )\n );\n }\n if (handlers.onDeleted) {\n subs.push(\n events.subscribe('node:deleted', (event) =>\n handlers.onDeleted?.((event.payload as NodeDeletedEventPayload).nodeId)\n )\n );\n }\n return () => subs.forEach((sub) => sub.unsubscribe());\n }, [handlers]);\n}\n\nexport function useAnalysisEvents(handlers: {\n onStarted?: (jobId: string) => void;\n onProgress?: (jobId: string, progress: number) => void;\n onCompleted?: (job: AnalysisRun) => void;\n onFailed?: (jobId: string, error: string) => void;\n}): void {\n const { events } = useNeuronContext();\n\n useEffect(() => {\n const subs: EventSubscription[] = [];\n if (handlers.onStarted) {\n subs.push(\n events.subscribe('analysis:started', (event) =>\n handlers.onStarted?.((event.payload as AnalysisStartedEventPayload).jobId)\n )\n );\n }\n if (handlers.onProgress) {\n subs.push(\n events.subscribe('analysis:progress', (event) => {\n const payload = event.payload as AnalysisProgressEventPayload;\n return handlers.onProgress?.(payload.jobId, payload.progress);\n })\n );\n }\n if (handlers.onCompleted) {\n subs.push(\n events.subscribe('analysis:completed', (event) =>\n handlers.onCompleted?.((event.payload as AnalysisCompletedEventPayload).job)\n )\n );\n }\n if (handlers.onFailed) {\n subs.push(\n events.subscribe('analysis:failed', (event) => {\n const payload = event.payload as AnalysisFailedEventPayload;\n return handlers.onFailed?.(payload.jobId, payload.error);\n })\n );\n }\n return () => subs.forEach((sub) => sub.unsubscribe());\n }, [handlers]);\n}\n","import type {\n AnalysisRequest,\n AnalysisResponse,\n CancelAnalysisResponse,\n CreateEdgesRequest,\n CreateEdgesResponse,\n CreateNodesRequest,\n CreateNodesResponse,\n DeleteEdgeResponse,\n DeleteNodeResponse,\n ExpandGraphRequest,\n ExpandGraphResponse,\n FindPathRequest,\n FindPathResponse,\n FindSimilarRequest,\n FindSimilarResponse,\n GetAnalysisJobResponse,\n GetGraphParams,\n GetGraphResponse,\n GetNodeResponse,\n GetSettingsResponse,\n ListEdgesParams,\n ListEdgesResponse,\n ListNodesParams,\n ListNodesResponse,\n ListSuggestionsParams,\n ListSuggestionsResponse,\n SemanticSearchRequest,\n SemanticSearchResponse,\n ApproveSuggestionResponse,\n BulkApproveSuggestionsRequest,\n BulkApproveSuggestionsResponse,\n RejectSuggestionRequest,\n RejectSuggestionResponse,\n BulkRejectSuggestionsRequest,\n BulkRejectSuggestionsResponse,\n UpdateEdgeRequest,\n UpdateNodeRequest,\n UpdateSettingsRequest,\n UpdateSettingsResponse,\n ResetSettingsResponse,\n} from '../core/types/api';\n\nexport type NeuronApiClientOptions = {\n /**\n * Optional scope header value to include with every request.\n * Used for multi-tenant isolation (Phase 7D).\n */\n scope?: string;\n /**\n * Optional additional headers to include with every request.\n * Per-request headers override these values.\n */\n headers?: HeadersInit;\n /**\n * Header name for scope (default: `x-neuron-scope`).\n */\n scopeHeader?: string;\n};\n\nexport class NeuronApiClient {\n constructor(\n private basePath: string,\n private options?: NeuronApiClientOptions\n ) {}\n\n private async request<T>(path: string, options?: RequestInit): Promise<T> {\n const headers = new Headers(this.options?.headers);\n if (options?.headers) {\n new Headers(options.headers).forEach((value, key) => headers.set(key, value));\n }\n\n if (!headers.has('Content-Type') && !headers.has('content-type')) {\n headers.set('Content-Type', 'application/json');\n }\n\n const scope = this.options?.scope?.trim();\n if (scope) {\n headers.set(this.options?.scopeHeader ?? 'x-neuron-scope', scope);\n }\n\n const response = await fetch(`${this.basePath}${path}`, {\n ...options,\n headers,\n });\n if (!response.ok) {\n throw new Error(`Request failed: ${response.status}`);\n }\n return response.json() as Promise<T>;\n }\n\n nodes = {\n list: (params?: ListNodesParams) =>\n this.request<ListNodesResponse>(`/nodes?${new URLSearchParams(params as Record<string, string>)}`),\n get: (id: string) => this.request<GetNodeResponse>(`/nodes/${id}`),\n create: (data: CreateNodesRequest) =>\n this.request<CreateNodesResponse>('/nodes', { method: 'POST', body: JSON.stringify(data) }),\n update: (id: string, data: UpdateNodeRequest) =>\n this.request(`/nodes/${id}`, { method: 'PATCH', body: JSON.stringify(data) }),\n delete: (id: string) => this.request<DeleteNodeResponse>(`/nodes/${id}`, { method: 'DELETE' }),\n };\n\n edges = {\n list: (params?: ListEdgesParams) =>\n this.request<ListEdgesResponse>(`/edges?${new URLSearchParams(params as Record<string, string>)}`),\n create: (data: CreateEdgesRequest) =>\n this.request<CreateEdgesResponse>('/edges', { method: 'POST', body: JSON.stringify(data) }),\n update: (id: string, data: UpdateEdgeRequest) =>\n this.request(`/edges/${id}`, { method: 'PATCH', body: JSON.stringify(data) }),\n delete: (id: string) => this.request<DeleteEdgeResponse>(`/edges/${id}`, { method: 'DELETE' }),\n };\n\n graph = {\n get: (params?: GetGraphParams) =>\n this.request<GetGraphResponse>(`/graph?${new URLSearchParams(params as Record<string, string>)}`),\n expand: (data: ExpandGraphRequest) =>\n this.request<ExpandGraphResponse>('/graph/expand', { method: 'POST', body: JSON.stringify(data) }),\n findPath: (data: FindPathRequest) =>\n this.request<FindPathResponse>('/graph/path', { method: 'POST', body: JSON.stringify(data) }),\n };\n\n analyze = {\n start: (data: AnalysisRequest) =>\n this.request<AnalysisResponse>('/analyze', { method: 'POST', body: JSON.stringify(data) }),\n getStatus: (jobId: string) => this.request<GetAnalysisJobResponse>(`/analyze/${jobId}`),\n cancel: (jobId: string) =>\n this.request<CancelAnalysisResponse>(`/analyze/${jobId}/cancel`, { method: 'POST' }),\n };\n\n suggestions = {\n list: (params?: ListSuggestionsParams) =>\n this.request<ListSuggestionsResponse>(`/suggestions?${new URLSearchParams(params as Record<string, string>)}`),\n approve: (id: string) =>\n this.request<ApproveSuggestionResponse>(`/suggestions/${id}/approve`, { method: 'POST' }),\n bulkApprove: (data: BulkApproveSuggestionsRequest) =>\n this.request<BulkApproveSuggestionsResponse>('/suggestions/approve', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n reject: (id: string, data: RejectSuggestionRequest = {}) =>\n this.request<RejectSuggestionResponse>(`/suggestions/${id}/reject`, { method: 'POST', body: JSON.stringify(data) }),\n bulkReject: (data: BulkRejectSuggestionsRequest) =>\n this.request<BulkRejectSuggestionsResponse>('/suggestions/reject', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n };\n\n settings = {\n get: () => this.request<GetSettingsResponse>('/settings'),\n update: (data: UpdateSettingsRequest) =>\n this.request<UpdateSettingsResponse>('/settings', { method: 'PATCH', body: JSON.stringify(data) }),\n reset: () => this.request<ResetSettingsResponse>('/settings/reset', { method: 'POST' }),\n };\n\n search = {\n semantic: (data: SemanticSearchRequest) =>\n this.request<SemanticSearchResponse>('/search', { method: 'POST', body: JSON.stringify(data) }),\n similar: (data: FindSimilarRequest) =>\n this.request<FindSimilarResponse>('/search/similar', { method: 'POST', body: JSON.stringify(data) }),\n };\n}\n","'use client';\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport type { NeuronSettings, NeuronConfig, NeuronSettingsUpdate } from '../core/types/settings';\nimport type { NeuronEvent } from '../core/types/events';\nimport { DEFAULT_ANALYSIS_SETTINGS, DEFAULT_VISUALIZATION_SETTINGS } from '../core/types/settings';\nimport { EventBus } from '../core/events/event-bus';\nimport { NeuronApiClient } from './api-client';\nimport { NeuronContext, type ErrorContext } from './context';\nimport { VERSION } from '../version';\n\nexport interface NeuronWebProviderProps {\n children: React.ReactNode;\n config: {\n /** Client-safe API base path (default: `/api/neuron`) */\n apiBasePath?: string;\n /** Optional tenant scope (sent as `x-neuron-scope` by the API client). */\n scope?: string;\n settings?: Partial<NeuronSettings>;\n onEvent?: (event: NeuronEvent) => void;\n onError?: (error: Error, context: ErrorContext) => void;\n /**\n * @deprecated Secrets must be server-only. Do not pass OpenAI API keys to client components.\n */\n openaiApiKey?: string;\n /**\n * @deprecated Database connection strings are server-only. Configure databases in server routes.\n */\n databaseUrl?: string;\n };\n}\n\nconst buildDefaultConfig = (overrides?: Partial<NeuronSettings>): NeuronConfig => ({\n instance: {\n name: 'default',\n version: VERSION,\n repoName: 'omi-neuron-web',\n },\n visualization: { ...DEFAULT_VISUALIZATION_SETTINGS, ...(overrides?.visualization ?? {}) },\n analysis: { ...DEFAULT_ANALYSIS_SETTINGS, ...(overrides?.analysis ?? {}) },\n nodeTypes: overrides?.nodeTypes ?? [],\n domains: overrides?.domains ?? [],\n relationshipTypes: overrides?.relationshipTypes ?? [],\n openai: {\n apiKey: '',\n },\n database: {\n mode: 'external',\n port: 5433,\n url: undefined,\n },\n api: {\n basePath: '/api/neuron',\n enableCors: false,\n },\n logging: {\n level: 'info',\n prettyPrint: true,\n },\n});\n\nexport function NeuronWebProvider({ children, config }: NeuronWebProviderProps): React.ReactElement {\n const [settings, setSettings] = useState<NeuronSettings>(() =>\n buildDefaultConfig(config.settings) as NeuronSettings\n );\n const [error, setError] = useState<Error | null>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n\n const resolvedConfig = useMemo(() => {\n const base = buildDefaultConfig(config.settings);\n return {\n ...base,\n api: {\n ...base.api,\n basePath: config.apiBasePath ?? base.api.basePath,\n },\n } as NeuronConfig;\n }, [config]);\n\n const apiClient = useMemo(\n () => new NeuronApiClient(resolvedConfig.api.basePath, { scope: config.scope }),\n [resolvedConfig.api.basePath, config.scope]\n );\n const eventBus = useMemo(() => new EventBus(), []);\n\n useEffect(() => {\n eventBus.subscribeAll((event) => config.onEvent?.(event));\n }, [eventBus, config]);\n\n useEffect(() => {\n let mounted = true;\n apiClient\n .settings.get()\n .then((response) => {\n if (mounted) {\n setSettings(response.settings as NeuronSettings);\n setIsInitialized(true);\n }\n })\n .catch((err) => {\n setError(err as Error);\n config.onError?.(err as Error, { message: 'Failed to load settings' });\n });\n return () => {\n mounted = false;\n };\n }, [apiClient]);\n\n const updateSettings = async (updates: Partial<NeuronSettings>) => {\n const response = await apiClient.settings.update(updates as NeuronSettingsUpdate);\n setSettings(response.settings as NeuronSettings);\n };\n\n const resetSettings = async () => {\n const response = await apiClient.settings.reset();\n setSettings(response.settings as NeuronSettings);\n };\n\n const contextValue = useMemo(\n () => ({\n config: resolvedConfig,\n settings,\n api: apiClient,\n events: eventBus,\n isInitialized,\n error,\n updateSettings,\n resetSettings,\n onEvent: config.onEvent,\n onError: config.onError,\n }),\n [resolvedConfig, settings, apiClient, eventBus, isInitialized, error, config]\n );\n\n return <NeuronContext.Provider value={contextValue}>{children}</NeuronContext.Provider>;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/schemas/cluster.ts","../src/core/events/helpers.ts","../src/core/events/middleware/logging.ts","../src/core/events/middleware/validation.ts","../src/core/analysis/data-processor.ts","../src/core/analysis/scoring-engine.ts","../src/core/providers/testing/mock-embedding-provider.ts","../src/core/providers/testing/mock-llm-provider.ts","../src/config/client.ts","../src/version.ts","../src/config/server.ts","../src/config/index.ts","../src/react/hooks/useNeuronNodes.ts","../src/react/hooks/useNeuronAnalysis.ts","../src/react/hooks/useNeuronJobStream.ts","../src/react/hooks/useNeuronSuggestions.ts","../src/react/hooks/useNeuronSettings.ts","../src/react/hooks/useNeuronSearch.ts","../src/react/hooks/useNeuronEvents.ts","../src/react/api-client.ts","../src/react/NeuronWebProvider.tsx","../src/react/static/in-memory-api-client.ts","../src/react/StaticDataProvider.tsx"],"names":["z","createEvent","nodeCreateSchema","slugify","crypto","DEFAULT_VISUALIZATION_SETTINGS","DEFAULT_ANALYSIS_SETTINGS","useNeuronContext","useState","useCallback","useEffect","useRef","useMemo","EventBus","NeuronContext","id","buildDefaultConfig","jsx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod';\n\nexport const clusteringConfigSchema = z.object({\n algorithm: z.enum(['kmeans', 'dbscan', 'hierarchical']),\n clusterCount: z.coerce.number().int().min(1).optional(),\n minClusterSize: z.coerce.number().int().min(1).optional(),\n similarityThreshold: z.coerce.number().min(0).max(1).optional(),\n epsilon: z.coerce.number().min(0).optional(),\n minSamples: z.coerce.number().int().min(1).optional(),\n});\n\nexport const clusterCreateSchema = z.object({\n label: z.string().min(1).max(255),\n clusterType: z.string().max(100).optional(),\n centroid: z.array(z.number()).optional(),\n memberCount: z.number().int().min(0).optional(),\n avgSimilarity: z.number().min(0).max(1).optional(),\n cohesion: z.number().min(0).max(1).optional(),\n description: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const clusterUpdateSchema = clusterCreateSchema.partial();\n\nexport type ClusteringConfigInput = z.infer<typeof clusteringConfigSchema>;\nexport type ClusterCreateInput = z.infer<typeof clusterCreateSchema>;\nexport type ClusterUpdateInput = z.infer<typeof clusterUpdateSchema>;\n","import type {\n AnalysisCompletedEventPayload,\n AnalysisFailedEventPayload,\n AnalysisProgressEventPayload,\n AnalysisStartedEventPayload,\n EdgeCreatedEventPayload,\n EdgeDeletedEventPayload,\n EdgeUpdatedEventPayload,\n EventSource,\n NeuronEvent,\n NeuronEventType,\n NodeBatchCreatedEventPayload,\n NodeCreatedEventPayload,\n NodeDeletedEventPayload,\n NodeUpdatedEventPayload,\n} from '../types/events';\nimport { createEvent } from './event-bus';\n\nexport const createNodeEvent = (\n type: 'node:created' | 'node:updated' | 'node:deleted' | 'node:batch_created',\n payload:\n | NodeCreatedEventPayload\n | NodeUpdatedEventPayload\n | NodeDeletedEventPayload\n | NodeBatchCreatedEventPayload,\n source: EventSource = 'system'\n): NeuronEvent => createEvent(type, payload, source);\n\nexport const createEdgeEvent = (\n type: 'edge:created' | 'edge:updated' | 'edge:deleted',\n payload: EdgeCreatedEventPayload | EdgeUpdatedEventPayload | EdgeDeletedEventPayload,\n source: EventSource = 'system'\n): NeuronEvent => createEvent(type, payload, source);\n\nexport const createAnalysisEvent = (\n type: 'analysis:started' | 'analysis:progress' | 'analysis:completed' | 'analysis:failed',\n payload:\n | AnalysisStartedEventPayload\n | AnalysisProgressEventPayload\n | AnalysisCompletedEventPayload\n | AnalysisFailedEventPayload,\n source: EventSource = 'analysis'\n): NeuronEvent => createEvent(type, payload, source);\n\nexport const createGenericEvent = <T>(\n type: NeuronEventType,\n payload: T,\n source: EventSource = 'system'\n): NeuronEvent<T> => createEvent(type, payload, source);\n","import type { EventMiddleware } from '../event-bus';\n\nexport const loggingMiddleware: EventMiddleware = (event, next) => {\n // eslint-disable-next-line no-console\n console.debug(`[omi-neuron:event] ${event.type}`, event);\n void next();\n};\n","import type { EventMiddleware } from '../event-bus';\n\nexport const validationMiddleware: EventMiddleware = (event, next) => {\n if (!event.type) {\n throw new Error('Event missing type');\n }\n if (!event.timestamp) {\n throw new Error('Event missing timestamp');\n }\n return next();\n};\n","import slugify from 'slugify';\nimport { nodeCreateSchema } from '../schemas/node';\nimport type { NeuronNodeCreate } from '../types/node';\n\nexport interface ProcessingOptions {\n skipDuplicates?: boolean;\n updateOnConflict?: boolean;\n defaultNodeType?: string;\n defaultDomain?: string;\n contentFields?: string[];\n labelField?: string;\n slugField?: string;\n metadataFields?: string[];\n}\n\nconst stripHtml = (value: string) => value.replace(/<[^>]+>/g, ' ');\n\nconst normalizeValue = (value: unknown): string | undefined => {\n if (value === null || value === undefined) return undefined;\n if (value instanceof Date) return value.toISOString();\n if (Array.isArray(value)) return value.map((item) => normalizeValue(item)).filter(Boolean).join(' ');\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\nconst flattenObject = (obj: Record<string, unknown>, prefix = ''): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const nextKey = prefix ? `${prefix}.${key}` : key;\n if (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\n Object.assign(result, flattenObject(value as Record<string, unknown>, nextKey));\n } else {\n result[nextKey] = value;\n }\n }\n return result;\n};\n\nexport class DataProcessor {\n constructor(private options: ProcessingOptions = {}) {}\n\n processItem(item: Record<string, unknown>): NeuronNodeCreate {\n const flattened = flattenObject(item);\n const labelField = this.options.labelField ?? 'label';\n const label = normalizeValue(flattened[labelField]) ?? 'Untitled';\n\n const slugField = this.options.slugField;\n const slug = slugField ? normalizeValue(flattened[slugField]) : undefined;\n\n const content = this.extractContent(flattened);\n const metadata = this.extractMetadata(flattened);\n\n const node: NeuronNodeCreate = {\n slug,\n label,\n nodeType: this.options.defaultNodeType,\n domain: this.options.defaultDomain,\n content,\n metadata,\n };\n\n return nodeCreateSchema.parse(node);\n }\n\n processBatch(items: Record<string, unknown>[]): {\n nodes: NeuronNodeCreate[];\n errors: Array<{ index: number; error: string }>;\n } {\n const nodes: NeuronNodeCreate[] = [];\n const errors: Array<{ index: number; error: string }> = [];\n\n items.forEach((item, index) => {\n try {\n nodes.push(this.processItem(item));\n } catch (error) {\n errors.push({\n index,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n\n return { nodes, errors };\n }\n\n processJSON(json: string): NeuronNodeCreate[] {\n const parsed = JSON.parse(json);\n if (Array.isArray(parsed)) {\n return this.processBatch(parsed).nodes;\n }\n return [this.processItem(parsed)];\n }\n\n processCSV(csv: string): NeuronNodeCreate[] {\n const lines = csv.trim().split(/\\r?\\n/);\n if (lines.length === 0) return [];\n const headers = lines[0].split(',').map((h) => h.trim());\n const items = lines.slice(1).map((line) => {\n const values = line.split(',');\n const item: Record<string, unknown> = {};\n headers.forEach((header, idx) => {\n item[header] = values[idx]?.trim();\n });\n return item;\n });\n return this.processBatch(items).nodes;\n }\n\n generateSlug(label: string, existingSlugs: Set<string> = new Set()): string {\n const base = slugify(label, { lower: true, strict: true, trim: true }).slice(0, 255);\n if (!existingSlugs.has(base)) return base;\n let suffix = 1;\n let slug = `${base}-${suffix}`;\n while (existingSlugs.has(slug)) {\n suffix += 1;\n slug = `${base}-${suffix}`;\n }\n return slug;\n }\n\n extractContent(item: Record<string, unknown>): string {\n const fields = this.options.contentFields ?? ['label', 'summary', 'description', 'content'];\n const parts = fields\n .map((field) => normalizeValue(item[field]))\n .filter((value): value is string => Boolean(value));\n const joined = parts.join(' ');\n return stripHtml(joined).replace(/\\s+/g, ' ').trim();\n }\n\n detectDuplicates(nodes: NeuronNodeCreate[]): {\n unique: NeuronNodeCreate[];\n duplicates: Array<{ node: NeuronNodeCreate; reason: string }>;\n } {\n const seen = new Set<string>();\n const unique: NeuronNodeCreate[] = [];\n const duplicates: Array<{ node: NeuronNodeCreate; reason: string }> = [];\n\n nodes.forEach((node) => {\n const slug = node.slug ?? this.generateSlug(node.label, seen);\n if (seen.has(slug)) {\n duplicates.push({ node, reason: `Duplicate slug: ${slug}` });\n return;\n }\n seen.add(slug);\n unique.push({ ...node, slug });\n });\n\n return { unique, duplicates };\n }\n\n private extractMetadata(item: Record<string, unknown>): Record<string, unknown> | undefined {\n if (!this.options.metadataFields?.length) return undefined;\n const metadata: Record<string, unknown> = {};\n this.options.metadataFields.forEach((field) => {\n if (field in item) {\n metadata[field] = item[field];\n }\n });\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n }\n}\n","import type { Database } from '../../storage/database';\nimport type { NeuronNode } from '../types/node';\n\nexport interface ScoringConfig {\n similarityWeight: number;\n connectionWeight: number;\n recencyWeight: number;\n domainBoost: number;\n}\n\nexport interface ScoredNode {\n node: NeuronNode;\n score: number;\n breakdown: {\n similarity: number;\n connections: number;\n recency: number;\n domainMatch: number;\n };\n}\n\nconst DEFAULT_CONFIG: ScoringConfig = {\n similarityWeight: 0.6,\n connectionWeight: 0.2,\n recencyWeight: 0.1,\n domainBoost: 0.1,\n};\n\nexport class ScoringEngine {\n private config: ScoringConfig;\n\n constructor(private db: Database, config?: ScoringConfig) {\n this.config = { ...DEFAULT_CONFIG, ...(config ?? {}) };\n }\n\n cosineSimilarity(a: number[], b: number[]): number {\n let dot = 0;\n let magA = 0;\n let magB = 0;\n for (let i = 0; i < a.length; i += 1) {\n dot += a[i] * b[i];\n magA += a[i] * a[i];\n magB += b[i] * b[i];\n }\n if (magA === 0 || magB === 0) return 0;\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n }\n\n async semanticSimilarity(nodeA: string, nodeB: string): Promise<number> {\n const rows = await this.db.query<{ similarity: number }>(\n 'SELECT 1 - (a.embedding <=> b.embedding) as similarity FROM nodes a JOIN nodes b ON b.id = $2 WHERE a.id = $1',\n [nodeA, nodeB]\n );\n return rows[0]?.similarity ?? 0;\n }\n\n async scoreForQuery(queryEmbedding: number[], nodeIds?: string[]): Promise<ScoredNode[]> {\n const filterClause = nodeIds?.length ? 'AND id = ANY($2)' : '';\n const values = nodeIds?.length ? [queryEmbedding, nodeIds] : [queryEmbedding];\n const nodes = await this.db.query<NeuronNode & { similarity: number }>(\n `SELECT *, 1 - (embedding <=> $1) as similarity FROM nodes WHERE embedding IS NOT NULL ${filterClause} ORDER BY embedding <=> $1`,\n values\n );\n\n return nodes.map((node) => this.applyScoring(node, node.similarity ?? 0));\n }\n\n async findSimilar(nodeId: string, limit = 10, excludeConnected = false): Promise<ScoredNode[]> {\n const base = excludeConnected\n ? `SELECT id FROM nodes WHERE id NOT IN (SELECT to_node_id FROM edges WHERE from_node_id = $1)`\n : `SELECT id FROM nodes WHERE id != $1`;\n const nodes = await this.db.query<NeuronNode & { similarity: number }>(\n `SELECT n.*, 1 - (n.embedding <=> (SELECT embedding FROM nodes WHERE id = $1)) as similarity\n FROM nodes n\n WHERE n.embedding IS NOT NULL AND n.id IN (${base})\n ORDER BY n.embedding <=> (SELECT embedding FROM nodes WHERE id = $1)\n LIMIT $2`,\n [nodeId, limit]\n );\n\n return nodes.map((node) => this.applyScoring(node, node.similarity ?? 0));\n }\n\n async calculateNodeImportance(nodeId: string): Promise<number> {\n const row = await this.db.queryOne<{ importance: number }>(\n `WITH edge_weights AS (\n SELECT to_node_id, SUM(strength) as total_inbound\n FROM edges\n GROUP BY to_node_id\n )\n SELECT COALESCE(ew.total_inbound, 0) + (n.connection_count * 0.1) as importance\n FROM nodes n\n LEFT JOIN edge_weights ew ON n.id = ew.to_node_id\n WHERE n.id = $1`,\n [nodeId]\n );\n return row?.importance ?? 0;\n }\n\n async rankAllNodes(): Promise<Array<{ nodeId: string; importance: number }>> {\n const rows = await this.db.query<{ id: string; importance: number }>(\n `WITH edge_weights AS (\n SELECT to_node_id, SUM(strength) as total_inbound\n FROM edges\n GROUP BY to_node_id\n )\n SELECT n.id, COALESCE(ew.total_inbound, 0) + (n.connection_count * 0.1) as importance\n FROM nodes n\n LEFT JOIN edge_weights ew ON n.id = ew.to_node_id\n ORDER BY importance DESC`\n );\n return rows.map((row) => ({ nodeId: row.id, importance: row.importance }));\n }\n\n async scoreRelevance(\n sourceNodeId: string,\n candidateNodeIds: string[],\n context?: string\n ): Promise<ScoredNode[]> {\n const nodes = await this.db.query<NeuronNode & { similarity: number }>(\n `SELECT *, 1 - (embedding <=> (SELECT embedding FROM nodes WHERE id = $1)) as similarity\n FROM nodes\n WHERE embedding IS NOT NULL AND id = ANY($2)\n ORDER BY embedding <=> (SELECT embedding FROM nodes WHERE id = $1)`,\n [sourceNodeId, candidateNodeIds]\n );\n\n return nodes.map((node) => {\n const base = this.applyScoring(node, node.similarity ?? 0);\n if (context) {\n base.score += this.config.domainBoost * 0.1;\n }\n return base;\n });\n }\n\n private applyScoring(node: NeuronNode & { similarity?: number }, similarity: number): ScoredNode {\n const connections = node.connectionCount ?? 0;\n const recency = node.updatedAt ? Math.max(0, 1 - (Date.now() - new Date(node.updatedAt).getTime()) / (1000 * 60 * 60 * 24 * 30)) : 0;\n const domainMatch = 0;\n\n const score =\n similarity * this.config.similarityWeight +\n connections * this.config.connectionWeight +\n recency * this.config.recencyWeight +\n domainMatch * this.config.domainBoost;\n\n return {\n node,\n score,\n breakdown: {\n similarity,\n connections,\n recency,\n domainMatch,\n },\n };\n }\n}\n","import crypto from 'node:crypto';\nimport type { EmbeddingProvider, EmbeddingRequest, EmbeddingResponse } from '../embedding-provider';\n\nexport type MockEmbeddingProviderOptions = {\n dimensions?: number;\n};\n\n/**\n * Deterministic embedding provider for tests.\n * Produces a stable vector per input string (not meaningful semantically).\n */\nexport class MockEmbeddingProvider implements EmbeddingProvider {\n readonly name = 'mock';\n\n private dimensions: number;\n\n constructor(options?: MockEmbeddingProviderOptions) {\n this.dimensions = Math.max(1, options?.dimensions ?? 8);\n }\n\n async embed(request: EmbeddingRequest): Promise<EmbeddingResponse> {\n const inputs = Array.isArray(request.input) ? request.input : [request.input];\n const dims = request.dimensions ?? this.dimensions;\n\n const embeddings = inputs.map((text) => this.embedText(text, dims));\n return {\n embeddings,\n model: request.model,\n usage: {\n promptTokens: inputs.reduce((sum, t) => sum + Math.ceil(t.length / 4), 0),\n totalTokens: inputs.reduce((sum, t) => sum + Math.ceil(t.length / 4), 0),\n },\n };\n }\n\n private embedText(text: string, dims: number): number[] {\n const hash = crypto.createHash('sha256').update(text).digest();\n const vector = new Array(dims).fill(0).map((_, idx) => {\n const byte = hash[idx % hash.length];\n // map 0..255 -> -1..1\n return (byte / 127.5) - 1;\n });\n return vector;\n }\n}\n\n","import type { LLMProvider, LLMRequest, LLMResponse } from '../llm-provider';\n\nexport type MockLLMProviderOptions = {\n responder?: (request: LLMRequest) => Promise<LLMResponse> | LLMResponse;\n defaultJson?: Record<string, unknown>;\n};\n\n/**\n * Deterministic LLM provider for tests.\n * By default returns a minimal JSON payload with hasRelationship=false.\n */\nexport class MockLLMProvider implements LLMProvider {\n readonly name = 'mock';\n\n private responder: (request: LLMRequest) => Promise<LLMResponse>;\n\n constructor(options?: MockLLMProviderOptions) {\n const fallback = options?.defaultJson ?? { hasRelationship: false };\n this.responder = async (request) => {\n const response = options?.responder?.(request);\n if (response) return await response;\n return {\n content: JSON.stringify(fallback),\n model: request.model,\n usage: {\n inputTokens: Math.ceil(request.prompt.length / 4),\n outputTokens: Math.ceil(JSON.stringify(fallback).length / 4),\n totalTokens: Math.ceil((request.prompt.length + JSON.stringify(fallback).length) / 4),\n },\n };\n };\n }\n\n async generate(request: LLMRequest): Promise<LLMResponse> {\n return this.responder(request);\n }\n}\n\n","import type { NeuronClientConfig } from '../core/types/settings';\n\nexport const defineNeuronClientConfig = (config: NeuronClientConfig): NeuronClientConfig => config;\n\n","export const VERSION = '0.2.22';\n","import type { NeuronConfig, NeuronServerConfig, NeuronSettings } from '../core/types/settings';\nimport { DEFAULT_ANALYSIS_SETTINGS, DEFAULT_VISUALIZATION_SETTINGS } from '../core/types/settings';\nimport { VERSION } from '../version';\n\nconst buildDefaultNeuronConfig = (overrides?: Partial<NeuronSettings>): NeuronConfig => ({\n instance: {\n name: overrides?.instance?.name ?? 'default',\n version: overrides?.instance?.version ?? VERSION,\n repoName: overrides?.instance?.repoName ?? 'omi-neuron-web',\n },\n visualization: { ...DEFAULT_VISUALIZATION_SETTINGS, ...(overrides?.visualization ?? {}) },\n analysis: { ...DEFAULT_ANALYSIS_SETTINGS, ...(overrides?.analysis ?? {}) },\n nodeTypes: overrides?.nodeTypes ?? [],\n domains: overrides?.domains ?? [],\n relationshipTypes: overrides?.relationshipTypes ?? [],\n openai: {\n apiKey: '',\n },\n database: {\n mode: 'external',\n port: 5433,\n url: undefined,\n },\n api: {\n basePath: '/api/neuron',\n enableCors: false,\n },\n logging: {\n level: 'info',\n prettyPrint: true,\n },\n});\n\nexport const defineNeuronServerConfig = (config: NeuronServerConfig): NeuronServerConfig => config;\n\n/**\n * Resolve a full legacy `NeuronConfig` from a layered server config.\n * This is primarily a compatibility helper so existing factories can continue to accept `NeuronConfig`.\n */\nexport const resolveNeuronConfig = (server: NeuronServerConfig): NeuronConfig => {\n const base = buildDefaultNeuronConfig(server.settings);\n return {\n ...base,\n openai: server.openai,\n database: server.database,\n storage: server.storage,\n api: { ...base.api, ...(server.api ?? {}) },\n logging: { ...base.logging, ...(server.logging ?? {}) },\n };\n};\n","import type { NeuronConfig } from '../core/types/settings';\nimport type { NeuronClientConfig, NeuronServerConfig } from '../core/types/settings';\nimport { defineNeuronClientConfig } from './client';\nimport { defineNeuronServerConfig, resolveNeuronConfig } from './server';\n\nexport const defineNeuronConfig = (config: NeuronConfig): NeuronConfig => config;\n\nexport { defineNeuronClientConfig, defineNeuronServerConfig, resolveNeuronConfig };\nexport type { NeuronClientConfig, NeuronServerConfig };\n","import { useCallback, useEffect, useState } from 'react';\nimport type { ListNodesParams, NeuronNode, NeuronNodeCreate, NeuronNodeUpdate } from '../../core/types';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport interface UseNeuronNodesOptions {\n initialFilters?: ListNodesParams;\n pageSize?: number;\n}\n\nexport function useNeuronNodes(options?: UseNeuronNodesOptions) {\n const { api } = useNeuronContext();\n const [nodes, setNodes] = useState<NeuronNode[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [page, setPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n\n const fetchNodes = useCallback(async () => {\n setIsLoading(true);\n try {\n const response = await api.nodes.list({\n ...options?.initialFilters,\n page,\n limit: options?.pageSize ?? 50,\n });\n setNodes(response.nodes);\n setTotalPages(response.pagination.totalPages ?? 1);\n setError(null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setIsLoading(false);\n }\n }, [api, options, page]);\n\n useEffect(() => {\n void fetchNodes();\n }, [fetchNodes]);\n\n return {\n nodes,\n isLoading,\n error,\n createNode: async (data: NeuronNodeCreate) => {\n const response = await api.nodes.create({ nodes: [data] });\n await fetchNodes();\n return response.created[0];\n },\n updateNode: async (id: string, data: NeuronNodeUpdate) => {\n const updated = await api.nodes.update(id, data);\n await fetchNodes();\n return updated as NeuronNode;\n },\n deleteNode: async (id: string) => {\n await api.nodes.delete(id);\n await fetchNodes();\n },\n batchCreate: async (nodesInput: NeuronNodeCreate[]) => {\n const response = await api.nodes.create({ nodes: nodesInput });\n await fetchNodes();\n return response.created;\n },\n search: async (query: string) => {\n const response = await api.nodes.list({ search: query });\n setNodes(response.nodes);\n },\n pagination: {\n page,\n totalPages,\n hasNext: page < totalPages,\n hasPrev: page > 1,\n },\n setPage,\n nextPage: () => setPage((prev) => Math.min(prev + 1, totalPages)),\n prevPage: () => setPage((prev) => Math.max(prev - 1, 1)),\n };\n}\n","import { useState } from 'react';\nimport type { AnalysisRequest, AnalysisResponse, AnalysisRun } from '../../core/types';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport function useNeuronAnalysis() {\n const { api } = useNeuronContext();\n const [activeJobs, setActiveJobs] = useState<AnalysisRun[]>([]);\n const [jobHistory, setJobHistory] = useState<AnalysisRun[]>([]);\n const [isRunning, setIsRunning] = useState(false);\n const [currentProgress, setCurrentProgress] = useState<number | null>(null);\n\n const startAnalysis = async (request: AnalysisRequest): Promise<AnalysisResponse> => {\n setIsRunning(true);\n const response = await api.analyze.start(request);\n setActiveJobs((prev) => [...prev, { ...(response as unknown as AnalysisRun) }]);\n return response;\n };\n\n const cancelJob = async (jobId: string) => {\n await api.analyze.cancel(jobId);\n setActiveJobs((prev) => prev.filter((job) => job.id !== jobId));\n };\n\n const getJobStatus = async (jobId: string) => {\n const response = await api.analyze.getStatus(jobId);\n setJobHistory((prev) => [...prev, response.job]);\n setIsRunning(false);\n setCurrentProgress(response.job.progress ?? null);\n return response.job;\n };\n\n return {\n activeJobs,\n jobHistory,\n startAnalysis,\n cancelJob,\n getJobStatus,\n isRunning,\n currentProgress,\n };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { AnalysisProgressSnapshot, AnalysisJobStatus } from '../../core/types';\nimport { createEvent } from '../../core/events/event-bus';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport type UseNeuronJobStreamOptions = {\n jobId: string;\n enabled?: boolean;\n scope?: string;\n transport?: 'auto' | 'sse' | 'poll';\n pollIntervalMs?: number;\n};\n\nexport type UseNeuronJobStreamResult = {\n status: AnalysisJobStatus | null;\n progress: number | null;\n stage?: string;\n snapshot: AnalysisProgressSnapshot | null;\n error: string | null;\n isStreaming: boolean;\n reconnect: () => void;\n stop: () => void;\n};\n\nconst isTerminalStatus = (status: AnalysisJobStatus | null): boolean =>\n status === 'completed' || status === 'failed' || status === 'cancelled';\n\nexport function useNeuronJobStream(options: UseNeuronJobStreamOptions): UseNeuronJobStreamResult {\n const { api, config, events } = useNeuronContext();\n\n const [status, setStatus] = useState<AnalysisJobStatus | null>(null);\n const [snapshot, setSnapshot] = useState<AnalysisProgressSnapshot | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isStreaming, setIsStreaming] = useState(false);\n\n const [stopped, setStopped] = useState(false);\n const [fallbackToPoll, setFallbackToPoll] = useState(false);\n const [nonce, setNonce] = useState(0);\n\n const stopRef = useRef<(() => void) | null>(null);\n const stoppedRef = useRef(false);\n stoppedRef.current = stopped;\n\n const enabled = (options.enabled ?? true) && !stopped;\n const pollIntervalMs = options.pollIntervalMs ?? 1500;\n\n const canUseEventSource = typeof window !== 'undefined' && typeof EventSource !== 'undefined';\n const desiredTransport = options.transport ?? 'auto';\n const effectiveTransport: 'sse' | 'poll' = useMemo(() => {\n if (desiredTransport === 'poll') return 'poll';\n if (desiredTransport === 'sse') return 'sse';\n if (fallbackToPoll) return 'poll';\n return canUseEventSource ? 'sse' : 'poll';\n }, [desiredTransport, fallbackToPoll, canUseEventSource]);\n\n const reconnect = useCallback(() => {\n setStopped(false);\n setFallbackToPoll(false);\n setError(null);\n setNonce((v) => v + 1);\n }, []);\n\n const stop = useCallback(() => {\n setStopped(true);\n stopRef.current?.();\n stopRef.current = null;\n }, []);\n\n useEffect(() => {\n stopRef.current?.();\n stopRef.current = null;\n\n if (!enabled || !options.jobId) {\n setIsStreaming(false);\n return;\n }\n\n if (effectiveTransport === 'poll') {\n setIsStreaming(false);\n\n const controller = new AbortController();\n stopRef.current = () => controller.abort();\n\n const tick = async () => {\n try {\n const response = await api.analyze.getStatus(options.jobId);\n const progressSnapshot = (response.progress ?? null) as AnalysisProgressSnapshot | null;\n\n if (progressSnapshot) {\n setSnapshot(progressSnapshot);\n setStatus(response.job.status ?? 'running');\n events.emit(createEvent('analysis.job.progress', { ...progressSnapshot, jobId: response.job.id, scope: progressSnapshot.scope }, 'api'));\n }\n\n if (isTerminalStatus(response.job.status ?? null)) {\n setStatus(response.job.status);\n return;\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n }\n };\n\n void tick();\n const interval = setInterval(() => {\n if (controller.signal.aborted) return;\n void tick();\n }, pollIntervalMs);\n\n return () => {\n clearInterval(interval);\n controller.abort();\n };\n }\n\n // SSE\n setIsStreaming(true);\n setError(null);\n\n const basePath = config.api.basePath;\n const scope = options.scope ?? null;\n const streamUrl = new URL(`${basePath}/analyze/${options.jobId}/stream`, typeof window !== 'undefined' ? window.location.origin : 'http://localhost');\n if (scope) {\n streamUrl.searchParams.set('scope', scope);\n }\n\n const es = new EventSource(streamUrl.toString());\n\n const safeJson = (value: string): unknown => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n };\n\n const handleProgress = (event: MessageEvent) => {\n const payload = safeJson(event.data) as Partial<AnalysisProgressSnapshot> & { jobId?: string; scope?: string };\n const nextSnapshot: AnalysisProgressSnapshot | null =\n payload && typeof payload === 'object' ? (payload as AnalysisProgressSnapshot) : null;\n if (nextSnapshot) {\n setSnapshot(nextSnapshot);\n setStatus('running');\n events.emit(createEvent('analysis.job.progress', payload, 'api'));\n }\n };\n\n const handleCompleted = (eventType: 'analysis.job.completed' | 'analysis.job.failed' | 'analysis.job.canceled') => (event: MessageEvent) => {\n const payload = safeJson(event.data) as { error?: string };\n if (eventType === 'analysis.job.failed') {\n setStatus('failed');\n const maybeError = payload && typeof payload === 'object' && 'error' in payload ? (payload as { error?: unknown }).error : undefined;\n setError(typeof maybeError === 'string' ? maybeError : 'Job failed');\n } else if (eventType === 'analysis.job.canceled') {\n setStatus('cancelled');\n } else {\n setStatus('completed');\n }\n events.emit(createEvent(eventType, payload, 'api'));\n es.close();\n setIsStreaming(false);\n };\n\n es.addEventListener('analysis.job.progress', handleProgress as EventListener);\n es.addEventListener('analysis.job.completed', handleCompleted('analysis.job.completed') as EventListener);\n es.addEventListener('analysis.job.failed', handleCompleted('analysis.job.failed') as EventListener);\n es.addEventListener('analysis.job.canceled', handleCompleted('analysis.job.canceled') as EventListener);\n\n es.onerror = () => {\n es.close();\n setIsStreaming(false);\n if (desiredTransport === 'auto' && !stoppedRef.current) {\n setFallbackToPoll(true);\n } else {\n setError('SSE connection error');\n }\n };\n\n stopRef.current = () => {\n es.close();\n setIsStreaming(false);\n };\n\n return () => {\n es.close();\n setIsStreaming(false);\n };\n }, [api, config.api.basePath, effectiveTransport, enabled, events, nonce, options.jobId, options.scope, desiredTransport, pollIntervalMs]);\n\n const progress = snapshot ? (typeof snapshot.overallProgress === 'number' ? snapshot.overallProgress : snapshot.progress) : null;\n\n return {\n status,\n progress,\n stage: snapshot?.stage,\n snapshot,\n error,\n isStreaming,\n reconnect,\n stop,\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { SuggestedEdge } from '../../core/types';\nimport type { ListSuggestionsParams } from '../../core/types/api';\nimport { createEvent } from '../../core/events/event-bus';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport type UseNeuronSuggestionsOptions = Omit<ListSuggestionsParams, 'page'> & {\n page?: number;\n};\n\nexport type UseNeuronSuggestionsResult = {\n suggestions: SuggestedEdge[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n approve: (ids: string | string[]) => Promise<void>;\n reject: (ids: string | string[], reason?: string) => Promise<void>;\n};\n\nexport function useNeuronSuggestions(options: UseNeuronSuggestionsOptions = {}): UseNeuronSuggestionsResult {\n const { api, events } = useNeuronContext();\n\n const [suggestions, setSuggestions] = useState<SuggestedEdge[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const params = useMemo(() => ({ ...options }), [options]);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await api.suggestions.list(params);\n setSuggestions(response.suggestions ?? []);\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setIsLoading(false);\n }\n }, [api.suggestions, params]);\n\n const approve = useCallback(\n async (ids: string | string[]) => {\n const list = Array.isArray(ids) ? ids : [ids];\n if (list.length === 0) return;\n\n setError(null);\n\n try {\n let edgeIds: Array<string | null> = [];\n if (list.length === 1) {\n const result = await api.suggestions.approve(list[0]);\n edgeIds = [result.edgeId];\n } else {\n const result = await api.suggestions.bulkApprove({ ids: list });\n edgeIds = result.edgeIds ?? [];\n }\n\n setSuggestions((prev) =>\n prev.map((s) =>\n list.includes(s.id)\n ? { ...s, status: 'approved', approvedEdgeId: s.approvedEdgeId ?? edgeIds[list.indexOf(s.id)] ?? null }\n : s\n )\n );\n\n events.emit(createEvent('edges.suggestion.approved', { ids: list, edgeIds }, 'api'));\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n }\n },\n [api.suggestions, events]\n );\n\n const reject = useCallback(\n async (ids: string | string[], reason?: string) => {\n const list = Array.isArray(ids) ? ids : [ids];\n if (list.length === 0) return;\n\n setError(null);\n try {\n if (list.length === 1) {\n await api.suggestions.reject(list[0], { reason });\n } else {\n await api.suggestions.bulkReject({ ids: list, reason });\n }\n\n setSuggestions((prev) => prev.map((s) => (list.includes(s.id) ? { ...s, status: 'rejected' } : s)));\n events.emit(createEvent('edges.suggestion.rejected', { ids: list, reason }, 'api'));\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n }\n },\n [api.suggestions, events]\n );\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { suggestions, isLoading, error, refresh, approve, reject };\n}\n","import { useState } from 'react';\nimport type { NeuronSettings, NeuronSettingsUpdate, VisualizationSettings } from '../../core/types';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport function useNeuronSettings() {\n const { settings, api, updateSettings } = useNeuronContext();\n const [isLoading] = useState(false);\n const [isUpdating, setIsUpdating] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const update = async (updates: NeuronSettingsUpdate) => {\n try {\n setIsUpdating(true);\n await updateSettings(updates as Partial<NeuronSettings>);\n } catch (err) {\n setError(err as Error);\n } finally {\n setIsUpdating(false);\n }\n };\n\n const reset = async (sections?: string[]) => {\n await api.settings.reset();\n if (sections?.length) {\n await update({});\n }\n };\n\n return {\n settings,\n isLoading,\n isUpdating,\n error,\n updateSettings: update,\n resetSettings: reset,\n setDomainColor: async (domain: string, color: string) => {\n await update({\n visualization: {\n ...(settings.visualization as VisualizationSettings),\n domainColors: { ...settings.visualization.domainColors, [domain]: color },\n },\n });\n },\n setVisualization: async (updates: Partial<VisualizationSettings>) => {\n await update({ visualization: updates });\n },\n };\n}\n","import { useState } from 'react';\nimport type { FindSimilarOptions, SearchResult, SemanticSearchOptions } from '../../core/types';\nimport { useNeuronContext } from './useNeuronContext';\n\nexport function useNeuronSearch() {\n const { api } = useNeuronContext();\n const [results, setResults] = useState<SearchResult[]>([]);\n const [isSearching, setIsSearching] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const search = async (query: string, options?: SemanticSearchOptions) => {\n setIsSearching(true);\n try {\n const response = await api.search.semantic({ query, ...options });\n setResults(response.results as SearchResult[]);\n setError(null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setIsSearching(false);\n }\n };\n\n const findSimilar = async (nodeId: string, options?: FindSimilarOptions) => {\n setIsSearching(true);\n try {\n const response = await api.search.similar({ nodeId, ...options });\n setResults(response.results as SearchResult[]);\n setError(null);\n } catch (err) {\n setError(err as Error);\n } finally {\n setIsSearching(false);\n }\n };\n\n return {\n results,\n isSearching,\n error,\n search,\n findSimilar,\n clearResults: () => setResults([]),\n };\n}\n","import { useEffect } from 'react';\nimport type { AnalysisRun, NeuronEventType, NeuronNode } from '../../core/types';\nimport type {\n AnalysisCompletedEventPayload,\n AnalysisFailedEventPayload,\n AnalysisProgressEventPayload,\n AnalysisStartedEventPayload,\n EventHandler,\n EventSubscription,\n NodeCreatedEventPayload,\n NodeDeletedEventPayload,\n NodeUpdatedEventPayload,\n} from '../../core/types/events';\nimport { useNeuronContext } from './useNeuronContext';\nimport { createEvent } from '../../core/events/event-bus';\n\nexport function useNeuronEvents() {\n const { events } = useNeuronContext();\n\n return {\n subscribe: <T>(type: NeuronEventType, handler: EventHandler<T>) => {\n useEffect(() => {\n const sub = events.subscribe(type, handler);\n return () => sub.unsubscribe();\n }, [type, handler]);\n },\n emit: <T>(type: NeuronEventType, payload: T) => {\n events.emit(createEvent(type, payload, 'ui'));\n },\n };\n}\n\nexport function useNodeEvents(handlers: {\n onCreated?: (node: NeuronNode) => void;\n onUpdated?: (node: NeuronNode) => void;\n onDeleted?: (nodeId: string) => void;\n}): void {\n const { events } = useNeuronContext();\n\n useEffect(() => {\n const subs: EventSubscription[] = [];\n if (handlers.onCreated) {\n subs.push(\n events.subscribe('node:created', (event) =>\n handlers.onCreated?.((event.payload as NodeCreatedEventPayload).node)\n )\n );\n }\n if (handlers.onUpdated) {\n subs.push(\n events.subscribe('node:updated', (event) =>\n handlers.onUpdated?.((event.payload as NodeUpdatedEventPayload).node)\n )\n );\n }\n if (handlers.onDeleted) {\n subs.push(\n events.subscribe('node:deleted', (event) =>\n handlers.onDeleted?.((event.payload as NodeDeletedEventPayload).nodeId)\n )\n );\n }\n return () => subs.forEach((sub) => sub.unsubscribe());\n }, [handlers]);\n}\n\nexport function useAnalysisEvents(handlers: {\n onStarted?: (jobId: string) => void;\n onProgress?: (jobId: string, progress: number) => void;\n onCompleted?: (job: AnalysisRun) => void;\n onFailed?: (jobId: string, error: string) => void;\n}): void {\n const { events } = useNeuronContext();\n\n useEffect(() => {\n const subs: EventSubscription[] = [];\n if (handlers.onStarted) {\n subs.push(\n events.subscribe('analysis:started', (event) =>\n handlers.onStarted?.((event.payload as AnalysisStartedEventPayload).jobId)\n )\n );\n }\n if (handlers.onProgress) {\n subs.push(\n events.subscribe('analysis:progress', (event) => {\n const payload = event.payload as AnalysisProgressEventPayload;\n return handlers.onProgress?.(payload.jobId, payload.progress);\n })\n );\n }\n if (handlers.onCompleted) {\n subs.push(\n events.subscribe('analysis:completed', (event) =>\n handlers.onCompleted?.((event.payload as AnalysisCompletedEventPayload).job)\n )\n );\n }\n if (handlers.onFailed) {\n subs.push(\n events.subscribe('analysis:failed', (event) => {\n const payload = event.payload as AnalysisFailedEventPayload;\n return handlers.onFailed?.(payload.jobId, payload.error);\n })\n );\n }\n return () => subs.forEach((sub) => sub.unsubscribe());\n }, [handlers]);\n}\n","import type {\n AnalysisRequest,\n AnalysisResponse,\n CancelAnalysisResponse,\n CreateEdgesRequest,\n CreateEdgesResponse,\n CreateNodesRequest,\n CreateNodesResponse,\n DeleteEdgeResponse,\n DeleteNodeResponse,\n ExpandGraphRequest,\n ExpandGraphResponse,\n FindPathRequest,\n FindPathResponse,\n FindSimilarRequest,\n FindSimilarResponse,\n GetAnalysisJobResponse,\n GetGraphParams,\n GetGraphResponse,\n GetNodeResponse,\n GetSettingsResponse,\n ListEdgesParams,\n ListEdgesResponse,\n ListNodesParams,\n ListNodesResponse,\n ListSuggestionsParams,\n ListSuggestionsResponse,\n SemanticSearchRequest,\n SemanticSearchResponse,\n ApproveSuggestionResponse,\n BulkApproveSuggestionsRequest,\n BulkApproveSuggestionsResponse,\n RejectSuggestionRequest,\n RejectSuggestionResponse,\n BulkRejectSuggestionsRequest,\n BulkRejectSuggestionsResponse,\n UpdateEdgeRequest,\n UpdateNodeRequest,\n UpdateSettingsRequest,\n UpdateSettingsResponse,\n ResetSettingsResponse,\n} from '../core/types/api';\n\nexport type NeuronApiClientOptions = {\n /**\n * Optional scope header value to include with every request.\n * Used for multi-tenant isolation (Phase 7D).\n */\n scope?: string;\n /**\n * Optional additional headers to include with every request.\n * Per-request headers override these values.\n */\n headers?: HeadersInit;\n /**\n * Header name for scope (default: `x-neuron-scope`).\n */\n scopeHeader?: string;\n};\n\nexport class NeuronApiClient {\n constructor(\n private basePath: string,\n private options?: NeuronApiClientOptions\n ) {}\n\n private async request<T>(path: string, options?: RequestInit): Promise<T> {\n const headers = new Headers(this.options?.headers);\n if (options?.headers) {\n new Headers(options.headers).forEach((value, key) => headers.set(key, value));\n }\n\n if (!headers.has('Content-Type') && !headers.has('content-type')) {\n headers.set('Content-Type', 'application/json');\n }\n\n const scope = this.options?.scope?.trim();\n if (scope) {\n headers.set(this.options?.scopeHeader ?? 'x-neuron-scope', scope);\n }\n\n const response = await fetch(`${this.basePath}${path}`, {\n ...options,\n headers,\n });\n if (!response.ok) {\n throw new Error(`Request failed: ${response.status}`);\n }\n return response.json() as Promise<T>;\n }\n\n nodes = {\n list: (params?: ListNodesParams) =>\n this.request<ListNodesResponse>(`/nodes?${new URLSearchParams(params as Record<string, string>)}`),\n get: (id: string) => this.request<GetNodeResponse>(`/nodes/${id}`),\n create: (data: CreateNodesRequest) =>\n this.request<CreateNodesResponse>('/nodes', { method: 'POST', body: JSON.stringify(data) }),\n update: (id: string, data: UpdateNodeRequest) =>\n this.request(`/nodes/${id}`, { method: 'PATCH', body: JSON.stringify(data) }),\n delete: (id: string) => this.request<DeleteNodeResponse>(`/nodes/${id}`, { method: 'DELETE' }),\n };\n\n edges = {\n list: (params?: ListEdgesParams) =>\n this.request<ListEdgesResponse>(`/edges?${new URLSearchParams(params as Record<string, string>)}`),\n create: (data: CreateEdgesRequest) =>\n this.request<CreateEdgesResponse>('/edges', { method: 'POST', body: JSON.stringify(data) }),\n update: (id: string, data: UpdateEdgeRequest) =>\n this.request(`/edges/${id}`, { method: 'PATCH', body: JSON.stringify(data) }),\n delete: (id: string) => this.request<DeleteEdgeResponse>(`/edges/${id}`, { method: 'DELETE' }),\n };\n\n graph = {\n get: (params?: GetGraphParams) =>\n this.request<GetGraphResponse>(`/graph?${new URLSearchParams(params as Record<string, string>)}`),\n expand: (data: ExpandGraphRequest) =>\n this.request<ExpandGraphResponse>('/graph/expand', { method: 'POST', body: JSON.stringify(data) }),\n findPath: (data: FindPathRequest) =>\n this.request<FindPathResponse>('/graph/path', { method: 'POST', body: JSON.stringify(data) }),\n };\n\n analyze = {\n start: (data: AnalysisRequest) =>\n this.request<AnalysisResponse>('/analyze', { method: 'POST', body: JSON.stringify(data) }),\n getStatus: (jobId: string) => this.request<GetAnalysisJobResponse>(`/analyze/${jobId}`),\n cancel: (jobId: string) =>\n this.request<CancelAnalysisResponse>(`/analyze/${jobId}/cancel`, { method: 'POST' }),\n };\n\n suggestions = {\n list: (params?: ListSuggestionsParams) =>\n this.request<ListSuggestionsResponse>(`/suggestions?${new URLSearchParams(params as Record<string, string>)}`),\n approve: (id: string) =>\n this.request<ApproveSuggestionResponse>(`/suggestions/${id}/approve`, { method: 'POST' }),\n bulkApprove: (data: BulkApproveSuggestionsRequest) =>\n this.request<BulkApproveSuggestionsResponse>('/suggestions/approve', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n reject: (id: string, data: RejectSuggestionRequest = {}) =>\n this.request<RejectSuggestionResponse>(`/suggestions/${id}/reject`, { method: 'POST', body: JSON.stringify(data) }),\n bulkReject: (data: BulkRejectSuggestionsRequest) =>\n this.request<BulkRejectSuggestionsResponse>('/suggestions/reject', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n };\n\n settings = {\n get: () => this.request<GetSettingsResponse>('/settings'),\n update: (data: UpdateSettingsRequest) =>\n this.request<UpdateSettingsResponse>('/settings', { method: 'PATCH', body: JSON.stringify(data) }),\n reset: () => this.request<ResetSettingsResponse>('/settings/reset', { method: 'POST' }),\n };\n\n search = {\n semantic: (data: SemanticSearchRequest) =>\n this.request<SemanticSearchResponse>('/search', { method: 'POST', body: JSON.stringify(data) }),\n similar: (data: FindSimilarRequest) =>\n this.request<FindSimilarResponse>('/search/similar', { method: 'POST', body: JSON.stringify(data) }),\n };\n}\n","'use client';\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport type { NeuronSettings, NeuronConfig, NeuronSettingsUpdate } from '../core/types/settings';\nimport type { NeuronEvent } from '../core/types/events';\nimport { DEFAULT_ANALYSIS_SETTINGS, DEFAULT_VISUALIZATION_SETTINGS } from '../core/types/settings';\nimport { EventBus } from '../core/events/event-bus';\nimport { NeuronApiClient } from './api-client';\nimport { NeuronContext, type ErrorContext } from './context';\nimport { VERSION } from '../version';\n\nexport interface NeuronWebProviderProps {\n children: React.ReactNode;\n config: {\n /** Client-safe API base path (default: `/api/neuron`) */\n apiBasePath?: string;\n /** Optional tenant scope (sent as `x-neuron-scope` by the API client). */\n scope?: string;\n settings?: Partial<NeuronSettings>;\n onEvent?: (event: NeuronEvent) => void;\n onError?: (error: Error, context: ErrorContext) => void;\n /**\n * @deprecated Secrets must be server-only. Do not pass OpenAI API keys to client components.\n */\n openaiApiKey?: string;\n /**\n * @deprecated Database connection strings are server-only. Configure databases in server routes.\n */\n databaseUrl?: string;\n };\n}\n\nconst buildDefaultConfig = (overrides?: Partial<NeuronSettings>): NeuronConfig => ({\n instance: {\n name: 'default',\n version: VERSION,\n repoName: 'omi-neuron-web',\n },\n visualization: { ...DEFAULT_VISUALIZATION_SETTINGS, ...(overrides?.visualization ?? {}) },\n analysis: { ...DEFAULT_ANALYSIS_SETTINGS, ...(overrides?.analysis ?? {}) },\n nodeTypes: overrides?.nodeTypes ?? [],\n domains: overrides?.domains ?? [],\n relationshipTypes: overrides?.relationshipTypes ?? [],\n openai: {\n apiKey: '',\n },\n database: {\n mode: 'external',\n port: 5433,\n url: undefined,\n },\n api: {\n basePath: '/api/neuron',\n enableCors: false,\n },\n logging: {\n level: 'info',\n prettyPrint: true,\n },\n});\n\nexport function NeuronWebProvider({ children, config }: NeuronWebProviderProps): React.ReactElement {\n const [settings, setSettings] = useState<NeuronSettings>(() =>\n buildDefaultConfig(config.settings) as NeuronSettings\n );\n const [error, setError] = useState<Error | null>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n\n const resolvedConfig = useMemo(() => {\n const base = buildDefaultConfig(config.settings);\n return {\n ...base,\n api: {\n ...base.api,\n basePath: config.apiBasePath ?? base.api.basePath,\n },\n } as NeuronConfig;\n }, [config]);\n\n const apiClient = useMemo(\n () => new NeuronApiClient(resolvedConfig.api.basePath, { scope: config.scope }),\n [resolvedConfig.api.basePath, config.scope]\n );\n const eventBus = useMemo(() => new EventBus(), []);\n\n useEffect(() => {\n eventBus.subscribeAll((event) => config.onEvent?.(event));\n }, [eventBus, config]);\n\n useEffect(() => {\n let mounted = true;\n apiClient\n .settings.get()\n .then((response) => {\n if (mounted) {\n setSettings(response.settings as NeuronSettings);\n setIsInitialized(true);\n }\n })\n .catch((err) => {\n setError(err as Error);\n config.onError?.(err as Error, { message: 'Failed to load settings' });\n });\n return () => {\n mounted = false;\n };\n }, [apiClient]);\n\n const updateSettings = async (updates: Partial<NeuronSettings>) => {\n const response = await apiClient.settings.update(updates as NeuronSettingsUpdate);\n setSettings(response.settings as NeuronSettings);\n };\n\n const resetSettings = async () => {\n const response = await apiClient.settings.reset();\n setSettings(response.settings as NeuronSettings);\n };\n\n const contextValue = useMemo(\n () => ({\n config: resolvedConfig,\n settings,\n api: apiClient,\n events: eventBus,\n isInitialized,\n error,\n updateSettings,\n resetSettings,\n onEvent: config.onEvent,\n onError: config.onError,\n }),\n [resolvedConfig, settings, apiClient, eventBus, isInitialized, error, config]\n );\n\n return <NeuronContext.Provider value={contextValue}>{children}</NeuronContext.Provider>;\n}\n","/**\n * InMemoryApiClient for Static Mode\n * Implements the same interface as NeuronApiClient but operates on in-memory data.\n * Used by StaticDataProvider for static/authored graphs without database.\n */\n\nimport type {\n NeuronNode,\n NeuronEdge,\n NeuronVisualNode,\n NeuronVisualEdge,\n NeuronVisualCluster,\n NeuronNodeCreate,\n NeuronNodeUpdate,\n NeuronEdgeCreate,\n NeuronEdgeUpdate,\n NeuronSettings,\n ListNodesParams,\n ListNodesResponse,\n GetNodeResponse,\n CreateNodesRequest,\n CreateNodesResponse,\n DeleteNodeResponse,\n ListEdgesParams,\n ListEdgesResponse,\n CreateEdgesRequest,\n CreateEdgesResponse,\n DeleteEdgeResponse,\n GetGraphParams,\n GetGraphResponse,\n ExpandGraphRequest,\n ExpandGraphResponse,\n FindPathRequest,\n FindPathResponse,\n AnalysisRequest,\n AnalysisResponse,\n GetAnalysisJobResponse,\n CancelAnalysisResponse,\n GetSettingsResponse,\n UpdateSettingsRequest,\n UpdateSettingsResponse,\n ResetSettingsResponse,\n SemanticSearchRequest,\n SemanticSearchResponse,\n FindSimilarRequest,\n FindSimilarResponse,\n UpdateNodeRequest,\n UpdateEdgeRequest,\n PaginationMeta,\n} from '../../core/types';\n\nimport {\n DEFAULT_VISUALIZATION_SETTINGS,\n DEFAULT_ANALYSIS_SETTINGS,\n} from '../../core/types/settings';\n\n/**\n * Error thrown when operations aren't supported in static mode\n */\nexport class StaticModeError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StaticModeError';\n }\n}\n\nexport interface InMemoryApiClientOptions {\n /** If true, mutations (create/update/delete) modify in-memory store */\n mutableMode?: boolean;\n}\n\n/**\n * Normalizes a visual node or full node into a full NeuronNode\n */\nfunction normalizeNode(input: NeuronNode | NeuronVisualNode): NeuronNode {\n // If it's already a full node with createdAt, return it\n if ('createdAt' in input && input.createdAt) {\n return input as NeuronNode;\n }\n\n // Convert visual node to full node\n const visualNode = input as NeuronVisualNode;\n const now = new Date();\n return {\n id: visualNode.id,\n slug: visualNode.slug,\n label: visualNode.label,\n nodeType: 'concept',\n domain: visualNode.domain,\n createdAt: now,\n updatedAt: now,\n metadata: visualNode.metadata ?? {},\n tier: visualNode.tier,\n connectionCount: visualNode.connectionCount ?? 0,\n positionOverride: visualNode.position ?? null,\n status: visualNode.status,\n };\n}\n\n/**\n * Normalizes a visual edge or full edge into a full NeuronEdge\n */\nfunction normalizeEdge(input: NeuronEdge | NeuronVisualEdge): NeuronEdge {\n // If it's already a full edge with createdAt, return it\n if ('createdAt' in input && input.createdAt) {\n return input as NeuronEdge;\n }\n\n // Convert visual edge to full edge\n const visualEdge = input as NeuronVisualEdge;\n const now = new Date();\n return {\n id: visualEdge.id,\n fromNodeId: visualEdge.from,\n toNodeId: visualEdge.to,\n relationshipType: visualEdge.relationshipType ?? 'related_to',\n strength: visualEdge.strength ?? 0.5,\n confidence: 1.0,\n evidence: [],\n label: visualEdge.label ?? null,\n description: null,\n metadata: {},\n source: 'manual',\n sourceModel: null,\n createdAt: now,\n updatedAt: now,\n bidirectional: false,\n };\n}\n\n/**\n * Converts a NeuronNode to NeuronVisualNode\n */\nfunction toVisualNode(node: NeuronNode): NeuronVisualNode {\n return {\n id: node.id,\n slug: node.slug,\n label: node.label,\n domain: node.domain,\n tier: node.tier,\n metadata: node.metadata,\n ref: null,\n connectionCount: node.connectionCount ?? 0,\n position: node.positionOverride ?? undefined,\n status: node.status,\n };\n}\n\n/**\n * Converts a NeuronEdge to NeuronVisualEdge\n */\nfunction toVisualEdge(edge: NeuronEdge): NeuronVisualEdge {\n return {\n id: edge.id,\n from: edge.fromNodeId,\n to: edge.toNodeId,\n relationshipType: edge.relationshipType,\n strength: edge.strength,\n label: edge.label,\n };\n}\n\n/**\n * Generate a UUID v4\n */\nfunction generateId(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Generate a slug from a label\n */\nfunction generateSlug(label: string): string {\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\n/**\n * Create pagination meta\n */\nfunction createPaginationMeta(page: number, limit: number, total: number): PaginationMeta {\n const totalPages = Math.ceil(total / limit);\n return {\n page,\n limit,\n total,\n totalPages,\n hasNext: page < totalPages,\n hasPrev: page > 1,\n };\n}\n\n/**\n * In-memory API client for static mode.\n * Implements the same interface as NeuronApiClient.\n */\nexport class InMemoryApiClient {\n private nodesMap: Map<string, NeuronNode>;\n private edgesMap: Map<string, NeuronEdge>;\n private clusters: NeuronVisualCluster[];\n private settings: NeuronSettings;\n private initialSettings: NeuronSettings;\n private mutableMode: boolean;\n\n constructor(\n nodes: (NeuronNode | NeuronVisualNode)[],\n edges: (NeuronEdge | NeuronVisualEdge)[],\n clusters: NeuronVisualCluster[] = [],\n settingsOverrides: Partial<NeuronSettings> = {},\n options: InMemoryApiClientOptions = {}\n ) {\n this.nodesMap = new Map(nodes.map((n) => [n.id, normalizeNode(n)]));\n this.edgesMap = new Map(edges.map((e) => [e.id, normalizeEdge(e)]));\n this.clusters = clusters;\n this.mutableMode = options.mutableMode ?? false;\n\n // Build full settings with defaults (NeuronSettings only, not NeuronConfig)\n this.settings = {\n instance: {\n name: 'Static Graph',\n version: '1.0.0',\n repoName: 'omi-neuron-web',\n },\n visualization: { ...DEFAULT_VISUALIZATION_SETTINGS, ...settingsOverrides.visualization },\n analysis: { ...DEFAULT_ANALYSIS_SETTINGS, ...settingsOverrides.analysis },\n nodeTypes: settingsOverrides.nodeTypes ?? [],\n domains: settingsOverrides.domains ?? [],\n relationshipTypes: settingsOverrides.relationshipTypes ?? [],\n };\n this.initialSettings = JSON.parse(JSON.stringify(this.settings));\n\n // Update connection counts based on edges\n this.updateConnectionCounts();\n }\n\n private updateConnectionCounts(): void {\n // Reset all counts\n for (const node of this.nodesMap.values()) {\n node.connectionCount = 0;\n node.inboundCount = 0;\n node.outboundCount = 0;\n }\n\n // Count edges\n for (const edge of this.edgesMap.values()) {\n const fromNode = this.nodesMap.get(edge.fromNodeId);\n const toNode = this.nodesMap.get(edge.toNodeId);\n\n if (fromNode) {\n fromNode.connectionCount = (fromNode.connectionCount ?? 0) + 1;\n fromNode.outboundCount = (fromNode.outboundCount ?? 0) + 1;\n }\n if (toNode) {\n toNode.connectionCount = (toNode.connectionCount ?? 0) + 1;\n toNode.inboundCount = (toNode.inboundCount ?? 0) + 1;\n }\n }\n }\n\n /**\n * Update the in-memory data (useful for controlled mode)\n */\n updateData(\n nodes: (NeuronNode | NeuronVisualNode)[],\n edges: (NeuronEdge | NeuronVisualEdge)[],\n clusters?: NeuronVisualCluster[]\n ): void {\n this.nodesMap = new Map(nodes.map((n) => [n.id, normalizeNode(n)]));\n this.edgesMap = new Map(edges.map((e) => [e.id, normalizeEdge(e)]));\n if (clusters) {\n this.clusters = clusters;\n }\n this.updateConnectionCounts();\n }\n\n // ==================== NODES ====================\n\n nodes = {\n list: async (params?: ListNodesParams): Promise<ListNodesResponse> => {\n let nodes = Array.from(this.nodesMap.values());\n\n // Apply filters\n if (params?.domain) {\n const domains = Array.isArray(params.domain) ? params.domain : [params.domain];\n nodes = nodes.filter((n) => domains.includes(n.domain));\n }\n if (params?.nodeType) {\n const nodeTypes = Array.isArray(params.nodeType) ? params.nodeType : [params.nodeType];\n nodes = nodes.filter((n) => nodeTypes.includes(n.nodeType));\n }\n if (params?.search) {\n const searchLower = params.search.toLowerCase();\n nodes = nodes.filter(\n (n) =>\n n.label.toLowerCase().includes(searchLower) ||\n n.slug.toLowerCase().includes(searchLower)\n );\n }\n\n // Pagination\n const page = params?.page ?? 1;\n const limit = params?.limit ?? 50;\n const total = nodes.length;\n const start = (page - 1) * limit;\n const paginatedNodes = nodes.slice(start, start + limit);\n\n return {\n nodes: paginatedNodes,\n pagination: createPaginationMeta(page, limit, total),\n meta: {\n queryTime: 0,\n filters: (params ?? {}) as Record<string, unknown>,\n },\n };\n },\n\n get: async (id: string): Promise<GetNodeResponse> => {\n const node = this.nodesMap.get(id);\n if (!node) {\n throw new Error(`Node not found: ${id}`);\n }\n\n // Find related edges\n const outbound: NeuronEdge[] = [];\n const inbound: NeuronEdge[] = [];\n for (const edge of this.edgesMap.values()) {\n if (edge.fromNodeId === id) outbound.push(edge);\n if (edge.toNodeId === id) inbound.push(edge);\n }\n\n // Find related nodes\n const relatedIds = new Set<string>();\n for (const edge of [...outbound, ...inbound]) {\n if (edge.fromNodeId !== id) relatedIds.add(edge.fromNodeId);\n if (edge.toNodeId !== id) relatedIds.add(edge.toNodeId);\n }\n const relatedNodes = Array.from(relatedIds)\n .map((id) => this.nodesMap.get(id))\n .filter((n): n is NeuronNode => !!n);\n\n return {\n node,\n edges: { outbound, inbound },\n cluster: null,\n relatedNodes,\n };\n },\n\n create: async (data: CreateNodesRequest): Promise<CreateNodesResponse> => {\n if (!this.mutableMode) {\n throw new StaticModeError('Node creation not available in static read-only mode');\n }\n\n const created: NeuronNode[] = [];\n const skipped: Array<{ slug: string; reason: string }> = [];\n const inputNodes = data.nodes;\n\n for (const input of inputNodes) {\n const slug = input.slug ?? generateSlug(input.label);\n\n // Check for duplicates\n const existing = Array.from(this.nodesMap.values()).find((n) => n.slug === slug);\n if (existing) {\n if (data.options?.skipDuplicates) {\n skipped.push({ slug, reason: 'duplicate' });\n continue;\n }\n }\n\n const id = generateId();\n const now = new Date();\n\n const node: NeuronNode = {\n id,\n slug,\n label: input.label,\n nodeType: input.nodeType ?? 'concept',\n domain: input.domain ?? 'default',\n createdAt: now,\n updatedAt: now,\n summary: input.summary ?? null,\n description: input.description ?? null,\n content: input.content ?? null,\n metadata: input.metadata ?? {},\n tier: input.tier,\n connectionCount: 0,\n status: input.status,\n };\n\n this.nodesMap.set(id, node);\n created.push(node);\n }\n\n return { created, skipped };\n },\n\n update: async (id: string, data: UpdateNodeRequest): Promise<void> => {\n if (!this.mutableMode) {\n throw new StaticModeError('Node updates not available in static read-only mode');\n }\n\n const node = this.nodesMap.get(id);\n if (!node) {\n throw new Error(`Node not found: ${id}`);\n }\n\n const updates = data as NeuronNodeUpdate;\n if (updates.label !== undefined) node.label = updates.label;\n if (updates.summary !== undefined) node.summary = updates.summary;\n if (updates.description !== undefined) node.description = updates.description;\n if (updates.content !== undefined) node.content = updates.content;\n if (updates.metadata !== undefined) node.metadata = updates.metadata;\n if (updates.domain !== undefined) node.domain = updates.domain;\n if (updates.tier !== undefined) node.tier = updates.tier;\n if (updates.positionOverride !== undefined) node.positionOverride = updates.positionOverride;\n node.updatedAt = new Date();\n },\n\n delete: async (id: string): Promise<DeleteNodeResponse> => {\n if (!this.mutableMode) {\n throw new StaticModeError('Node deletion not available in static read-only mode');\n }\n\n const node = this.nodesMap.get(id);\n if (!node) {\n throw new Error(`Node not found: ${id}`);\n }\n\n this.nodesMap.delete(id);\n\n // Also delete related edges\n let edgesRemoved = 0;\n for (const [edgeId, edge] of this.edgesMap) {\n if (edge.fromNodeId === id || edge.toNodeId === id) {\n this.edgesMap.delete(edgeId);\n edgesRemoved++;\n }\n }\n\n this.updateConnectionCounts();\n return { deleted: true, edgesRemoved };\n },\n };\n\n // ==================== EDGES ====================\n\n edges = {\n list: async (params?: ListEdgesParams): Promise<ListEdgesResponse> => {\n let edges = Array.from(this.edgesMap.values());\n\n // Apply filters\n if (params?.fromNodeId) {\n edges = edges.filter((e) => e.fromNodeId === params.fromNodeId);\n }\n if (params?.toNodeId) {\n edges = edges.filter((e) => e.toNodeId === params.toNodeId);\n }\n if (params?.nodeId) {\n edges = edges.filter(\n (e) => e.fromNodeId === params.nodeId || e.toNodeId === params.nodeId\n );\n }\n if (params?.relationshipType) {\n const types = Array.isArray(params.relationshipType)\n ? params.relationshipType\n : [params.relationshipType];\n edges = edges.filter((e) => types.includes(e.relationshipType));\n }\n\n // Pagination\n const page = params?.page ?? 1;\n const limit = params?.limit ?? 50;\n const total = edges.length;\n const start = (page - 1) * limit;\n const paginatedEdges = edges.slice(start, start + limit);\n\n return {\n edges: paginatedEdges,\n pagination: createPaginationMeta(page, limit, total),\n };\n },\n\n create: async (data: CreateEdgesRequest): Promise<CreateEdgesResponse> => {\n if (!this.mutableMode) {\n throw new StaticModeError('Edge creation not available in static read-only mode');\n }\n\n const created: NeuronEdge[] = [];\n const errors: Array<{ index: number; error: string }> = [];\n\n for (let i = 0; i < data.edges.length; i++) {\n const input = data.edges[i];\n const id = generateId();\n const now = new Date();\n\n const edge: NeuronEdge = {\n id,\n fromNodeId: input.fromNodeId,\n toNodeId: input.toNodeId,\n relationshipType: input.relationshipType ?? 'related_to',\n strength: input.strength ?? 0.5,\n confidence: input.confidence ?? 1.0,\n evidence: input.evidence ?? [],\n label: input.label ?? null,\n description: input.description ?? null,\n metadata: input.metadata ?? {},\n source: 'manual',\n sourceModel: null,\n createdAt: now,\n updatedAt: now,\n bidirectional: input.bidirectional ?? false,\n };\n\n this.edgesMap.set(id, edge);\n created.push(edge);\n }\n\n this.updateConnectionCounts();\n return { created, errors };\n },\n\n update: async (id: string, data: UpdateEdgeRequest): Promise<void> => {\n if (!this.mutableMode) {\n throw new StaticModeError('Edge updates not available in static read-only mode');\n }\n\n const edge = this.edgesMap.get(id);\n if (!edge) {\n throw new Error(`Edge not found: ${id}`);\n }\n\n const updates = data as NeuronEdgeUpdate;\n if (updates.strength !== undefined) edge.strength = updates.strength;\n if (updates.confidence !== undefined) edge.confidence = updates.confidence;\n if (updates.label !== undefined) edge.label = updates.label;\n if (updates.description !== undefined) edge.description = updates.description;\n if (updates.metadata !== undefined) edge.metadata = updates.metadata;\n edge.updatedAt = new Date();\n },\n\n delete: async (id: string): Promise<DeleteEdgeResponse> => {\n if (!this.mutableMode) {\n throw new StaticModeError('Edge deletion not available in static read-only mode');\n }\n\n const edge = this.edgesMap.get(id);\n if (!edge) {\n throw new Error(`Edge not found: ${id}`);\n }\n\n this.edgesMap.delete(id);\n this.updateConnectionCounts();\n return { deleted: true };\n },\n };\n\n // ==================== GRAPH ====================\n\n graph = {\n get: async (params?: GetGraphParams): Promise<GetGraphResponse> => {\n let nodes = Array.from(this.nodesMap.values());\n let edges = Array.from(this.edgesMap.values());\n\n // Apply filters\n if (params?.domains?.length) {\n nodes = nodes.filter((n) => params.domains!.includes(n.domain));\n }\n if (params?.nodeTypes?.length) {\n nodes = nodes.filter((n) => params.nodeTypes!.includes(n.nodeType));\n }\n if (params?.minEdgeStrength !== undefined) {\n edges = edges.filter((e) => e.strength >= params.minEdgeStrength!);\n }\n\n // Filter edges to only include those connecting visible nodes\n const nodeIds = new Set(nodes.map((n) => n.id));\n edges = edges.filter((e) => nodeIds.has(e.fromNodeId) && nodeIds.has(e.toNodeId));\n\n return {\n nodes: nodes.map(toVisualNode),\n edges: edges.map(toVisualEdge),\n clusters: this.clusters,\n meta: {\n totalNodes: nodes.length,\n totalEdges: edges.length,\n truncated: false,\n queryTime: 0,\n },\n };\n },\n\n expand: async (data: ExpandGraphRequest): Promise<ExpandGraphResponse> => {\n const { fromNodeIds, depth = 1, direction = 'both' } = data;\n const visited = new Set<string>();\n const resultNodes: NeuronNode[] = [];\n const resultEdges: NeuronEdge[] = [];\n\n const expandFrom = (currentId: string, currentDepth: number) => {\n if (currentDepth > depth || visited.has(currentId)) return;\n visited.add(currentId);\n\n const node = this.nodesMap.get(currentId);\n if (node) resultNodes.push(node);\n\n for (const edge of this.edgesMap.values()) {\n const isOutbound = edge.fromNodeId === currentId;\n const isInbound = edge.toNodeId === currentId;\n\n if (\n (direction === 'both' && (isOutbound || isInbound)) ||\n (direction === 'outbound' && isOutbound) ||\n (direction === 'inbound' && isInbound)\n ) {\n if (!resultEdges.find((e) => e.id === edge.id)) {\n resultEdges.push(edge);\n }\n const nextId = isOutbound ? edge.toNodeId : edge.fromNodeId;\n expandFrom(nextId, currentDepth + 1);\n }\n }\n };\n\n for (const nodeId of fromNodeIds) {\n expandFrom(nodeId, 0);\n }\n\n return {\n nodes: resultNodes.map(toVisualNode),\n edges: resultEdges.map(toVisualEdge),\n };\n },\n\n findPath: async (data: FindPathRequest): Promise<FindPathResponse> => {\n const { fromNodeId, toNodeId } = data;\n\n // Simple BFS for shortest path\n const queue: { nodeId: string; path: string[]; edgePath: string[] }[] = [\n { nodeId: fromNodeId, path: [fromNodeId], edgePath: [] },\n ];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const { nodeId, path, edgePath } = queue.shift()!;\n if (nodeId === toNodeId) {\n // Calculate total strength\n let totalStrength = 0;\n for (const edgeId of edgePath) {\n const edge = this.edgesMap.get(edgeId);\n if (edge) totalStrength += edge.strength;\n }\n\n return {\n paths: [\n {\n nodes: path,\n edges: edgePath,\n length: path.length,\n totalStrength,\n },\n ],\n };\n }\n\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n\n for (const edge of this.edgesMap.values()) {\n let nextId: string | null = null;\n if (edge.fromNodeId === nodeId) nextId = edge.toNodeId;\n else if (edge.toNodeId === nodeId) nextId = edge.fromNodeId;\n\n if (nextId && !visited.has(nextId)) {\n queue.push({\n nodeId: nextId,\n path: [...path, nextId],\n edgePath: [...edgePath, edge.id],\n });\n }\n }\n }\n\n return { paths: [] };\n },\n };\n\n // ==================== ANALYZE ====================\n\n analyze = {\n start: async (_data: AnalysisRequest): Promise<AnalysisResponse> => {\n throw new StaticModeError(\n 'Analysis not available in static mode. Use API-backed provider for AI features.'\n );\n },\n\n getStatus: async (_jobId: string): Promise<GetAnalysisJobResponse> => {\n throw new StaticModeError('Analysis not available in static mode.');\n },\n\n cancel: async (_jobId: string): Promise<CancelAnalysisResponse> => {\n throw new StaticModeError('Analysis not available in static mode.');\n },\n };\n\n // ==================== SUGGESTIONS ====================\n\n suggestions = {\n list: async () => ({\n suggestions: [],\n pagination: createPaginationMeta(1, 50, 0),\n }),\n approve: async (): Promise<never> => {\n throw new StaticModeError('Suggestions not available in static mode.');\n },\n bulkApprove: async (): Promise<never> => {\n throw new StaticModeError('Suggestions not available in static mode.');\n },\n reject: async (): Promise<never> => {\n throw new StaticModeError('Suggestions not available in static mode.');\n },\n bulkReject: async (): Promise<never> => {\n throw new StaticModeError('Suggestions not available in static mode.');\n },\n };\n\n // ==================== SETTINGS ====================\n\n settings_api = {\n get: async (): Promise<GetSettingsResponse> => {\n return { settings: this.settings, source: 'defaults' };\n },\n\n update: async (data: UpdateSettingsRequest): Promise<UpdateSettingsResponse> => {\n if (data.visualization) {\n this.settings.visualization = { ...this.settings.visualization, ...data.visualization };\n }\n if (data.analysis) {\n this.settings.analysis = { ...this.settings.analysis, ...data.analysis };\n }\n return { settings: this.settings };\n },\n\n reset: async (): Promise<ResetSettingsResponse> => {\n this.settings = JSON.parse(JSON.stringify(this.initialSettings));\n return { settings: this.settings };\n },\n };\n\n // ==================== SEARCH ====================\n\n search = {\n semantic: async (_data: SemanticSearchRequest): Promise<SemanticSearchResponse> => {\n // Semantic search requires embeddings which aren't available in static mode\n // Return empty results instead of throwing to allow graceful degradation\n return { results: [], queryTime: 0 };\n },\n\n similar: async (_data: FindSimilarRequest): Promise<FindSimilarResponse> => {\n // Similarity search requires embeddings which aren't available in static mode\n return { results: [] };\n },\n };\n}\n","'use client';\n\n/**\n * StaticDataProvider - Provider for static/authored graphs\n *\n * Use this provider when you have pre-defined graph data that doesn't\n * require database or API connectivity. Perfect for:\n * - Quest/narrative authoring tools\n * - Documentation/knowledge graphs\n * - Workflow/pipeline visualizers\n * - Game skill trees\n * - Org charts and hierarchies\n *\n * @example\n * ```tsx\n * <StaticDataProvider\n * nodes={myNodes}\n * edges={myEdges}\n * clusters={[\n * { id: 'act1', label: 'Act 1', nodeIds: ['q001', 'q002', 'q003'] },\n * ]}\n * >\n * <NeuronWeb />\n * </StaticDataProvider>\n * ```\n */\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type {\n NeuronNode,\n NeuronEdge,\n NeuronVisualNode,\n NeuronVisualEdge,\n NeuronVisualCluster,\n NeuronSettings,\n NeuronConfig,\n} from '../core/types';\nimport type { NeuronEvent } from '../core/types/events';\nimport { DEFAULT_ANALYSIS_SETTINGS, DEFAULT_VISUALIZATION_SETTINGS } from '../core/types/settings';\nimport { EventBus } from '../core/events/event-bus';\nimport { NeuronContext, type ErrorContext } from './context';\nimport { InMemoryApiClient } from './static/in-memory-api-client';\nimport type { NeuronApiClient } from './api-client';\nimport { VERSION } from '../version';\n\nexport interface StaticDataProviderProps {\n children: React.ReactNode;\n /** Array of nodes to display */\n nodes: (NeuronNode | NeuronVisualNode)[];\n /** Array of edges connecting nodes */\n edges: (NeuronEdge | NeuronVisualEdge)[];\n /** Optional static cluster definitions for visual grouping */\n clusters?: NeuronVisualCluster[];\n /** Optional settings overrides */\n settings?: Partial<NeuronSettings>;\n /** If true, mutations (create/update/delete) modify in-memory store */\n mutableMode?: boolean;\n /** Callback for events */\n onEvent?: (event: NeuronEvent) => void;\n /** Callback for errors */\n onError?: (error: Error, context: ErrorContext) => void;\n}\n\nconst buildDefaultConfig = (overrides?: Partial<NeuronSettings>): NeuronConfig => ({\n instance: {\n name: 'static-graph',\n version: VERSION,\n repoName: 'omi-neuron-web',\n },\n visualization: { ...DEFAULT_VISUALIZATION_SETTINGS, ...(overrides?.visualization ?? {}) },\n analysis: { ...DEFAULT_ANALYSIS_SETTINGS, ...(overrides?.analysis ?? {}) },\n nodeTypes: overrides?.nodeTypes ?? [],\n domains: overrides?.domains ?? [],\n relationshipTypes: overrides?.relationshipTypes ?? [],\n openai: {\n apiKey: '',\n },\n database: {\n mode: 'external',\n port: 0,\n url: undefined,\n },\n api: {\n basePath: '',\n enableCors: false,\n },\n logging: {\n level: 'info',\n prettyPrint: false,\n },\n});\n\nexport function StaticDataProvider({\n children,\n nodes,\n edges,\n clusters = [],\n settings: settingsOverrides,\n mutableMode = false,\n onEvent,\n onError,\n}: StaticDataProviderProps): React.ReactElement {\n const resolvedConfig = useMemo(\n () => buildDefaultConfig(settingsOverrides),\n [settingsOverrides]\n );\n\n const [settings, setSettings] = useState<NeuronSettings>(\n () => resolvedConfig as NeuronSettings\n );\n\n const apiClient = useMemo(\n () =>\n new InMemoryApiClient(nodes, edges, clusters, settingsOverrides, {\n mutableMode,\n }),\n // Note: We intentionally don't include nodes/edges/clusters in deps\n // to avoid recreating the client on every render. Use updateData() for updates.\n [mutableMode]\n );\n\n // Update the in-memory client when data changes\n useEffect(() => {\n apiClient.updateData(nodes, edges, clusters);\n }, [nodes, edges, clusters, apiClient]);\n\n const eventBus = useMemo(() => new EventBus(), []);\n\n // Subscribe to events\n useEffect(() => {\n if (onEvent) {\n const subscription = eventBus.subscribeAll(onEvent);\n return () => subscription.unsubscribe();\n }\n }, [eventBus, onEvent]);\n\n const updateSettings = useCallback(\n async (updates: Partial<NeuronSettings>) => {\n const response = await apiClient.settings_api.update(updates);\n setSettings(response.settings as NeuronSettings);\n },\n [apiClient]\n );\n\n const resetSettings = useCallback(async () => {\n const response = await apiClient.settings_api.reset();\n setSettings(response.settings as NeuronSettings);\n }, [apiClient]);\n\n const contextValue = useMemo(\n () => ({\n config: resolvedConfig,\n settings,\n // Cast to NeuronApiClient since we implement the same interface\n api: apiClient as unknown as NeuronApiClient,\n events: eventBus,\n isInitialized: true, // Always initialized since data is provided directly\n isStaticMode: true,\n error: null,\n updateSettings,\n resetSettings,\n onEvent,\n onError,\n }),\n [resolvedConfig, settings, apiClient, eventBus, updateSettings, resetSettings, onEvent, onError]\n );\n\n return <NeuronContext.Provider value={contextValue}>{children}</NeuronContext.Provider>;\n}\n"]}
|