mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-10-29 06:32:28 +00:00
* fix(grammars): load vendored tree-sitter grammars from vendor/ by absolute path (#2111) The recurring Windows `EPERM: operation not permitted, symlink` (errno -4048) when adding the MCP server to Antigravity is NOT the #2101/#2110 module-load crash — it is an install-time arborist failure during the `_npx` reify that the MCP client triggers on every `npx gitnexus` launch. Root cause: the `postinstall` materialize step copied each vendored grammar (`vendor/tree-sitter-{c,dart,proto,swift,kotlin}`) into `node_modules/gitnexus/node_modules/tree-sitter-*` as a real package so runtime `require('tree-sitter-dart')` would resolve. Those packages are in no dependency graph, so every subsequent npm/npx reify treats them as **extraneous** and prunes/relocates them — on Windows the relocation goes through `@npmcli/move-file`'s symlink path and throws EPERM (symlinks need Developer Mode/admin), and on every OS the 2nd run silently deletes the grammars. This is the same class as #1728, which the materialize step itself claimed to have fixed. Fix (the prebuildify + node-gyp-build ecosystem pattern): never copy grammars into node_modules. Load each by absolute path from `vendor/<name>` via the new `requireVendoredGrammar` helper — the grammar's own `bindings/node` runs `node-gyp-build(<dir>)` and loads the committed `vendor/<name>/prebuilds/ <platform>-<arch>/…` directly (all 5 ship all 6 tuples). vendor/ is inside the package but not a node_modules subtree, so arborist never sees the grammars and the reify is idempotent — no EPERM, no silent deletion. - new src/core/tree-sitter/vendored-grammars.ts (requireVendoredGrammar / vendoredGrammarDir / VENDORED_GRAMMAR_PACKAGES; VENDOR_ROOT stable in dev+dist) - route all consumers through it: parser-loader, parse-worker, grpc proto, include-extractor (C), http-patterns kotlin, cli optional-grammars probe - postinstall drops the materialize step; build-tree-sitter-grammars.cjs builds in-place under vendor/ (gitignored) and deletes materialize-vendor-grammars.cjs - tests + grammar-introspection helper load grammars from vendor/ too (single source of truth); new vendored-grammars.test.ts guards against reintroducing a bare `require('tree-sitter-<vendored>')` Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(grammars): throw on a non-vendored name in requireVendoredGrammar Drift guard (PR #2144 review, P3): validate the argument against VENDORED_GRAMMAR_PACKAGES and fail loudly on an unknown name, so the three grammar lists (package set / CLI probe / build registry) drifting out of sync surfaces as a clear error instead of a confusing absolute-path require miss. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(grammars): prepack guard against stray vendor/<g>/build/ shadowing prebuilds Publish hygiene (PR #2144 review, P2). Now that build-tree-sitter-grammars.cjs source-builds into vendor/<name>/build/, a stray build dir would ship in the tarball (files:["vendor"] overrides .gitignore/.npmignore) AND shadow the committed prebuild — node-gyp-build resolves build/Release before prebuilds/. assert-publish-grammar-coverage.cjs (prepack) now fails `npm pack` if any vendor/*/build exists (findStrayBuildArtifacts), with a clear `rm -rf` fix hint. Adds unit coverage for the new pure function. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test(grammars): harden the #2111 no-bare-require regression guard PR #2144 review (P2). The guard regex missed dynamic import(), side-effect `import 'x'`, /subpath, and backtick loads, and only scanned src/. It now covers every node_modules-forcing form (single/double/backtick quotes, optional subpath), scans test/ too (excluding fixtures and the guard file itself), drops the `//`-substring false-negative (leading-comment-only heuristic), and adds a self-test asserting every load form is caught while prose mentions and tree-sitter-cpp are ignored. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(grammars): correct stale vendored-grammar comments PR #2144 review (P3). kotlin/query.ts called tree-sitter-kotlin an "optionalDependency" — it is vendored and loaded from vendor/ by absolute path (#2111). proto.ts now states its remaining `_require` is only for the real `tree-sitter` dependency, not a vendored grammar (which goes through requireVendoredGrammar). Comment-only; no behavior change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
116 lines
3.3 KiB
JSON
116 lines
3.3 KiB
JSON
{
|
|
"name": "gitnexus",
|
|
"version": "1.6.7",
|
|
"description": "Graph-powered code intelligence for AI agents. Index any codebase, query via MCP or CLI.",
|
|
"author": "Abhigyan Patwari",
|
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
"homepage": "https://github.com/abhigyanpatwari/GitNexus#readme",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/abhigyanpatwari/GitNexus.git",
|
|
"directory": "gitnexus"
|
|
},
|
|
"bugs": {
|
|
"url": "https://github.com/abhigyanpatwari/GitNexus/issues"
|
|
},
|
|
"keywords": [
|
|
"mcp",
|
|
"model-context-protocol",
|
|
"code-intelligence",
|
|
"knowledge-graph",
|
|
"cursor",
|
|
"claude",
|
|
"codex",
|
|
"ai-agent",
|
|
"gitnexus",
|
|
"static-analysis",
|
|
"codebase-indexing"
|
|
],
|
|
"type": "module",
|
|
"bin": {
|
|
"gitnexus": "dist/cli/index.js"
|
|
},
|
|
"files": [
|
|
"dist",
|
|
"hooks",
|
|
"scripts",
|
|
"skills",
|
|
"vendor",
|
|
"web"
|
|
],
|
|
"scripts": {
|
|
"build": "node scripts/build.js",
|
|
"serve": "tsx src/cli/index.ts serve",
|
|
"dev": "tsx watch src/cli/index.ts",
|
|
"test": "vitest run",
|
|
"test:unit": "vitest run test/unit",
|
|
"pretest:integration": "node scripts/build.js",
|
|
"test:integration": "vitest run test/integration",
|
|
"test:watch": "vitest",
|
|
"test:coverage": "vitest run --coverage",
|
|
"test:cross-platform": "tsx scripts/run-cross-platform.ts",
|
|
"postinstall": "node scripts/build-tree-sitter-grammars.cjs",
|
|
"assert-publish-coverage": "node scripts/assert-publish-grammar-coverage.cjs",
|
|
"prepare": "node scripts/build.js",
|
|
"prepack": "node scripts/assert-publish-grammar-coverage.cjs && node scripts/build.js"
|
|
},
|
|
"dependencies": {
|
|
"@huggingface/transformers": "^4.1.0",
|
|
"@ladybugdb/core": "^0.17.0",
|
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
"@scarf/scarf": "^1.4.0",
|
|
"cli-progress": "^3.12.0",
|
|
"commander": "^14.0.3",
|
|
"cors": "^2.8.5",
|
|
"express": "^5.2.1",
|
|
"express-rate-limit": "^8.4.1",
|
|
"glob": "^13.0.6",
|
|
"graphology": "^0.26.0",
|
|
"graphology-indices": "^0.17.0",
|
|
"graphology-utils": "^2.3.0",
|
|
"ignore": "^7.0.5",
|
|
"js-yaml": "^4.1.1",
|
|
"jsonc-parser": "^3.3.1",
|
|
"mnemonist": "^0.40.3",
|
|
"node-addon-api": "^8.0.0",
|
|
"node-gyp-build": "^4.8.0",
|
|
"onnxruntime-common": "^1.26.0",
|
|
"onnxruntime-node": "^1.24.0",
|
|
"pandemonium": "^2.4.0",
|
|
"pino": "^10.3.1",
|
|
"pino-pretty": "^13.1.3",
|
|
"tree-sitter": "0.21.1",
|
|
"tree-sitter-c-sharp": "0.23.1",
|
|
"tree-sitter-cpp": "0.23.2",
|
|
"tree-sitter-go": "^0.23.0",
|
|
"tree-sitter-java": "^0.23.5",
|
|
"tree-sitter-javascript": "^0.23.0",
|
|
"tree-sitter-php": "^0.23.0",
|
|
"tree-sitter-python": "0.23.4",
|
|
"tree-sitter-ruby": "^0.23.1",
|
|
"tree-sitter-rust": "0.23.1",
|
|
"tree-sitter-typescript": "^0.23.2",
|
|
"uuid": "^14.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/cli-progress": "^3.11.6",
|
|
"@types/cors": "^2.8.17",
|
|
"@types/express": "^5.0.6",
|
|
"@types/js-yaml": "^4.0.9",
|
|
"@types/node": "^25.6.0",
|
|
"@types/uuid": "^11.0.0",
|
|
"@vitest/coverage-v8": "^4.0.18",
|
|
"gitnexus-shared": "file:../gitnexus-shared",
|
|
"tsx": "^4.0.0",
|
|
"typescript": "^5.4.5",
|
|
"vitest": "^4.0.18"
|
|
},
|
|
"overrides": {
|
|
"@huggingface/transformers": {
|
|
"onnxruntime-node": "$onnxruntime-node"
|
|
}
|
|
},
|
|
"engines": {
|
|
"node": ">=22.0.0"
|
|
}
|
|
}
|