brainy/src/index.ts
David Snelling 38b0041464 feat: generation fact log — after-image commit records, dual-written at every commit point
Every committed generation now also appends a FACT — an after-image
commit record (what each touched entity/relationship became, or a
body-less tombstone for a removal) — to an append-only, crc32c-framed
segment log under _generations/facts/. The before-image history and the
canonical tree remain authoritative; the fact log gives consumers ONE
sequential, self-verifying stream (index heals, incremental replays)
in place of a per-entity directory walk.

- Wire format: positional msgpack facts [generation, timestamp, ops,
  meta, blobHashes]; op = [kind u8, id bin16, record | nil tombstone];
  32-byte segment header (magic, formatVersion, firstGeneration,
  zeroed+verified reserved); length+crc32c frame per fact; zero-padded
  segment names so lexicographic order == generation order; JSON
  manifest with an atomic rename flip, manifest-first rotation.
- Commit protocol: facts append+fsync BEFORE the commit point inside
  the existing durability window, so a crash can only leave the log
  AHEAD of committed truth — open() truncates back (torn tails detected
  by CRC). Absent generation = never committed; a scan can never see an
  uncommitted fact. transact() facts are durable-on-return; single-op
  facts ride the group-commit flush exactly like buffered history. A
  fact-append failure fails the write, loudly — a silent gap would be a
  lie a later replay discovers.
- New public surface: brain.scanFacts() (sequential batches with heal
  telemetry: head/segments/approx up front, per-batch generation range
  + bytes + segment id, loud abort on gaps, summary cross-check) and
  brain.factSegmentPaths() (immutable sealed segments for zero-copy
  consumers; the mutable tail excluded). Exported types CommitFact,
  FactOp, FactScanBatch, FactScanHandle.
- Storage: optional binary raw-byte primitives (appendRawBytes,
  readRawBytes, writeRawBytes, rawByteSize) on StorageAdapter —
  feature-detected; filesystem + memory adapters implement them; an
  adapter without them hosts no fact log. Fact segments are byte-copied
  (never hard-linked) into snapshots. The _generations/facts/ namespace
  is registered as a protected family (rebuildable: false): no sweeper
  or GC may delete under it.
- New crc32c (Castagnoli) utility with RFC known-answer tests.
2026-07-15 10:49:02 -07:00

569 lines
13 KiB
TypeScript

