Three hooks so a native provider can run a non-blocking, online, background build-new→verify→swap index migration on a large-brain upgrade while brainy stays out of the way — no minutes-long blocking rebuild-on-open/first-query. - isMigrating?(): boolean — OPTIONAL on MetadataIndexProvider / GraphIndexProvider / VectorIndexProvider (mirrors isReady?()/init?(), feature-detected). While a provider reports migrating, brainy SKIPS its rebuild for that index — per-index, so a non-migrating sibling still rebuilds; skipped even under epoch-drift or size()===0 — in both rebuildIndexesIfNeeded and the lazy first-query force path. The provider serves correct reads from canonical until it verifies-and-swaps. - brain.stampBrainFormat() — public; the provider calls it once its background swap verifies, so brainy authors dataFormat (the provider never does). brainy withholds its own marker stamp while any provider is migrating, so the shared epoch is never advanced ahead of a deferred index. - ./brain-format export — the marker module's EXPECTED_INDEX_EPOCH / CURRENT_DATA_FORMAT are importable so a native provider shares the constant (no duplicate = no lockstep-drift). 8-case test; unit 1743 green.
242 lines
8.4 KiB
JSON
242 lines
8.4 KiB
JSON
{
|
||
"name": "@soulcraft/brainy",
|
||
"version": "8.0.0-rc.7",
|
||
"description": "Universal Knowledge Protocol™ - World's first Triple Intelligence database unifying vector, graph, and document search in one API. Stage 3 CANONICAL: 42 nouns × 127 verbs covering 96-97% of all human knowledge.",
|
||
"main": "dist/index.js",
|
||
"module": "dist/index.js",
|
||
"types": "dist/index.d.ts",
|
||
"type": "module",
|
||
"bin": {
|
||
"brainy": "bin/brainy.js"
|
||
},
|
||
"sideEffects": [
|
||
"./dist/setup.js",
|
||
"./dist/utils/textEncoding.js",
|
||
"./src/setup.ts",
|
||
"./src/utils/textEncoding.ts"
|
||
],
|
||
"exports": {
|
||
".": {
|
||
"import": "./dist/index.js",
|
||
"types": "./dist/index.d.ts"
|
||
},
|
||
"./setup": {
|
||
"import": "./dist/setup.js",
|
||
"types": "./dist/setup.d.ts"
|
||
},
|
||
"./types/graphTypes": {
|
||
"import": "./dist/types/graphTypes.js",
|
||
"types": "./dist/types/graphTypes.d.ts"
|
||
},
|
||
"./utils/textEncoding": {
|
||
"import": "./dist/utils/textEncoding.js",
|
||
"types": "./dist/utils/textEncoding.d.ts"
|
||
},
|
||
"./universal": {
|
||
"import": "./dist/universal/index.js",
|
||
"types": "./dist/universal/index.d.ts"
|
||
},
|
||
"./neural/entityExtractor": {
|
||
"import": "./dist/neural/entityExtractor.js",
|
||
"types": "./dist/neural/entityExtractor.d.ts"
|
||
},
|
||
"./neural/SmartExtractor": {
|
||
"import": "./dist/neural/SmartExtractor.js",
|
||
"types": "./dist/neural/SmartExtractor.d.ts"
|
||
},
|
||
"./neural/SmartRelationshipExtractor": {
|
||
"import": "./dist/neural/SmartRelationshipExtractor.js",
|
||
"types": "./dist/neural/SmartRelationshipExtractor.d.ts"
|
||
},
|
||
"./plugin": {
|
||
"import": "./dist/plugin.js",
|
||
"types": "./dist/plugin.d.ts"
|
||
},
|
||
"./internals": {
|
||
"import": "./dist/internals.js",
|
||
"types": "./dist/internals.d.ts"
|
||
},
|
||
"./brain-format": {
|
||
"import": "./dist/storage/brainFormat.js",
|
||
"types": "./dist/storage/brainFormat.d.ts"
|
||
},
|
||
"./embeddings/wasm": {
|
||
"import": "./dist/embeddings/wasm/index.js",
|
||
"types": "./dist/embeddings/wasm/index.d.ts"
|
||
}
|
||
},
|
||
"engines": {
|
||
"node": "22.x",
|
||
"bun": ">=1.0.0"
|
||
},
|
||
"scripts": {
|
||
"clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
||
"prebuild": "npm run clean",
|
||
"build": "npm run build:types:if-needed && npm run build:patterns:if-needed && tsc && tsc -p tsconfig.cli.json && npm run build:copy-wasm",
|
||
"build:copy-wasm": "node -e \"const fs=require('fs');const src='src/embeddings/wasm/pkg';const dst='dist/embeddings/wasm/pkg';const skip=new Set(['package.json','.gitignore']);if(fs.existsSync(src)){fs.mkdirSync(dst,{recursive:true});fs.readdirSync(src).filter(f=>!skip.has(f)).forEach(f=>fs.copyFileSync(src+'/'+f,dst+'/'+f));console.log('Copied WASM pkg to dist')}\"",
|
||
"build:types": "tsx scripts/buildTypeEmbeddings.ts",
|
||
"build:types:if-needed": "node scripts/check-type-embeddings.cjs || npm run build:types",
|
||
"build:types:force": "npm run build:types",
|
||
"build:patterns": "tsx scripts/buildEmbeddedPatterns.ts",
|
||
"build:patterns:if-needed": "node scripts/check-patterns.cjs || npm run build:patterns",
|
||
"build:patterns:force": "npm run build:patterns",
|
||
"build:candle": "./scripts/build-candle-wasm.sh",
|
||
"build:candle:dev": "./scripts/build-candle-wasm.sh --dev",
|
||
"prepare": "npm run build",
|
||
"test": "npm run test:unit",
|
||
"test:watch": "NODE_OPTIONS='--max-old-space-size=8192' vitest --config tests/configs/vitest.unit.config.ts",
|
||
"test:coverage": "NODE_OPTIONS='--max-old-space-size=8192' vitest run --config tests/configs/vitest.unit.config.ts --coverage",
|
||
"test:unit": "NODE_OPTIONS='--max-old-space-size=8192' vitest run --config tests/configs/vitest.unit.config.ts",
|
||
"test:perf": "vitest run tests/unit/performance --reporter=basic",
|
||
"test:integration": "NODE_OPTIONS='--max-old-space-size=8192' vitest run --config tests/configs/vitest.integration.config.ts",
|
||
"test:semantic": "NODE_OPTIONS='--max-old-space-size=8192' vitest run --config tests/configs/vitest.semantic.config.ts",
|
||
"test:all": "npm run test:unit && npm run test:integration",
|
||
"test:ci-unit": "CI=true vitest run --config tests/configs/vitest.unit.config.ts",
|
||
"test:ci-integration": "NODE_OPTIONS='--max-old-space-size=16384' CI=true vitest run --config tests/configs/vitest.integration.config.ts",
|
||
"test:ci": "npm run test:ci-unit && npm run test:ci-integration",
|
||
"test:bun": "bun tests/integration/bun-compile-test.ts",
|
||
"test:bun:compile": "bun build tests/integration/bun-compile-test.ts --compile --outfile /tmp/brainy-bun-test && /tmp/brainy-bun-test",
|
||
"test:wasm": "npx vitest run tests/integration/wasm-embeddings.test.ts",
|
||
"typecheck": "tsc --noEmit",
|
||
"lint": "eslint --ext .ts,.js src/",
|
||
"lint:fix": "eslint --ext .ts,.js src/ --fix",
|
||
"format": "prettier --write \"src/**/*.{ts,js}\"",
|
||
"format:check": "prettier --check \"src/**/*.{ts,js}\"",
|
||
"release": "./scripts/release.sh patch",
|
||
"release:patch": "./scripts/release.sh patch",
|
||
"release:minor": "./scripts/release.sh minor",
|
||
"release:major": "./scripts/release.sh major",
|
||
"release:dry": "./scripts/release.sh patch --dry-run",
|
||
"release:standard-version": "standard-version",
|
||
"release:standard-version:patch": "standard-version --release-as patch",
|
||
"release:standard-version:minor": "standard-version --release-as minor",
|
||
"release:standard-version:major": "standard-version --release-as major"
|
||
},
|
||
"keywords": [
|
||
"ai-database",
|
||
"vector-database",
|
||
"graph-database",
|
||
"field-filtering",
|
||
"triple-intelligence",
|
||
"hnsw",
|
||
"embeddings",
|
||
"semantic-search",
|
||
"machine-learning",
|
||
"artificial-intelligence",
|
||
"data-storage",
|
||
"indexing",
|
||
"typescript"
|
||
],
|
||
"author": "Brainy Contributors",
|
||
"license": "MIT",
|
||
"private": false,
|
||
"publishConfig": {
|
||
"access": "public"
|
||
},
|
||
"homepage": "https://github.com/soulcraftlabs/brainy",
|
||
"bugs": {
|
||
"url": "https://github.com/soulcraftlabs/brainy/issues"
|
||
},
|
||
"repository": {
|
||
"type": "git",
|
||
"url": "git+https://github.com/soulcraftlabs/brainy.git"
|
||
},
|
||
"files": [
|
||
"dist/**/*.js",
|
||
"dist/**/*.d.ts",
|
||
"dist/**/*.wasm",
|
||
"assets/models/all-MiniLM-L6-v2/**",
|
||
"bin/",
|
||
"brainy.png",
|
||
"docs/**/*.md",
|
||
"LICENSE",
|
||
"README.md",
|
||
"CHANGELOG.md"
|
||
],
|
||
"overrides": {
|
||
"boolean": "3.2.0"
|
||
},
|
||
"devDependencies": {
|
||
"@rollup/plugin-commonjs": "^28.0.6",
|
||
"@rollup/plugin-node-resolve": "^16.0.1",
|
||
"@rollup/plugin-replace": "^6.0.2",
|
||
"@rollup/plugin-terser": "^0.4.4",
|
||
"@testcontainers/redis": "^11.5.1",
|
||
"@types/js-yaml": "^4.0.9",
|
||
"@types/mime": "^3.0.4",
|
||
"@types/node": "^20.11.30",
|
||
"@types/uuid": "^10.0.0",
|
||
"@types/ws": "^8.18.1",
|
||
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
||
"@typescript-eslint/parser": "^8.0.0",
|
||
"@vitest/coverage-v8": "^3.2.4",
|
||
"jspdf": "^3.0.3",
|
||
"minio": "^8.0.5",
|
||
"standard-version": "^9.5.0",
|
||
"testcontainers": "^11.5.1",
|
||
"tsx": "^4.19.2",
|
||
"typescript": "^5.4.5",
|
||
"uuid": "^9.0.1",
|
||
"vitest": "^3.2.4"
|
||
},
|
||
"dependencies": {
|
||
"@msgpack/msgpack": "^3.1.2",
|
||
"boxen": "^8.0.1",
|
||
"chalk": "^5.3.0",
|
||
"chardet": "^2.0.0",
|
||
"cli-table3": "^0.6.5",
|
||
"commander": "^11.1.0",
|
||
"csv-parse": "^6.1.0",
|
||
"inquirer": "^12.9.3",
|
||
"js-yaml": "^4.1.0",
|
||
"mammoth": "^1.11.0",
|
||
"mime": "^4.1.0",
|
||
"ora": "^8.2.0",
|
||
"pdfjs-dist": "^4.0.379",
|
||
"prompts": "^2.4.2",
|
||
"roaring-wasm": "^1.1.0",
|
||
"ws": "^8.18.3",
|
||
"xlsx": "^0.18.5"
|
||
},
|
||
"prettier": {
|
||
"arrowParens": "always",
|
||
"bracketSameLine": true,
|
||
"bracketSpacing": true,
|
||
"htmlWhitespaceSensitivity": "css",
|
||
"printWidth": 80,
|
||
"proseWrap": "preserve",
|
||
"semi": false,
|
||
"singleQuote": true,
|
||
"tabWidth": 2,
|
||
"trailingComma": "none",
|
||
"useTabs": false
|
||
},
|
||
"eslintConfig": {
|
||
"root": true,
|
||
"extends": [
|
||
"eslint:recommended",
|
||
"plugin:@typescript-eslint/recommended"
|
||
],
|
||
"parser": "@typescript-eslint/parser",
|
||
"plugins": [
|
||
"@typescript-eslint"
|
||
],
|
||
"rules": {
|
||
"@typescript-eslint/no-explicit-any": "off",
|
||
"no-unused-vars": "off",
|
||
"@typescript-eslint/no-unused-vars": [
|
||
"warn",
|
||
{
|
||
"args": "after-used",
|
||
"argsIgnorePattern": "^_"
|
||
}
|
||
],
|
||
"semi": "off",
|
||
"@typescript-eslint/semi": [
|
||
"error",
|
||
"never"
|
||
],
|
||
"no-extra-semi": "off"
|
||
}
|
||
}
|
||
}
|