Files
Dragan Spiridonov 77d3f09159 chore(release): bump version to v3.9.6
Headline change: native HNSW search actually works again. The previous
NativeHnswBackend wrapped @ruvector/router 0.1.28's VectorDb, which a
fresh investigation found to have four serious bugs:

  1. HNSW search returned essentially random results — recall@10 ≈ 0%
     on the project's FNV fixture and 10% on textbook unit-Gaussian
     random vectors. The graph walk could not find self-vectors when
     querying with a stored vector.
  2. The VectorDb constructor unconditionally wrote a vectors.db redb
     file to the user's project root, polluting CWD with multi-MB
     files outside .agentic-qe/, in a non-SQLite format that no AQE
     migration or backup tooling knew about.
  3. Process-wide singleton lock — only ONE VectorDb instance could
     exist per process. Subsequent constructors threw "Database error:
     Database already open. Cannot acquire lock."
  4. NAPI dispose did not synchronously release the redb lock — root
     cause of v3.9.5's futex deadlock.

NativeHnswBackend was rewritten to wrap hnswlib-node@^3.0.0 (the
canonical Yury Malkov C++ Hnswlib reference implementation, used by
Pinecone, Weaviate, Qdrant, LangChain, ChromaDB). All four bugs are
gone in one swap. Empirical verification: 100% recall@10 vs the old
10%, faster inserts, multiple instances coexist, no CWD pollution.

useNativeHNSW default is flipped back from false to true (reverting
the v3.9.5 hotfix). Users with large codebases get sublinear HNSW
search by default again.

aqe init now warns when it detects a stale `vectors.db` from the
previous version and suggests `rm vectors.db`. It does NOT auto-delete
(per the data protection rules).

No new dependency was added — hnswlib-node was already in package.json.

Bumps fleetVersion in skills-manifest.json from 3.9.2 (stale) to
3.9.6 to match.

Adds release notes at docs/releases/v3.9.6.md and updates the
release index.

Closes #399. Closes #396 (test-suite cleanup carried over from the
closed PR #403, also in this release).

See ADR-090 for the full decision record and CHANGELOG.md for the
user-facing summary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 19:13:42 +00:00

248 lines
13 KiB
JSON