/**
* Brainy 8.0 - Your AI-Powered Second Brain
* 🧠⚛️ A multi-dimensional database with vector, graph, and relational storage
*
* Core Components:
* - Brainy: The unified database with Triple Intelligence
* - Triple Intelligence: Seamless fusion of vector + graph + field search
* - Db: Immutable, generation-pinned database values (now/transact/asOf/with)
* - Plugins: Extensible plugin system (cor, storage adapters)
* - Neural Import: AI-powered entity extraction & smart data import
*/
// Export main Brainy class
import { Brainy } from './brainy.js'
export { Brainy }
// The in-process change feed (brain.onChange) — event + listener types.
export type {
BrainyChangeEvent,
ChangeEventEntity,
ChangeEventRelation,
ChangeListener
} from './events/changeFeed.js'
// Temporal VFS — a file version entry (vfs.history / readFile({ asOf })).
export type { FileVersion } from './vfs/types.js'
// Export diagnostics result type
export type { DiagnosticsResult } from './brainy.js'
// Export Brainy configuration and types
export type {
BrainyConfig,
Entity,
Relation,
Result,
AddParams,
UpdateParams,
RelateParams,
UpdateRelationParams,
FindParams,
SimilarParams,
GetOptions,
RelatedParams,
AddManyParams,
UpdateManyParams,
RemoveManyParams,
RelateManyParams,
BatchResult,
SubtypeRegistry,
FillSubtypeRule,
FillSubtypeRules,
FillSubtypesResult,
AggregateDefinition,
AggregateMetricDef,
AggregateSource,
AggregateQueryParams,
AggregateResult,
AggregateGroupState,
MetricState,
AggregationOp,
TimeWindowGranularity,
GroupByDimension,
AggregationProvider
} from './types/brainy.types.js'
// Reserved-field contract — the canonical list of Brainy-owned field names
// that may never appear inside a `metadata` bag (see docs/concepts/consistency-model.md)
export {
RESERVED_ENTITY_FIELDS,
RESERVED_RELATION_FIELDS,
splitNounMetadataRecord,
splitVerbMetadataRecord
} from './types/reservedFields.js'
export type {
ReservedEntityField,
ReservedRelationField,
EntityMetadataInput,
EntityMetadataPatch,
RelationMetadataInput,
RelationMetadataPatch,
NoReservedEntityKeys,
NoReservedRelationKeys,
SplitMetadataRecord
} from './types/reservedFields.js'
// Export Aggregation Engine
export { AggregationIndex, AggregateMaterializer, bucketTimestamp, parseBucketRange } from './aggregation/index.js'
// Export Neural Import (AI data understanding)
export { NeuralImport } from './neural/neuralImport.js'
export type {
NeuralAnalysisResult,
DetectedEntity,
DetectedRelationship,
NeuralInsight,
NeuralImportOptions
} from './neural/neuralImport.js'
// Export Neural Entity Extraction
export { NeuralEntityExtractor } from './neural/entityExtractor.js'
export { SmartExtractor } from './neural/SmartExtractor.js'
export { SmartRelationshipExtractor } from './neural/SmartRelationshipExtractor.js'
export type {
ExtractedEntity
} from './neural/entityExtractor.js'
export type {
ExtractionResult,
SmartExtractorOptions,
FormatContext
} from './neural/SmartExtractor.js'
export type {
RelationshipExtractionResult,
SmartRelationshipExtractorOptions
} from './neural/SmartRelationshipExtractor.js'
// Export distance functions for convenience
import {
euclideanDistance,
cosineDistance,
manhattanDistance,
dotProductDistance
} from './utils/index.js'
export {
euclideanDistance,
cosineDistance,
manhattanDistance,
dotProductDistance
}
// Export version utilities
export { getBrainyVersion } from './utils/version.js'
// Export plugin system
export type { BrainyPlugin, BrainyPluginContext, StorageAdapterFactory } from './plugin.js'
export { PluginRegistry } from './plugin.js'
// Export migration system
export { MigrationRunner, MIGRATIONS } from './migration/index.js'
export type { Migration, MigrationState, MigrationPreview, MigrationResult, MigrateOptions, MigrationError } from './migration/index.js'
// Export optimistic-concurrency types (7.31.0)
export { RevisionConflictError } from './transaction/RevisionConflictError.js'
// Named not-found errors — thrown by update/relate/updateRelation/similar/
// transact/with() when a referenced entity or relation does not exist.
export { EntityNotFoundError, RelationNotFoundError } from './errors/notFound.js'
// Base error + typed migration-lock error — thrown by any data-plane call while a
// brain runs its one-time 7.x→8.0 upgrade; catch to answer HTTP 503 + Retry-After.
export { BrainyError, MigrationInProgressError, GraphIndexNotReadyError, MetadataIndexNotReadyError, VectorIndexNotReadyError, ProtectedArtifactError, DerivedArtifactMissingError } from './errors/brainyError.js'
export type { BrainyErrorType } from './errors/brainyError.js'
// ============= 8.0 Db API — generational MVCC =============
// Immutable database values: brain.now() / brain.transact() / brain.asOf() /
// db.with() / db.persist() / Brainy.load(). See src/db/ for the record layer.
export { Db } from './db/db.js'
// Portable graph export/import — db.export() / brain.export() / brain.import()
// (PortableGraph v1; identical wire format to the 7.x line).
export { isPortableGraph, validatePortableGraph } from './db/portableGraph.js'
export type {
PortableGraph,
PortableGraphEntity,
PortableGraphRelation,
ExportSelector,
ExportOptions,
ImportOptions,
ImportResult,
PortableGraphValidation
} from './db/portableGraph.js'
export {
GenerationConflictError,
SpeculativeOverlayError,
GenerationCompactedError,
StoreInconsistentError,
PendingFlushDurabilityError
} from './db/errors.js'
export type { UnreconciledRecord } from './db/errors.js'
export type {
TxOperation,
TxAddOperation,
TxUpdateOperation,
TxRemoveOperation,
TxRelateOperation,
TxUnrelateOperation,
TransactOptions,
TransactReceipt,
TxLogEntry,
CompactHistoryOptions,
CompactHistoryResult,
ChangedIds,
DiffResult,
HistoryVersion,
EntityHistory
} from './db/types.js'
// The generation fact log — sequential after-image scan surface
// (brain.scanFacts / brain.factSegmentPaths) for index heals and replays.
export type {
CommitFact,
FactOp,
FactScanBatch,
FactScanHandle
} from './db/factLog.js'
// Optional provider capability for generation-aware native indexes
export { isVersionedIndexProvider } from './plugin.js'
export type { VersionedIndexProvider } from './plugin.js'
export type { ProviderInvariantReport, InvariantResult, InvariantHeal } from './plugin.js'
// Optional native graph-acceleration engine (cor 3.0) — the published provider
// contract + its columnar wire types. Brainy feature-detects an implementation
// and falls back to its pure-TS adjacency when absent.
export type {
GraphAccelerationProvider,
Subgraph,
OpaqueIdSet,
GraphTraversalDirection,
TraverseOptions,
EdgesForNodeOptions,
GraphCursorHandle,
GraphCursorOptions,
GraphCursorChunk,
GraphScores,
GraphCommunities,
GraphPath,
RankOptions,
CommunitiesOptions,
PathOptions,
SampleOptions,
MostConnectedOptions
} from './plugin.js'
// Export embedding functionality
import {
UniversalSentenceEncoder,
TransformerEmbedding,
createEmbeddingFunction,
defaultEmbeddingFunction,
batchEmbed,
embeddingFunctions
} from './utils/embedding.js'
// Export logging utilities
import {
logger,
LogLevel,
configureLogger,
createModuleLogger
} from './utils/logger.js'
// Chat system removed - was returning fake responses
// Export performance and optimization utilities
import {
getGlobalBackpressure,
AdaptiveBackpressure
} from './utils/adaptiveBackpressure.js'
import {
getGlobalPerformanceMonitor,
PerformanceMonitor
} from './utils/performanceMonitor.js'
// Export environment utilities
import { isNode } from './utils/environment.js'
export {
UniversalSentenceEncoder,
TransformerEmbedding,
createEmbeddingFunction,
defaultEmbeddingFunction,
batchEmbed,
embeddingFunctions,
// Environment utilities
isNode,
// Logging utilities
logger,
LogLevel,
configureLogger,
createModuleLogger,
// Performance and optimization utilities
getGlobalBackpressure,
AdaptiveBackpressure,
getGlobalPerformanceMonitor,
PerformanceMonitor
}
// Export storage adapters (Brainy 8.0 — filesystem + memory only).
import { MemoryStorage, createStorage } from './storage/storageFactory.js'
export { MemoryStorage, createStorage }
// FileSystemStorage is exported separately to avoid browser build issues.
export { FileSystemStorage } from './storage/adapters/fileSystemStorage.js'
// Export types
import type {
Vector,
VectorDocument,
SearchResult,
DistanceFunction,
EmbeddingFunction,
EmbeddingModel,
HNSWNoun,
HNSWVerb,
HNSWConfig,
StorageAdapter,
DerivedFamilyDeclaration
} from './coreTypes.js'
// Export vector index implementation (the JS HNSW path)
import { JsHnswVectorIndex } from './hnsw/hnswIndex.js'
export { JsHnswVectorIndex }
export type {
Vector,
VectorDocument,
SearchResult,
DistanceFunction,
EmbeddingFunction,
EmbeddingModel,
HNSWNoun,
HNSWVerb,
HNSWConfig,
StorageAdapter,
DerivedFamilyDeclaration
}
// Export graph types
import type {
GraphNoun,
GraphVerb,
EmbeddedGraphVerb,
Person,
Organization,
Location,
Thing,
Concept,
Event,
Agent,
Organism,
Substance,
Quality,
TimeInterval,
Function,
Proposition,
Document,
Media,
File,
Message,
Collection,
Dataset,
Product,
Service,
Task,
Project,
Process,
State,
Role,
Language,
Currency,
Measurement,
Hypothesis,
Experiment,
Contract,
Regulation,
Interface,
Resource,
Custom,
SocialGroup,
Institution,
Norm,
InformationContent,
InformationBearer,
Relationship
} from './types/graphTypes.js'
import { NounType, VerbType } from './types/graphTypes.js'
export type {
GraphNoun,
GraphVerb,
EmbeddedGraphVerb,
Person,
Organization,
Location,
Thing,
Concept,
Event,
Agent,
Organism,
Substance,
Quality,
TimeInterval,
Function,
Proposition,
Document,
Media,
File,
Message,
Collection,
Dataset,
Product,
Service,
Task,
Project,
Process,
State,
Role,
Language,
Currency,
Measurement,
Hypothesis,
Experiment,
Contract,
Regulation,
Interface,
Resource,
Custom,
SocialGroup,
Institution,
Norm,
InformationContent,
InformationBearer,
Relationship
}
// Export type utility functions
import { getNounTypes, getVerbTypes, getNounTypeMap, getVerbTypeMap } from './utils/typeUtils.js'
// Export BrainyTypes for type validation and lookup
import { BrainyTypes } from './utils/brainyTypes.js'
export {
NounType,
VerbType,
getNounTypes,
getVerbTypes,
getNounTypeMap,
getVerbTypeMap,
// BrainyTypes - type validation and lookup
BrainyTypes
}
// Export MCP (Model Control Protocol) components
import {
BrainyMCPAdapter,
BrainyMCPService
} from './mcp/index.js' // Import from mcp/index.js
import {
MCPRequest,
MCPResponse,
MCPDataAccessRequest,
MCPToolExecutionRequest,
MCPSystemInfoRequest,
MCPAuthenticationRequest,
MCPRequestType,
MCPServiceOptions,
MCPTool,
MCP_VERSION
} from './types/mcpTypes.js'
export {
// MCP classes
BrainyMCPAdapter,
BrainyMCPService,
// MCP types
MCPRequestType,
MCP_VERSION
}
export type {
MCPRequest,
MCPResponse,
MCPDataAccessRequest,
MCPToolExecutionRequest,
MCPSystemInfoRequest,
MCPAuthenticationRequest,
MCPServiceOptions,
MCPTool
}
// ============= Integration Hub =============
// Connect Brainy to Excel, Power BI, Google Sheets, and more
// Enable with: new Brainy({ integrations: true })
// Hub class (used internally by brain.hub, also available for advanced use)
export {
IntegrationHub,
createIntegrationHub
} from './integrations/index.js'
export type {
IntegrationHubConfig,
IntegrationRequest,
IntegrationResponse
} from './integrations/index.js'
// Re-export IntegrationsConfig from types (for TypeScript users)
export type { IntegrationsConfig } from './types/brainy.types.js'
// Core infrastructure
export {
EventBus,
TabularExporter,
IntegrationBase,
IntegrationLoader,
createIntegrationLoader,
detectEnvironment,
INTEGRATION_CATALOG
} from './integrations/index.js'
// Integration types
export type {
BrainyEvent,
EventFilter,
EventHandler,
EventSubscription,
TabularRow,
RelationTabularRow,
TabularExporterConfig,
IntegrationConfig,
IntegrationHealthStatus,
HTTPIntegration,
StreamingIntegration,
IntegrationType,
RuntimeEnvironment,
IntegrationInfo,
IntegrationLoaderConfig,
ODataQueryOptions,
WebhookRegistration,
WebhookDeliveryResult
} from './integrations/index.js'
// Concrete integrations
export {
GoogleSheetsIntegration,
ODataIntegration,
SSEIntegration,
WebhookIntegration
} from './integrations/index.js'
export type {
GoogleSheetsConfig,
ODataConfig,
SSEConfig,
WebhookConfig
} from './integrations/index.js'
// OData utilities (advanced)
export {
parseODataQuery,
parseFilter,
parseOrderBy,
parseSelect,
odataToFindParams,
applyFilter,
applySelect,
applyOrderBy,
applyPagination,
generateEdmx,
generateMetadataJson,
generateServiceDocument
} from './integrations/index.js'