mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-11-04 07:27:20 +00:00
* fix(wiki): keep valid Mermaid labels and link text through the sanitizer The wiki's Mermaid sanitizer turned some valid diagrams into invalid ones (#3705). `sanitizeMermaidLine` split each line on `EDGE_RE`, whose `\.\.+` alternative matched any run of dots, so the `...` inside a quoted label such as `A["value.when(...)"]` cut the label in two and the remainder was aliased as a node. The text of a `-- text -->` link was split off the same way and, when it held a dot, rewritten as a node reference: `N -- ref.invalidate --> A` became `N -- ref_invalidate["ref.invalidate"] --> A`. Both outputs fail `mermaid.parse`. Since the sanitizer runs again every time the viewer is rebuilt, a diagram fixed by hand broke again. Two changes: - The inside of every quoted string and every node shape (`[...]`, `(...)`, `{...}`) is masked with a placeholder before the line is split and unmasked after, so label text can never read as a link or a node. The delimiters stay, so the node sanitizer still sees where an inline label starts. - `EDGE_RE` matches the link forms Mermaid accepts: plain, thick and dotted (`-.->`, `-..-`), the piped label, and the labelled forms `-- text -->`, `== text ==>` and `-. text .->` as one token. Dots mean a link only in the dotted syntax. The three diagrams from the report now come out unchanged, dotted links still work, and the nodes around a labelled link are still aliased. Three unit tests cover that; the first and third fail on the previous sanitizer. The six existing tests pass unchanged. * fix(wiki): keep shaped nodes and chained links intact in the Mermaid sanitizer Two regressions from the first version of this branch, both found in review: - Rounded and circular nodes became invalid: with the label masked, the node id regex still swallowed the opening parenthesis of `A(Start)` and the restored label landed outside the generated shape. The id now stops where a shape opens (`[`, `(`, `{`). A call-shaped id such as `doc()` — a masked, empty pair of parentheses right after the id — is still one id and is repaired to `doc["doc()"]` as before. - A chained link split one node in two: the labelled-link alternative of EDGE_RE took `--- file.ts ---` for one link with text, so the middle node skipped aliasing while the next line aliased the same id. A labelled link now opens only with a bare `--`, `==` or `-.` followed by a space; a complete link never does. Thick links too. Parser-backed tests in test/unit/wiki-mermaid-sanitizer-parse.test.ts run the output through mermaid 11.17.2, the release the viewer loads, under jsdom, and compare the parsed graph: shaped nodes at both ends yield the same vertices and edges as the input; the plain and thick chains yield exactly A, file_ts, B, C with the three links; the report diagrams, the labelled link and the call-shaped id are checked the same way. mermaid and jsdom join the package's devDependencies for that file only. * fix(wiki): read compact head links as links and keep a call-shaped id's member chain Two cases from review: - `A --xfile.ts --> B`: Mermaid's lexer takes the longer match, so `--` followed by `-`, `>`, `x` or `o` is a link with a tail whatever comes next. The labelled-link opener excluded `x`/`o` only before a space, so `--xfile.ts -->` was taken for one labelled link and `file.ts` skipped aliasing on that line while the next line aliased it. The opener now excludes those four characters outright. - `foo().bar --> B`: the empty-parentheses rule absorbed `()` into the id but left `.bar` in the suffix, which was emitted after the generated label. The member chain that follows is part of the id, so `foo().bar` is one node again, `foo___bar["foo().bar"]`, as the previous sanitizer produced. Parser-backed tests for the compact cross and circle forms (three edges on one middle node) and for a qualified call-shaped id at both ends of a link. Both fail on the previous commit. * fix(wiki): preserve Mermaid graph identity with tiny parser coverage --------- Co-authored-by: Gergő Magyar <gergomagyar@icloud.com> Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com>
162 lines
4.8 KiB
JSON
162 lines
4.8 KiB
JSON
{
|
|
"name": "gitnexus",
|
|
"version": "1.6.12",
|
|
"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",
|
|
"prebuilds/bundled",
|
|
"hooks",
|
|
"scripts",
|
|
"skills",
|
|
"web",
|
|
"vendor/**/prebuilds/**",
|
|
"vendor/**/bindings/node/index.js",
|
|
"vendor/**/src/node-types.json",
|
|
"vendor/**/package.json",
|
|
"vendor/**/LICENSE",
|
|
"vendor/**/README.md",
|
|
"vendor/leiden/index.cjs",
|
|
"vendor/leiden/utils.cjs",
|
|
"vendor/lbug-fts/manifest.json",
|
|
"vendor/lbug-vector/manifest.json"
|
|
],
|
|
"scripts": {
|
|
"build": "node scripts/build.js",
|
|
"build:web": "node scripts/build.js --web",
|
|
"serve": "tsx src/cli/index.ts serve",
|
|
"dev": "tsx watch src/cli/index.ts",
|
|
"test": "vitest run",
|
|
"typecheck:tests": "tsc --noEmit -p tsconfig.test.json",
|
|
"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",
|
|
"test:benchmarks": "node --import tsx scripts/run-benchmarks.ts",
|
|
"postinstall": "node scripts/prepare-tree-sitter-bundle.cjs && 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/prepare-tree-sitter-bundle.cjs --for-publication && node scripts/assert-publish-grammar-coverage.cjs && node scripts/assert-publish-fts-coverage.cjs && node scripts/build.js --web && node scripts/assert-web-assets.mjs web",
|
|
"version": "node scripts/sync-plugin-manifests.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@ladybugdb/core": "0.21.1",
|
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
"@scarf/scarf": "^1.4.0",
|
|
"busboy": "^1.6.0",
|
|
"chokidar": "^5.0.0",
|
|
"cli-progress": "^3.12.0",
|
|
"commander": "^15.0.0",
|
|
"cors": "^2.8.5",
|
|
"express": "^5.2.1",
|
|
"express-rate-limit": "^8.4.1",
|
|
"fast-xml-parser": "^5.11.1",
|
|
"glob": "^13.0.6",
|
|
"graphology": "^0.26.0",
|
|
"graphology-indices": "^0.17.0",
|
|
"graphology-utils": "^2.3.0",
|
|
"graphql": "^17.0.2",
|
|
"ignore": "^7.0.5",
|
|
"js-yaml": "^5.0.0",
|
|
"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",
|
|
"pandemonium": "^2.4.0",
|
|
"pino": "^10.3.1",
|
|
"pino-pretty": "^13.1.3",
|
|
"proxy-addr": "^2.0.7",
|
|
"smol-toml": "^1.8.0",
|
|
"tree-sitter": "0.25.1",
|
|
"tree-sitter-c-sharp": "0.23.5",
|
|
"tree-sitter-cpp": "0.23.4",
|
|
"tree-sitter-go": "0.25.0",
|
|
"tree-sitter-java": "0.23.5",
|
|
"tree-sitter-javascript": "0.25.0",
|
|
"tree-sitter-php": "0.24.2",
|
|
"tree-sitter-python": "0.25.0",
|
|
"tree-sitter-ruby": "0.23.1",
|
|
"tree-sitter-rust": "0.24.0",
|
|
"tree-sitter-typescript": "0.23.2",
|
|
"uuid": "^14.0.0"
|
|
},
|
|
"gitnexusEmbeddingStack": {
|
|
"@huggingface/transformers": "^4.1.0",
|
|
"onnxruntime-node": "^1.24.0"
|
|
},
|
|
"trustedDependencies": [
|
|
"@ladybugdb/core",
|
|
"gitnexus",
|
|
"tree-sitter"
|
|
],
|
|
"devDependencies": {
|
|
"@babel/generator": "^8.0.0",
|
|
"@babel/parser": "^8.0.0",
|
|
"@babel/traverse": "^8.0.0",
|
|
"@babel/types": "^8.0.0",
|
|
"@mermaid-js/tiny": "11.17.2",
|
|
"@types/busboy": "^1.5.4",
|
|
"@types/cli-progress": "^3.11.6",
|
|
"@types/cors": "^2.8.17",
|
|
"@types/express": "^5.0.6",
|
|
"@types/node": "^26.0.0",
|
|
"@types/proxy-addr": "^2.0.3",
|
|
"@vitest/coverage-v8": "^5.0.0",
|
|
"gitnexus-shared": "file:../gitnexus-shared",
|
|
"jsdom": "26.1.0",
|
|
"tsx": "^4.0.0",
|
|
"typescript": "^7.0.2",
|
|
"vitest": "^5.0.0"
|
|
},
|
|
"overrides": {
|
|
"adm-zip": ">=0.6.0",
|
|
"sharp": ">=0.35.0",
|
|
"tree-sitter": "0.25.1"
|
|
},
|
|
"engines": {
|
|
"node": "^22.18.0 || >=24.11.0"
|
|
},
|
|
"bundleDependencies": [
|
|
"tree-sitter",
|
|
"tree-sitter-c-sharp",
|
|
"tree-sitter-cpp",
|
|
"tree-sitter-go",
|
|
"tree-sitter-java",
|
|
"tree-sitter-javascript",
|
|
"tree-sitter-php",
|
|
"tree-sitter-python",
|
|
"tree-sitter-ruby",
|
|
"tree-sitter-rust",
|
|
"tree-sitter-typescript"
|
|
]
|
|
}
|