feat: add entity versioning system with critical bug fixes (v5.3.0)
Entity Versioning (NEW): - Add complete entity versioning API (brain.versions.*) with 18 methods - Content-addressable storage with SHA-256 deduplication - Git-style version control: save, restore, compare, undo, prune - Auto-versioning augmentation with pattern-based filtering - Branch-isolated version histories - Complete integration tests and API documentation Critical Bug Fixes: - Fix commit() not updating branch refs (brainy.ts:2385) - Root cause: Passed "heads/main" which normalized to "refs/heads/heads/main" - Impact: All Git-style versioning features were broken - Fix: Pass branch name directly for correct normalization - Fix VFS entities missing isVFSEntity flag - Add isVFSEntity: true to all VFS files/folders for filtering - Resolves pollution of semantic search with filesystem entities - Updated in writeFile(), mkdir(), and root directory init Implementation: - src/versioning/VersionManager.ts - Core versioning engine - src/versioning/VersionStorage.ts - Content-addressable storage - src/versioning/VersionIndex.ts - Metadata indexing - src/versioning/VersionDiff.ts - Version comparison - src/versioning/VersioningAPI.ts - Public API interface - src/augmentations/versioningAugmentation.ts - Auto-versioning - tests/integration/versioning.test.ts - Full integration tests - tests/unit/versioning/ - Unit test suite Documentation: - Complete Entity Versioning API section in docs/api/README.md - VFS entity filtering guide with examples - Updated "What's New" section for v5.3.0 - Strategy docs for both critical bugs Test Results: - 1168 tests passing - Build: PASSING (no TypeScript errors) - Integration tests: ALL PASSING 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b31997b1ea
commit
c488fa82cc
16 changed files with 5394 additions and 9 deletions
|
|
@ -24,6 +24,7 @@ import { NaturalLanguageProcessor } from './neural/naturalLanguageProcessor.js'
|
|||
import { NeuralEntityExtractor, ExtractedEntity } from './neural/entityExtractor.js'
|
||||
import { TripleIntelligenceSystem } from './triple/TripleIntelligenceSystem.js'
|
||||
import { VirtualFileSystem } from './vfs/VirtualFileSystem.js'
|
||||
import { VersioningAPI } from './versioning/VersioningAPI.js'
|
||||
import { MetadataIndexManager } from './utils/metadataIndex.js'
|
||||
import { GraphAdjacencyIndex } from './graph/graphAdjacencyIndex.js'
|
||||
import { CommitBuilder } from './storage/cow/CommitObject.js'
|
||||
|
|
@ -95,6 +96,7 @@ export class Brainy<T = any> implements BrainyInterface<T> {
|
|||
private _nlp?: NaturalLanguageProcessor
|
||||
private _extractor?: NeuralEntityExtractor
|
||||
private _tripleIntelligence?: TripleIntelligenceSystem
|
||||
private _versions?: VersioningAPI
|
||||
private _vfs?: VirtualFileSystem
|
||||
|
||||
// State
|
||||
|
|
@ -2380,7 +2382,7 @@ export class Brainy<T = any> implements BrainyInterface<T> {
|
|||
const commitHash = await builder.build()
|
||||
|
||||
// Update branch ref to point to new commit
|
||||
await refManager.setRef(`heads/${currentBranch}`, commitHash, {
|
||||
await refManager.setRef(currentBranch, commitHash, {
|
||||
author: options?.author || 'unknown',
|
||||
message: options?.message || 'Snapshot commit'
|
||||
})
|
||||
|
|
@ -2937,6 +2939,38 @@ export class Brainy<T = any> implements BrainyInterface<T> {
|
|||
return this._neural
|
||||
}
|
||||
|
||||
/**
|
||||
* Versioning API - Entity version control (v5.3.0)
|
||||
*
|
||||
* Provides entity-level versioning with:
|
||||
* - save() - Create version of entity
|
||||
* - restore() - Restore entity to specific version
|
||||
* - list() - List all versions of entity
|
||||
* - compare() - Deep diff between versions
|
||||
* - prune() - Remove old versions (retention policies)
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* // Save current state
|
||||
* const version = await brain.versions.save('user-123', { tag: 'v1.0' })
|
||||
*
|
||||
* // List versions
|
||||
* const versions = await brain.versions.list('user-123')
|
||||
*
|
||||
* // Restore to previous version
|
||||
* await brain.versions.restore('user-123', 5)
|
||||
*
|
||||
* // Compare versions
|
||||
* const diff = await brain.versions.compare('user-123', 2, 5)
|
||||
* ```
|
||||
*/
|
||||
get versions(): VersioningAPI {
|
||||
if (!this._versions) {
|
||||
this._versions = new VersioningAPI(this as any)
|
||||
}
|
||||
return this._versions
|
||||
}
|
||||
|
||||
/**
|
||||
* Natural Language Processing API
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue