brainy/tests/integration/vfs-debug.test.ts

82 lines
2.8 KiB
TypeScript
Raw Normal View History

feat: add confidence/weight to Entity and flatten Result fields for convenient access Add confidence and weight properties to Entity interface and flatten Result fields to top level for improved developer experience and API consistency. Breaking Changes: None (all changes are backward compatible) Phase 2 - Entity Confidence & Weight: - Add confidence (type classification certainty) and weight (entity importance) to Entity interface - Add confidence/weight parameters to AddParams and UpdateParams - Update convertNounToEntity() to extract confidence/weight from storage - Update add() and update() methods to preserve confidence/weight in metadata - Enable developers to specify and access entity confidence/weight scores Phase 3 - Result Field Flattening: - Flatten commonly-used entity fields (type, metadata, data, confidence, weight) to Result top level - Add createResult() helper for consistent Result construction - Update all find() code paths to use createResult() - Enable direct access: result.metadata instead of result.entity.metadata - Preserve full entity in result.entity for backward compatibility VFS Fix (from previous work): - Fix VFSStructureGenerator to use brain.vfs() cached instance instead of creating separate instance - Improve VFS error messages with step-by-step guidance - Update examples to show correct vfs.init() usage - Add comprehensive VFS import verification tests Documentation Updates: - Update API_REFERENCE.md with confidence/weight examples and flattened Result documentation - Enhance JSDoc for add(), get(), find(), similar() with v4.3.0 examples - Document Result structure changes and backward compatibility - Add migration examples showing both old and new access patterns Tests: - Add 16 comprehensive tests for Entity confidence/weight exposure - Add tests for Result field flattening - Add tests for backward compatibility - All tests passing (16/16) API Consistency: - Entity: direct access to confidence/weight - Result: flattened fields + nested entity (both work) - Relation: already had confidence/weight (consistent) - VFS: inherits from Entity (automatic) Files Changed: - src/types/brainy.types.ts - Updated Entity, AddParams, UpdateParams, Result interfaces - src/brainy.ts - Updated implementation and JSDoc for all affected methods - tests/integration/entity-confidence-weight.test.ts - 16 comprehensive tests - docs/API_REFERENCE.md - Updated with v4.3.0 examples - src/importers/VFSStructureGenerator.ts - VFS fix - src/vfs/VirtualFileSystem.ts - Improved error messages - examples/unified-import-example.ts - Added vfs.init() example - tests/integration/vfs-*-verification.test.ts - VFS verification tests 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 12:19:50 -07:00
/**
* VFS Debug Test - Minimal reproduction to find the issue
*/
import { describe, it, expect, beforeEach } from 'vitest'
import { Brainy } from '../../src/brainy.js'
import * as XLSX from 'xlsx'
describe('VFS Debug', () => {
it('minimal VFS writeFile test', async () => {
const brain = new Brainy({ storage: { type: 'memory' } })
await brain.init()
console.log('✅ Brain initialized')
// Get VFS and initialize
const vfs = brain.vfs()
await vfs.init()
console.log('✅ VFS initialized')
// Write a single file
await vfs.writeFile('/test.txt', 'Hello World')
console.log('✅ File written')
// Check if entity exists using find()
const allEntities = await brain.find({ limit: 100 })
console.log(`📊 Total entities (via find): ${allEntities.length}`)
console.log('Entities from find() - CHECKING STRUCTURE:')
allEntities.forEach((e, i) => {
console.log(` ${i+1}. Result object keys: ${Object.keys(e).join(', ')}`)
console.log(` e.id: ${e.id}`)
console.log(` e.score: ${(e as any).score}`)
console.log(` e.entity: ${(e as any).entity ? 'EXISTS' : 'MISSING'}`)
if ((e as any).entity) {
console.log(` e.entity.type: ${(e as any).entity.type}`)
console.log(` e.entity.metadata: ${JSON.stringify((e as any).entity.metadata)}`)
}
console.log(` e.type (direct): ${e.type}`)
console.log(` e.metadata (direct): ${JSON.stringify(e.metadata)}`)
})
const vfsEntities = allEntities.filter(e => e.metadata?.vfsType)
console.log(`📊 VFS entities (via find): ${vfsEntities.length}`)
// Now try getting entities directly
console.log('\nChecking entities directly with brain.get():')
for (const entity of allEntities) {
const direct = await brain.get(entity.id)
if (direct) {
console.log(` ${direct.id}:`)
console.log(` metadata: ${JSON.stringify(direct.metadata)}`)
if (direct.metadata?.vfsType) {
console.log(` ✅ HAS vfsType: ${direct.metadata.vfsType}`)
}
}
}
// Try reading the file
const content = await vfs.readFile('/test.txt')
console.log(`\n📄 File content: "${content.toString()}"`)
// Try VFS directory listing
console.log('\n📂 VFS Directory Listing:')
const rootContents = await vfs.readdir('/')
console.log(` Root contents: ${rootContents.join(', ')}`)
// Try getDirectChildren (Workshop's method)
const children = await vfs.getDirectChildren('/')
console.log(` Direct children: ${children.length}`)
children.forEach(child => {
console.log(` - ${child.metadata.name} (${child.metadata.vfsType})`)
})
// THE REAL TEST: Can we query VFS?
expect(children.length).toBeGreaterThan(0)
expect(rootContents.length).toBeGreaterThan(0)
})
})