{
"name": "agentic-qe",
"version": "3.9.6",
"description": "Agentic Quality Engineering V3 - Domain-Driven Design Architecture with 13 Bounded Contexts, O(log n) coverage analysis, ReasoningBank learning, 60 specialized QE agents, mathematical Coherence verification, deep Claude Flow integration",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
".": {
"import": "./dist/index.js",
"types": "./dist/index.d.ts"
},
"./kernel": {
"import": "./dist/kernel/index.js",
"types": "./dist/kernel/index.d.ts"
},
"./shared": {
"import": "./dist/shared/index.js",
"types": "./dist/shared/index.d.ts"
},
"./cli": {
"import": "./dist/cli/index.js"
},
"./ruvector": {
"import": "./dist/integrations/ruvector/wrappers.js",
"types": "./dist/integrations/ruvector/wrappers.d.ts"
},
"./sync": {
"import": "./dist/sync/index.js",
"types": "./dist/sync/index.d.ts"
},
"./governance": {
"import": "./dist/governance/index.js",
"types": "./dist/governance/index.d.ts"
}
},
"bin": {
"agentic-qe": "./dist/cli/bundle.js",
"aqe": "./dist/cli/bundle.js",
"aqe-v3": "./dist/cli/bundle.js",
"aqe-mcp": "./dist/mcp/bundle.js"
},
"scripts": {
"preinstall": "node scripts/preinstall.cjs || true",
"postinstall": "node scripts/postinstall.cjs",
"build": "tsc && npm run build:cli && npm run build:mcp",
"build:cli": "node scripts/build-cli.mjs",
"build:mcp": "node scripts/build-mcp.mjs",
"prepublishOnly": "node scripts/sync-agents.cjs && node scripts/prepare-assets.cjs",
"cli": "tsx src/cli/index.ts",
"aqe": "tsx src/cli/index.ts",
"mcp": "tsx src/mcp/entry.ts",
"test": "NODE_OPTIONS='--max-old-space-size=1024 --expose-gc' vitest run",
"test:unit": "npm run test:unit:fast && npm run test:unit:heavy && npm run test:unit:mcp",
"test:unit:fast": "vitest run tests/unit/adapters tests/unit/shared tests/unit/cli tests/unit/learning tests/unit/kernel tests/unit/workers tests/unit/routing tests/unit/strange-loop tests/unit/sync tests/unit/feedback tests/unit/error-paths tests/unit/early-exit tests/unit/causal-discovery tests/unit/neural-optimizer tests/unit/test-scheduling tests/unit/logging tests/unit/validation tests/unit/memory tests/unit/performance tests/unit/scripts tests/unit/planning",
"test:unit:heavy": "vitest run tests/unit/coordination tests/unit/domains tests/unit/integrations tests/unit/optimization tests/unit/init --exclude='**/browser/**' --exclude='**/*.e2e.test.ts' --exclude='**/vibium/**' --exclude='**/browser-swarm-coordinator.test.ts'",
"test:unit:mcp": "vitest run tests/unit/mcp --exclude='**/mcp/handlers/domain-handlers.test.ts' --fileParallelism=false",
"test:ci": "vitest run --exclude='**/browser/**' --exclude='**/*.e2e.test.ts' --exclude='**/vibium/**' --exclude='**/integration/browser/**' --exclude='**/browser-swarm-coordinator.test.ts' --exclude='**/mcp/handlers/domain-handlers.test.ts'",
"test:e2e": "vitest run tests/integration/browser --testTimeout=120000",
"test:safe": "NODE_OPTIONS='--max-old-space-size=768 --expose-gc' vitest run --maxForks=1",
"test:dev": "npm run test:unit:fast",
"test:all": "npm test -- --run",
"test:mcp": "npm run test:unit:mcp",
"test:mcp:integration": "npm test -- --run tests/integration/mcp/",
"mcp:validate": "echo 'MCP validation: All tools registered in MCP server' && exit 0",
"mcp:report": "echo 'MCP Report: uses vitest for test reporting' && exit 0",
"test:code-intelligence": "npm test -- --run tests/unit/domains/code-intelligence/ tests/unit/coordination/mincut/",
"verify:counts": "node -e \"const fs=require('fs'),g=require('glob'),p=require('path');const src=g.globSync('src/**/*.ts',{ignore:'src/**/*.test.ts'});const tests=g.globSync('tests/**/*.test.ts');const agents=g.globSync('.claude/agents/v3/qe-*.md');const skills=g.globSync('.claude/skills/**/*.md');const ok=src.length>500&&tests.length>300;const r={status:ok?'pass':'fail',srcFiles:src.length,testFiles:tests.length,agents:agents.length,skills:skills.length};fs.mkdirSync('reports',{recursive:true});fs.writeFileSync(p.join('reports','verification-counts.json'),JSON.stringify(r,null,2));console.log('Counts:',JSON.stringify(r));if(!ok)process.exit(1)\"",
"verify:agent-skills": "node -e \"const fs=require('fs'),g=require('glob'),p=require('path');const agents=g.globSync('.claude/agents/v3/qe-*.md');const skills=g.globSync('.claude/skills/**/*.md');const missing=[];for(const a of agents){const name=p.basename(a,'.md');const hasSkill=skills.some(s=>s.includes(name.replace('qe-','')));if(!hasSkill)missing.push(name)}const ok=missing.length<agents.length/2;const r={status:ok?'pass':'fail',agents:agents.length,skills:skills.length,unmatchedAgents:missing.length,missing:missing.slice(0,10)};fs.mkdirSync('reports',{recursive:true});fs.writeFileSync(p.join('reports','verification-agent-skills.json'),JSON.stringify(r,null,2));console.log('Agent-Skills:',JSON.stringify(r));if(!ok)process.exit(1)\"",
"verify:features": "node -e \"const fs=require('fs'),p=require('path');const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const hasBin=!!pkg.bin&&Object.keys(pkg.bin).length>=2;const hasExports=!!pkg.exports&&Object.keys(pkg.exports).length>=3;const cliBundleExists=fs.existsSync('dist/cli/bundle.js');const mcpBundleExists=fs.existsSync('dist/mcp/bundle.js');const ok=hasBin&&hasExports&&cliBundleExists&&mcpBundleExists;const r={status:ok?'pass':'fail',binCount:Object.keys(pkg.bin||{}).length,exportsCount:Object.keys(pkg.exports||{}).length,cliBundleExists,mcpBundleExists};fs.mkdirSync('reports',{recursive:true});fs.writeFileSync(p.join('reports','verification-features.json'),JSON.stringify(r,null,2));console.log('Features:',JSON.stringify(r));if(!ok)process.exit(1)\"",
"test:contracts": "npm test -- --run tests/unit/domains/contract-testing/",
"test:infrastructure": "npm test -- --run tests/unit/kernel/ tests/unit/shared/",
"test:regression": "npm run test:unit",
"test:coverage": "vitest run --coverage --exclude='**/browser/**' --exclude='**/*.e2e.test.ts' --exclude='**/integration/browser/**' --exclude='**/browser-swarm-coordinator.test.ts' --exclude='**/mcp/handlers/domain-handlers.test.ts'",
"test:perf": "vitest bench tests/performance/",
"test:journeys": "npm test -- --run tests/integration/",
"test:journeys:ci": "vitest run tests/integration/ --exclude='**/browser/**' --exclude='**/browser-integration/**' --exclude='**/integration/mcp/**' --exclude='**/integration/sync/**' --exclude='**/integration/learning/**' --exclude='**/integration/domains/**' --exclude='**/integration/llm/**' --exclude='**/integration/n8n/**' --exclude='**/*.e2e.test.ts'",
"test:watch": "vitest",
"performance:gate": "npx tsx src/performance/run-gates.ts",
"test:integration:browser": "VIBIUM_REAL_TESTS=true vitest run tests/integrations/vibium/vibium-real.test.ts",
"benchmark:token-reduction": "vitest bench tests/benchmarks/code-intelligence-token-reduction.bench.ts",
"dev": "node dist/cli/bundle.js",
"start": "node dist/cli/bundle.js",
"typecheck": "tsc --noEmit",
"lint": "eslint src tests --ext .ts",
"clean": "node -e \"const fs=require('fs');try{fs.rmSync('dist',{recursive:true,force:true})}catch{}\"",
"sync:agents": "node scripts/sync-agents.cjs",
"sync:agents:check": "node scripts/sync-agents-check.cjs",
"sync:cloud": "tsx src/cli/index.ts sync",
"sync:cloud:full": "tsx src/cli/index.ts sync --full",
"sync:cloud:status": "tsx src/cli/index.ts sync status",
"sync:cloud:verify": "tsx src/cli/index.ts sync verify",
"sync:cloud:init": "tsx src/cli/index.ts sync init --output ./src/sync/schema/cloud-schema.sql",
"sync:cloud:config": "tsx src/cli/index.ts sync config --sources",
"test:pg:up": "docker compose -f tests/docker-compose.test.yml up -d --wait",
"test:pg:down": "docker compose -f tests/docker-compose.test.yml down",
"test:integration:pg": "POSTGRES_URL=postgresql://aqe_test:aqe_test@localhost:15432/aqe_test vitest run tests/integration/sync/",
"sync:embeddings": "tsx scripts/generate-embeddings.ts --verbose",
"sync:embeddings:force": "tsx scripts/generate-embeddings.ts --force --verbose",
"sync:embeddings:search": "tsx scripts/generate-embeddings.ts --search",
"skills:update-manifest": "npx tsx scripts/update-skill-manifest.ts",
"skills:update-badges": "npx tsx scripts/update-skill-manifest.ts --generate-badges",
"skills:validate-tier3": "node scripts/validate-tier3.cjs"
},
"keywords": [
"quality-engineering",
"testing",
"automation",
"ai-agents",
"distributed-systems",
"swarm-intelligence",
"typescript-hooks",
"native-hooks",
"lifecycle-management",
"mcp-integration",
"agent-coordination",
"machine-learning",
"reinforcement-learning",
"pattern-matching",
"flaky-test-detection",
"continuous-improvement",
"cost-optimization",
"test-generation",
"coverage-analysis",
"ddd",
"domain-driven-design"
],
"author": "AQE Development Team",
"license": "MIT",
"dependencies": {
"@claude-flow/guidance": "3.0.0-alpha.1",
"@ruvector/attention": "0.1.3",
"@ruvector/gnn": "0.1.25",
"@ruvector/learning-wasm": "^0.1.29",
"@ruvector/router": "^0.1.28",
"@ruvector/rvf-node": "^0.1.7",
"@ruvector/sona": "0.1.5",
"@xenova/transformers": "^2.17.2",
"axe-core": "^4.11.1",
"better-sqlite3": "^12.5.0",
"chalk": "^5.6.2",
"cli-progress": "^3.12.0",
"commander": "^12.1.0",
"fast-glob": "^3.3.3",
"fast-json-patch": "^3.1.1",
"hnswlib-node": "^3.0.0",
"jose": "^6.1.3",
"ora": "^9.0.0",
"pg": "^8.17.2",
"prime-radiant-advanced-wasm": "^0.1.3",
"secure-json-parse": "^4.1.0",
"uuid": "^9.0.0",
"vibium": "^0.1.2",
"web-tree-sitter": "~0.24.7",
"yaml": "^2.8.2"
},
"optionalDependencies": {
"@claude-flow/browser": "3.0.0-alpha.1",
"@ruvector/attention-darwin-arm64": "0.1.3",
"@ruvector/attention-darwin-x64": "0.1.3",
"@ruvector/attention-linux-arm64-gnu": "0.1.3",
"@ruvector/attention-linux-arm64-musl": "npm:@ruvector/attention-linux-arm64-gnu@0.1.3",
"@ruvector/attention-linux-x64-gnu": "0.1.3",
"@ruvector/attention-linux-x64-musl": "npm:@ruvector/attention-linux-x64-gnu@0.1.3",
"@ruvector/gnn-darwin-arm64": "0.1.25",
"@ruvector/gnn-darwin-x64": "0.1.25",
"@ruvector/gnn-linux-arm64-gnu": "0.1.25",
"@ruvector/gnn-linux-arm64-musl": "npm:@ruvector/gnn-linux-arm64-gnu@0.1.25",
"@ruvector/gnn-linux-x64-gnu": "0.1.25",
"@ruvector/gnn-linux-x64-musl": "npm:@ruvector/gnn-linux-x64-gnu@0.1.25",
"@ruvector/tiny-dancer-linux-arm64-gnu": "^0.1.17",
"rvlite": "^0.2.4"
},
"resolutions": {
"graceful-fs": "^4.2.11",
"stack-utils": "^2.0.6",
"tar": ">=7.5.7"
},
"overrides": {
"@ruvector/gnn-linux-x64-musl": "npm:@ruvector/gnn-linux-x64-gnu@0.1.25",
"@ruvector/gnn-linux-arm64-musl": "npm:@ruvector/gnn-linux-arm64-gnu@0.1.25",
"tar": ">=7.5.7",
"markdown-it": ">=14.1.1"
},
"devDependencies": {
"@faker-js/faker": "^10.2.0",
"@types/better-sqlite3": "^7.6.13",
"@types/cli-progress": "^3.11.6",
"@types/node": "^20.19.17",
"@types/pg": "^8.16.0",
"@types/uuid": "^10.0.0",
"@types/ws": "^8.18.1",
"@typescript-eslint/eslint-plugin": "^6.13.0",
"@typescript-eslint/parser": "^6.13.0",
"@vitest/coverage-v8": "^4.0.16",
"dotenv": "^17.2.3",
"esbuild": "^0.27.2",
"eslint": "^8.55.0",
"glob": "^13.0.0",
"msw": "^2.12.7",
"tsx": "^4.21.0",
"typescript": "^5.9.3",
"vitest": "^4.0.16"
},
"engines": {
"node": ">=18.0.0",
"npm": ">=8.0.0"
},
"repository": {
"type": "git",
"url": "git+https://github.com/proffesor-for-testing/agentic-qe.git"
},
"bugs": {
"url": "https://github.com/proffesor-for-testing/agentic-qe/issues"
},
"homepage": "https://github.com/proffesor-for-testing/agentic-qe#readme",
"files": [
"dist/**/*.js",
"dist/**/*.d.ts",
"dist/**/*.json",
"dist/**/*.node",
"assets/**",
"scripts/postinstall.cjs",
"scripts/preinstall.cjs",
"scripts/fetch-content.cjs",
"scripts/validate-skill.cjs",
"scripts/validator-lib.cjs",
"scripts/validate-skill-frontmatter.cjs",
"scripts/validate-tier3.cjs",
"scripts/validate-sfdipot-assessment.ts",
".claude/agents",
".claude/skills",
".claude/commands",
".claude/helpers",
".opencode/agents",
".opencode/skills",
".opencode/tools",
".opencode/permissions.yaml",
"README.md",
"CHANGELOG.md",
"LICENSE"
],
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
}
}