Showing preview only (4,393K chars total). Download the full file or copy to clipboard to get everything.
Repository: abhigyanpatwari/GitNexus
Branch: main
Commit: 862fdf91856d
Files: 1482
Total size: 3.9 MB
Directory structure:
gitextract_jd_m7yp2/
├── .claude/
│ └── skills/
│ └── gitnexus/
│ ├── gitnexus-cli/
│ │ └── SKILL.md
│ ├── gitnexus-debugging/
│ │ └── SKILL.md
│ ├── gitnexus-exploring/
│ │ └── SKILL.md
│ ├── gitnexus-guide/
│ │ └── SKILL.md
│ ├── gitnexus-impact-analysis/
│ │ └── SKILL.md
│ ├── gitnexus-pr-review/
│ │ └── SKILL.md
│ └── gitnexus-refactoring/
│ └── SKILL.md
├── .claude-plugin/
│ └── marketplace.json
├── .cursorrules
├── .github/
│ ├── FUNDING.yml
│ ├── actions/
│ │ └── setup-gitnexus/
│ │ └── action.yml
│ ├── release.yml
│ └── workflows/
│ ├── ci-quality.yml
│ ├── ci-report.yml
│ ├── ci-tests.yml
│ ├── ci.yml
│ ├── claude-code-review.yml
│ ├── claude.yml
│ └── publish.yml
├── .gitignore
├── .history/
│ └── gitnexus/
│ └── vitest.config_20260317171253.ts
├── .mcp.json
├── .sisyphus/
│ └── drafts/
│ ├── gitnexus-brainstorming.md
│ └── noodlbox-comparison.md
├── .windsurfrules
├── AGENTS.md
├── CHANGELOG.md
├── CLAUDE.md
├── LICENSE
├── README.md
├── compound-engineering.local.md
├── eval/
│ ├── .gitignore
│ ├── README.md
│ ├── __init__.py
│ ├── agents/
│ │ ├── __init__.py
│ │ └── gitnexus_agent.py
│ ├── analysis/
│ │ ├── __init__.py
│ │ └── analyze_results.py
│ ├── bridge/
│ │ ├── __init__.py
│ │ ├── gitnexus_tools.sh
│ │ └── mcp_bridge.py
│ ├── configs/
│ │ ├── models/
│ │ │ ├── claude-haiku.yaml
│ │ │ ├── claude-opus.yaml
│ │ │ ├── claude-sonnet.yaml
│ │ │ ├── deepseek-chat.yaml
│ │ │ ├── deepseek-v3.yaml
│ │ │ ├── glm-4.7.yaml
│ │ │ ├── glm-5.yaml
│ │ │ ├── minimax-2.5.yaml
│ │ │ └── minimax-m2.1.yaml
│ │ └── modes/
│ │ ├── baseline.yaml
│ │ ├── native.yaml
│ │ └── native_augment.yaml
│ ├── environments/
│ │ ├── __init__.py
│ │ └── gitnexus_docker.py
│ ├── prompts/
│ │ ├── instance_baseline.jinja
│ │ ├── instance_native.jinja
│ │ ├── instance_native_augment.jinja
│ │ ├── system_baseline.jinja
│ │ ├── system_native.jinja
│ │ └── system_native_augment.jinja
│ ├── pyproject.toml
│ └── run_eval.py
├── gitnexus/
│ ├── .claude/
│ │ └── settings.local.json
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── Dockerfile.test
│ ├── README.md
│ ├── hooks/
│ │ └── claude/
│ │ ├── gitnexus-hook.cjs
│ │ ├── pre-tool-use.sh
│ │ └── session-start.sh
│ ├── package.json
│ ├── scripts/
│ │ └── patch-tree-sitter-swift.cjs
│ ├── skills/
│ │ ├── gitnexus-cli.md
│ │ ├── gitnexus-debugging.md
│ │ ├── gitnexus-exploring.md
│ │ ├── gitnexus-guide.md
│ │ ├── gitnexus-impact-analysis.md
│ │ ├── gitnexus-pr-review.md
│ │ └── gitnexus-refactoring.md
│ ├── src/
│ │ ├── cli/
│ │ │ ├── ai-context.ts
│ │ │ ├── analyze.ts
│ │ │ ├── augment.ts
│ │ │ ├── clean.ts
│ │ │ ├── eval-server.ts
│ │ │ ├── index.ts
│ │ │ ├── lazy-action.ts
│ │ │ ├── list.ts
│ │ │ ├── mcp.ts
│ │ │ ├── serve.ts
│ │ │ ├── setup.ts
│ │ │ ├── skill-gen.ts
│ │ │ ├── status.ts
│ │ │ ├── tool.ts
│ │ │ └── wiki.ts
│ │ ├── config/
│ │ │ ├── ignore-service.ts
│ │ │ └── supported-languages.ts
│ │ ├── core/
│ │ │ ├── augmentation/
│ │ │ │ └── engine.ts
│ │ │ ├── embeddings/
│ │ │ │ ├── embedder.ts
│ │ │ │ ├── embedding-pipeline.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── text-generator.ts
│ │ │ │ └── types.ts
│ │ │ ├── graph/
│ │ │ │ ├── graph.ts
│ │ │ │ └── types.ts
│ │ │ ├── ingestion/
│ │ │ │ ├── ast-cache.ts
│ │ │ │ ├── call-processor.ts
│ │ │ │ ├── call-routing.ts
│ │ │ │ ├── cluster-enricher.ts
│ │ │ │ ├── community-processor.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── entry-point-scoring.ts
│ │ │ │ ├── export-detection.ts
│ │ │ │ ├── filesystem-walker.ts
│ │ │ │ ├── framework-detection.ts
│ │ │ │ ├── heritage-processor.ts
│ │ │ │ ├── import-processor.ts
│ │ │ │ ├── language-config.ts
│ │ │ │ ├── mro-processor.ts
│ │ │ │ ├── named-binding-extraction.ts
│ │ │ │ ├── parsing-processor.ts
│ │ │ │ ├── pipeline.ts
│ │ │ │ ├── process-processor.ts
│ │ │ │ ├── resolution-context.ts
│ │ │ │ ├── resolvers/
│ │ │ │ │ ├── csharp.ts
│ │ │ │ │ ├── go.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── jvm.ts
│ │ │ │ │ ├── php.ts
│ │ │ │ │ ├── python.ts
│ │ │ │ │ ├── ruby.ts
│ │ │ │ │ ├── rust.ts
│ │ │ │ │ ├── standard.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── structure-processor.ts
│ │ │ │ ├── symbol-table.ts
│ │ │ │ ├── tree-sitter-queries.ts
│ │ │ │ ├── type-env.ts
│ │ │ │ ├── type-extractors/
│ │ │ │ │ ├── c-cpp.ts
│ │ │ │ │ ├── csharp.ts
│ │ │ │ │ ├── go.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── jvm.ts
│ │ │ │ │ ├── php.ts
│ │ │ │ │ ├── python.ts
│ │ │ │ │ ├── ruby.ts
│ │ │ │ │ ├── rust.ts
│ │ │ │ │ ├── shared.ts
│ │ │ │ │ ├── swift.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── typescript.ts
│ │ │ │ ├── utils.ts
│ │ │ │ └── workers/
│ │ │ │ ├── parse-worker.ts
│ │ │ │ └── worker-pool.ts
│ │ │ ├── lbug/
│ │ │ │ ├── csv-generator.ts
│ │ │ │ ├── lbug-adapter.ts
│ │ │ │ └── schema.ts
│ │ │ ├── search/
│ │ │ │ ├── bm25-index.ts
│ │ │ │ └── hybrid-search.ts
│ │ │ ├── tree-sitter/
│ │ │ │ └── parser-loader.ts
│ │ │ └── wiki/
│ │ │ ├── generator.ts
│ │ │ ├── graph-queries.ts
│ │ │ ├── html-viewer.ts
│ │ │ ├── llm-client.ts
│ │ │ └── prompts.ts
│ │ ├── lib/
│ │ │ └── utils.ts
│ │ ├── mcp/
│ │ │ ├── compatible-stdio-transport.ts
│ │ │ ├── core/
│ │ │ │ ├── embedder.ts
│ │ │ │ └── lbug-adapter.ts
│ │ │ ├── local/
│ │ │ │ └── local-backend.ts
│ │ │ ├── resources.ts
│ │ │ ├── server.ts
│ │ │ ├── staleness.ts
│ │ │ └── tools.ts
│ │ ├── server/
│ │ │ ├── api.ts
│ │ │ └── mcp-http.ts
│ │ ├── storage/
│ │ │ ├── git.ts
│ │ │ └── repo-manager.ts
│ │ └── types/
│ │ └── pipeline.ts
│ ├── test/
│ │ ├── fixtures/
│ │ │ ├── lang-resolution/
│ │ │ │ ├── cpp-ambiguous/
│ │ │ │ │ ├── handler_a.h
│ │ │ │ │ ├── handler_b.h
│ │ │ │ │ └── processor.h
│ │ │ │ ├── cpp-assignment-chain/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.h
│ │ │ │ │ │ └── User.h
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.cpp
│ │ │ │ ├── cpp-brace-init-inference/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.h
│ │ │ │ │ │ └── User.h
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.cpp
│ │ │ │ ├── cpp-call-result-binding/
│ │ │ │ │ ├── app.cpp
│ │ │ │ │ └── user.h
│ │ │ │ ├── cpp-calls/
│ │ │ │ │ ├── main.cpp
│ │ │ │ │ ├── one.h
│ │ │ │ │ └── zero.h
│ │ │ │ ├── cpp-chain-call/
│ │ │ │ │ ├── app.cpp
│ │ │ │ │ ├── repo.h
│ │ │ │ │ ├── service.h
│ │ │ │ │ └── user.h
│ │ │ │ ├── cpp-constructor-calls/
│ │ │ │ │ ├── app.cpp
│ │ │ │ │ └── user.h
│ │ │ │ ├── cpp-constructor-type-inference/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.h
│ │ │ │ │ │ └── User.h
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.cpp
│ │ │ │ ├── cpp-deep-field-chain/
│ │ │ │ │ ├── models.h
│ │ │ │ │ └── service.cpp
│ │ │ │ ├── cpp-default-params/
│ │ │ │ │ └── src/
│ │ │ │ │ └── app.cpp
│ │ │ │ ├── cpp-deref-range-for/
│ │ │ │ │ ├── App.cpp
│ │ │ │ │ ├── Repo.h
│ │ │ │ │ └── User.h
│ │ │ │ ├── cpp-diamond/
│ │ │ │ │ ├── animal.h
│ │ │ │ │ ├── duck.cpp
│ │ │ │ │ ├── duck.h
│ │ │ │ │ ├── flyer.h
│ │ │ │ │ └── swimmer.h
│ │ │ │ ├── cpp-field-types/
│ │ │ │ │ ├── models.h
│ │ │ │ │ └── service.cpp
│ │ │ │ ├── cpp-grandparent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── A.h
│ │ │ │ │ ├── B.h
│ │ │ │ │ ├── C.h
│ │ │ │ │ ├── Greeting.h
│ │ │ │ │ └── app.cpp
│ │ │ │ ├── cpp-local-shadow/
│ │ │ │ │ ├── CMakeLists.txt
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.cpp
│ │ │ │ │ ├── utils.cpp
│ │ │ │ │ └── utils.h
│ │ │ │ ├── cpp-member-calls/
│ │ │ │ │ ├── app.cpp
│ │ │ │ │ └── user.h
│ │ │ │ ├── cpp-method-chain-binding/
│ │ │ │ │ ├── app.cpp
│ │ │ │ │ └── models.h
│ │ │ │ ├── cpp-nullable-receiver/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.h
│ │ │ │ │ │ └── User.h
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.cpp
│ │ │ │ ├── cpp-overload-param-types/
│ │ │ │ │ └── service.cpp
│ │ │ │ ├── cpp-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── BaseModel.h
│ │ │ │ │ └── User.h
│ │ │ │ ├── cpp-pointer-ref-fields/
│ │ │ │ │ ├── models.h
│ │ │ │ │ └── service.cpp
│ │ │ │ ├── cpp-range-for/
│ │ │ │ │ ├── App.cpp
│ │ │ │ │ ├── Repo.h
│ │ │ │ │ └── User.h
│ │ │ │ ├── cpp-receiver-resolution/
│ │ │ │ │ ├── app.cpp
│ │ │ │ │ ├── repo.h
│ │ │ │ │ └── user.h
│ │ │ │ ├── cpp-return-type/
│ │ │ │ │ ├── app.cpp
│ │ │ │ │ └── user.h
│ │ │ │ ├── cpp-return-type-inference/
│ │ │ │ │ ├── app.cpp
│ │ │ │ │ ├── repo.h
│ │ │ │ │ └── user.h
│ │ │ │ ├── cpp-scoped-brace-init/
│ │ │ │ │ ├── main.cpp
│ │ │ │ │ └── models.h
│ │ │ │ ├── cpp-self-this-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── Repo.cpp
│ │ │ │ │ └── User.cpp
│ │ │ │ ├── cpp-smart-ptr-dispatch/
│ │ │ │ │ └── src/
│ │ │ │ │ └── app.cpp
│ │ │ │ ├── cpp-structured-binding/
│ │ │ │ │ ├── App.cpp
│ │ │ │ │ ├── Repo.h
│ │ │ │ │ └── User.h
│ │ │ │ ├── cpp-variadic-resolution/
│ │ │ │ │ ├── logger.h
│ │ │ │ │ └── main.cpp
│ │ │ │ ├── cpp-write-access/
│ │ │ │ │ ├── models.h
│ │ │ │ │ └── service.cpp
│ │ │ │ ├── csharp-alias-imports/
│ │ │ │ │ ├── CsharpAlias.csproj
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── Services/
│ │ │ │ │ └── Main.cs
│ │ │ │ ├── csharp-ambiguous/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Handler.cs
│ │ │ │ │ │ └── IProcessor.cs
│ │ │ │ │ ├── Other/
│ │ │ │ │ │ ├── Handler.cs
│ │ │ │ │ │ └── IProcessor.cs
│ │ │ │ │ └── Services/
│ │ │ │ │ └── UserHandler.cs
│ │ │ │ ├── csharp-assignment-chain/
│ │ │ │ │ ├── AssignmentChain.csproj
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── Program.cs
│ │ │ │ ├── csharp-async-binding/
│ │ │ │ │ ├── Order.cs
│ │ │ │ │ ├── OrderService.cs
│ │ │ │ │ ├── Program.cs
│ │ │ │ │ ├── User.cs
│ │ │ │ │ └── UserService.cs
│ │ │ │ ├── csharp-call-result-binding/
│ │ │ │ │ └── App.cs
│ │ │ │ ├── csharp-calls/
│ │ │ │ │ ├── CallProj.csproj
│ │ │ │ │ ├── Services/
│ │ │ │ │ │ └── UserService.cs
│ │ │ │ │ └── Utils/
│ │ │ │ │ ├── OneArg.cs
│ │ │ │ │ └── ZeroArg.cs
│ │ │ │ ├── csharp-chain-call/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ ├── Program.cs
│ │ │ │ │ └── Services/
│ │ │ │ │ └── UserService.cs
│ │ │ │ ├── csharp-deep-field-chain/
│ │ │ │ │ ├── Models.cs
│ │ │ │ │ └── Service.cs
│ │ │ │ ├── csharp-dictionary-keys-values/
│ │ │ │ │ ├── App.cs
│ │ │ │ │ ├── Repo.cs
│ │ │ │ │ └── User.cs
│ │ │ │ ├── csharp-field-types/
│ │ │ │ │ ├── Models.cs
│ │ │ │ │ └── Service.cs
│ │ │ │ ├── csharp-foreach/
│ │ │ │ │ ├── ForeachProj.csproj
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── Program.cs
│ │ │ │ ├── csharp-generic-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── Models/
│ │ │ │ │ ├── BaseModel.cs
│ │ │ │ │ ├── Repo.cs
│ │ │ │ │ └── User.cs
│ │ │ │ ├── csharp-grandparent-resolution/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── A.cs
│ │ │ │ │ │ ├── B.cs
│ │ │ │ │ │ ├── C.cs
│ │ │ │ │ │ └── Greeting.cs
│ │ │ │ │ └── Services/
│ │ │ │ │ └── App.cs
│ │ │ │ ├── csharp-is-pattern/
│ │ │ │ │ ├── IsPatternProj.csproj
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.cs
│ │ │ │ ├── csharp-local-shadow/
│ │ │ │ │ ├── App/
│ │ │ │ │ │ └── Main.cs
│ │ │ │ │ └── Utils/
│ │ │ │ │ └── Logger.cs
│ │ │ │ ├── csharp-member-calls/
│ │ │ │ │ ├── MemberCallProj.csproj
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── Services/
│ │ │ │ │ └── UserService.cs
│ │ │ │ ├── csharp-method-chain-binding/
│ │ │ │ │ └── App.cs
│ │ │ │ ├── csharp-mixed-decl-chain/
│ │ │ │ │ ├── MixedDeclChain.csproj
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── Program.cs
│ │ │ │ ├── csharp-nested-member-foreach/
│ │ │ │ │ ├── App.cs
│ │ │ │ │ ├── Repo.cs
│ │ │ │ │ └── User.cs
│ │ │ │ ├── csharp-null-check-narrowing/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── Services/
│ │ │ │ │ └── App.cs
│ │ │ │ ├── csharp-null-conditional/
│ │ │ │ │ ├── App.cs
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── NullConditional.csproj
│ │ │ │ ├── csharp-optional-params/
│ │ │ │ │ └── Services/
│ │ │ │ │ └── App.cs
│ │ │ │ ├── csharp-overload-param-types/
│ │ │ │ │ └── Models/
│ │ │ │ │ └── UserService.cs
│ │ │ │ ├── csharp-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── Models/
│ │ │ │ │ ├── BaseModel.cs
│ │ │ │ │ ├── ISerializable.cs
│ │ │ │ │ └── User.cs
│ │ │ │ ├── csharp-pattern-matching/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ └── Animal.cs
│ │ │ │ │ ├── PatternMatchProj.csproj
│ │ │ │ │ └── Services/
│ │ │ │ │ └── AnimalService.cs
│ │ │ │ ├── csharp-primary-ctors/
│ │ │ │ │ ├── App.cs
│ │ │ │ │ └── Models/
│ │ │ │ │ ├── Person.cs
│ │ │ │ │ └── User.cs
│ │ │ │ ├── csharp-proj/
│ │ │ │ │ ├── Interfaces/
│ │ │ │ │ │ └── IRepository.cs
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── BaseEntity.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── Services/
│ │ │ │ │ └── UserService.cs
│ │ │ │ ├── csharp-receiver-resolution/
│ │ │ │ │ ├── App.cs
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ └── ReceiverProj.csproj
│ │ │ │ ├── csharp-recursive-pattern/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ ├── Program.cs
│ │ │ │ │ └── RecursivePatternProj.csproj
│ │ │ │ ├── csharp-return-type/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ ├── ReturnType.csproj
│ │ │ │ │ └── Services/
│ │ │ │ │ └── App.cs
│ │ │ │ ├── csharp-self-this-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── Models/
│ │ │ │ │ ├── Repo.cs
│ │ │ │ │ └── User.cs
│ │ │ │ ├── csharp-super-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── Models/
│ │ │ │ │ ├── BaseModel.cs
│ │ │ │ │ ├── Repo.cs
│ │ │ │ │ └── User.cs
│ │ │ │ ├── csharp-switch-pattern/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ ├── Program.cs
│ │ │ │ │ └── SwitchPattern.csproj
│ │ │ │ ├── csharp-var-foreach/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.cs
│ │ │ │ │ │ └── User.cs
│ │ │ │ │ ├── Program.cs
│ │ │ │ │ └── VarForeach.csproj
│ │ │ │ ├── csharp-variadic-resolution/
│ │ │ │ │ ├── Services/
│ │ │ │ │ │ └── App.cs
│ │ │ │ │ ├── Utils/
│ │ │ │ │ │ └── Logger.cs
│ │ │ │ │ └── VariadicProj.csproj
│ │ │ │ ├── csharp-write-access/
│ │ │ │ │ ├── Models.cs
│ │ │ │ │ └── Service.cs
│ │ │ │ ├── field-types/
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── go-ambiguous/
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── internal/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ └── handler.go
│ │ │ │ │ ├── other/
│ │ │ │ │ │ └── handler.go
│ │ │ │ │ └── services/
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-assignment-chain/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-call-result-binding/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-calls/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── internal/
│ │ │ │ │ ├── onearg/
│ │ │ │ │ │ └── log.go
│ │ │ │ │ └── zeroarg/
│ │ │ │ │ └── log.go
│ │ │ │ ├── go-chain-call/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-constructor-type-inference/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-deep-field-chain/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ └── models.go
│ │ │ │ ├── go-field-types/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ └── models.go
│ │ │ │ ├── go-for-call-expr/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-inc-dec-write-access/
│ │ │ │ │ └── main.go
│ │ │ │ ├── go-local-shadow/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── internal/
│ │ │ │ │ └── utils/
│ │ │ │ │ └── utils.go
│ │ │ │ ├── go-make-builtin/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── models.go
│ │ │ │ ├── go-map-range/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-member-calls/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-method-chain-binding/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-mixed-chain/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ └── models.go
│ │ │ │ ├── go-multi-assign/
│ │ │ │ │ ├── app.go
│ │ │ │ │ └── models.go
│ │ │ │ ├── go-multi-return-inference/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-new-builtin/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── models.go
│ │ │ │ ├── go-nullable-receiver/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-parent-resolution/
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── base.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-pkg/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── internal/
│ │ │ │ │ ├── auth/
│ │ │ │ │ │ └── service.go
│ │ │ │ │ └── models/
│ │ │ │ │ ├── admin.go
│ │ │ │ │ ├── repository.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-pointer-constructor-inference/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-receiver-resolution/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-return-type-inference/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-struct-literals/
│ │ │ │ │ ├── app.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── go-type-assertion/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── models.go
│ │ │ │ ├── go-variadic-resolution/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── internal/
│ │ │ │ │ └── logger/
│ │ │ │ │ └── logger.go
│ │ │ │ ├── go-write-access/
│ │ │ │ │ └── main.go
│ │ │ │ ├── java-ambiguous/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Handler.java
│ │ │ │ │ │ └── Processor.java
│ │ │ │ │ ├── other/
│ │ │ │ │ │ ├── Handler.java
│ │ │ │ │ │ └── Processor.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserHandler.java
│ │ │ │ ├── java-assignment-chain/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-call-result-binding/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-calls/
│ │ │ │ │ ├── services/
│ │ │ │ │ │ └── UserService.java
│ │ │ │ │ └── util/
│ │ │ │ │ ├── OneArg.java
│ │ │ │ │ └── ZeroArg.java
│ │ │ │ ├── java-chain-call/
│ │ │ │ │ ├── App.java
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.java
│ │ │ │ │ │ └── User.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.java
│ │ │ │ ├── java-constructor-calls/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-constructor-type-inference/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-deep-field-chain/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Address.java
│ │ │ │ │ ├── City.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-enum-static-call/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── Status.java
│ │ │ │ ├── java-field-types/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Address.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-foreach/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-foreach-call-expr/
│ │ │ │ │ ├── Main.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-generic-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── BaseModel.java
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-grandparent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── A.java
│ │ │ │ │ │ ├── B.java
│ │ │ │ │ │ ├── C.java
│ │ │ │ │ │ └── Greeting.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.java
│ │ │ │ ├── java-heritage/
│ │ │ │ │ ├── interfaces/
│ │ │ │ │ │ ├── Serializable.java
│ │ │ │ │ │ └── Validatable.java
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── BaseModel.java
│ │ │ │ │ │ └── User.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.java
│ │ │ │ ├── java-instanceof-pattern/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.java
│ │ │ │ │ │ └── User.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.java
│ │ │ │ ├── java-local-shadow/
│ │ │ │ │ └── src/
│ │ │ │ │ └── main/
│ │ │ │ │ └── java/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── Main.java
│ │ │ │ │ └── utils/
│ │ │ │ │ └── Logger.java
│ │ │ │ ├── java-map-keys-values/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── App.java
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-member-calls/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ └── User.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.java
│ │ │ │ ├── java-method-chain-binding/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── Models.java
│ │ │ │ ├── java-mixed-chain/
│ │ │ │ │ ├── App.java
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Address.java
│ │ │ │ │ │ ├── City.java
│ │ │ │ │ │ └── User.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.java
│ │ │ │ ├── java-named-imports/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── Main.java
│ │ │ │ │ ├── models/
│ │ │ │ │ │ └── User.java
│ │ │ │ │ └── other/
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-nullable-receiver/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-optional-receiver/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-overload-param-types/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── User.java
│ │ │ │ │ └── UserService.java
│ │ │ │ ├── java-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── interfaces/
│ │ │ │ │ │ └── Serializable.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── BaseModel.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-receiver-resolution/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-return-type-inference/
│ │ │ │ │ ├── App.java
│ │ │ │ │ ├── models/
│ │ │ │ │ │ └── User.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.java
│ │ │ │ ├── java-self-this-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-super-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── BaseModel.java
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-switch-pattern/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── java-variadic-resolution/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── Main.java
│ │ │ │ │ └── util/
│ │ │ │ │ └── Logger.java
│ │ │ │ ├── java-virtual-dispatch/
│ │ │ │ │ └── models/
│ │ │ │ │ └── App.java
│ │ │ │ ├── java-write-access/
│ │ │ │ │ ├── App.java
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Address.java
│ │ │ │ │ └── User.java
│ │ │ │ ├── javascript-chain-call/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── repo.js
│ │ │ │ │ ├── service.js
│ │ │ │ │ └── user.js
│ │ │ │ ├── javascript-constructor-type-inference/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── repo.js
│ │ │ │ │ └── user.js
│ │ │ │ ├── javascript-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Base.js
│ │ │ │ │ └── User.js
│ │ │ │ ├── javascript-self-this-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.js
│ │ │ │ │ └── User.js
│ │ │ │ ├── javascript-super-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Base.js
│ │ │ │ │ ├── Repo.js
│ │ │ │ │ └── User.js
│ │ │ │ ├── js-call-result-binding/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── models.js
│ │ │ │ │ └── service.js
│ │ │ │ ├── js-field-types/
│ │ │ │ │ ├── models.js
│ │ │ │ │ └── service.js
│ │ │ │ ├── js-fixpoint-for-loop/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── models.js
│ │ │ │ ├── js-jsdoc-async-return-type/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── repo.js
│ │ │ │ │ └── user.js
│ │ │ │ ├── js-jsdoc-qualified-return-type/
│ │ │ │ │ ├── app.js
│ │ │ │ │ └── user.js
│ │ │ │ ├── js-jsdoc-return-type/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── repo.js
│ │ │ │ │ └── user.js
│ │ │ │ ├── js-nullable-receiver/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── repo.js
│ │ │ │ │ └── user.js
│ │ │ │ ├── js-object-destructuring/
│ │ │ │ │ ├── app.js
│ │ │ │ │ ├── models.js
│ │ │ │ │ └── service.js
│ │ │ │ ├── js-write-access/
│ │ │ │ │ ├── models.js
│ │ │ │ │ └── service.js
│ │ │ │ ├── kotlin-alias-imports/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── App.kt
│ │ │ │ │ └── models/
│ │ │ │ │ └── Models.kt
│ │ │ │ ├── kotlin-ambiguous/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Handler.kt
│ │ │ │ │ │ └── Runnable.kt
│ │ │ │ │ ├── other/
│ │ │ │ │ │ ├── Handler.kt
│ │ │ │ │ │ └── Runnable.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserHandler.kt
│ │ │ │ ├── kotlin-assignment-chain/
│ │ │ │ │ ├── App.kt
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-call-result-binding/
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-calls/
│ │ │ │ │ ├── services/
│ │ │ │ │ │ └── UserService.kt
│ │ │ │ │ └── util/
│ │ │ │ │ ├── OneArg.kt
│ │ │ │ │ └── ZeroArg.kt
│ │ │ │ ├── kotlin-chain-call/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── App.kt
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ ├── User.kt
│ │ │ │ │ └── UserService.kt
│ │ │ │ ├── kotlin-class-method-chain/
│ │ │ │ │ ├── App.kt
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-constructor-calls/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── App.kt
│ │ │ │ │ └── models/
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-constructor-type-inference/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.kt
│ │ │ │ │ │ └── User.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.kt
│ │ │ │ ├── kotlin-data-class-fields/
│ │ │ │ │ ├── Models.kt
│ │ │ │ │ └── Service.kt
│ │ │ │ ├── kotlin-deep-field-chain/
│ │ │ │ │ ├── Models.kt
│ │ │ │ │ └── Service.kt
│ │ │ │ ├── kotlin-default-params/
│ │ │ │ │ └── App.kt
│ │ │ │ ├── kotlin-field-types/
│ │ │ │ │ ├── Models.kt
│ │ │ │ │ └── Service.kt
│ │ │ │ ├── kotlin-foreach/
│ │ │ │ │ ├── App.kt
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-foreach-call-expr/
│ │ │ │ │ ├── Main.kt
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-generic-parent-resolution/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── BaseModel.kt
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-grandparent-resolution/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── A.kt
│ │ │ │ │ │ ├── B.kt
│ │ │ │ │ │ ├── C.kt
│ │ │ │ │ │ └── Greeting.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.kt
│ │ │ │ ├── kotlin-heritage/
│ │ │ │ │ ├── interfaces/
│ │ │ │ │ │ ├── Serializable.kt
│ │ │ │ │ │ └── Validatable.kt
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── BaseModel.kt
│ │ │ │ │ │ └── User.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.kt
│ │ │ │ ├── kotlin-local-shadow/
│ │ │ │ │ └── src/
│ │ │ │ │ └── main/
│ │ │ │ │ └── kotlin/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── Main.kt
│ │ │ │ │ └── utils/
│ │ │ │ │ └── Logger.kt
│ │ │ │ ├── kotlin-map-keys-values/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── App.kt
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-member-calls/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ └── User.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.kt
│ │ │ │ ├── kotlin-method-chain-binding/
│ │ │ │ │ └── Models.kt
│ │ │ │ ├── kotlin-null-check-narrowing/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.kt
│ │ │ │ │ │ └── User.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.kt
│ │ │ │ ├── kotlin-nullable-receiver/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.kt
│ │ │ │ │ │ └── User.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.kt
│ │ │ │ ├── kotlin-overload-param-types/
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.kt
│ │ │ │ ├── kotlin-parent-resolution/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── BaseModel.kt
│ │ │ │ │ ├── Serializable.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-receiver-resolution/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.kt
│ │ │ │ │ │ └── User.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.kt
│ │ │ │ ├── kotlin-return-type/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.kt
│ │ │ │ │ │ └── User.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.kt
│ │ │ │ ├── kotlin-self-this-resolution/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── AppConfig.kt
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-super-resolution/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── BaseModel.kt
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-var-foreach/
│ │ │ │ │ ├── app.kt
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-variadic-resolution/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── App.kt
│ │ │ │ │ └── util/
│ │ │ │ │ └── Logger.kt
│ │ │ │ ├── kotlin-virtual-dispatch/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ └── Dog.kt
│ │ │ │ │ └── services/
│ │ │ │ │ └── App.kt
│ │ │ │ ├── kotlin-when-complex/
│ │ │ │ │ ├── App.kt
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Admin.kt
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-when-pattern/
│ │ │ │ │ ├── App.kt
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.kt
│ │ │ │ │ └── User.kt
│ │ │ │ ├── kotlin-write-access/
│ │ │ │ │ ├── Models.kt
│ │ │ │ │ └── Service.kt
│ │ │ │ ├── php-alias-imports/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ │ └── User.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── Main.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-ambiguous/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── Dispatchable.php
│ │ │ │ │ │ │ └── Handler.php
│ │ │ │ │ │ ├── Other/
│ │ │ │ │ │ │ ├── Dispatchable.php
│ │ │ │ │ │ │ └── Handler.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── UserHandler.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-app/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Contracts/
│ │ │ │ │ │ │ ├── Loggable.php
│ │ │ │ │ │ │ └── Repository.php
│ │ │ │ │ │ ├── Enums/
│ │ │ │ │ │ │ └── UserRole.php
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── BaseModel.php
│ │ │ │ │ │ │ └── User.php
│ │ │ │ │ │ ├── Services/
│ │ │ │ │ │ │ └── UserService.php
│ │ │ │ │ │ └── Traits/
│ │ │ │ │ │ ├── HasTimestamps.php
│ │ │ │ │ │ └── SoftDeletes.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-assignment-chain/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ │ └── User.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── AppService.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-call-result-binding/
│ │ │ │ │ └── App.php
│ │ │ │ ├── php-calls/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Services/
│ │ │ │ │ │ │ └── UserService.php
│ │ │ │ │ │ └── Utils/
│ │ │ │ │ │ ├── OneArg/
│ │ │ │ │ │ │ └── log.php
│ │ │ │ │ │ └── ZeroArg/
│ │ │ │ │ │ └── log.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-constructor-calls/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ └── User.php
│ │ │ │ │ └── app.php
│ │ │ │ ├── php-constructor-promotion-fields/
│ │ │ │ │ ├── Models.php
│ │ │ │ │ └── Service.php
│ │ │ │ ├── php-constructor-type-inference/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ │ └── User.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── AppService.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-deep-field-chain/
│ │ │ │ │ ├── Models.php
│ │ │ │ │ └── Service.php
│ │ │ │ ├── php-default-params/
│ │ │ │ │ └── app.php
│ │ │ │ ├── php-field-types/
│ │ │ │ │ ├── Models.php
│ │ │ │ │ └── Service.php
│ │ │ │ ├── php-foreach-call-expr/
│ │ │ │ │ ├── Repo.php
│ │ │ │ │ ├── User.php
│ │ │ │ │ └── main.php
│ │ │ │ ├── php-foreach-generic/
│ │ │ │ │ ├── App.php
│ │ │ │ │ ├── Repo.php
│ │ │ │ │ └── User.php
│ │ │ │ ├── php-foreach-loop/
│ │ │ │ │ ├── App.php
│ │ │ │ │ ├── Repo.php
│ │ │ │ │ └── User.php
│ │ │ │ ├── php-foreach-member-access/
│ │ │ │ │ ├── App.php
│ │ │ │ │ ├── Repo.php
│ │ │ │ │ └── User.php
│ │ │ │ ├── php-grandparent-resolution/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── A.php
│ │ │ │ │ │ │ ├── B.php
│ │ │ │ │ │ │ ├── C.php
│ │ │ │ │ │ │ └── Greeting.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── App.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-grouped-imports/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ │ └── User.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── Main.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-local-shadow/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Services/
│ │ │ │ │ │ │ └── Main.php
│ │ │ │ │ │ └── Utils/
│ │ │ │ │ │ └── Logger.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-member-calls/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ └── User.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── UserService.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-method-chain-binding/
│ │ │ │ │ └── App.php
│ │ │ │ ├── php-nullable-receiver/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ │ └── User.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── AppService.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-parent-resolution/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── Models/
│ │ │ │ │ │ ├── BaseModel.php
│ │ │ │ │ │ ├── Serializable.php
│ │ │ │ │ │ └── User.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-phpdoc-attribute-return-type/
│ │ │ │ │ ├── Models.php
│ │ │ │ │ └── Services.php
│ │ │ │ ├── php-phpdoc-return-type/
│ │ │ │ │ ├── Models.php
│ │ │ │ │ └── Services.php
│ │ │ │ ├── php-property-promotion/
│ │ │ │ │ └── UserService.php
│ │ │ │ ├── php-receiver-resolution/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ │ └── User.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── AppService.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-return-type/
│ │ │ │ │ └── app/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ └── User.php
│ │ │ │ │ └── Services/
│ │ │ │ │ └── UserService.php
│ │ │ │ ├── php-self-this-resolution/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── Models/
│ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ └── User.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-super-resolution/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── Models/
│ │ │ │ │ │ ├── BaseModel.php
│ │ │ │ │ │ ├── Repo.php
│ │ │ │ │ │ └── User.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-this-receiver-disambiguation/
│ │ │ │ │ ├── AdminService.php
│ │ │ │ │ ├── Models.php
│ │ │ │ │ └── UserService.php
│ │ │ │ ├── php-typed-properties/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Models/
│ │ │ │ │ │ │ └── UserRepo.php
│ │ │ │ │ │ └── Services/
│ │ │ │ │ │ └── UserService.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-variadic-resolution/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── Services/
│ │ │ │ │ │ │ └── AppService.php
│ │ │ │ │ │ └── Utils/
│ │ │ │ │ │ └── Logger.php
│ │ │ │ │ └── composer.json
│ │ │ │ ├── php-write-access/
│ │ │ │ │ ├── models.php
│ │ │ │ │ └── service.php
│ │ │ │ ├── python-alias-imports/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── models.py
│ │ │ │ ├── python-ambiguous/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── handler.py
│ │ │ │ │ ├── other/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── handler.py
│ │ │ │ │ └── services/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── user_handler.py
│ │ │ │ ├── python-assignment-chain/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-bare-import/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ └── user.py
│ │ │ │ │ └── services/
│ │ │ │ │ ├── auth.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-call-result-binding/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ └── service.py
│ │ │ │ ├── python-calls/
│ │ │ │ │ ├── one.py
│ │ │ │ │ ├── service.py
│ │ │ │ │ └── zero.py
│ │ │ │ ├── python-chain-call/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── repo.py
│ │ │ │ │ │ └── user.py
│ │ │ │ │ └── service.py
│ │ │ │ ├── python-class-annotations/
│ │ │ │ │ ├── repo.py
│ │ │ │ │ ├── service.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-constructor-calls/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── models.py
│ │ │ │ ├── python-constructor-type-inference/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── repo.py
│ │ │ │ │ │ └── user.py
│ │ │ │ │ └── services/
│ │ │ │ │ └── app.py
│ │ │ │ ├── python-default-params/
│ │ │ │ │ └── app.py
│ │ │ │ ├── python-dict-items-loop/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-enumerate-loop/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-field-type-disambig/
│ │ │ │ │ ├── address.py
│ │ │ │ │ ├── service.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-field-types/
│ │ │ │ │ ├── models.py
│ │ │ │ │ └── service.py
│ │ │ │ ├── python-for-call-expr/
│ │ │ │ │ ├── main.py
│ │ │ │ │ └── models.py
│ │ │ │ ├── python-grandparent-resolution/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── models/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── a.py
│ │ │ │ │ ├── b.py
│ │ │ │ │ ├── c.py
│ │ │ │ │ └── greeting.py
│ │ │ │ ├── python-local-shadow/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── python-match-case/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-member-access-for-loop/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-member-calls/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-method-chain-binding/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── models.py
│ │ │ │ ├── python-named-imports/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── format_prefix.py
│ │ │ │ │ └── format_upper.py
│ │ │ │ ├── python-nullable-chain/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-nullable-receiver/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-parent-resolution/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-pkg/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ └── user.py
│ │ │ │ │ ├── services/
│ │ │ │ │ │ └── auth.py
│ │ │ │ │ └── utils/
│ │ │ │ │ └── helpers.py
│ │ │ │ ├── python-qualified-constructor/
│ │ │ │ │ ├── main.py
│ │ │ │ │ └── models.py
│ │ │ │ ├── python-receiver-resolution/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-reexport-chain/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── models/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── python-return-type-inference/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ └── service.py
│ │ │ │ ├── python-self-this-resolution/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-static-class-methods/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── service.py
│ │ │ │ ├── python-super-resolution/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-variadic-resolution/
│ │ │ │ │ ├── app.py
│ │ │ │ │ └── logger.py
│ │ │ │ ├── python-walrus-chain/
│ │ │ │ │ ├── app.py
│ │ │ │ │ ├── repo.py
│ │ │ │ │ └── user.py
│ │ │ │ ├── python-walrus-operator/
│ │ │ │ │ ├── main.py
│ │ │ │ │ └── models.py
│ │ │ │ ├── python-write-access/
│ │ │ │ │ ├── models.py
│ │ │ │ │ └── service.py
│ │ │ │ ├── ruby-ambiguous/
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ └── user_handler.rb
│ │ │ │ │ ├── models/
│ │ │ │ │ │ └── handler.rb
│ │ │ │ │ └── other/
│ │ │ │ │ └── handler.rb
│ │ │ │ ├── ruby-app/
│ │ │ │ │ └── lib/
│ │ │ │ │ ├── base_model.rb
│ │ │ │ │ ├── concerns/
│ │ │ │ │ │ ├── cacheable.rb
│ │ │ │ │ │ ├── loggable.rb
│ │ │ │ │ │ └── serializable.rb
│ │ │ │ │ ├── service.rb
│ │ │ │ │ └── user.rb
│ │ │ │ ├── ruby-call-result-binding/
│ │ │ │ │ └── app.rb
│ │ │ │ ├── ruby-calls/
│ │ │ │ │ └── lib/
│ │ │ │ │ ├── one_arg.rb
│ │ │ │ │ ├── service.rb
│ │ │ │ │ └── two_args.rb
│ │ │ │ ├── ruby-chain-call/
│ │ │ │ │ └── lib/
│ │ │ │ │ ├── app.rb
│ │ │ │ │ ├── repo.rb
│ │ │ │ │ ├── user.rb
│ │ │ │ │ └── user_service.rb
│ │ │ │ ├── ruby-constant-constructor/
│ │ │ │ │ ├── app.rb
│ │ │ │ │ └── models.rb
│ │ │ │ ├── ruby-constant-factory-call/
│ │ │ │ │ ├── admin_service.rb
│ │ │ │ │ ├── app.rb
│ │ │ │ │ └── user_service.rb
│ │ │ │ ├── ruby-constructor-type-inference/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── repo.rb
│ │ │ │ │ │ └── user.rb
│ │ │ │ │ └── services/
│ │ │ │ │ └── app.rb
│ │ │ │ ├── ruby-default-params/
│ │ │ │ │ └── app.rb
│ │ │ │ ├── ruby-field-type-disambig/
│ │ │ │ │ ├── address.rb
│ │ │ │ │ ├── service.rb
│ │ │ │ │ └── user.rb
│ │ │ │ ├── ruby-field-types/
│ │ │ │ │ ├── models.rb
│ │ │ │ │ └── service.rb
│ │ │ │ ├── ruby-for-in-loop/
│ │ │ │ │ ├── app.rb
│ │ │ │ │ ├── repo.rb
│ │ │ │ │ └── user.rb
│ │ │ │ ├── ruby-grandparent-resolution/
│ │ │ │ │ └── lib/
│ │ │ │ │ ├── app.rb
│ │ │ │ │ └── models/
│ │ │ │ │ ├── a.rb
│ │ │ │ │ ├── b.rb
│ │ │ │ │ ├── c.rb
│ │ │ │ │ └── greeting.rb
│ │ │ │ ├── ruby-local-shadow/
│ │ │ │ │ └── lib/
│ │ │ │ │ ├── app.rb
│ │ │ │ │ └── utils.rb
│ │ │ │ ├── ruby-member-calls/
│ │ │ │ │ └── lib/
│ │ │ │ │ ├── app.rb
│ │ │ │ │ └── user.rb
│ │ │ │ ├── ruby-method-chain-binding/
│ │ │ │ │ └── app.rb
│ │ │ │ ├── ruby-namespaced-constructor/
│ │ │ │ │ ├── app.rb
│ │ │ │ │ └── models/
│ │ │ │ │ └── user_service.rb
│ │ │ │ ├── ruby-parent-resolution/
│ │ │ │ │ └── lib/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── base_model.rb
│ │ │ │ │ ├── serializable.rb
│ │ │ │ │ └── user.rb
│ │ │ │ ├── ruby-return-type/
│ │ │ │ │ ├── app.rb
│ │ │ │ │ ├── models.rb
│ │ │ │ │ └── repo.rb
│ │ │ │ ├── ruby-self-this-resolution/
│ │ │ │ │ └── lib/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.rb
│ │ │ │ │ └── user.rb
│ │ │ │ ├── ruby-super-resolution/
│ │ │ │ │ └── lib/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── base_model.rb
│ │ │ │ │ ├── repo.rb
│ │ │ │ │ └── user.rb
│ │ │ │ ├── ruby-write-access/
│ │ │ │ │ ├── models.rb
│ │ │ │ │ └── service.rb
│ │ │ │ ├── ruby-yard-annotations/
│ │ │ │ │ ├── models.rb
│ │ │ │ │ └── service.rb
│ │ │ │ ├── ruby-yard-generics/
│ │ │ │ │ ├── models.rb
│ │ │ │ │ └── service.rb
│ │ │ │ ├── rust-alias-imports/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models.rs
│ │ │ │ ├── rust-ambiguous/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── handler.rs
│ │ │ │ │ │ └── mod.rs
│ │ │ │ │ ├── other/
│ │ │ │ │ │ ├── handler.rs
│ │ │ │ │ │ └── mod.rs
│ │ │ │ │ └── services/
│ │ │ │ │ └── mod.rs
│ │ │ │ ├── rust-assignment-chain/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-async-binding/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-call-result-binding/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models.rs
│ │ │ │ ├── rust-calls/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── onearg/
│ │ │ │ │ │ └── mod.rs
│ │ │ │ │ └── zeroarg/
│ │ │ │ │ └── mod.rs
│ │ │ │ ├── rust-chain-call/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models/
│ │ │ │ │ ├── mod.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-constructor-type-inference/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-deep-field-chain/
│ │ │ │ │ ├── models.rs
│ │ │ │ │ └── service.rs
│ │ │ │ ├── rust-default-constructor/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-err-unwrap/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── error.rs
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-field-types/
│ │ │ │ │ ├── models.rs
│ │ │ │ │ └── service.rs
│ │ │ │ ├── rust-for-call-expr/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-for-loop/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-grouped-imports/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── helpers/
│ │ │ │ │ │ └── mod.rs
│ │ │ │ │ └── main.rs
│ │ │ │ ├── rust-if-let/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models.rs
│ │ │ │ ├── rust-if-let-unwrap/
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── mod.rs
│ │ │ │ │ │ ├── repo.rs
│ │ │ │ │ │ └── user.rs
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-iter-for-loop/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-local-shadow/
│ │ │ │ │ ├── Cargo.toml
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── rust-match-unwrap/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-member-calls/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-method-chain-binding/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models.rs
│ │ │ │ ├── rust-nullable-receiver/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-option-receiver/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── lib.rs
│ │ │ │ │ ├── serializable.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-receiver-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-reexport-chain/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models/
│ │ │ │ │ ├── handler.rs
│ │ │ │ │ └── mod.rs
│ │ │ │ ├── rust-return-type/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models.rs
│ │ │ │ ├── rust-return-type-inference/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models.rs
│ │ │ │ ├── rust-self-struct-literal/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models.rs
│ │ │ │ ├── rust-self-this-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── repo.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-struct-destructuring/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ ├── point.rs
│ │ │ │ │ └── vec2.rs
│ │ │ │ ├── rust-struct-literal-inference/
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── models.rs
│ │ │ │ ├── rust-struct-literals/
│ │ │ │ │ ├── app.rs
│ │ │ │ │ └── user.rs
│ │ │ │ ├── rust-traits/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── impls/
│ │ │ │ │ │ └── button.rs
│ │ │ │ │ ├── main.rs
│ │ │ │ │ └── traits/
│ │ │ │ │ ├── clickable.rs
│ │ │ │ │ └── drawable.rs
│ │ │ │ ├── rust-write-access/
│ │ │ │ │ ├── models.rs
│ │ │ │ │ └── service.rs
│ │ │ │ ├── swift-constructor-type-inference/
│ │ │ │ │ ├── Models/
│ │ │ │ │ │ ├── Repo.swift
│ │ │ │ │ │ └── User.swift
│ │ │ │ │ └── Services/
│ │ │ │ │ └── App.swift
│ │ │ │ ├── swift-init-cross-file/
│ │ │ │ │ ├── User.swift
│ │ │ │ │ └── main.swift
│ │ │ │ ├── swift-parent-resolution/
│ │ │ │ │ └── Sources/
│ │ │ │ │ └── Models/
│ │ │ │ │ ├── BaseModel.swift
│ │ │ │ │ ├── Serializable.swift
│ │ │ │ │ └── User.swift
│ │ │ │ ├── swift-return-type/
│ │ │ │ │ ├── App.swift
│ │ │ │ │ └── Models.swift
│ │ │ │ ├── swift-return-type-inference/
│ │ │ │ │ ├── App.swift
│ │ │ │ │ └── Models.swift
│ │ │ │ ├── swift-self-this-resolution/
│ │ │ │ │ └── Sources/
│ │ │ │ │ └── Models/
│ │ │ │ │ ├── Repo.swift
│ │ │ │ │ └── User.swift
│ │ │ │ ├── ts-assignment-chain/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── ts-call-result-binding/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── ts-class-field-foreach/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── ts-deep-field-chain/
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── ts-field-type-disambig/
│ │ │ │ │ ├── address.ts
│ │ │ │ │ ├── service.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── ts-fixpoint-for-loop/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── models.ts
│ │ │ │ ├── ts-grandparent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── base.ts
│ │ │ │ │ ├── derived.ts
│ │ │ │ │ ├── greeting.ts
│ │ │ │ │ └── middle.ts
│ │ │ │ ├── ts-method-chain-binding/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── ts-mixed-chain/
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── ts-multi-hop-chain/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── ts-null-check-narrowing/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── models.ts
│ │ │ │ ├── ts-nullable-chain/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── ts-nullable-receiver/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── ts-object-destructuring/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── ts-optional-params/
│ │ │ │ │ └── src/
│ │ │ │ │ └── app.ts
│ │ │ │ ├── ts-overload-disambiguation/
│ │ │ │ │ └── src/
│ │ │ │ │ └── app.ts
│ │ │ │ ├── ts-param-property-fields/
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── ts-readonly-foreach/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── ts-return-type-inference/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── ts-virtual-dispatch/
│ │ │ │ │ └── src/
│ │ │ │ │ └── app.ts
│ │ │ │ ├── ts-write-access/
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── typescript-alias-imports/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── models.ts
│ │ │ │ ├── typescript-ambiguous/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── logger.ts
│ │ │ │ │ ├── models.ts
│ │ │ │ │ └── service.ts
│ │ │ │ ├── typescript-calls/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── one.ts
│ │ │ │ │ ├── service.ts
│ │ │ │ │ └── zero.ts
│ │ │ │ ├── typescript-cast-constructor-inference/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-chain-call/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.ts
│ │ │ │ │ │ └── User.ts
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.ts
│ │ │ │ ├── typescript-constructor-calls/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-constructor-type-inference/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-destructured-for-of/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-double-cast-inference/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-for-of-call-expr/
│ │ │ │ │ ├── main.ts
│ │ │ │ │ └── models/
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-generic-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Base.ts
│ │ │ │ │ ├── Repo.ts
│ │ │ │ │ └── User.ts
│ │ │ │ ├── typescript-instanceof-narrowing/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-local-shadow/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── typescript-member-access-for-loop/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.ts
│ │ │ │ │ └── User.ts
│ │ │ │ ├── typescript-member-calls/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-named-imports/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── format-prefix.ts
│ │ │ │ │ └── format-upper.ts
│ │ │ │ ├── typescript-overloaded-receiver/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── db/
│ │ │ │ │ │ ├── Cache.ts
│ │ │ │ │ │ └── Database.ts
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.ts
│ │ │ │ │ └── User.ts
│ │ │ │ ├── typescript-parent-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Base.ts
│ │ │ │ │ └── User.ts
│ │ │ │ ├── typescript-receiver-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-reexport-chain/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── base.ts
│ │ │ │ │ └── models.ts
│ │ │ │ ├── typescript-reexport-type/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── base.ts
│ │ │ │ │ └── models.ts
│ │ │ │ ├── typescript-scoped-receiver/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── repo.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── typescript-self-this-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Repo.ts
│ │ │ │ │ └── User.ts
│ │ │ │ ├── typescript-static-chain/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.ts
│ │ │ │ │ │ └── User.ts
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.ts
│ │ │ │ ├── typescript-super-resolution/
│ │ │ │ │ └── src/
│ │ │ │ │ └── models/
│ │ │ │ │ ├── Base.ts
│ │ │ │ │ ├── Repo.ts
│ │ │ │ │ └── User.ts
│ │ │ │ ├── typescript-typed-param-chain/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── Repo.ts
│ │ │ │ │ │ └── User.ts
│ │ │ │ │ └── services/
│ │ │ │ │ └── UserService.ts
│ │ │ │ └── typescript-variadic-resolution/
│ │ │ │ └── src/
│ │ │ │ ├── app.ts
│ │ │ │ └── logger.ts
│ │ │ ├── local-backend-seed.ts
│ │ │ ├── mini-repo/
│ │ │ │ └── src/
│ │ │ │ ├── db.ts
│ │ │ │ ├── formatter.ts
│ │ │ │ ├── handler.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── logger.ts
│ │ │ │ ├── middleware.ts
│ │ │ │ └── validator.ts
│ │ │ ├── sample-code/
│ │ │ │ ├── simple.c
│ │ │ │ ├── simple.cpp
│ │ │ │ ├── simple.cs
│ │ │ │ ├── simple.go
│ │ │ │ ├── simple.java
│ │ │ │ ├── simple.js
│ │ │ │ ├── simple.php
│ │ │ │ ├── simple.py
│ │ │ │ ├── simple.rs
│ │ │ │ ├── simple.swift
│ │ │ │ ├── simple.ts
│ │ │ │ ├── simple.tsx
│ │ │ │ └── swift-extension.swift
│ │ │ └── search-seed.ts
│ │ ├── global-setup.ts
│ │ ├── helpers/
│ │ │ ├── test-db.ts
│ │ │ ├── test-graph.ts
│ │ │ └── test-indexed-db.ts
│ │ ├── integration/
│ │ │ ├── augmentation.test.ts
│ │ │ ├── cli-e2e.test.ts
│ │ │ ├── csv-pipeline.test.ts
│ │ │ ├── enrichment.test.ts
│ │ │ ├── filesystem-walker.test.ts
│ │ │ ├── has-method.test.ts
│ │ │ ├── hooks-e2e.test.ts
│ │ │ ├── ignore-and-skip-e2e.test.ts
│ │ │ ├── lbug-core-adapter.test.ts
│ │ │ ├── lbug-pool-stability.test.ts
│ │ │ ├── lbug-pool.test.ts
│ │ │ ├── local-backend-calltool.test.ts
│ │ │ ├── local-backend.test.ts
│ │ │ ├── parsing.test.ts
│ │ │ ├── pipeline.test.ts
│ │ │ ├── query-compilation.test.ts
│ │ │ ├── resolvers/
│ │ │ │ ├── cpp.test.ts
│ │ │ │ ├── csharp.test.ts
│ │ │ │ ├── go.test.ts
│ │ │ │ ├── helpers.ts
│ │ │ │ ├── java.test.ts
│ │ │ │ ├── javascript.test.ts
│ │ │ │ ├── kotlin.test.ts
│ │ │ │ ├── php.test.ts
│ │ │ │ ├── python.test.ts
│ │ │ │ ├── ruby.test.ts
│ │ │ │ ├── rust.test.ts
│ │ │ │ ├── swift.test.ts
│ │ │ │ └── typescript.test.ts
│ │ │ ├── search-core.test.ts
│ │ │ ├── search-pool.test.ts
│ │ │ ├── setup-skills.test.ts
│ │ │ ├── skills-e2e.test.ts
│ │ │ ├── tree-sitter-languages.test.ts
│ │ │ └── worker-pool.test.ts
│ │ ├── unit/
│ │ │ ├── ai-context.test.ts
│ │ │ ├── ast-cache.test.ts
│ │ │ ├── bm25-search.test.ts
│ │ │ ├── call-form.test.ts
│ │ │ ├── call-processor.test.ts
│ │ │ ├── call-routing.test.ts
│ │ │ ├── calltool-dispatch.test.ts
│ │ │ ├── cli-commands.test.ts
│ │ │ ├── cli-index-help.test.ts
│ │ │ ├── cohesion-consistency.test.ts
│ │ │ ├── community-processor.test.ts
│ │ │ ├── compatible-stdio-transport.test.ts
│ │ │ ├── csv-escaping.test.ts
│ │ │ ├── embedder.test.ts
│ │ │ ├── entry-point-scoring.test.ts
│ │ │ ├── eval-formatters.test.ts
│ │ │ ├── extract-element-type-from-string.test.ts
│ │ │ ├── extract-generic-type-args.test.ts
│ │ │ ├── framework-detection.test.ts
│ │ │ ├── git.test.ts
│ │ │ ├── graph.test.ts
│ │ │ ├── has-method.test.ts
│ │ │ ├── heritage-processor.test.ts
│ │ │ ├── hooks.test.ts
│ │ │ ├── hybrid-search.test.ts
│ │ │ ├── ignore-service.test.ts
│ │ │ ├── import-processor.test.ts
│ │ │ ├── ingestion-utils.test.ts
│ │ │ ├── language-skip.test.ts
│ │ │ ├── lazy-action.test.ts
│ │ │ ├── method-signature.test.ts
│ │ │ ├── mro-processor.test.ts
│ │ │ ├── named-binding-extraction.test.ts
│ │ │ ├── parser-loader.test.ts
│ │ │ ├── pipeline-exports.test.ts
│ │ │ ├── process-processor.test.ts
│ │ │ ├── repo-manager.test.ts
│ │ │ ├── resources.test.ts
│ │ │ ├── schema.test.ts
│ │ │ ├── security.test.ts
│ │ │ ├── sequential-language-availability.test.ts
│ │ │ ├── server.test.ts
│ │ │ ├── shared-type-extractors.test.ts
│ │ │ ├── skill-gen.test.ts
│ │ │ ├── staleness.test.ts
│ │ │ ├── structure-processor.test.ts
│ │ │ ├── suffix-index-ambiguity.test.ts
│ │ │ ├── symbol-resolver.test.ts
│ │ │ ├── symbol-table.test.ts
│ │ │ ├── tools.test.ts
│ │ │ ├── tree-sitter-queries.test.ts
│ │ │ ├── type-env.test.ts
│ │ │ └── utils.test.ts
│ │ ├── utils/
│ │ │ └── hook-test-helpers.ts
│ │ └── vitest.d.ts
│ ├── tsconfig.json
│ ├── tsconfig.test.json
│ ├── vendor/
│ │ └── leiden/
│ │ ├── index.cjs
│ │ └── utils.cjs
│ └── vitest.config.ts
├── gitnexus-claude-plugin/
│ ├── .claude-plugin/
│ │ └── plugin.json
│ ├── .mcp.json
│ ├── hooks/
│ │ ├── gitnexus-hook.js
│ │ └── hooks.json
│ └── skills/
│ ├── gitnexus-cli/
│ │ ├── SKILL.md
│ │ └── mcp.json
│ ├── gitnexus-debugging/
│ │ ├── SKILL.md
│ │ └── mcp.json
│ ├── gitnexus-exploring/
│ │ ├── SKILL.md
│ │ └── mcp.json
│ ├── gitnexus-guide/
│ │ ├── SKILL.md
│ │ └── mcp.json
│ ├── gitnexus-impact-analysis/
│ │ ├── SKILL.md
│ │ └── mcp.json
│ ├── gitnexus-pr-review/
│ │ └── SKILL.md
│ └── gitnexus-refactoring/
│ ├── SKILL.md
│ └── mcp.json
├── gitnexus-cursor-integration/
│ ├── hooks/
│ │ ├── augment-shell.sh
│ │ └── hooks.json
│ └── skills/
│ ├── gitnexus-debugging/
│ │ └── SKILL.md
│ ├── gitnexus-exploring/
│ │ └── SKILL.md
│ ├── gitnexus-impact-analysis/
│ │ └── SKILL.md
│ ├── gitnexus-pr-review/
│ │ └── SKILL.md
│ └── gitnexus-refactoring/
│ └── SKILL.md
├── gitnexus-test-setup/
│ └── .gitignore
├── gitnexus-web/
│ ├── .gitignore
│ ├── api/
│ │ └── proxy.ts
│ ├── index.html
│ ├── package.json
│ ├── public/
│ │ └── wasm/
│ │ ├── c/
│ │ │ └── tree-sitter-c.wasm
│ │ ├── cpp/
│ │ │ └── tree-sitter-cpp.wasm
│ │ ├── csharp/
│ │ │ └── tree-sitter-csharp.wasm
│ │ ├── go/
│ │ │ └── tree-sitter-go.wasm
│ │ ├── java/
│ │ │ └── tree-sitter-java.wasm
│ │ ├── javascript/
│ │ │ └── tree-sitter-javascript.wasm
│ │ ├── php/
│ │ │ └── tree-sitter-php.wasm
│ │ ├── python/
│ │ │ └── tree-sitter-python.wasm
│ │ ├── ruby/
│ │ │ └── tree-sitter-ruby.wasm
│ │ ├── rust/
│ │ │ └── tree-sitter-rust.wasm
│ │ ├── swift/
│ │ │ └── tree-sitter-swift.wasm
│ │ ├── tree-sitter.wasm
│ │ └── typescript/
│ │ ├── tree-sitter-tsx.wasm
│ │ └── tree-sitter-typescript.wasm
│ ├── src/
│ │ ├── App.tsx
│ │ ├── components/
│ │ │ ├── BackendRepoSelector.tsx
│ │ │ ├── CodeReferencesPanel.tsx
│ │ │ ├── DropZone.tsx
│ │ │ ├── EmbeddingStatus.tsx
│ │ │ ├── FileTreePanel.tsx
│ │ │ ├── GraphCanvas.tsx
│ │ │ ├── Header.tsx
│ │ │ ├── LoadingOverlay.tsx
│ │ │ ├── MarkdownRenderer.tsx
│ │ │ ├── MermaidDiagram.tsx
│ │ │ ├── ProcessFlowModal.tsx
│ │ │ ├── ProcessesPanel.tsx
│ │ │ ├── QueryFAB.tsx
│ │ │ ├── RightPanel.tsx
│ │ │ ├── SettingsPanel.tsx
│ │ │ ├── StatusBar.tsx
│ │ │ ├── ToolCallCard.tsx
│ │ │ └── WebGPUFallbackDialog.tsx
│ │ ├── config/
│ │ │ ├── ignore-service.ts
│ │ │ └── supported-languages.ts
│ │ ├── core/
│ │ │ ├── embeddings/
│ │ │ │ ├── embedder.ts
│ │ │ │ ├── embedding-pipeline.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── text-generator.ts
│ │ │ │ └── types.ts
│ │ │ ├── graph/
│ │ │ │ ├── graph.ts
│ │ │ │ └── types.ts
│ │ │ ├── ingestion/
│ │ │ │ ├── ast-cache.ts
│ │ │ │ ├── call-processor.ts
│ │ │ │ ├── call-routing.ts
│ │ │ │ ├── cluster-enricher.ts
│ │ │ │ ├── community-processor.ts
│ │ │ │ ├── entry-point-scoring.ts
│ │ │ │ ├── framework-detection.ts
│ │ │ │ ├── heritage-processor.ts
│ │ │ │ ├── import-processor.ts
│ │ │ │ ├── parsing-processor.ts
│ │ │ │ ├── pipeline.ts
│ │ │ │ ├── process-processor.ts
│ │ │ │ ├── structure-processor.ts
│ │ │ │ ├── symbol-table.ts
│ │ │ │ ├── tree-sitter-queries.ts
│ │ │ │ └── utils.ts
│ │ │ ├── lbug/
│ │ │ │ ├── csv-generator.ts
│ │ │ │ ├── lbug-adapter.ts
│ │ │ │ └── schema.ts
│ │ │ ├── llm/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── context-builder.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── settings-service.ts
│ │ │ │ ├── tools.ts
│ │ │ │ └── types.ts
│ │ │ ├── search/
│ │ │ │ ├── bm25-index.ts
│ │ │ │ ├── hybrid-search.ts
│ │ │ │ └── index.ts
│ │ │ └── tree-sitter/
│ │ │ └── parser-loader.ts
│ │ ├── hooks/
│ │ │ ├── useAppState.tsx
│ │ │ ├── useBackend.ts
│ │ │ ├── useSettings.ts
│ │ │ └── useSigma.ts
│ │ ├── index.css
│ │ ├── lib/
│ │ │ ├── constants.ts
│ │ │ ├── graph-adapter.ts
│ │ │ ├── mermaid-generator.ts
│ │ │ └── utils.ts
│ │ ├── main.tsx
│ │ ├── services/
│ │ │ ├── backend.ts
│ │ │ ├── git-clone.ts
│ │ │ ├── server-connection.ts
│ │ │ └── zip.ts
│ │ ├── types/
│ │ │ ├── lbug-wasm.d.ts
│ │ │ └── pipeline.ts
│ │ ├── vendor/
│ │ │ └── leiden/
│ │ │ ├── index.d.ts
│ │ │ ├── index.js
│ │ │ └── utils.js
│ │ ├── vite-env.d.ts
│ │ └── workers/
│ │ └── ingestion.worker.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── skills.mdm
├── type-resolution-roadmap.md
└── type-resolution-system.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .claude/skills/gitnexus/gitnexus-cli/SKILL.md
================================================
---
name: gitnexus-cli
description: "Use when the user needs to run GitNexus CLI commands like analyze/index a repo, check status, clean the index, generate a wiki, or list indexed repos. Examples: \"Index this repo\", \"Reanalyze the codebase\", \"Generate a wiki\""
---
# GitNexus CLI Commands
All commands work via `npx` — no global install required.
## Commands
### analyze — Build or refresh the index
```bash
npx gitnexus analyze
```
Run from the project root. This parses all source files, builds the knowledge graph, writes it to `.gitnexus/`, and generates CLAUDE.md / AGENTS.md context files.
| Flag | Effect |
| -------------- | ---------------------------------------------------------------- |
| `--force` | Force full re-index even if up to date |
| `--embeddings` | Enable embedding generation for semantic search (off by default) |
**When to run:** First time in a project, after major code changes, or when `gitnexus://repo/{name}/context` reports the index is stale. In Claude Code, a PostToolUse hook runs `analyze` automatically after `git commit` and `git merge`, preserving embeddings if previously generated.
### status — Check index freshness
```bash
npx gitnexus status
```
Shows whether the current repo has a GitNexus index, when it was last updated, and symbol/relationship counts. Use this to check if re-indexing is needed.
### clean — Delete the index
```bash
npx gitnexus clean
```
Deletes the `.gitnexus/` directory and unregisters the repo from the global registry. Use before re-indexing if the index is corrupt or after removing GitNexus from a project.
| Flag | Effect |
| --------- | ------------------------------------------------- |
| `--force` | Skip confirmation prompt |
| `--all` | Clean all indexed repos, not just the current one |
### wiki — Generate documentation from the graph
```bash
npx gitnexus wiki
```
Generates repository documentation from the knowledge graph using an LLM. Requires an API key (saved to `~/.gitnexus/config.json` on first use).
| Flag | Effect |
| ------------------- | ----------------------------------------- |
| `--force` | Force full regeneration |
| `--model <model>` | LLM model (default: minimax/minimax-m2.5) |
| `--base-url <url>` | LLM API base URL |
| `--api-key <key>` | LLM API key |
| `--concurrency <n>` | Parallel LLM calls (default: 3) |
| `--gist` | Publish wiki as a public GitHub Gist |
### list — Show all indexed repos
```bash
npx gitnexus list
```
Lists all repositories registered in `~/.gitnexus/registry.json`. The MCP `list_repos` tool provides the same information.
## After Indexing
1. **Read `gitnexus://repo/{name}/context`** to verify the index loaded
2. Use the other GitNexus skills (`exploring`, `debugging`, `impact-analysis`, `refactoring`) for your task
## Troubleshooting
- **"Not inside a git repository"**: Run from a directory inside a git repo
- **Index is stale after re-analyzing**: Restart Claude Code to reload the MCP server
- **Embeddings slow**: Omit `--embeddings` (it's off by default) or set `OPENAI_API_KEY` for faster API-based embedding
================================================
FILE: .claude/skills/gitnexus/gitnexus-debugging/SKILL.md
================================================
---
name: gitnexus-debugging
description: "Use when the user is debugging a bug, tracing an error, or asking why something fails. Examples: \"Why is X failing?\", \"Where does this error come from?\", \"Trace this bug\""
---
# Debugging with GitNexus
## When to Use
- "Why is this function failing?"
- "Trace where this error comes from"
- "Who calls this method?"
- "This endpoint returns 500"
- Investigating bugs, errors, or unexpected behavior
## Workflow
```
1. gitnexus_query({query: "<error or symptom>"}) → Find related execution flows
2. gitnexus_context({name: "<suspect>"}) → See callers/callees/processes
3. READ gitnexus://repo/{name}/process/{name} → Trace execution flow
4. gitnexus_cypher({query: "MATCH path..."}) → Custom traces if needed
```
> If "Index is stale" → run `npx gitnexus analyze` in terminal.
## Checklist
```
- [ ] Understand the symptom (error message, unexpected behavior)
- [ ] gitnexus_query for error text or related code
- [ ] Identify the suspect function from returned processes
- [ ] gitnexus_context to see callers and callees
- [ ] Trace execution flow via process resource if applicable
- [ ] gitnexus_cypher for custom call chain traces if needed
- [ ] Read source files to confirm root cause
```
## Debugging Patterns
| Symptom | GitNexus Approach |
| -------------------- | ---------------------------------------------------------- |
| Error message | `gitnexus_query` for error text → `context` on throw sites |
| Wrong return value | `context` on the function → trace callees for data flow |
| Intermittent failure | `context` → look for external calls, async deps |
| Performance issue | `context` → find symbols with many callers (hot paths) |
| Recent regression | `detect_changes` to see what your changes affect |
## Tools
**gitnexus_query** — find code related to error:
```
gitnexus_query({query: "payment validation error"})
→ Processes: CheckoutFlow, ErrorHandling
→ Symbols: validatePayment, handlePaymentError, PaymentException
```
**gitnexus_context** — full context for a suspect:
```
gitnexus_context({name: "validatePayment"})
→ Incoming calls: processCheckout, webhookHandler
→ Outgoing calls: verifyCard, fetchRates (external API!)
→ Processes: CheckoutFlow (step 3/7)
```
**gitnexus_cypher** — custom call chain traces:
```cypher
MATCH path = (a)-[:CodeRelation {type: 'CALLS'}*1..2]->(b:Function {name: "validatePayment"})
RETURN [n IN nodes(path) | n.name] AS chain
```
## Example: "Payment endpoint returns 500 intermittently"
```
1. gitnexus_query({query: "payment error handling"})
→ Processes: CheckoutFlow, ErrorHandling
→ Symbols: validatePayment, handlePaymentError
2. gitnexus_context({name: "validatePayment"})
→ Outgoing calls: verifyCard, fetchRates (external API!)
3. READ gitnexus://repo/my-app/process/CheckoutFlow
→ Step 3: validatePayment → calls fetchRates (external)
4. Root cause: fetchRates calls external API without proper timeout
```
================================================
FILE: .claude/skills/gitnexus/gitnexus-exploring/SKILL.md
================================================
---
name: gitnexus-exploring
description: "Use when the user asks how code works, wants to understand architecture, trace execution flows, or explore unfamiliar parts of the codebase. Examples: \"How does X work?\", \"What calls this function?\", \"Show me the auth flow\""
---
# Exploring Codebases with GitNexus
## When to Use
- "How does authentication work?"
- "What's the project structure?"
- "Show me the main components"
- "Where is the database logic?"
- Understanding code you haven't seen before
## Workflow
```
1. READ gitnexus://repos → Discover indexed repos
2. READ gitnexus://repo/{name}/context → Codebase overview, check staleness
3. gitnexus_query({query: "<what you want to understand>"}) → Find related execution flows
4. gitnexus_context({name: "<symbol>"}) → Deep dive on specific symbol
5. READ gitnexus://repo/{name}/process/{name} → Trace full execution flow
```
> If step 2 says "Index is stale" → run `npx gitnexus analyze` in terminal.
## Checklist
```
- [ ] READ gitnexus://repo/{name}/context
- [ ] gitnexus_query for the concept you want to understand
- [ ] Review returned processes (execution flows)
- [ ] gitnexus_context on key symbols for callers/callees
- [ ] READ process resource for full execution traces
- [ ] Read source files for implementation details
```
## Resources
| Resource | What you get |
| --------------------------------------- | ------------------------------------------------------- |
| `gitnexus://repo/{name}/context` | Stats, staleness warning (~150 tokens) |
| `gitnexus://repo/{name}/clusters` | All functional areas with cohesion scores (~300 tokens) |
| `gitnexus://repo/{name}/cluster/{name}` | Area members with file paths (~500 tokens) |
| `gitnexus://repo/{name}/process/{name}` | Step-by-step execution trace (~200 tokens) |
## Tools
**gitnexus_query** — find execution flows related to a concept:
```
gitnexus_query({query: "payment processing"})
→ Processes: CheckoutFlow, RefundFlow, WebhookHandler
→ Symbols grouped by flow with file locations
```
**gitnexus_context** — 360-degree view of a symbol:
```
gitnexus_context({name: "validateUser"})
→ Incoming calls: loginHandler, apiMiddleware
→ Outgoing calls: checkToken, getUserById
→ Processes: LoginFlow (step 2/5), TokenRefresh (step 1/3)
```
## Example: "How does payment processing work?"
```
1. READ gitnexus://repo/my-app/context → 918 symbols, 45 processes
2. gitnexus_query({query: "payment processing"})
→ CheckoutFlow: processPayment → validateCard → chargeStripe
→ RefundFlow: initiateRefund → calculateRefund → processRefund
3. gitnexus_context({name: "processPayment"})
→ Incoming: checkoutHandler, webhookHandler
→ Outgoing: validateCard, chargeStripe, saveTransaction
4. Read src/payments/processor.ts for implementation details
```
================================================
FILE: .claude/skills/gitnexus/gitnexus-guide/SKILL.md
================================================
---
name: gitnexus-guide
description: "Use when the user asks about GitNexus itself — available tools, how to query the knowledge graph, MCP resources, graph schema, or workflow reference. Examples: \"What GitNexus tools are available?\", \"How do I use GitNexus?\""
---
# GitNexus Guide
Quick reference for all GitNexus MCP tools, resources, and the knowledge graph schema.
## Always Start Here
For any task involving code understanding, debugging, impact analysis, or refactoring:
1. **Read `gitnexus://repo/{name}/context`** — codebase overview + check index freshness
2. **Match your task to a skill below** and **read that skill file**
3. **Follow the skill's workflow and checklist**
> If step 1 warns the index is stale, run `npx gitnexus analyze` in the terminal first.
## Skills
| Task | Skill to read |
| -------------------------------------------- | ------------------- |
| Understand architecture / "How does X work?" | `gitnexus-exploring` |
| Blast radius / "What breaks if I change X?" | `gitnexus-impact-analysis` |
| Trace bugs / "Why is X failing?" | `gitnexus-debugging` |
| Rename / extract / split / refactor | `gitnexus-refactoring` |
| Tools, resources, schema reference | `gitnexus-guide` (this file) |
| Index, status, clean, wiki CLI commands | `gitnexus-cli` |
## Tools Reference
| Tool | What it gives you |
| ---------------- | ------------------------------------------------------------------------ |
| `query` | Process-grouped code intelligence — execution flows related to a concept |
| `context` | 360-degree symbol view — categorized refs, processes it participates in |
| `impact` | Symbol blast radius — what breaks at depth 1/2/3 with confidence |
| `detect_changes` | Git-diff impact — what do your current changes affect |
| `rename` | Multi-file coordinated rename with confidence-tagged edits |
| `cypher` | Raw graph queries (read `gitnexus://repo/{name}/schema` first) |
| `list_repos` | Discover indexed repos |
## Resources Reference
Lightweight reads (~100-500 tokens) for navigation:
| Resource | Content |
| ---------------------------------------------- | ----------------------------------------- |
| `gitnexus://repo/{name}/context` | Stats, staleness check |
| `gitnexus://repo/{name}/clusters` | All functional areas with cohesion scores |
| `gitnexus://repo/{name}/cluster/{clusterName}` | Area members |
| `gitnexus://repo/{name}/processes` | All execution flows |
| `gitnexus://repo/{name}/process/{processName}` | Step-by-step trace |
| `gitnexus://repo/{name}/schema` | Graph schema for Cypher |
## Graph Schema
**Nodes:** File, Function, Class, Interface, Method, Community, Process
**Edges (via CodeRelation.type):** CALLS, IMPORTS, EXTENDS, IMPLEMENTS, DEFINES, MEMBER_OF, STEP_IN_PROCESS
```cypher
MATCH (caller)-[:CodeRelation {type: 'CALLS'}]->(f:Function {name: "myFunc"})
RETURN caller.name, caller.filePath
```
================================================
FILE: .claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md
================================================
---
name: gitnexus-impact-analysis
description: "Use when the user wants to know what will break if they change something, or needs safety analysis before editing code. Examples: \"Is it safe to change X?\", \"What depends on this?\", \"What will break?\""
---
# Impact Analysis with GitNexus
## When to Use
- "Is it safe to change this function?"
- "What will break if I modify X?"
- "Show me the blast radius"
- "Who uses this code?"
- Before making non-trivial code changes
- Before committing — to understand what your changes affect
## Workflow
```
1. gitnexus_impact({target: "X", direction: "upstream"}) → What depends on this
2. READ gitnexus://repo/{name}/processes → Check affected execution flows
3. gitnexus_detect_changes() → Map current git changes to affected flows
4. Assess risk and report to user
```
> If "Index is stale" → run `npx gitnexus analyze` in terminal.
## Checklist
```
- [ ] gitnexus_impact({target, direction: "upstream"}) to find dependents
- [ ] Review d=1 items first (these WILL BREAK)
- [ ] Check high-confidence (>0.8) dependencies
- [ ] READ processes to check affected execution flows
- [ ] gitnexus_detect_changes() for pre-commit check
- [ ] Assess risk level and report to user
```
## Understanding Output
| Depth | Risk Level | Meaning |
| ----- | ---------------- | ------------------------ |
| d=1 | **WILL BREAK** | Direct callers/importers |
| d=2 | LIKELY AFFECTED | Indirect dependencies |
| d=3 | MAY NEED TESTING | Transitive effects |
## Risk Assessment
| Affected | Risk |
| ------------------------------ | -------- |
| <5 symbols, few processes | LOW |
| 5-15 symbols, 2-5 processes | MEDIUM |
| >15 symbols or many processes | HIGH |
| Critical path (auth, payments) | CRITICAL |
## Tools
**gitnexus_impact** — the primary tool for symbol blast radius:
```
gitnexus_impact({
target: "validateUser",
direction: "upstream",
minConfidence: 0.8,
maxDepth: 3
})
→ d=1 (WILL BREAK):
- loginHandler (src/auth/login.ts:42) [CALLS, 100%]
- apiMiddleware (src/api/middleware.ts:15) [CALLS, 100%]
→ d=2 (LIKELY AFFECTED):
- authRouter (src/routes/auth.ts:22) [CALLS, 95%]
```
**gitnexus_detect_changes** — git-diff based impact analysis:
```
gitnexus_detect_changes({scope: "staged"})
→ Changed: 5 symbols in 3 files
→ Affected: LoginFlow, TokenRefresh, APIMiddlewarePipeline
→ Risk: MEDIUM
```
## Example: "What breaks if I change validateUser?"
```
1. gitnexus_impact({target: "validateUser", direction: "upstream"})
→ d=1: loginHandler, apiMiddleware (WILL BREAK)
→ d=2: authRouter, sessionManager (LIKELY AFFECTED)
2. READ gitnexus://repo/my-app/processes
→ LoginFlow and TokenRefresh touch validateUser
3. Risk: 2 direct callers, 2 processes = MEDIUM
```
================================================
FILE: .claude/skills/gitnexus/gitnexus-pr-review/SKILL.md
================================================
---
name: gitnexus-pr-review
description: "Use when the user wants to review a pull request, understand what a PR changes, assess risk of merging, or check for missing test coverage. Examples: \"Review this PR\", \"What does PR #42 change?\", \"Is this PR safe to merge?\""
---
# PR Review with GitNexus
## When to Use
- "Review this PR"
- "What does PR #42 change?"
- "Is this safe to merge?"
- "What's the blast radius of this PR?"
- "Are there missing tests for this PR?"
- Reviewing someone else's code changes before merge
## Workflow
```
1. gh pr diff <number> → Get the raw diff
2. gitnexus_detect_changes({scope: "compare", base_ref: "main"}) → Map diff to affected flows
3. For each changed symbol:
gitnexus_impact({target: "<symbol>", direction: "upstream"}) → Blast radius per change
4. gitnexus_context({name: "<key symbol>"}) → Understand callers/callees
5. READ gitnexus://repo/{name}/processes → Check affected execution flows
6. Summarize findings with risk assessment
```
> If "Index is stale" → run `npx gitnexus analyze` in terminal before reviewing.
## Checklist
```
- [ ] Fetch PR diff (gh pr diff or git diff base...head)
- [ ] gitnexus_detect_changes to map changes to affected execution flows
- [ ] gitnexus_impact on each non-trivial changed symbol
- [ ] Review d=1 items (WILL BREAK) — are callers updated?
- [ ] gitnexus_context on key changed symbols to understand full picture
- [ ] Check if affected processes have test coverage
- [ ] Assess overall risk level
- [ ] Write review summary with findings
```
## Review Dimensions
| Dimension | How GitNexus Helps |
| --- | --- |
| **Correctness** | `context` shows callers — are they all compatible with the change? |
| **Blast radius** | `impact` shows d=1/d=2/d=3 dependents — anything missed? |
| **Completeness** | `detect_changes` shows all affected flows — are they all handled? |
| **Test coverage** | `impact({includeTests: true})` shows which tests touch changed code |
| **Breaking changes** | d=1 upstream items that aren't updated in the PR = potential breakage |
## Risk Assessment
| Signal | Risk |
| --- | --- |
| Changes touch <3 symbols, 0-1 processes | LOW |
| Changes touch 3-10 symbols, 2-5 processes | MEDIUM |
| Changes touch >10 symbols or many processes | HIGH |
| Changes touch auth, payments, or data integrity code | CRITICAL |
| d=1 callers exist outside the PR diff | Potential breakage — flag it |
## Tools
**gitnexus_detect_changes** — map PR diff to affected execution flows:
```
gitnexus_detect_changes({scope: "compare", base_ref: "main"})
→ Changed: 8 symbols in 4 files
→ Affected processes: CheckoutFlow, RefundFlow, WebhookHandler
→ Risk: MEDIUM
```
**gitnexus_impact** — blast radius per changed symbol:
```
gitnexus_impact({target: "validatePayment", direction: "upstream"})
→ d=1 (WILL BREAK):
- processCheckout (src/checkout.ts:42) [CALLS, 100%]
- webhookHandler (src/webhooks.ts:15) [CALLS, 100%]
→ d=2 (LIKELY AFFECTED):
- checkoutRouter (src/routes/checkout.ts:22) [CALLS, 95%]
```
**gitnexus_impact with tests** — check test coverage:
```
gitnexus_impact({target: "validatePayment", direction: "upstream", includeTests: true})
→ Tests that cover this symbol:
- validatePayment.test.ts [direct]
- checkout.integration.test.ts [via processCheckout]
```
**gitnexus_context** — understand a changed symbol's role:
```
gitnexus_context({name: "validatePayment"})
→ Incoming calls: processCheckout, webhookHandler
→ Outgoing calls: verifyCard, fetchRates
→ Processes: CheckoutFlow (step 3/7), RefundFlow (step 1/5)
```
## Example: "Review PR #42"
```
1. gh pr diff 42 > /tmp/pr42.diff
→ 4 files changed: payments.ts, checkout.ts, types.ts, utils.ts
2. gitnexus_detect_changes({scope: "compare", base_ref: "main"})
→ Changed symbols: validatePayment, PaymentInput, formatAmount
→ Affected processes: CheckoutFlow, RefundFlow
→ Risk: MEDIUM
3. gitnexus_impact({target: "validatePayment", direction: "upstream"})
→ d=1: processCheckout, webhookHandler (WILL BREAK)
→ webhookHandler is NOT in the PR diff — potential breakage!
4. gitnexus_impact({target: "PaymentInput", direction: "upstream"})
→ d=1: validatePayment (in PR), createPayment (NOT in PR)
→ createPayment uses the old PaymentInput shape — breaking change!
5. gitnexus_context({name: "formatAmount"})
→ Called by 12 functions — but change is backwards-compatible (added optional param)
6. Review summary:
- MEDIUM risk — 3 changed symbols affect 2 execution flows
- BUG: webhookHandler calls validatePayment but isn't updated for new signature
- BUG: createPayment depends on PaymentInput type which changed
- OK: formatAmount change is backwards-compatible
- Tests: checkout.test.ts covers processCheckout path, but no webhook test
```
## Review Output Format
Structure your review as:
```markdown
## PR Review: <title>
**Risk: LOW / MEDIUM / HIGH / CRITICAL**
### Changes Summary
- <N> symbols changed across <M> files
- <P> execution flows affected
### Findings
1. **[severity]** Description of finding
- Evidence from GitNexus tools
- Affected callers/flows
### Missing Coverage
- Callers not updated in PR: ...
- Untested flows: ...
### Recommendation
APPROVE / REQUEST CHANGES / NEEDS DISCUSSION
```
================================================
FILE: .claude/skills/gitnexus/gitnexus-refactoring/SKILL.md
================================================
---
name: gitnexus-refactoring
description: "Use when the user wants to rename, extract, split, move, or restructure code safely. Examples: \"Rename this function\", \"Extract this into a module\", \"Refactor this class\", \"Move this to a separate file\""
---
# Refactoring with GitNexus
## When to Use
- "Rename this function safely"
- "Extract this into a module"
- "Split this service"
- "Move this to a new file"
- Any task involving renaming, extracting, splitting, or restructuring code
## Workflow
```
1. gitnexus_impact({target: "X", direction: "upstream"}) → Map all dependents
2. gitnexus_query({query: "X"}) → Find execution flows involving X
3. gitnexus_context({name: "X"}) → See all incoming/outgoing refs
4. Plan update order: interfaces → implementations → callers → tests
```
> If "Index is stale" → run `npx gitnexus analyze` in terminal.
## Checklists
### Rename Symbol
```
- [ ] gitnexus_rename({symbol_name: "oldName", new_name: "newName", dry_run: true}) — preview all edits
- [ ] Review graph edits (high confidence) and ast_search edits (review carefully)
- [ ] If satisfied: gitnexus_rename({..., dry_run: false}) — apply edits
- [ ] gitnexus_detect_changes() — verify only expected files changed
- [ ] Run tests for affected processes
```
### Extract Module
```
- [ ] gitnexus_context({name: target}) — see all incoming/outgoing refs
- [ ] gitnexus_impact({target, direction: "upstream"}) — find all external callers
- [ ] Define new module interface
- [ ] Extract code, update imports
- [ ] gitnexus_detect_changes() — verify affected scope
- [ ] Run tests for affected processes
```
### Split Function/Service
```
- [ ] gitnexus_context({name: target}) — understand all callees
- [ ] Group callees by responsibility
- [ ] gitnexus_impact({target, direction: "upstream"}) — map callers to update
- [ ] Create new functions/services
- [ ] Update callers
- [ ] gitnexus_detect_changes() — verify affected scope
- [ ] Run tests for affected processes
```
## Tools
**gitnexus_rename** — automated multi-file rename:
```
gitnexus_rename({symbol_name: "validateUser", new_name: "authenticateUser", dry_run: true})
→ 12 edits across 8 files
→ 10 graph edits (high confidence), 2 ast_search edits (review)
→ Changes: [{file_path, edits: [{line, old_text, new_text, confidence}]}]
```
**gitnexus_impact** — map all dependents first:
```
gitnexus_impact({target: "validateUser", direction: "upstream"})
→ d=1: loginHandler, apiMiddleware, testUtils
→ Affected Processes: LoginFlow, TokenRefresh
```
**gitnexus_detect_changes** — verify your changes after refactoring:
```
gitnexus_detect_changes({scope: "all"})
→ Changed: 8 files, 12 symbols
→ Affected processes: LoginFlow, TokenRefresh
→ Risk: MEDIUM
```
**gitnexus_cypher** — custom reference queries:
```cypher
MATCH (caller)-[:CodeRelation {type: 'CALLS'}]->(f:Function {name: "validateUser"})
RETURN caller.name, caller.filePath ORDER BY caller.filePath
```
## Risk Rules
| Risk Factor | Mitigation |
| ------------------- | ----------------------------------------- |
| Many callers (>5) | Use gitnexus_rename for automated updates |
| Cross-area refs | Use detect_changes after to verify scope |
| String/dynamic refs | gitnexus_query to find them |
| External/public API | Version and deprecate properly |
## Example: Rename `validateUser` to `authenticateUser`
```
1. gitnexus_rename({symbol_name: "validateUser", new_name: "authenticateUser", dry_run: true})
→ 12 edits: 10 graph (safe), 2 ast_search (review)
→ Files: validator.ts, login.ts, middleware.ts, config.json...
2. Review ast_search edits (config.json: dynamic reference!)
3. gitnexus_rename({symbol_name: "validateUser", new_name: "authenticateUser", dry_run: false})
→ Applied 12 edits across 8 files
4. gitnexus_detect_changes({scope: "all"})
→ Affected: LoginFlow, TokenRefresh
→ Risk: MEDIUM — run tests for these flows
```
================================================
FILE: .claude-plugin/marketplace.json
================================================
{
"name": "gitnexus-marketplace",
"owner": {
"name": "GitNexus",
"email": "nico@gitnexus.dev"
},
"metadata": {
"description": "Code intelligence powered by a knowledge graph — execution flows, blast radius, and semantic search",
"homepage": "https://github.com/nicosxt/gitnexus"
},
"plugins": [
{
"name": "gitnexus",
"version": "1.3.3",
"source": "./gitnexus-claude-plugin",
"description": "Code intelligence powered by a knowledge graph. Provides execution flow tracing, blast radius analysis, and augmented search across your codebase."
}
]
}
================================================
FILE: .cursorrules
================================================
# AI Agent Rules
Follow .gitnexus/RULES.md for all project context and coding guidelines.
This project uses GitNexus MCP for code intelligence. See .gitnexus/RULES.md for available tools and best practices.
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: abhigyanpatwari
================================================
FILE: .github/actions/setup-gitnexus/action.yml
================================================
name: Setup GitNexus
description: Setup Node.js 20, install dependencies, and optionally build
inputs:
build:
description: Whether to run npm run build after install
required: false
default: 'false'
runs:
using: composite
steps:
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20
cache: npm
cache-dependency-path: gitnexus/package-lock.json
- name: Install dependencies
run: npm ci
shell: bash
working-directory: gitnexus
- name: Build
if: ${{ inputs.build == 'true' }}
run: npm run build
shell: bash
working-directory: gitnexus
================================================
FILE: .github/release.yml
================================================
changelog:
exclude:
labels:
- chore
authors:
- dependabot
- dependabot[bot]
categories:
- title: "\U0001F6A8 Security"
labels:
- security
- title: "\U0001F4A5 Breaking Changes"
labels:
- breaking
- title: "\U0001F680 Features"
labels:
- enhancement
- title: "\U0001F41B Bug Fixes"
labels:
- bug
- title: "\U0001F3CE\uFE0F Performance"
labels:
- performance
- title: "\U0001F9EA Tests"
labels:
- test
- title: "\U0001F504 Refactoring"
labels:
- refactor
- title: "\U0001F477 CI/CD"
labels:
- ci
- title: "\U0001F4E6 Dependencies"
labels:
- dependencies
- title: "\U0001F4DD Other Changes"
labels:
- "*"
exclude:
labels:
- dependencies
- ci
- test
- refactor
- chore
================================================
FILE: .github/workflows/ci-quality.yml
================================================
name: Quality Checks
on:
workflow_call:
jobs:
typecheck:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: ./.github/actions/setup-gitnexus
- run: npx tsc --noEmit
working-directory: gitnexus
================================================
FILE: .github/workflows/ci-report.yml
================================================
name: CI Report
on:
workflow_run:
workflows: ['CI']
types: [completed]
permissions:
actions: read
contents: read
pull-requests: write
jobs:
pr-report:
name: PR Report
if: >-
github.event.workflow_run.event == 'pull_request' &&
github.event.workflow_run.conclusion != 'cancelled'
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Download PR metadata
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
const fs = require('fs');
const path = require('path');
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
});
const meta = artifacts.data.artifacts.find(a => a.name === 'pr-meta');
if (!meta) {
core.setFailed('pr-meta artifact not found — skipping report');
return;
}
const zip = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: meta.id,
archive_format: 'zip',
});
const dest = path.join(process.env.RUNNER_TEMP, 'pr-meta');
fs.mkdirSync(dest, { recursive: true });
fs.writeFileSync(path.join(dest, 'pr-meta.zip'), Buffer.from(zip.data));
- name: Extract PR metadata
id: meta
shell: bash
run: |
cd "$RUNNER_TEMP/pr-meta"
unzip -o pr-meta.zip
PR_NUMBER=$(cat pr-number | tr -d '[:space:]')
if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then
echo "::error::Invalid PR number: '$PR_NUMBER'"
exit 1
fi
echo "pr-number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
echo "quality=$(cat quality-result | tr -d '[:space:]')" >> "$GITHUB_OUTPUT"
echo "tests=$(cat tests-result | tr -d '[:space:]')" >> "$GITHUB_OUTPUT"
- name: Download test reports
id: download-test-reports
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
const fs = require('fs');
const path = require('path');
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
});
const reports = artifacts.data.artifacts.find(a => a.name === 'test-reports');
if (!reports) {
core.warning('test-reports artifact not found');
return;
}
const zip = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: reports.id,
archive_format: 'zip',
});
const dest = path.join(process.env.RUNNER_TEMP, 'test-reports');
fs.mkdirSync(dest, { recursive: true });
fs.writeFileSync(path.join(dest, 'test-reports.zip'), Buffer.from(zip.data));
- name: Extract test reports
if: steps.download-test-reports.outcome == 'success'
shell: bash
run: |
cd "$RUNNER_TEMP/test-reports"
unzip -o test-reports.zip || true
- name: Fetch cross-platform job results
id: jobs
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
const jobs = await github.rest.actions.listJobsForWorkflowRun({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
per_page: 50,
});
const results = {};
for (const job of jobs.data.jobs) {
if (job.name.includes('ubuntu')) results.ubuntu = job.conclusion || 'pending';
else if (job.name.includes('windows')) results.windows = job.conclusion || 'pending';
else if (job.name.includes('macos')) results.macos = job.conclusion || 'pending';
}
core.setOutput('ubuntu', results.ubuntu || 'unknown');
core.setOutput('windows', results.windows || 'unknown');
core.setOutput('macos', results.macos || 'unknown');
- name: Fetch base branch coverage
id: base-coverage
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
const fs = require('fs');
const path = require('path');
const runs = await github.rest.actions.listWorkflowRuns({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'ci.yml',
branch: 'main',
status: 'success',
per_page: 1,
});
if (runs.data.workflow_runs.length === 0) {
core.setOutput('found', 'false');
return;
}
const mainRunId = runs.data.workflow_runs[0].id;
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: mainRunId,
});
const testReports = artifacts.data.artifacts.find(a => a.name === 'test-reports');
if (!testReports) {
core.setOutput('found', 'false');
return;
}
const zip = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: testReports.id,
archive_format: 'zip',
});
const dest = path.join(process.env.RUNNER_TEMP, 'base-coverage');
fs.mkdirSync(dest, { recursive: true });
fs.writeFileSync(path.join(dest, 'base.zip'), Buffer.from(zip.data));
core.setOutput('found', 'true');
core.setOutput('dir', dest);
- name: Extract base coverage
if: steps.base-coverage.outputs.found == 'true'
shell: bash
run: |
cd "${{ steps.base-coverage.outputs.dir }}"
unzip -o base.zip -d base
- name: Build and post report
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
env:
PR_NUMBER: ${{ steps.meta.outputs.pr-number }}
QUALITY: ${{ steps.meta.outputs.quality }}
TESTS: ${{ steps.meta.outputs.tests }}
UBUNTU: ${{ steps.jobs.outputs.ubuntu }}
WINDOWS: ${{ steps.jobs.outputs.windows }}
MACOS: ${{ steps.jobs.outputs.macos }}
BASE_FOUND: ${{ steps.base-coverage.outputs.found }}
BASE_DIR: ${{ steps.base-coverage.outputs.dir }}
RUN_ID: ${{ github.event.workflow_run.id }}
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
with:
script: |
const fs = require('fs');
const path = require('path');
const icon = (s) => ({ success: '✅', failure: '❌', cancelled: '⏭️' }[s] || '❓');
const temp = process.env.RUNNER_TEMP;
// ── Read coverage ──
function readCov(dir) {
const out = { stmts: 'N/A', branch: 'N/A', funcs: 'N/A', lines: 'N/A',
stmtsCov: '', branchCov: '', funcsCov: '', linesCov: '' };
try {
const files = require('child_process')
.execSync(`find "${dir}" -name coverage-summary.json -type f`, { encoding: 'utf8' })
.trim().split('\n').filter(Boolean);
if (!files.length) return out;
const d = JSON.parse(fs.readFileSync(files[0], 'utf8')).total;
out.stmts = d.statements.pct; out.branch = d.branches.pct;
out.funcs = d.functions.pct; out.lines = d.lines.pct;
out.stmtsCov = `${d.statements.covered}/${d.statements.total}`;
out.branchCov = `${d.branches.covered}/${d.branches.total}`;
out.funcsCov = `${d.functions.covered}/${d.functions.total}`;
out.linesCov = `${d.lines.covered}/${d.lines.total}`;
} catch {}
return out;
}
const cov = readCov(path.join(temp, 'test-reports'));
const base = process.env.BASE_FOUND === 'true'
? readCov(path.join(process.env.BASE_DIR, 'base'))
: { stmts: 'N/A', branch: 'N/A', funcs: 'N/A', lines: 'N/A' };
// ── Read test results ──
let total = 0, passed = 0, failed = 0, skipped = 0, suites = 0, duration = '0s';
let skippedTests = [];
try {
const files = require('child_process')
.execSync(`find "${path.join(temp, 'test-reports')}" -name test-results.json -type f`, { encoding: 'utf8' })
.trim().split('\n').filter(Boolean);
if (files.length) {
const r = JSON.parse(fs.readFileSync(files[0], 'utf8'));
total = r.numTotalTests || 0;
passed = r.numPassedTests || 0;
failed = r.numFailedTests || 0;
skipped = r.numPendingTests || 0;
suites = r.numTotalTestSuites || 0;
const durS = Math.floor((Math.max(...r.testResults.map(t => t.endTime)) - r.startTime) / 1000);
duration = durS >= 60 ? `${Math.floor(durS / 60)}m ${durS % 60}s` : `${durS}s`;
// Collect skipped test names
for (const suite of r.testResults) {
for (const t of (suite.assertionResults || [])) {
if (t.status === 'pending' || t.status === 'skipped') {
skippedTests.push(`- ${t.ancestorTitles.join(' > ')} > ${t.title}`);
}
}
}
}
} catch {}
// ── Coverage delta ──
function delta(pct, basePct) {
if (pct === 'N/A' || basePct === 'N/A') return '—';
const d = (pct - basePct).toFixed(1);
const dNum = parseFloat(d);
if (dNum > 0) return `📈 +${d}%`;
if (dNum < 0) return `📉 ${d}%`;
return '=';
}
// ── Build markdown ──
const { PR_NUMBER, QUALITY, TESTS, UBUNTU, WINDOWS, MACOS, RUN_ID, HEAD_SHA } = process.env;
const prNumber = parseInt(PR_NUMBER, 10);
const overall = (QUALITY === 'success' && TESTS === 'success')
? '✅ **All checks passed**' : '❌ **Some checks failed**';
const sha = HEAD_SHA.slice(0, 7);
let body = `## CI Report\n\n${overall}   \`${sha}\`\n\n`;
body += `### Pipeline\n\n`;
body += `| Stage | Status | Ubuntu | Windows | macOS |\n`;
body += `|-------|--------|--------|---------|-------|\n`;
body += `| Typecheck | ${icon(QUALITY)} \`${QUALITY}\` | — | — | — |\n`;
body += `| Tests | ${icon(TESTS)} \`${TESTS}\` | ${icon(UBUNTU)} | ${icon(WINDOWS)} | ${icon(MACOS)} |\n\n`;
if (total > 0) {
body += `### Tests\n\n`;
body += `| Metric | Value |\n|--------|-------|\n`;
body += `| Total | **${total}** |\n`;
body += `| Passed | **${passed}** |\n`;
if (failed > 0) body += `| Failed | **${failed}** |\n`;
if (skipped > 0) body += `| Skipped | ${skipped} |\n`;
body += `| Files | ${suites} |\n`;
body += `| Duration | ${duration} |\n\n`;
if (failed === 0) {
body += `✅ All **${passed}** tests passed across **${suites}** files\n`;
} else {
body += `❌ **${failed}** failed / **${passed}** passed\n`;
}
if (skippedTests.length > 0) {
body += `\n<details>\n<summary>${skipped} test(s) skipped</summary>\n\n`;
body += skippedTests.join('\n') + '\n\n</details>\n';
}
body += '\n';
}
if (cov.stmts !== 'N/A') {
body += `### Coverage\n\n`;
body += `| Metric | Coverage | Covered | Base (main) | Delta |\n`;
body += `|--------|----------|---------|-------------|-------|\n`;
body += `| Statements | **${cov.stmts}%** | ${cov.stmtsCov} | ${base.stmts}% | ${delta(cov.stmts, base.stmts)} |\n`;
body += `| Branches | **${cov.branch}%** | ${cov.branchCov} | ${base.branch}% | ${delta(cov.branch, base.branch)} |\n`;
body += `| Functions | **${cov.funcs}%** | ${cov.funcsCov} | ${base.funcs}% | ${delta(cov.funcs, base.funcs)} |\n`;
body += `| Lines | **${cov.lines}%** | ${cov.linesCov} | ${base.lines}% | ${delta(cov.lines, base.lines)} |\n\n`;
} else {
const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${RUN_ID}`;
body += `### Coverage\n\n⚠️ Coverage data unavailable — check the [test job](${runUrl}) for details.\n\n`;
}
const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${RUN_ID}`;
body += `---\n<sub>📋 [Full run](${runUrl}) · Coverage from Ubuntu · Generated by CI</sub>`;
// ── Post sticky comment ──
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
per_page: 100,
direction: 'desc',
});
const marker = '<!-- ci-report -->';
const existing = comments.find(c => c.body?.includes(marker));
const fullBody = marker + '\n' + body;
if (existing) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id,
body: fullBody,
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: fullBody,
});
}
================================================
FILE: .github/workflows/ci-tests.yml
================================================
name: Tests
on:
workflow_call:
jobs:
tests:
name: ubuntu / coverage
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: ./.github/actions/setup-gitnexus
with:
build: 'true'
- name: Run all tests with coverage
run: >-
npx vitest run
--reporter=default
--reporter=json
--outputFile=test-results.json
--coverage
--coverage.reporter=json-summary
--coverage.reporter=json
--coverage.reporter=text
--coverage.thresholdAutoUpdate=false
--coverage.reportOnFailure=true
working-directory: gitnexus
- name: Upload test reports
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: test-reports
path: |
gitnexus/coverage/coverage-summary.json
gitnexus/coverage/coverage-final.json
gitnexus/test-results.json
retention-days: 5
cross-platform:
name: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# Ubuntu already covered by the coverage job above
os: [windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 25
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: ./.github/actions/setup-gitnexus
with:
build: 'true'
- run: npx vitest run
working-directory: gitnexus
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
push:
branches: [main]
paths-ignore: ['**.md', 'docs/**', 'LICENSE']
pull_request:
branches: [main]
paths-ignore: ['**.md', 'docs/**', 'LICENSE']
workflow_call:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
# ── Reusable workflow orchestration ─────────────────────────────────
# Each concern lives in its own workflow file for maintainability:
# ci-quality.yml — typecheck (tsc --noEmit)
# ci-tests.yml — all tests with coverage (ubuntu) + cross-platform
# ci-report.yml — PR comment (workflow_run trigger for fork write access)
jobs:
quality:
uses: ./.github/workflows/ci-quality.yml
permissions:
contents: read
tests:
uses: ./.github/workflows/ci-tests.yml
permissions:
contents: read
# ── Unified CI gate ──────────────────────────────────────────────
# Single required check for branch protection.
ci-status:
name: CI Gate
needs: [quality, tests]
if: always()
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Check all jobs passed
shell: bash
env:
QUALITY: ${{ needs.quality.result }}
TESTS: ${{ needs.tests.result }}
run: |
echo "Quality: $QUALITY"
echo "Tests: $TESTS"
if [[ "$QUALITY" != "success" ]] ||
[[ "$TESTS" != "success" ]]; then
echo "::error::One or more CI jobs failed"
exit 1
fi
# ── PR metadata for ci-report.yml ────────────────────────────────
# Saves PR number and job results so the workflow_run-triggered
# report can post comments with a write token (works for forks).
save-pr-meta:
name: Save PR Metadata
if: always() && github.event_name == 'pull_request'
needs: [quality, tests]
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Write PR metadata
shell: bash
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
QUALITY: ${{ needs.quality.result }}
TESTS: ${{ needs.tests.result }}
run: |
mkdir -p pr-meta
echo "$PR_NUMBER" > pr-meta/pr-number
echo "$QUALITY" > pr-meta/quality-result
echo "$TESTS" > pr-meta/tests-result
- name: Upload PR metadata
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: pr-meta
path: pr-meta/
retention-days: 1
================================================
FILE: .github/workflows/claude-code-review.yml
================================================
name: Claude Code Review
# Uses pull_request_target so the workflow runs as defined on the default branch,
# which allows access to secrets for posting review comments on fork PRs.
# SECURITY: The checkout pins the fork's HEAD SHA (not the branch name) to
# prevent TOCTOU races (force-push between trigger and checkout). The
# claude-code-action sandboxes execution — it does NOT run arbitrary code
# from the checked-out source.
on:
# Trigger only when explicitly requested:
# - Add the "claude-review" label to a PR, OR
# - Comment "@claude" or "/review" on a PR
pull_request_target:
types: [labeled]
issue_comment:
types: [created]
# Serialize per-PR to avoid racing review comments.
concurrency:
group: claude-review-${{ github.event.issue.number || github.event.pull_request.number }}
cancel-in-progress: false
jobs:
claude-review:
# Run only when:
# 1. The "claude-review" label is added to a non-draft PR by a trusted contributor, OR
# 2. A trusted contributor comments "@claude" or "/review" on a PR
if: |
(
github.event_name == 'pull_request_target' &&
github.event.label.name == 'claude-review' &&
github.event.pull_request.draft == false &&
(github.event.pull_request.author_association == 'OWNER' ||
github.event.pull_request.author_association == 'MEMBER' ||
github.event.pull_request.author_association == 'COLLABORATOR')
) ||
(
github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
(contains(github.event.comment.body, '@claude') ||
contains(github.event.comment.body, '/review')) &&
(github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'MEMBER' ||
github.event.comment.author_association == 'COLLABORATOR')
)
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
pull-requests: write
issues: read
id-token: write
steps:
# For issue_comment triggers, resolve the PR number, head SHA, and fork repo
- name: Resolve PR context
id: pr
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
let pr;
if (context.eventName === 'issue_comment') {
const resp = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.issue.number,
});
pr = resp.data;
} else {
pr = context.payload.pull_request;
}
core.setOutput('number', pr.number);
core.setOutput('sha', pr.head.sha);
core.setOutput('repo', pr.head.repo.full_name);
core.setOutput('branch', pr.head.ref);
- name: Checkout PR head
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
repository: ${{ steps.pr.outputs.repo }}
ref: ${{ steps.pr.outputs.sha }}
fetch-depth: 1
- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@9469d113c6afd29550c402740f22d1a97dd1209b # v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
github_token: ${{ secrets.GITHUB_TOKEN }}
allowed_non_write_users: '*'
show_full_output: true
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
plugins: 'code-review@claude-code-plugins'
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ steps.pr.outputs.number }}'
================================================
FILE: .github/workflows/claude.yml
================================================
name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
# Serialize per-PR/issue to avoid racing comments.
concurrency:
group: claude-code-${{ github.event.issue.number || github.event.pull_request.number || github.event.issue.id }}
cancel-in-progress: false
jobs:
claude:
if: |
(
github.event_name == 'issue_comment' &&
contains(github.event.comment.body, '@claude') &&
(github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'MEMBER' ||
github.event.comment.author_association == 'COLLABORATOR')
) ||
(
github.event_name == 'pull_request_review_comment' &&
contains(github.event.comment.body, '@claude') &&
(github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'MEMBER' ||
github.event.comment.author_association == 'COLLABORATOR')
) ||
(
github.event_name == 'pull_request_review' &&
contains(github.event.review.body, '@claude') &&
(github.event.review.author_association == 'OWNER' ||
github.event.review.author_association == 'MEMBER' ||
github.event.review.author_association == 'COLLABORATOR')
) ||
(
github.event_name == 'issues' &&
(contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')) &&
(github.event.issue.author_association == 'OWNER' ||
github.event.issue.author_association == 'MEMBER' ||
github.event.issue.author_association == 'COLLABORATOR')
)
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
pull-requests: write
issues: write
id-token: write
actions: read # required for Claude to read CI results on PRs
steps:
# For PR-related triggers, resolve the fork repo so we can checkout correctly.
- name: Resolve PR context
id: pr
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
// Determine if this event is PR-related
let prNumber = null;
if (context.eventName === 'issue_comment' && context.payload.issue.pull_request) {
prNumber = context.payload.issue.number;
} else if (context.eventName === 'pull_request_review_comment') {
prNumber = context.payload.pull_request.number;
} else if (context.eventName === 'pull_request_review') {
prNumber = context.payload.pull_request.number;
}
if (!prNumber) {
core.setOutput('is_pr', 'false');
return;
}
const resp = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
const pr = resp.data;
core.setOutput('is_pr', 'true');
core.setOutput('number', String(prNumber));
core.setOutput('sha', pr.head.sha);
core.setOutput('repo', pr.head.repo.full_name);
core.setOutput('branch', pr.head.ref);
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
repository: ${{ steps.pr.outputs.is_pr == 'true' && steps.pr.outputs.repo || github.repository }}
ref: ${{ steps.pr.outputs.is_pr == 'true' && steps.pr.outputs.sha || '' }}
fetch-depth: 1
- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@9469d113c6afd29550c402740f22d1a97dd1209b # v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
github_token: ${{ secrets.GITHUB_TOKEN }}
allowed_non_write_users: '*'
show_full_output: true
# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish to npm
on:
push:
tags:
- 'v*'
# No workflow-level permissions — scoped per job below.
jobs:
ci:
uses: ./.github/workflows/ci.yml
permissions:
contents: read
actions: read
pull-requests: write
publish:
needs: ci
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20
registry-url: https://registry.npmjs.org
cache: npm
cache-dependency-path: gitnexus/package-lock.json
- run: npm ci
working-directory: gitnexus
- name: Verify version consistency
shell: bash
run: |
TAG_VERSION="${GITHUB_REF#refs/tags/v}"
if ! [[ "$TAG_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
echo "::error::Tag does not follow semver: v$TAG_VERSION"
exit 1
fi
PKG_VERSION=$(node -p "require('./package.json').version")
if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then
echo "::error::Tag version (v$TAG_VERSION) does not match package.json version ($PKG_VERSION)"
exit 1
fi
echo "Version verified: $PKG_VERSION"
working-directory: gitnexus
- name: Build
run: npm run build
working-directory: gitnexus
- name: Dry-run publish
run: npm publish --dry-run
working-directory: gitnexus
- name: Publish to npm
run: npm publish --provenance --access public
working-directory: gitnexus
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Create GitHub Release
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2
with:
generate_release_notes: true
================================================
FILE: .gitignore
================================================
# Dependencies
node_modules/
# Build output
dist/
# TypeScript build info
*.tsbuildinfo
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
.claude/settings.local.json
# Environment variables
.env
.env.local
.env.*.local
# Logs
*.log
npm-debug.log*
# Testing
coverage/
# Misc
*.local
.vercel
.env*.local
.gitnexus
.claude/settings.local.json
# Claude Code worktrees
.claude/worktrees/
# Claude code skills
.claude/skills/generated/
# Assets (screenshots, images)
assets/
# Generated files (should not be indexed)
repomix-output*
# Design docs (local only)
docs/plans/
gitnexus/test/fixtures/mini-repo/*.md
gitnexus/test/fixtures/mini-repo/.claude
gitnexus/test/fixtures/mini-repo/.gitignore
# Ignore csharp generated obj and bin folders
gitnexus/test/fixtures/lang-resolution/**/obj
gitnexus/test/fixtures/lang-resolution/**/bin
GitNexus.sln
# Git worktrees
.worktrees/
================================================
FILE: .history/gitnexus/vitest.config_20260317171253.ts
================================================
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
globalSetup: ['test/global-setup.ts'],
include: ['test/**/*.test.ts'],
testTimeout: 30000,
hookTimeout: 120000,
pool: 'forks',
globals: true,
setupFiles: ['test/setup.ts'],
teardownTimeout: 3000,
dangerouslyIgnoreUnhandledErrors: true, // LadybugDB N-API destructor segfaults on fork exit — not a test failure
coverage: {
provider: 'v8',
include: ['src/**/*.ts'],
exclude: [
'src/cli/index.ts', // CLI entry point (commander wiring)
'src/server/**', // HTTP server (requires network)
'src/core/wiki/**', // Wiki generation (requires LLM)
],
// Auto-ratchet: vitest bumps thresholds when coverage exceeds them.
// CI will fail if a PR drops below these floors.
thresholds: {
statements: 26,
branches: 23,
functions: 28,
lines: 27,
autoUpdate: true,
},
},
},
});
================================================
FILE: .mcp.json
================================================
{
"mcpServers": {
"gitnexus": {
"type": "stdio",
"command": "npx",
"args": ["-y", "gitnexus@latest", "mcp"]
}
}
}
================================================
FILE: .sisyphus/drafts/gitnexus-brainstorming.md
================================================
# Draft: Gitnexus Brainstorming - Clustering & Process Maps
## Initial Context
- Project: **GitnexusV2**
- Structure:
- `gitnexus/` (Likely the core application)
- `gitnexus-mcp/` (Likely a Model Context Protocol server)
- Goal: Make it accurate and usable for smaller/dumber models.
- Current Focus: Implementing **Clustering** and **Process Maps**.
## Findings
- **Clustering**: Found `gitnexus/src/core/ingestion/cluster-enricher.ts`.
- **Process Maps**: No files matched `*process*map*` yet. Searching content next.
## Open Questions
- How is "process map" defined in this context? (Graph, mermaid diagram, flowchart?)
- What is the input for clustering? (Code chunks, files, commits?)
- What is the intended output for "smaller models"? (Simplified context, summaries?)
================================================
FILE: .sisyphus/drafts/noodlbox-comparison.md
================================================
# Draft: Gitnexus vs Noodlbox Strategy
## Objectives
- Understand GitnexusV2 current state and goals.
- Analyze Noodlbox capabilities from provided URL.
- Compare features, architecture, and value proposition.
- Provide strategic views and recommendations.
## Research Findings
- [GitnexusV2]: Zero-server, browser-native (WASM), KuzuDB based. Graph + Vector hybrid search.
- [Noodlbox]: CLI-first, heavy install. Has "Session Hooks" and "Search Hooks" via plugins/CLI.
## Comparison Points
- **Core Philosophy**: Both bet on "Knowledge Graph + MCP" as the future. Noodlbox validates Gitnexus's direction.
- **Architecture**:
- *Noodlbox*: CLI/Binary based. Likely local server management.
- *Gitnexus*: Zero-server, Browser-native (WASM). Lower friction, higher privacy.
- **Features**:
- *Communities/Processes*: Both have them. Noodlbox uses them for "context injection". Gitnexus uses them for "visual exploration + query".
- *Impact Analysis*: Noodlbox has polished workflows (e.g., `detect_impact staged`). Gitnexus has the engine (`blastRadius`) but maybe not the specific workflow wrappers yet.
- **UX/Integration**:
- *Noodlbox*: "Hooks" (Session/Search) are a killer feature. Proactively injecting context into the agent's session.
- *Gitnexus*: Powerful tools, but relies on agent *pulling* data?
## Strategic Views
1. **Validation**: The market direction is confirmed. You are building the right thing.
2. **differentiation**: Lean into "Zero-Setup / Browser-Native". Noodlbox requires `noodl init` and CLI handling. Gitnexus could just *be*.
3. **Opportunity**: Steal the "Session/Search Hooks" pattern. Make the agent smarter *automatically* without the user asking "check impact".
4. **Workflow Polish**: Noodlbox's `/detect_impact staged` is a great specific use case. Gitnexus should wrap `blastRadius` into similar concrete workflows.
## Technical Feasibility (Interception)
- **Cursor**: Use `.cursorrules` to "shadow" default tools. Instruct agent to ALWAYS use `gitnexus_search` instead of `grep`.
- **Claude Code**: Likely uses a private plugin API for `PreToolUse`. We can't match this exactly without an official plugin, but we can approximate it with strong prompt instructions in `AGENTS.md`.
- **MCP Shadowing**: Define tools with names that conflict (e.g., `grep`)? No, unsafe. Better to use "Virtual Hooks" via system prompt instructions.
================================================
FILE: .windsurfrules
================================================
# AI Agent Rules
Follow .gitnexus/RULES.md for all project context and coding guidelines.
This project uses GitNexus MCP for code intelligence. See .gitnexus/RULES.md for available tools and best practices.
================================================
FILE: AGENTS.md
================================================
<!-- gitnexus:start -->
# GitNexus — Code Intelligence
This project is indexed by GitNexus as **GitNexus** (2184 symbols, 5245 relationships, 167 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first.
## Always Do
- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows.
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`.
## When Debugging
1. `gitnexus_query({query: "<error or symptom>"})` — find execution flows related to the issue
2. `gitnexus_context({name: "<suspect function>"})` — see all callers, callees, and process participation
3. `READ gitnexus://repo/GitNexus/process/{processName}` — trace the full execution flow step by step
4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed
## When Refactoring
- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`.
- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code.
- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed.
## Never Do
- NEVER edit a function, class, or method without first running `gitnexus_impact` on it.
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph.
- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope.
## Tools Quick Reference
| Tool | When to use | Command |
|------|-------------|---------|
| `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` |
| `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` |
| `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` |
| `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` |
| `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` |
| `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` |
## Impact Risk Levels
| Depth | Meaning | Action |
|-------|---------|--------|
| d=1 | WILL BREAK — direct callers/importers | MUST update these |
| d=2 | LIKELY AFFECTED — indirect deps | Should test |
| d=3 | MAY NEED TESTING — transitive | Test if critical path |
## Resources
| Resource | Use for |
|----------|---------|
| `gitnexus://repo/GitNexus/context` | Codebase overview, check index freshness |
| `gitnexus://repo/GitNexus/clusters` | All functional areas |
| `gitnexus://repo/GitNexus/processes` | All execution flows |
| `gitnexus://repo/GitNexus/process/{name}` | Step-by-step execution trace |
## Self-Check Before Finishing
Before completing any code modification task, verify:
1. `gitnexus_impact` was run for all modified symbols
2. No HIGH/CRITICAL risk warnings were ignored
3. `gitnexus_detect_changes()` confirms changes match expected scope
4. All d=1 (WILL BREAK) dependents were updated
## Keeping the Index Fresh
After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it:
```bash
npx gitnexus analyze
```
If the index previously included embeddings, preserve them by adding `--embeddings`:
```bash
npx gitnexus analyze --embeddings
```
To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.**
> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`.
## CLI
| Task | Read this skill file |
|------|---------------------|
| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` |
| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` |
| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` |
| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` |
| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` |
| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` |
<!-- gitnexus:end -->
================================================
FILE: CHANGELOG.md
================================================
# Changelog
All notable changes to GitNexus will be documented in this file.
## [Unreleased]
### Changed
- Migrated from KuzuDB to LadybugDB v0.15 (`@ladybugdb/core`, `@ladybugdb/wasm-core`)
- Renamed all internal paths from `kuzu` to `lbug` (storage: `.gitnexus/kuzu` → `.gitnexus/lbug`)
- Added automatic cleanup of stale KuzuDB index files
- LadybugDB v0.15 requires explicit VECTOR extension loading for semantic search
## [1.4.0] - 2026-03-13
### Added
- **Language-aware symbol resolution engine** with 3-tier resolver: exact FQN → scope-walk → guarded fuzzy fallback that refuses ambiguous matches (#238) — @magyargergo
- **Method Resolution Order (MRO)** with 5 language-specific strategies: C++ leftmost-base, C#/Java class-over-interface, Python C3 linearization, Rust qualified syntax, default BFS (#238) — @magyargergo
- **Constructor & struct literal resolution** across all languages — `new Foo()`, `User{...}`, C# primary constructors, target-typed new (#238) — @magyargergo
- **Receiver-constrained resolution** using per-file TypeEnv — disambiguates `user.save()` vs `repo.save()` via `ownerId` matching (#238) — @magyargergo
- **Heritage & ownership edges** — HAS_METHOD, OVERRIDES, Go struct embedding, Swift extension heritage, method signatures (`parameterCount`, `returnType`) (#238) — @magyargergo
- **Language-specific resolver directory** (`resolvers/`) — extracted JVM, Go, C#, PHP, Rust resolvers from monolithic import-processor (#238) — @magyargergo
- **Type extractor directory** (`type-extractors/`) — per-language type binding extraction with `Record<SupportedLanguages, Handler>` + `satisfies` dispatch (#238) — @magyargergo
- **Export detection dispatch table** — compile-time exhaustive `Record` + `satisfies` pattern replacing switch/if chains (#238) — @magyargergo
- **Language config module** (`language-config.ts`) — centralized tsconfig, go.mod, composer.json, .csproj, Swift package config loaders (#238) — @magyargergo
- **Optional skill generation** via `npx gitnexus analyze --skills` — generates AI agent skills from KuzuDB knowledge graph (#171) — @zander-raycraft
- **First-class C# support** — sibling-based modifier scanning, record/delegate/property/field/event declaration types (#163, #170, #178 via #237) — @Alice523, @benny-yamagata, @jnMetaCode
- **C/C++ support fixes** — `.h` → C++ mapping, static-linkage export detection, qualified/parenthesized declarators, 48 entry point patterns (#163, #227 via #237) — @Alice523, @bitgineer
- **Rust support fixes** — sibling-based `visibility_modifier` scanning for `pub` detection (#227 via #237) — @bitgineer
- **Adaptive tree-sitter buffer sizing** — `Math.min(Math.max(contentLength * 2, 512KB), 32MB)` (#216 via #237) — @JasonOA888
- **Call expression matching** in tree-sitter queries (#234 via #237) — @ex-nihilo-jg
- **DeepSeek model configurations** (#217) — @JasonOA888
- 282+ new unit tests, 178 integration resolver tests across 9 languages, 53 test files, 1146 total tests passing
### Fixed
- Skip unavailable native Swift parsers in sequential ingestion (#188) — @Gujiassh
- Heritage heuristic language-gated — no longer applies class/interface rules to wrong languages (#238) — @magyargergo
- C# `base_list` distinguishes EXTENDS vs IMPLEMENTS via symbol table + `I[A-Z]` heuristic (#238) — @magyargergo
- Go `qualified_type` (`models.User`) correctly unwrapped in TypeEnv (#238) — @magyargergo
- Global tier no longer blocks resolution when kind/arity filtering can narrow to 1 candidate (#238) — @magyargergo
### Changed
- `import-processor.ts` reduced from 1412 → 711 lines (50% reduction) via resolver and config extraction (#238) — @magyargergo
- `type-env.ts` reduced from 635 → ~125 lines via type-extractor extraction (#238) — @magyargergo
- CI/CD workflows hardened with security fixes and fork PR support (#222, #225) — @magyargergo
## [1.3.11] - 2026-03-08
### Security
- Fix FTS Cypher injection by escaping backslashes in search queries (#209) — @magyargergo
### Added
- Auto-reindex hook that runs `gitnexus analyze` after commits and merges, with automatic embeddings preservation (#205) — @L1nusB
- 968 integration tests (up from ~840) covering unhappy paths across search, enrichment, CLI, pipeline, worker pool, and KuzuDB (#209) — @magyargergo
- Coverage auto-ratcheting so thresholds bump automatically on CI (#209) — @magyargergo
- Rich CI PR report with coverage bars, test counts, and threshold tracking (#209) — @magyargergo
- Modular CI workflow architecture with separate unit-test, integration-test, and orchestrator jobs (#209) — @magyargergo
### Fixed
- KuzuDB native addon crashes on Linux/macOS by running integration tests in isolated vitest processes with `--pool=forks` (#209) — @magyargergo
- Worker pool `MODULE_NOT_FOUND` crash when script path is invalid (#209) — @magyargergo
### Changed
- Added macOS to the cross-platform CI test matrix (#208) — @magyargergo
## [1.3.10] - 2026-03-07
### Security
- **MCP transport buffer cap**: Added 10 MB `MAX_BUFFER_SIZE` limit to prevent out-of-memory attacks via oversized `Content-Length` headers or unbounded newline-delimited input
- **Content-Length validation**: Reject `Content-Length` values exceeding the buffer cap before allocating memory
- **Stack overflow prevention**: Replaced recursive `readNewlineMessage` with iterative loop to prevent stack overflow from consecutive empty lines
- **Ambiguous prefix hardening**: Tightened `looksLikeContentLength` to require 14+ bytes before matching, preventing false framing detection on short input
- **Closed transport guard**: `send()` now rejects with a clear error when called after `close()`, with proper write-error propagation
### Added
- **Dual-framing MCP transport** (`CompatibleStdioServerTransport`): Auto-detects Content-Length (Codex/OpenCode) and newline-delimited JSON (Cursor/Claude Code) framing on the first message, responds in the same format (#207)
- **Lazy CLI module loading**: All CLI subcommands now use `createLazyAction()` to defer heavy imports (tree-sitter, ONNX, KuzuDB) until invocation, significantly improving `gitnexus mcp` startup time (#207)
- **Type-safe lazy actions**: `createLazyAction` uses constrained generics to validate export names against module types at compile time
- **Regression test suite**: 13 unit tests covering transport framing, security hardening, buffer limits, and lazy action loading
### Fixed
- **CALLS edge sourceId alignment**: `findEnclosingFunctionId` now generates IDs with `:startLine` suffix matching node creation format, fixing process detector finding 0 entry points (#194)
- **LRU cache zero maxSize crash**: Guard `createASTCache` against `maxSize=0` when repos have no parseable files (#144)
### Changed
- Transport constructor accepts `NodeJS.ReadableStream` / `NodeJS.WritableStream` (widened from concrete `ReadStream`/`WriteStream`)
- `processReadBuffer` simplified to break on first error instead of stale-buffer retry loop
## [1.3.9] - 2026-03-06
### Fixed
- Aligned CALLS edge sourceId with node ID format in parse worker (#194)
## [1.3.8] - 2026-03-05
### Fixed
- Force-exit after analyze to prevent KuzuDB native cleanup hang (#192)
================================================
FILE: CLAUDE.md
================================================
<!-- gitnexus:start -->
# GitNexus — Code Intelligence
This project is indexed by GitNexus as **GitNexus** (2184 symbols, 5245 relationships, 167 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first.
## Always Do
- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows.
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`.
## When Debugging
1. `gitnexus_query({query: "<error or symptom>"})` — find execution flows related to the issue
2. `gitnexus_context({name: "<suspect function>"})` — see all callers, callees, and process participation
3. `READ gitnexus://repo/GitNexus/process/{processName}` — trace the full execution flow step by step
4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed
## When Refactoring
- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`.
- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code.
- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed.
## Never Do
- NEVER edit a function, class, or method without first running `gitnexus_impact` on it.
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph.
- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope.
## Tools Quick Reference
| Tool | When to use | Command |
|------|-------------|---------|
| `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` |
| `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` |
| `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` |
| `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` |
| `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` |
| `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` |
## Impact Risk Levels
| Depth | Meaning | Action |
|-------|---------|--------|
| d=1 | WILL BREAK — direct callers/importers | MUST update these |
| d=2 | LIKELY AFFECTED — indirect deps | Should test |
| d=3 | MAY NEED TESTING — transitive | Test if critical path |
## Resources
| Resource | Use for |
|----------|---------|
| `gitnexus://repo/GitNexus/context` | Codebase overview, check index freshness |
| `gitnexus://repo/GitNexus/clusters` | All functional areas |
| `gitnexus://repo/GitNexus/processes` | All execution flows |
| `gitnexus://repo/GitNexus/process/{name}` | Step-by-step execution trace |
## Self-Check Before Finishing
Before completing any code modification task, verify:
1. `gitnexus_impact` was run for all modified symbols
2. No HIGH/CRITICAL risk warnings were ignored
3. `gitnexus_detect_changes()` confirms changes match expected scope
4. All d=1 (WILL BREAK) dependents were updated
## Keeping the Index Fresh
After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it:
```bash
npx gitnexus analyze
```
If the index previously included embeddings, preserve them by adding `--embeddings`:
```bash
npx gitnexus analyze --embeddings
```
To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.**
> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`.
## CLI
| Task | Read this skill file |
|------|---------------------|
| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` |
| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` |
| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` |
| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` |
| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` |
| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` |
<!-- gitnexus:end -->
================================================
FILE: LICENSE
================================================
PolyForm Noncommercial License 1.0.0
<https://polyformproject.org/licenses/noncommercial/1.0.0>
## Acceptance
In order to get any license under these terms, you must agree to them as both strict obligations and conditions to all your licenses.
## Copyright License
The licensor grants you a copyright license for the software to do everything you might do with the software that would otherwise infringe the licensor's copyright in it for any permitted purpose. However, you may only distribute the software according to [Distribution License](#distribution-license) and make changes or new works based on the software according to [Changes and New Works License](#changes-and-new-works-license).
## Distribution License
The licensor grants you an additional copyright license to distribute copies of the software. Your license to distribute covers distributing the software with changes and new works permitted by [Changes and New Works License](#changes-and-new-works-license).
## Notices
You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms or the URL for them above, as well as copies of any plain-text lines beginning with `Required Notice:` that the licensor provided with the software. For example:
> Required Notice: Copyright Abhigyan Patwari (https://github.com/abhigyanpatwari/GitNexus)
## Changes and New Works License
The licensor grants you an additional copyright license to make changes and new works based on the software for any permitted purpose.
## Patent License
The licensor grants you a patent license for the software that covers patent claims the licensor can license, or becomes able to license, that you would infringe by using the software.
## Noncommercial Purposes
Any noncommercial purpose is a permitted purpose.
## Personal Uses
Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, is use for a permitted purpose.
## Noncommercial Organizations
Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution is use for a permitted purpose regardless of the source of funding or obligations resulting from the funding.
## Fair Use
You may have "fair use" rights for the software under the law. These terms do not limit them.
## No Other Rights
These terms do not allow you to sublicense or transfer any of your licenses to anyone else, or prevent the licensor from granting licenses to anyone else. These terms do not imply any other licenses.
## Patent Defense
If you make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
## Violations
The first time you are notified in writing that you have violated any of these terms, or done anything with the software not covered by your licenses, your licenses can nonetheless continue if you come into full compliance with these terms, and take practical steps to correct past violations, within 32 days of receiving notice. Otherwise, all your licenses end immediately.
## No Liability
***As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.***
## Definitions
The **licensor** is the individual or entity offering these terms, and the **software** is the software the licensor makes available under these terms.
**You** refers to the individual or entity agreeing to these terms.
**Your company** is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. **Control** means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
**Your licenses** are all the licenses granted to you for the software under these terms.
**Use** means anything you do with the software requiring one of your licenses.
================================================
FILE: README.md
================================================
# GitNexus
⚠️ Important Notice:** GitNexus has NO official cryptocurrency, token, or coin. Any token/coin using the GitNexus name on Pump.fun or any other platform is **not affiliated with, endorsed by, or created by** this project or its maintainers. Do not purchase any cryptocurrency claiming association with GitNexus.
<div align="center">
<a href="https://trendshift.io/repositories/19809" target="_blank">
<img src="https://trendshift.io/api/badge/repositories/19809" alt="abhigyanpatwari%2FGitNexus | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/>
</a>
<h2>Join the official Discord to discuss ideas, issues etc!</h2>
<a href="https://discord.gg/AAsRVT6fGb">
<img src="https://img.shields.io/discord/1477255801545429032?color=5865F2&logo=discord&logoColor=white" alt="Discord"/>
</a>
<a href="https://www.npmjs.com/package/gitnexus">
<img src="https://img.shields.io/npm/v/gitnexus.svg" alt="npm version"/>
</a>
<a href="https://polyformproject.org/licenses/noncommercial/1.0.0/">
<img src="https://img.shields.io/badge/License-PolyForm%20Noncommercial-blue.svg" alt="License: PolyForm Noncommercial"/>
</a>
</div>
**Building nervous system for agent context.**
Indexes any codebase into a knowledge graph — every dependency, call chain, cluster, and execution flow — then exposes it through smart tools so AI agents never miss code.
https://github.com/user-attachments/assets/172685ba-8e54-4ea7-9ad1-e31a3398da72
> *Like DeepWiki, but deeper.* DeepWiki helps you *understand* code. GitNexus lets you *analyze* it — because a knowledge graph tracks every relationship, not just descriptions.
**TL;DR:** The **Web UI** is a quick way to chat with any repo. The **CLI + MCP** is how you make your AI agent actually reliable — it gives Cursor, Claude Code, and friends a deep architectural view of your codebase so they stop missing dependencies, breaking call chains, and shipping blind edits. Even smaller models get full architectural clarity, making it compete with goliath models.
---
## Star History
[](https://www.star-history.com/#abhigyanpatwari/GitNexus&type=date&legend=top-left)
## Two Ways to Use GitNexus
| | **CLI + MCP** | **Web UI** |
| ----------------- | -------------------------------------------------------------- | ------------------------------------------------------------ |
| **What** | Index repos locally, connect AI agents via MCP | Visual graph explorer + AI chat in browser |
| **For** | Daily development with Cursor, Claude Code, Windsurf, OpenCode, Codex | Quick exploration, demos, one-off analysis |
| **Scale** | Full repos, any size | Limited by browser memory (~5k files), or unlimited via backend mode |
| **Install** | `npm install -g gitnexus` | No install —[gitnexus.vercel.app](https://gitnexus.vercel.app) |
| **Storage** | LadybugDB native (fast, persistent) | LadybugDB WASM (in-memory, per session) |
| **Parsing** | Tree-sitter native bindings | Tree-sitter WASM |
| **Privacy** | Everything local, no network | Everything in-browser, no server |
> **Bridge mode:** `gitnexus serve` connects the two — the web UI auto-detects the local server and can browse all your CLI-indexed repos without re-uploading or re-indexing.
---
## CLI + MCP (recommended)
The CLI indexes your repository and runs an MCP server that gives AI agents deep codebase awareness.
### Quick Start
```bash
# Index your repo (run from repo root)
npx gitnexus analyze
```
That's it. This indexes the codebase, installs agent skills, registers Claude Code hooks, and creates `AGENTS.md` / `CLAUDE.md` context files — all in one command.
To configure MCP for your editor, run `npx gitnexus setup` once — or set it up manually below.
### MCP Setup
`gitnexus setup` auto-detects your editors and writes the correct global MCP config. You only need to run it once.
### Editor Support
| Editor | MCP | Skills | Hooks (auto-augment) | Support |
| --------------------- | --- | ------ | -------------------- | -------------- |
| **Claude Code** | Yes | Yes | Yes (PreToolUse + PostToolUse) | **Full** |
| **Cursor** | Yes | Yes | — | MCP + Skills |
| **Windsurf** | Yes | — | — | MCP |
| **OpenCode** | Yes | Yes | — | MCP + Skills |
| **Codex** | Yes | — | — | MCP |
> **Claude Code** gets the deepest integration: MCP tools + agent skills + PreToolUse hooks that enrich searches with graph context + PostToolUse hooks that auto-reindex after commits.
### Community Integrations
| Agent | Install | Source |
|-------|---------|--------|
| [pi](https://pi.dev) | `pi install npm:pi-gitnexus` | [pi-gitnexus](https://github.com/tintinweb/pi-gitnexus) |
If you prefer manual configuration:
**Claude Code** (full support — MCP + skills + hooks):
```bash
claude mcp add gitnexus -- npx -y gitnexus@latest mcp
```
**Cursor** (`~/.cursor/mcp.json` — global, works for all projects):
```json
{
"mcpServers": {
"gitnexus": {
"command": "npx",
"args": ["-y", "gitnexus@latest", "mcp"]
}
}
}
```
**OpenCode** (`~/.config/opencode/config.json`):
```json
{
"mcp": {
"gitnexus": {
"command": "npx",
"args": ["-y", "gitnexus@latest", "mcp"]
}
}
}
```
**Codex** (`~/.codex/config.toml` for system scope, or `.codex/config.toml` for project scope):
```toml
[mcp_servers.gitnexus]
command = "npx"
args = ["-y", "gitnexus@latest", "mcp"]
```
### CLI Commands
```bash
gitnexus setup # Configure MCP for your editors (one-time)
gitnexus analyze [path] # Index a repository (or update stale index)
gitnexus analyze --force # Force full re-index
gitnexus analyze --skills # Generate repo-specific skill files from detected communities
gitnexus analyze --skip-embeddings # Skip embedding generation (faster)
gitnexus analyze --embeddings # Enable embedding generation (slower, better search)
gitnexus analyze --verbose # Log skipped files when parsers are unavailable
gitnexus mcp # Start MCP server (stdio) — serves all indexed repos
gitnexus serve # Start local HTTP server (multi-repo) for web UI connection
gitnexus list # List all indexed repositories
gitnexus status # Show index status for current repo
gitnexus clean # Delete index for current repo
gitnexus clean --all --force # Delete all indexes
gitnexus wiki [path] # Generate repository wiki from knowledge graph
gitnexus wiki --model <model> # Wiki with custom LLM model (default: gpt-4o-mini)
gitnexus wiki --base-url <url> # Wiki with custom LLM API base URL
```
### What Your AI Agent Gets
**7 tools** exposed via MCP:
| Tool | What It Does | `repo` Param |
| ------------------ | ----------------------------------------------------------------- | -------------- |
| `list_repos` | Discover all indexed repositories | — |
| `query` | Process-grouped hybrid search (BM25 + semantic + RRF) | Optional |
| `context` | 360-degree symbol view — categorized refs, process participation | Optional |
| `impact` | Blast radius analysis with depth grouping and confidence | Optional |
| `detect_changes` | Git-diff impact — maps changed lines to affected processes | Optional |
| `rename` | Multi-file coordinated rename with graph + text search | Optional |
| `cypher` | Raw Cypher graph queries | Optional |
> When only one repo is indexed, the `repo` parameter is optional. With multiple repos, specify which one: `query({query: "auth", repo: "my-app"})`.
**Resources** for instant context:
| Resource | Purpose |
| ----------------------------------------- | ---------------------------------------------------- |
| `gitnexus://repos` | List all indexed repositories (read this first) |
| `gitnexus://repo/{name}/context` | Codebase stats, staleness check, and available tools |
| `gitnexus://repo/{name}/clusters` | All functional clusters with cohesion scores |
| `gitnexus://repo/{name}/cluster/{name}` | Cluster members and details |
| `gitnexus://repo/{name}/processes` | All execution flows |
| `gitnexus://repo/{name}/process/{name}` | Full process trace with steps |
| `gitnexus://repo/{name}/schema` | Graph schema for Cypher queries |
**2 MCP prompts** for guided workflows:
| Prompt | What It Does |
| ----------------- | ------------------------------------------------------------------------- |
| `detect_impact` | Pre-commit change analysis — scope, affected processes, risk level |
| `generate_map` | Architecture documentation from the knowledge graph with mermaid diagrams |
**4 agent skills** installed to `.claude/skills/` automatically:
- **Exploring** — Navigate unfamiliar code using the knowledge graph
- **Debugging** — Trace bugs through call chains
- **Impact Analysis** — Analyze blast radius before changes
- **Refactoring** — Plan safe refactors using dependency mapping
**Repo-specific skills** generated with `--skills`:
When you run `gitnexus analyze --skills`, GitNexus detects the functional areas of your codebase (via Leiden community detection) and generates a `SKILL.md` file for each one under `.claude/skills/generated/`. Each skill describes a module's key files, entry points, execution flows, and cross-area connections — so your AI agent gets targeted context for the exact area of code you're working in. Skills are regenerated on each `--skills` run to stay current with the codebase.
---
## Multi-Repo MCP Architecture
GitNexus uses a **global registry** so one MCP server can serve multiple indexed repos. No per-project MCP config needed — set it up once and it works everywhere.
```mermaid
flowchart TD
subgraph CLI [CLI Commands]
Setup["gitnexus setup"]
Analyze["gitnexus analyze"]
Clean["gitnexus clean"]
List["gitnexus list"]
end
subgraph Registry ["~/.gitnexus/"]
RegFile["registry.json"]
end
subgraph Repos [Project Repos]
RepoA[".gitnexus/ in repo A"]
RepoB[".gitnexus/ in repo B"]
end
subgraph MCP [MCP Server]
Server["server.ts"]
Backend["LocalBackend"]
Pool["Connection Pool"]
ConnA["LadybugDB conn A"]
ConnB["LadybugDB conn B"]
end
Setup -->|"writes global MCP config"| CursorConfig["~/.cursor/mcp.json"]
Analyze -->|"registers repo"| RegFile
Analyze -->|"stores index"| RepoA
Clean -->|"unregisters repo"| RegFile
List -->|"reads"| RegFile
Server -->|"reads registry"| RegFile
Server --> Backend
Backend --> Pool
Pool -->|"lazy open"| ConnA
Pool -->|"lazy open"| ConnB
ConnA -->|"queries"| RepoA
ConnB -->|"queries"| RepoB
```
**How it works:** Each `gitnexus analyze` stores the index in `.gitnexus/` inside the repo (portable, gitignored) and registers a pointer in `~/.gitnexus/registry.json`. When an AI agent starts, the MCP server reads the registry and can serve any indexed repo. LadybugDB connections are opened lazily on first query and evicted after 5 minutes of inactivity (max 5 concurrent). If only one repo is indexed, the `repo` parameter is optional on all tools — agents don't need to change anything.
---
## Web UI (browser-based)
A fully client-side graph explorer and AI chat. No server, no install — your code never leaves the browser.
**Try it now:** [gitnexus.vercel.app](https://gitnexus.vercel.app) — drag & drop a ZIP and start exploring.
<img width="2550" height="1343" alt="gitnexus_img" src="https://github.com/user-attachments/assets/cc5d637d-e0e5-48e6-93ff-5bcfdb929285" />
Or run locally:
```bash
git clone https://github.com/abhigyanpatwari/gitnexus.git
cd gitnexus/gitnexus-web
npm install
npm run dev
```
The web UI uses the same indexing pipeline as the CLI but runs entirely in WebAssembly (Tree-sitter WASM, LadybugDB WASM, in-browser embeddings). It's great for quick exploration but limited by browser memory for larger repos.
**Local Backend Mode:** Run `gitnexus serve` and open the web UI locally — it auto-detects the server and shows all your indexed repos, with full AI chat support. No need to re-upload or re-index. The agent's tools (Cypher queries, search, code navigation) route through the backend HTTP API automatically.
---
## The Problem GitNexus Solves
Tools like **Cursor**, **Claude Code**, **Cline**, **Roo Code**, and **Windsurf** are powerful — but they don't truly know your codebase structure.
**What happens:**
1. AI edits `UserService.validate()`
2. Doesn't know 47 functions depend on its return type
3. **Breaking changes ship**
### Traditional Graph RAG vs GitNexus
Traditional approaches give the LLM raw graph edges and hope it explores enough. GitNexus **precomputes structure at index time** — clustering, tracing, scoring — so tools return complete context in one call:
```mermaid
flowchart TB
subgraph Traditional["Traditional Graph RAG"]
direction TB
U1["User: What depends on UserService?"]
U1 --> LLM1["LLM receives raw graph"]
LLM1 --> Q1["Query 1: Find callers"]
Q1 --> Q2["Query 2: What files?"]
Q2 --> Q3["Query 3: Filter tests?"]
Q3 --> Q4["Query 4: High-risk?"]
Q4 --> OUT1["Answer after 4+ queries"]
end
subgraph GN["GitNexus Smart Tools"]
direction TB
U2["User: What depends on UserService?"]
U2 --> TOOL["impact UserService upstream"]
TOOL --> PRECOMP["Pre-structured response:
8 callers, 3 clusters, all 90%+ confidence"]
PRECOMP --> OUT2["Complete answer, 1 query"]
end
```
**Core innovation: Precomputed Relational Intelligence**
- **Reliability** — LLM can't miss context, it's already in the tool response
- **Token efficiency** — No 10-query chains to understand one function
- **Model democratization** — Smaller LLMs work because tools do the heavy lifting
---
## How It Works
GitNexus builds a complete knowledge graph of your codebase through a multi-phase indexing pipeline:
1. **Structure** — Walks the file tree and maps folder/file relationships
2. **Parsing** — Extracts functions, classes, methods, and interfaces using Tree-sitter ASTs
3. **Resolution** — Resolves imports, function calls, heritage, constructor inference, and `self`/`this` receiver types across files with language-aware logic
4. **Clustering** — Groups related symbols into functional communities
5. **Processes** — Traces execution flows from entry points through call chains
6. **Search** — Builds hybrid search indexes for fast retrieval
### Supported Languages
| Language | Imports | Named Bindings | Exports | Heritage | Type Annotations | Constructor Inference | Config | Frameworks | Entry Points |
|----------|---------|----------------|---------|----------|-----------------|---------------------|--------|------------|-------------|
| TypeScript | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| JavaScript | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ | ✓ | ✓ |
| Python | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Java | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ |
| Kotlin | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ |
| C# | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Go | ✓ | — | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Rust | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ |
| PHP | ✓ | ✓ | ✓ | — | ✓ | ✓ | ✓ | ✓ | ✓ |
| Ruby | ✓ | — | ✓ | ✓ | — | ✓ | — | ✓ | ✓ |
| Swift | — | — | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| C | — | — | ✓ | — | ✓ | ✓ | — | ✓ | ✓ |
| C++ | — | — | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ |
**Imports** — cross-file import resolution · **Named Bindings** — `import { X as Y }` / re-export tracking · **Exports** — public/exported symbol detection · **Heritage** — class inheritance, interfaces, mixins · **Type Annotations** — explicit type extraction for receiver resolution · **Constructor Inference** — infer receiver type from constructor calls (`self`/`this` resolution included for all languages) · **Config** — language toolchain config parsing (tsconfig, go.mod, etc.) · **Frameworks** — AST-based framework pattern detection · **Entry Points** — entry point scoring heuristics
---
## Tool Examples
### Impact Analysis
```
impact({target: "UserService", direction: "upstream", minConfidence: 0.8})
TARGET: Class UserService (src/services/user.ts)
UPSTREAM (what depends on this):
Depth 1 (WILL BREAK):
handleLogin [CALLS 90%] -> src/api/auth.ts:45
handleRegister [CALLS 90%] -> src/api/auth.ts:78
UserController [CALLS 85%] -> src/controllers/user.ts:12
Depth 2 (LIKELY AFFECTED):
authRouter [IMPORTS] -> src/routes/auth.ts
```
Options: `maxDepth`, `minConfidence`, `relationTypes` (`CALLS`, `IMPORTS`, `EXTENDS`, `IMPLEMENTS`), `includeTests`
### Process-Grouped Search
```
query({query: "authentication middleware"})
processes:
- summary: "LoginFlow"
priority: 0.042
symbol_count: 4
process_type: cross_community
step_count: 7
process_symbols:
- name: validateUser
type: Function
filePath: src/auth/validate.ts
process_id: proc_login
step_index: 2
definitions:
- name: AuthConfig
type: Interface
filePath: src/types/auth.ts
```
### Context (360-degree Symbol View)
```
context({name: "validateUser"})
symbol:
uid: "Function:validateUser"
kind: Function
filePath: src/auth/validate.ts
startLine: 15
incoming:
calls: [handleLogin, handleRegister, UserController]
imports: [authRouter]
outgoing:
calls: [checkPassword, createSession]
processes:
- name: LoginFlow (step 2/7)
- name: RegistrationFlow (step 3/5)
```
### Detect Changes (Pre-Commit)
```
detect_changes({scope: "all"})
summary:
changed_count: 12
affected_count: 3
changed_files: 4
risk_level: medium
changed_symbols: [validateUser, AuthService, ...]
affected_processes: [LoginFlow, RegistrationFlow, ...]
```
### Rename (Multi-File)
```
rename({symbol_name: "validateUser", new_name: "verifyUser", dry_run: true})
status: success
files_affected: 5
total_edits: 8
graph_edits: 6 (high confidence)
text_search_edits: 2 (review carefully)
changes: [...]
```
### Cypher Queries
```cypher
-- Find what calls auth functions with high confidence
MATCH (c:Community {heuristicLabel: 'Authentication'})<-[:CodeRelation {type: 'MEMBER_OF'}]-(fn)
MATCH (caller)-[r:CodeRelation {type: 'CALLS'}]->(fn)
WHERE r.confidence > 0.8
RETURN caller.name, fn.name, r.confidence
ORDER BY r.confidence DESC
```
---
## Wiki Generation
Generate LLM-powered documentation from your knowledge graph:
```bash
# Requires an LLM API key (OPENAI_API_KEY, etc.)
gitnexus wiki
# Use a custom model or provider
gitnexus wiki --model gpt-4o
gitnexus wiki --base-url https://api.anthropic.com/v1
# Force full regeneration
gitnexus wiki --force
```
The wiki generator reads the indexed graph structure, groups files into modules via LLM, generates per-module documentation pages, and creates an overview page — all with cross-references to the knowledge graph.
---
## Tech Stack
| Layer | CLI | Web |
| ------------------------- | ------------------------------------- | --------------------------------------- |
| **Runtime** | Node.js (native) | Browser (WASM) |
| **Parsing** | Tree-sitter native bindings | Tree-sitter WASM |
| **Database** | LadybugDB native | LadybugDB WASM |
| **Embeddings** | HuggingFace transformers.js (GPU/CPU) | transformers.js (WebGPU/WASM) |
| **Search** | BM25 + semantic + RRF | BM25 + semantic + RRF |
| **Agent Interface** | MCP (stdio) | LangChain ReAct agent |
| **Visualization** | — | Sigma.js + Graphology (WebGL) |
| **Frontend** | — | React 18, TypeScript, Vite, Tailwind v4 |
| **Clustering** | Graphology | Graphology |
| **Concurrency** | Worker threads + async | Web Workers + Comlink |
---
## Roadmap
### Actively Building
- [ ] **LLM Cluster Enrichment** — Semantic cluster names via LLM API
- [ ] **AST Decorator Detection** — Parse @Controller, @Get, etc.
- [ ] **Incremental Indexing** — Only re-index changed files
### Recently Completed
- [X] Constructor-Inferred Type Resolution, `self`/`this` Receiver Mapping
- [X] Wiki Generation, Multi-File Rename, Git-Diff Impact Analysis
- [X] Process-Grouped Search, 360-Degree Context, Claude Code Hooks
- [X] Multi-Repo MCP, Zero-Config Setup, 13 Language Support
- [X] Community Detection, Process Detection, Confidence Scoring
- [X] Hybrid Search, Vector Index
---
## Security & Privacy
- **CLI**: Everything runs locally on your machine. No network calls. Index stored in `.gitnexus/` (gitignored). Global registry at `~/.gitnexus/` stores only paths and metadata.
- **Web**: Everything runs in your browser. No code uploaded to any server. API keys stored in localStorage only.
- Open source — audit the code yourself.
---
## Acknowledgments
- [Tree-sitter](https://tree-sitter.github.io/) — AST parsing
- [LadybugDB](https://ladybugdb.com/) — Embedded graph database with vector support (formerly KuzuDB)
- [Sigma.js](https://www.sigmajs.org/) — WebGL graph rendering
- [transformers.js](https://huggingface.co/docs/transformers.js) — Browser ML
- [Graphology](https://graphology.github.io/) — Graph data structures
- [MCP](https://modelcontextprotocol.io/) — Model Context Protocol
================================================
FILE: compound-engineering.local.md
================================================
---
review_agents: [kieran-typescript-reviewer, pattern-recognition-specialist, architecture-strategist, data-integrity-guardian, security-sentinel, performance-oracle, code-simplicity-reviewer]
plan_review_agents: [kieran-typescript-reviewer, architecture-strategist, code-simplicity-reviewer]
voltagent_agents: [voltagent-lang:typescript-pro, voltagent-qa-sec:security-auditor, voltagent-data-ai:database-optimizer]
---
# Review Context
## Project Overview
GitNexus is a code intelligence tool that builds a knowledge graph from source code using tree-sitter AST parsing across 12 languages and KuzuDB for graph storage. Two packages: `gitnexus/` (CLI/MCP, TypeScript) and `gitnexus-web/` (browser).
## Cross-Language Pattern Consistency (pattern-recognition-specialist)
- 12 language-specific type extractors in `gitnexus/src/core/ingestion/type-extractors/` must follow identical patterns for: async unwrapping, constructor binding, namespace handling, nullable type stripping, for-loop element typing.
- Past bugs: C#/Rust missing `await_expression` unwrapping that TypeScript handled correctly; PHP backslash namespace splitting inconsistent with other languages' `::` / `.` splitting.
- When reviewing type extractor changes, verify the same pattern exists in ALL applicable language files — asymmetry is the #1 source of bugs.
## Data Integrity (data-integrity-guardian)
- KuzuDB graph operations: schema in `gitnexus/src/core/kuzu/schema.ts`, adapter in `kuzu-adapter.ts`.
- The ingestion pipeline writes symbols and relationships to the graph — changes to node/relation schemas or the ingestion pipeline can corrupt the index.
- Known issue: KuzuDB `close()` hangs on Linux due to C++ destructor — use `detachKuzu()` pattern.
- `lbug-adapter.ts` fallback path needs quote/newline escaping for Cypher injection prevention.
## Security (security-sentinel)
- Cypher query construction in `lbug-adapter.ts` and `kuzu-adapter.ts` — watch for injection via unescaped user-provided symbol names.
- CLI accepts `--repo` parameter and file paths — validate against path traversal.
- MCP server exposes tools to external AI agents — all tool inputs are untrusted.
## Performance (performance-oracle)
- Tree-sitter buffer size is adaptive (512KB–32MB) via `getTreeSitterBufferSize()` in `constants.ts`.
- The ingestion pipeline processes entire repositories — O(n) per file with potential O(n²) in cross-file resolution.
- KuzuDB batch inserts vs individual inserts matter for large repos.
## Architecture (architecture-strategist)
- Ingestion pipeline phases: structure → parsing → imports → calls → heritage → processes → type resolution.
- Shared modules: `export-detection.ts`, `constants.ts`, `utils.ts` — changes here have wide blast radius.
- `gitnexus-web` package drifts behind CLI — flag if a change should be mirrored.
## Voltagent Supplementary Agents
Invoke these via the Agent tool alongside `/ce:review` for deeper specialist analysis. These cover gaps that compound-engineering agents don't:
### voltagent-lang:typescript-pro
**When:** Changes touch type-resolution logic, generics, conditional types, or complex type-level programming in `type-env.ts`, `type-extractors/*.ts`, or `types.ts`.
**Why:** The type resolution system uses advanced TypeScript patterns (discriminated unions, mapped types, recursive generics) that benefit from deep TS type-system review beyond what kieran-typescript-reviewer covers.
### voltagent-qa-sec:security-auditor
**When:** Changes touch MCP tool handlers, Cypher query construction, CLI argument parsing, or any code that processes external input.
**Why:** GitNexus is an MCP server — all tool inputs come from untrusted AI agents. Systematic OWASP-level audit catches injection vectors that spot-checking misses. Past finding: `lbug-adapter.ts` fallback path had unescaped newlines in Cypher queries.
### voltagent-data-ai:database-optimizer
**When:** Changes touch `kuzu-adapter.ts`, `schema.ts`, `lbug-adapter.ts`, or any Cypher query construction/execution.
**Why:** No CE agent specializes in graph database optimization. KuzuDB batch insert patterns, index usage, and query planning directly affect analysis speed on large repos.
## Review Tooling
- Use `gitnexus_impact()` before approving changes to any symbol — check d=1 (WILL BREAK) callers.
- Use `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` to map PR diffs to affected execution flows.
- Use claude-mem to surface past architectural decisions relevant to the code under review.
================================================
FILE: eval/.gitignore
================================================
# Evaluation results (large, should not be committed)
results/
*.traj.json
preds.json
# Python
__pycache__/
*.pyc
*.egg-info/
.eggs/
dist/
build/
# Environment
.env
.venv/
================================================
FILE: eval/README.md
================================================
# GitNexus SWE-bench Evaluation Harness
Evaluate whether GitNexus code intelligence improves AI agent performance on real software engineering tasks. Runs SWE-bench instances across multiple models and compares baseline (no graph) vs GitNexus-enhanced configurations.
## What This Tests
**Hypothesis**: Giving AI agents structural code intelligence (call graphs, execution flows, blast radius analysis) improves their ability to resolve real GitHub issues — measured by resolve rate, cost, and efficiency.
**Evaluation modes:**
| Mode | What the agent gets |
|------|-------------------|
| `baseline` | Standard bash tools (grep, find, cat, sed) — control group |
| `native` | Baseline + explicit GitNexus tools via eval-server (~100ms) |
| `native_augment` | Native tools + grep results automatically enriched with graph context (**recommended**) |
> **Recommended**: Use `native_augment` mode. It mirrors the Claude Code model — the agent gets both explicit GitNexus tools (fast bash commands) AND automatic enrichment of grep results with callers, callees, and execution flows. The agent decides when to use explicit tools vs rely on enriched search output.
**Models supported:**
- Claude 3.5 Haiku, Claude Sonnet 4, Claude Opus 4
- MiniMax M1 2.5
- GLM 4.7, GLM 5
- Any model supported by litellm (add a YAML config)
## Prerequisites
- Python 3.11+
- Docker (for SWE-bench containers)
- Node.js 18+ (for GitNexus)
- API keys for your chosen models
## Setup
```bash
cd eval
# Install dependencies
pip install -e .
# Set up API keys — copy the template and fill in your keys
cp .env.example .env
# Then edit .env and paste your key(s)
```
All models are routed through **OpenRouter** by default, so a single `OPENROUTER_API_KEY` is all you need. To use provider APIs directly (Anthropic, ZhipuAI, etc.), edit the model YAML in `configs/models/` and set the corresponding key in `.env`.
```bash
# Pull SWE-bench Docker images (pulled on-demand, but you can pre-pull)
docker pull swebench/sweb.eval.x86_64.django_1776_django-16527:latest
```
## Quick Start
### Debug a single instance
```bash
# Fastest way to verify everything works
python run_eval.py debug -m claude-haiku -i django__django-16527 --subset lite
```
### Run a single configuration
```bash
# 5 instances, Claude Sonnet, native_augment mode (default)
python run_eval.py single -m claude-sonnet --subset lite --slice 0:5
# Baseline comparison (no GitNexus)
python run_eval.py single -m claude-sonnet --mode baseline --subset lite --slice 0:5
# Full Lite benchmark, 4 parallel workers
python run_eval.py single -m claude-sonnet --subset lite -w 4
```
### Run the full matrix
```bash
# All models x all modes
python run_eval.py matrix --subset lite -w 4
# Key comparison: baseline vs native_augment
python run_eval.py matrix -m claude-sonnet -m claude-haiku --modes baseline --modes native_augment --subset lite --slice 0:50
```
### Analyze results
```bash
# Summary table
python -m analysis.analyze_results results/
# Compare modes for a specific model
python -m analysis.analyze_results compare-modes results/ -m claude-sonnet
# GitNexus tool usage analysis
python -m analysis.analyze_results gitnexus-usage results/
# Export as CSV for further analysis
python -m analysis.analyze_results summary results/ --format csv > results.csv
# Run official SWE-bench test evaluation
python -m analysis.analyze_results summary results/ --swebench-eval
```
### List available configurations
```bash
python run_eval.py list-configs
```
## Architecture
```
eval/
run_eval.py # Main entry point (single, matrix, debug commands)
agents/
gitnexus_agent.py # GitNexusAgent: extends DefaultAgent with augmentation + metrics
environments/
gitnexus_docker.py # Docker env with GitNexus + eval-server + standalone tool scripts
bridge/
gitnexus_tools.sh # Bash wrappers (legacy — now standalone scripts are installed directly)
mcp_bridge.py # Legacy MCP bridge (kept for reference)
prompts/
system_baseline.jinja # System: persona + format rules
instance_baseline.jinja # Instance: task + workflow
system_native.jinja # System: + GitNexus tool reference
instance_native.jinja # Instance: + GitNexus debugging workflow
system_native_augment.jinja # System: + GitNexus tools + grep enrichment docs
instance_native_augment.jinja # Instance: + GitNexus workflow + risk assessment
configs/
models/ # Per-model YAML configs
modes/ # Per-mode YAML configs (baseline, native, native_augment)
analysis/
analyze_results.py # Post-run comparative analysis
results/ # Output directory (gitignored)
```
## How It Works
### Template structure
mini-swe-agent requires two Jinja templates:
- **system_template** → system message: persona, format rules, tool reference (static)
- **instance_template** → first user message: task, workflow, rules, examples (contains `{{task}}`)
Each mode has a `system_{mode}.jinja` + `instance_{mode}.jinja` pair. The agent loads both automatically based on the configured mode.
### Per-instance flow
1. Docker container starts with SWE-bench instance (repo at specific commit)
2. **GitNexus setup**: Node.js + gitnexus installed, `gitnexus analyze` runs (or restores from cache)
3. **Eval-server starts**: `gitnexus eval-server` daemon (persistent HTTP server, keeps LadybugDB warm)
4. **Standalone tool scripts installed** in `/usr/local/bin/` — works with `subprocess.run` (no `.bashrc` needed)
5. Agent runs with the configured model + system prompt + GitNexus tools
6. Agent's patch is extracted as a git diff
7. Metrics collected: cost, tokens, tool calls, GitNexus usage, augmentation stats
### Tool architecture
```
Agent → bash command → /usr/local/bin/gitnexus-query
→ curl localhost:4848/tool/query (fast path: eval-server, ~100ms)
→ npx gitnexus query (fallback: cold CLI, ~5-10s)
```
Each tool script in `/usr/local/bin/` is standalone — no sourcing, no env inheritance needed. This is critical because mini-swe-agent runs every command via `subprocess.run` in a fresh subshell.
### Eval-server
The eval-server is a lightweight HTTP daemon that:
- Keeps LadybugDB warm in memory (no cold start per tool call)
- Returns LLM-friendly text (not raw JSON — saves tokens)
- Includes next-step hints to guide tool chaining (query → context → impact → fix)
- Auto-shuts down after idle timeout
### Index caching
SWE-bench repos repeat (Django has 200+ instances at different commits). The harness caches GitNexus indexes per `(repo, commit)` hash in `~/.gitnexus-eval-cache/` to avoid redundant re-indexing.
### Grep augmentation (native_augment mode)
When the agent runs `grep` or `rg`, the observation is post-processed: the agent class calls `gitnexus-augment` on the search pattern and appends `[GitNexus]` annotations showing callers, callees, and execution flows for matched symbols. This mirrors the Claude Code / Cursor hook integration.
## Adding Models
Create a YAML file in `configs/models/`:
```yaml
# configs/models/my-model.yaml
model:
model_name: "openrouter/provider/model-name"
cost_tracking: "ignore_errors" # if not in litellm's cost DB
model_kwargs:
max_tokens: 8192
temperature: 0
```
The model name follows [litellm conventions](https://docs.litellm.ai/docs/providers).
## Metrics Collected
| Metric | Description |
|--------|-------------|
| Patch Rate | % of instances where agent produced a patch |
| Resolve Rate | % of instances where patch passes tests (requires --swebench-eval) |
| Total Cost | API cost across all instances |
| Avg Cost/Instance | Cost efficiency |
| API Calls | Number of LLM calls |
| GN Tool Calls | How many GitNexus tools the agent used |
| Augment Hits | How many grep/find results got enriched |
| Augment Hit Rate | % of search commands that got useful enrichment |
================================================
FILE: eval/__init__.py
================================================
# GitNexus SWE-bench Evaluation Harness
================================================
FILE: eval/agents/__init__.py
================================================
================================================
FILE: eval/agents/gitnexus_agent.py
================================================
"""
GitNexus-Enhanced Agent for SWE-bench Evaluation
Extends mini-swe-agent's DefaultAgent with:
1. Native augment mode: GitNexus tools via eval-server + grep enrichment (recommended)
2. Native mode: GitNexus tools via eval-server only
3. Baseline mode: Pure mini-swe-agent (no GitNexus — control group)
The agent class itself is minimal — the heavy lifting is in:
- Prompt selection (system + instance templates per mode)
- Observation post-processing (grep result augmentation)
- Metrics tracking (which tools the agent actually uses)
Template structure (matches mini-swe-agent's expectations):
system_template → system message: persona + format rules + tool reference
instance_template → first user message: task + workflow + rules + examples
"""
import logging
import re
import time
from enum import Enum
from pathlib import Path
from minisweagent import Environment, Model
from minisweagent.agents.default import AgentConfig, DefaultAgent
logger = logging.getLogger("gitnexus_agent")
PROMPTS_DIR = Path(__file__).parent.parent / "prompts"
class GitNexusMode(str, Enum):
"""Evaluation modes for GitNexus integration."""
BASELINE = "baseline" # No GitNexus — pure mini-swe-agent
NATIVE = "native" # GitNexus tools via eval-server
NATIVE_AUGMENT = "native_augment" # Native tools + grep enrichment (recommended)
class GitNexusAgentConfig(AgentConfig):
"""Extended config for GitNexus evaluation agent."""
gitnexus_mode: GitNexusMode = GitNexusMode.BASELINE
augment_timeout: float = 5.0
augment_min_pattern_length: int = 3
track_gitnexus_usage: bool = True
class GitNexusAgent(DefaultAgent):
"""
Agent that optionally enriches its capabilities with GitNexus code intelligence.
In BASELINE mode, behaves identically to DefaultAgent.
In NATIVE mode, GitNexus tools are available as bash commands via eval-server.
In NATIVE_AUGMENT mode, GitNexus tools + automatic grep result enrichment.
"""
def __init__(self, model: Model, env: Environment, *, config_class: type = GitNexusAgentConfig, **kwargs):
mode = kwargs.get("gitnexus_mode", GitNexusMode.BASELINE)
if isinstance(mode, str):
mode = GitNexusMode(mode)
# Load system template
system_file = PROMPTS_DIR / f"system_{mode.value}.jinja"
if system_file.exists() and "system_template" not in kwargs:
kwargs["system_template"] = system_file.read_text()
# Load instance template
instance_file = PROMPTS_DIR / f"instance_{mode.value}.jinja"
if instance_file.exists() and "instance_template" not in kwargs:
kwargs["instance_template"] = instance_file.read_text()
super().__init__(model, env, config_class=config_class, **kwargs)
self.gitnexus_mode = mode
self.gitnexus_metrics = GitNexusMetrics()
def execute_actions(self, message: dict) -> list[dict]:
"""Execute actions with optional GitNexus augmentation and tracking."""
if self.config.track_gitnexus_usage:
self._track_tool_usage(message)
outputs = [self.env.execute(action) for action in message.get("extra", {}).get("actions", [])]
# Augment grep/find observations in NATIVE_AUGMENT mode
if self.gitnexus_mode == GitNexusMode.NATIVE_AUGMENT:
actions = message.get("extra", {}).get("actions", [])
for i, (action, output) in enumerate(zip(actions, outputs)):
augmented = self._maybe_augment(action, output)
if augmented:
outputs[i] = augmented
return self.add_messages(
*self.model.format_observation_messages(message, outputs, self.get_template_vars())
)
def _maybe_augment(self, action: dict, output: dict) -> dict | None:
"""
If the action is a search command (grep, find, rg, ag), augment the output
with GitNexus knowledge graph context.
"""
command = action.get("command", "")
if not command:
return None
pattern = self._extract_search_pattern(command)
if not pattern or len(pattern) < self.config.augment_min_pattern_length:
return None
start = time.time()
try:
augment_result = self.env.execute({
"command": f'gitnexus-augment "{pattern}" 2>&1 || true',
"timeout": self.config.augment_timeout,
})
elapsed = time.time() - start
self.gitnexus_metrics.augmentation_calls += 1
self.gitnexus_metrics.augmentation_time += elapsed
augment_text = augment_result.get("output", "").strip()
if augment_text and "[GitNexus]" in augment_text:
original_output = output.get("output", "")
output = dict(output)
output["output"] = f"{original_output}\n\n{augment_text}"
self.gitnexus_metrics.augmentation_hits += 1
return output
except Exception as e:
logger.debug(f"Augmentation failed for pattern '{pattern}': {e}")
self.gitnexus_metrics.augmentation_errors += 1
return None
@staticmethod
def _extract_search_pattern(command: str) -> str | None:
"""Extract the search pattern from a grep/find/rg command."""
patterns = [
r'(?:grep|rg|ag)\s+(?:-[a-zA-Z]*\s+)*["\']([^"\']+)["\']',
r'(?:grep|rg|ag)\s+(?:-[a-zA-Z]*\s+)*(\S+)',
]
for pat in patterns:
match = re.search(pat, command)
if match:
result = match.group(1)
if result.startswith("/") or result.startswith("."):
continue
if result.startswith("-"):
continue
return result
return None
def _track_tool_usage(self, message: dict):
"""Track which GitNexus tools the agent uses."""
for action in message.get("extra", {}).get("actions", []):
command = action.get("command", "")
if "gitnexus-query" in command:
self.gitnexus_metrics.tool_calls["query"] += 1
elif "gitnexus-context" in command:
self.gitnexus_metrics.tool_calls["context"] += 1
elif "gitnexus-impact" in command:
self.gitnexus_metrics.tool_calls["impact"] += 1
elif "gitnexus-cypher" in command:
self.gitnexus_metrics.tool_calls["cypher"] += 1
elif "gitnexus-overview" in command:
self.gitnexus_metrics.tool_calls["overview"] += 1
def serialize(self, *extra_dicts) -> dict:
"""Serialize with GitNexus-specific metrics."""
gitnexus_data = {
"info": {
"gitnexus": {
"mode": self.gitnexus_mode.value,
"metrics": self.gitnexus_metrics.to_dict(),
},
},
}
return super().serialize(gitnexus_data, *extra_dicts)
class GitNexusMetrics:
"""Tracks GitNexus-specific metrics during evaluation."""
def __init__(self):
self.tool_calls: dict[str, int] = {
"query": 0,
"context": 0,
"impact": 0,
"cypher": 0,
"overview": 0,
}
self.augmentation_calls: int = 0
self.augmentation_hits: int = 0
self.augmentation_errors: int = 0
self.augmentation_time: float = 0.0
self.index_time: float = 0.0
@property
def total_tool_calls(self) -> int:
return sum(self.tool_calls.values())
def to_dict(self) -> dict:
return {
"tool_calls": dict(self.tool_calls),
"total_tool_calls": self.total_tool_calls,
"augmentation_calls": self.augmentation_calls,
"augmentation_hits": self.augmentation_hits,
"augmentation_errors": self.augmentation_errors,
"augmentation_time_seconds": round(self.augmentation_time, 2),
"index_time_seconds": round(self.index_time, 2),
}
================================================
FILE: eval/analysis/__init__.py
================================================
================================================
FILE: eval/analysis/analyze_results.py
================================================
#!/usr/bin/env python3
"""
Results Analyzer for GitNexus SWE-bench Evaluation
Reads evaluation results and generates comparative analysis:
- Resolve rate by model x mode
- Cost comparison (total, per-instance)
- Token/API call efficiency
- GitNexus tool usage patterns
- Augmentation hit rates
Usage:
python -m analysis.analyze_results /path/to/results
python -m analysis.analyze_results /path/to/results --format markdown
python -m analysis.analyze_results /path/to/results --swebench-eval # run actual test verification
"""
import json
import logging
import os
import subprocess
import sys
from pathlib import Path
from typing import Any
import typer
from rich.console import Console
from rich.table import Table
logger = logging.getLogger("analyze_results")
console = Console()
app = typer.Typer(rich_markup_mode="rich", add_completion=False)
def load_run_results(results_dir: Path) -> dict[str, dict]:
"""
Load all run results from the results directory.
Returns: {run_id: {summary, preds, instances}}
"""
runs = {}
for run_dir in sorted(results_dir.iterdir()):
if not run_dir.is_dir():
continue
run_id = run_dir.name
run_data: dict[str, Any] = {"run_id": run_id, "dir": run_dir}
# Load summary
summary_path = run_dir / "summary.json"
if summary_path.exists():
run_data["summary"] = json.loads(summary_path.read_text())
# Load predictions
preds_path = run_dir / "preds.json"
if preds_path.exists():
run_data["preds"] = json.loads(preds_path.read_text())
# Load individual trajectories for detailed metrics
run_data["trajectories"] = {}
for traj_dir in run_dir.iterdir():
if not traj_dir.is_dir():
continue
for traj_file in traj_dir.glob("*.traj.json"):
try:
traj = json.loads(traj_file.read_text())
instance_id = traj.get("instance_id", traj_dir.name)
run_data["trajectories"][instance_id] = traj
except Exception:
pass
if run_data.get("preds") or run_data.get("summary"):
runs[run_id] = run_data
return runs
def parse_run_id(run_id: str) -> tuple[str, str]:
"""Parse 'model_mode' into (model, mode)."""
# Handle multi-word model names like 'minimax-2.5'
# Modes are: baseline, mcp, augment, full
known_modes = {"baseline", "mcp", "augment", "full"}
parts = run_id.rsplit("_", 1)
if len(parts) == 2 and parts[1] in known_modes:
return parts[0], parts[1]
return run_id, "unknown"
def compute_metrics(run_data: dict) -> dict:
"""Compute evaluation metrics for a single run."""
preds = run_data.get("preds", {})
summary = run_data.get("summary", {})
trajectories = run_data.get("trajectories", {})
n_instances = len(preds)
n_with_patch = sum(1 for p in preds.values() if p.get("model_patch", "").strip())
# Cost and API call metrics from trajectories
costs = []
api_calls = []
gn_tool_calls = []
gn_augment_hits = []
gn_augment_calls = []
for instance_id, traj in trajectories.items():
info = traj.get("info", {})
model_stats = info.get("model_stats", {})
costs.append(model_stats.get("instance_cost", 0))
api_calls.append(model_stats.get("api_calls", 0))
gn = info.get("gitnexus", {}).get("metrics", {})
if gn:
gn_tool_calls.append(gn.get("total_tool_calls", 0))
gn_augment_hits.append(gn.get("augmentation_hits", 0))
gn_augment_calls.append(gn.get("augmentation_calls", 0))
# Also try summary-level metrics
if not costs and summary:
results = summary.get("results", [])
for r in results:
costs.append(r.get("cost", 0))
api_calls.append(r.get("n_calls", 0))
gn = r.get("gitnexus_metrics", {})
if gn:
gn_tool_calls.append(gn.get("total_tool_calls", 0))
gn_augment_hits.append(gn.get("augmentation_hits", 0))
gn_augment_calls.append(gn.get("augmentation_calls", 0))
total_cost = sum(costs)
total_calls = sum(api_calls)
return {
"n_instances": n_instances,
"n_with_patch": n_with_patch,
"patch_rate": n_with_patch / max(n_instances, 1),
"total_cost": total_cost,
"avg_cost": total_cost / max(n_instances, 1),
"total_api_calls": total_calls,
"avg_api_calls": total_calls / max(n_instances, 1),
"total_gn_tool_calls": sum(gn_tool_calls),
"avg_gn_tool_calls": sum(gn_tool_calls) / max(len(gn_tool_calls), 1) if gn_tool_calls else 0,
"total_augment_hits": sum(gn_augment_hits),
"total_augment_calls": sum(gn_augment_calls),
"augment_hit_rate": sum(gn_augment_hits) / max(sum(gn_augment_calls), 1) if gn_augment_calls else 0,
}
def run_swebench_evaluation(results_dir: Path, run_id: str, subset: str = "lite") -> dict | None:
"""
Run the official SWE-bench evaluation on predictions.
Requires: pip install swebench
"""
preds_path = results_dir / run_id / "preds.json"
if not preds_path.exists():
return None
dataset_mapping = {
"lite": "princeton-nlp/SWE-Bench_Lite",
"verified": "princeton-nlp/SWE-Bench_Verified",
"full": "princeton-nlp/SWE-Bench",
}
try:
eval_output = results_dir / run_id / "swebench_eval"
cmd = [
sys.executable, "-m", "swebench.harness.run_evaluation",
"--dataset_name", dataset_mapping.get(subset, subset),
"--predictions_path", str(preds_path),
"--max_workers", "4",
"--run_id", run_id,
"--output_dir", str(eval_output),
]
logger.info(f"Running SWE-bench evaluation for {run_id}...")
result = subprocess.run(cmd, capture_output=True, text=True, timeout=600)
if result.returncode == 0:
# Parse evaluation results
report_path = eval_output / run_id / "results.json"
if report_path.exists():
return json.loads(report_path.read_text())
logger.error(f"SWE-bench eval failed: {result.stderr[:500]}")
return None
except Exception as e:
logger.error(f"SWE-bench eval error: {e}")
return None
# ─── CLI Commands ───────────────────────────────────────────────────────────
@app.command()
def summary(
results_dir: str = typer.Argument(..., help="Path to results directory"),
format: str = typer.Option("table", "--format", help="Output format: table, markdown, json, csv"),
swebench_eval: bool = typer.Option(False, "--swebench-eval", help="Run official SWE-bench test evaluation"),
subset: str = typer.Option("lite", "--subset", help="SWE-bench subset (for --swebench-eval)"),
):
"""Generate comparative analysis of evaluation results."""
results_path = Path(results_dir)
if not results_path.exists():
console.print(f"[red]Results directory not found: {results_path}[/red]")
raise typer.Exit(1)
runs = load_run_results(results_path)
if not runs:
console.print("[yellow]No evaluation results found[/yellow]")
raise typer.Exit(0)
console.print(f"\n[bold]Found {len(runs)} evaluation runs[/bold]\n")
# Compute metrics per run
all_metrics = {}
for run_id, run_data in runs.items():
model, mode = parse_run_id(run_id)
metrics = compute_metrics(run_data)
metrics["model"] = model
metrics["mode"] = mode
# Optionally run SWE-bench evaluation
if swebench_eval:
eval_result = run_swebench_evaluation(results_path, run_id, subset)
if eval_result:
metrics["resolved"] = eval_result.get("resolved", 0)
metrics["resolve_rate"] = eval_result.get("resolved", 0) / max(metrics["n_instances"], 1)
all_metrics[run_id] = metrics
if format == "table":
_print_table(all_metrics)
elif format == "markdown":
_print_markdown(all_metrics)
elif format == "json":
console.print(json.dumps(all_metrics, indent=2))
elif format == "csv":
_print_csv(all_metrics)
@app.command()
def compare_modes(
results_dir: str = typer.Argument(..., help="Path to results directory"),
model: str = typer.Option(..., "-m", "--model", help="Model to compare across modes"),
):
"""Compare modes for a specific model (baseline vs mcp vs augment vs full)."""
results_path = Path(results_dir)
runs = load_run_results(results_path)
# Filter to the specified model
model_runs = {
run_id: data for run_id, data in runs.items()
if parse_run_id(run_id)[0] == model
}
if not model_runs:
console.print(f"[yellow]No results found for model: {model}[/yellow]")
raise typer.Exit(1)
console.print(f"\n[bold]Mode comparison for {model}[/bold]\n")
metrics = {}
for run_id, run_data in model_runs.items():
_, mode = parse_run_id(run_id)
metrics[mode] = compute_metrics(run_data)
# Print comparison table
table = Table(title=f"Mode Comparison: {model}")
table.add_column("Metric", style="bold")
for mode in ["baseline", "mcp", "augment", "full"]:
if mode in metrics:
table.add_column(mode, justify="right")
rows = [
("Instances", "n_instances", "d"),
("With Patch", "n_with_patch", "d"),
("Patch Rate", "patch_rate", ".1%"),
("Total Cost", "total_cost", "$.4f"),
("Avg Cost", "avg_cost", "$.4f"),
("Total API Calls", "total_api_calls", "d"),
("Avg API Calls", "avg_api_calls", ".1f"),
("GN Tool Calls", "total_gn_tool_calls", "d"),
("Augment Hits", "total_augment_hits", "d"),
("Augment Hit Rate", "augment_hit_rate", ".1%"),
]
for label, key, fmt in rows:
values = []
for mode in ["baseline", "mcp", "augment", "full"]:
if mode in metrics:
v = metrics[mode].get(key, 0)
if fmt == ".1%":
values.append(f"{v:.1%}")
elif fmt == "$.4f":
values.append(f"${v:.4f}")
elif fmt == ".1f":
values.append(f"{v:.1f}")
else:
values.append(str(v))
table.add_row(label, *values)
# Add delta rows (improvement over baseline)
if "baseline" in metrics:
baseline_cost = metrics["baseline"]["avg_cost"]
baseline_calls = metrics["baseline"]["avg_api_calls"]
table.add_section()
for mode in ["mcp", "augment", "full"]:
if mode not in metrics:
continue
mode_cost = metrics[mode]["avg_cost"]
mode_calls = metrics[mode]["avg_api_calls"]
cost_delta = ((mode_cost - baseline_cost) / max(baseline_cost, 0.001)) * 100
calls_delta = ((mode_calls - baseline_calls) / max(baseline_calls, 1)) * 100
cost_str = f"{cost_delta:+.1f}%"
calls_str = f"{calls_delta:+.1f}%"
# Color-code: negative is good (cheaper/fewer calls)
cost_color = "green" if cost_delta < 0 else "red"
calls_color = "green" if calls_delta < 0 else "red"
console.print(f" {mode} vs baseline: cost [{cost_color}]{cost_str}[/{cost_color}], calls [{calls_color}]{calls_str}[/{calls_color}]")
console.print(table)
@app.command()
def gitnexus_usage(
results_dir: str = typer.Argument(..., help="Path to results directory"),
):
"""Analyze GitNexus tool usage patterns across all runs."""
results_path = Path(results_dir)
runs = load_run_results(results_path)
console.print("\n[bold]GitNexus Tool Usage Analysis[/bold]\n")
table = Table(title="Tool Usage by Run")
table.add_column("Run", style="bold")
table.add_column("query", justify="right")
table.add_column("context", justify="right")
table.add_column("impact", justify="right")
table.add_column("cypher", justify="right")
table.add_column("Total", justify="right")
table.add_column("Augment Hits", justify="right")
for run_id, run_data in sorted(runs.items()):
_, mode = parse_run_id(run_id)
if mode == "baseline":
continue
# Aggregate tool calls across trajectories
tool_totals: dict[str, int] = {"query": 0, "context": 0, "impact": 0, "cypher": 0, "overview": 0}
augment_hits = 0
for traj in run_data.get("trajectories", {}).values():
gn = traj.get("info", {}).get("gitnexus", {}).get("metrics", {})
for tool, count in gn.get("tool_calls", {}).items():
tool_totals[tool] = tool_totals.get(tool, 0) + count
augment_hits += gn.get("augmentation_hits", 0)
# Also check summary
for r in run_data.get("summary", {}).get("results", []):
gn = r.get("gitnexus_metrics", {})
for tool, count in gn.get("tool_calls", {}).items():
tool_totals[tool] = tool_totals.get(tool, 0) + count
augment_hits += gn.get("augmentation_hits", 0)
total = sum(tool_totals.values())
if total > 0 or augment_hits > 0:
table.add_row(
run_id,
str(tool_totals.get("query", 0)),
str(tool_totals.get("context", 0)),
str(tool_totals.get("impact", 0)),
str(tool_totals.get("cypher", 0)),
str(total),
str(augment_hits),
)
console.print(table)
# ─── Output Formatters ─────────────────────────────────────────────────────
def _print_table(all_metrics: dict):
"""Print rich table summary."""
table = Table(title="Evaluation Results")
table.add_column("Run", style="bold")
table.add_column("Model")
table.add_column("Mode")
table.add_column("N", justify="right")
table.add_column("Patched", justify="right")
table.add_column("Rate", justify="right")
table.add_column("Cost", justify="right")
table.add_column("Calls", justify="right")
table.add_column("GN Tools", justify="right")
for run_id, m in sorted(all_metrics.items()):
resolved_str = ""
if "resolve_rate" in m:
resolved_str = f" ({m['resolve_rate']:.0%})"
table.add_row(
run_id,
m["model"],
m["mode"],
str(m["n_instances"]),
str(m["n_with_patch"]),
f"{m['patch_rate']:.0%}{resolved_str}",
f"${m['total_cost']:.2f}",
str(m["total_api_calls"]),
str(m["total_gn_tool_calls"]) if m["total_gn_tool_calls"] > 0 else "-",
)
console.print(table)
def _print_markdown(all_metrics: dict):
"""Print markdown table."""
print("| Run | Model | Mode | N | Patched | Rate | Cost | Calls | GN Tools |")
print("|-----|-------|------|---|---------|------|------|-------|----------|")
for run_id, m in sorted(all_metrics.items()):
gn = str(m["total_gn_tool_calls"]) if m["total_gn_tool_calls"] > 0 else "-"
print(f"| {run_id} | {m['model']} | {m['mode']} | {m['n_instances']} | {m['n_with_patch']} | {m['patch_rate']:.0%} | ${m['total_cost']:.2f} | {m['total_api_calls']} | {gn} |")
def _print_csv(all_metrics: dict):
"""Print CSV output."""
print("run_id,model,mode,n_instances,n_with_patch,patch_rate,total_cost,avg_cost,total_api_calls,avg_api_calls,total_gn_tool_calls,total_augment_hits,augment_hit_rate")
for run_id, m in sorted(all_metrics.items()):
print(
f"{run_id},{m['model']},{m['mode']},{m['n_instances']},{m['n_with_patch']},"
f"{m['patch_rate']:.4f},{m['total_cost']:.4f},{m['avg_cost']:.4f},"
f"{m['total_api_calls']},{m['avg_api_calls']:.1f},{m['total_gn_tool_calls']},"
f"{m['total_augment_hits']},{m['augment_hit_rate']:.4f}"
)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
app()
================================================
FILE: eval/bridge/__init__.py
================================================
================================================
FILE: eval/bridge/gitnexus_tools.sh
================================================
#!/bin/bash
# GitNexus CLI tool wrappers for SWE-bench evaluation
#
# These functions call the GitNexus eval-server (HTTP daemon) for near-instant
# tool responses. The eval-server keeps KuzuDB warm in memory.
#
# If the eval-server is not running, falls back to direct CLI commands.
#
# Usage:
# gitnexus-query "how does authentication work"
# gitnexus-context "validateUser"
# gitnexus-impact "AuthService" upstream
# gitnexus-cypher "MATCH (n:Function) RETURN n.name LIMIT 10"
# gitnexus-overview
GITNEXUS_EVAL_PORT="${GITNEXUS_EVAL_PORT:-4848}"
GITNEXUS_EVAL_URL="http://127.0.0.1:${GITNEXUS_EVAL_PORT}"
_gitnexus_call() {
local tool="$1"
shift
local json_body="$1"
# Try eval-server first (fastest path — KuzuDB stays warm)
local result
result=$(curl -sf -X POST "${GITNEXUS_EVAL_URL}/tool/${tool}" \
-H "Content-Type: application/json" \
-d "${json_body}" 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$result" ]; then
echo "$result"
return 0
fi
# Fallback: direct CLI (cold start, slower but always works)
case "$tool" in
query)
local q=$(echo "$json_body" | python3 -c "import sys,json; print(json.load(sys.stdin).get('query',''))" 2>/dev/null)
npx gitnexus query "$q" 2>&1
;;
context)
local n=$(echo "$json_body" | python3 -c "import sys,json; print(json.load(sys.stdin).get('name',''))" 2>/dev/null)
npx gitnexus context "$n" 2>&1
;;
impact)
local t=$(echo "$json_body" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('target',''))" 2>/dev/null)
local d=$(echo "$json_body" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('direction','upstream'))" 2>/dev/null)
npx gitnexus impact "$t" --direction "$d" 2>&1
;;
cypher)
local cq=$(echo "$json_body" | python3 -c "import sys,json; print(json.load(sys.stdin).get('query',''))" 2>/dev/null)
npx gitnexus cypher "$cq" 2>&1
;;
*)
echo "Unknown tool: $tool" >&2
return 1
;;
esac
}
gitnexus-query() {
local query="$1"
local task_context="${2:-}"
local goal="${3:-}"
if [ -z "$query" ]; then
echo "Usage: gitnexus-query <query> [task_context] [goal]"
echo "Search the code knowledge graph for execution flows related to a concept."
echo ""
echo "Examples:"
echo ' gitnexus-query "authentication flow"'
echo ' gitnexus-query "database connection" "fixing connection pool leak"'
return 1
fi
local args="{\"query\": \"$query\""
[ -n "$task_context" ] && args="$args, \"task_context\": \"$task_context\""
[ -n "$goal" ] && args="$args, \"goal\": \"$goal\""
args="$args}"
_gitnexus_call query "$args"
}
gitnexus-context() {
local name="$1"
local file_path="${2:-}"
if [ -z "$name" ]; then
echo "Usage: gitnexus-context <symbol_name> [file_path]"
echo "Get a 360-degree view of a code symbol: callers, callees, processes, file location."
echo ""
echo "Examples:"
echo ' gitnexus-context "validateUser"'
echo ' gitnexus-context "AuthService" "src/auth/service.py"'
return 1
fi
local args="{\"name\": \"$name\""
[ -n "$file_path" ] && args="$args, \"file_path\": \"$file_path\""
args="$args}"
_gitnexus_call context "$args"
}
gitnexus-impact() {
local target="$1"
local direction="${2:-upstream}"
if [ -z "$target" ]; then
echo "Usage: gitnexus-impact <symbol_name> [upstream|downstream]"
echo "Analyze the blast radius of changing a code symbol."
echo ""
echo " upstream = what depends on this (what breaks if you change it)"
echo " downstream = what this depends on (what it uses)"
echo ""
echo "Examples:"
echo ' gitnexus-impact "AuthService" upstream'
echo ' gitnexus-impact "validateUser" downstream'
return 1
fi
_gitnexus_call impact "{\"target\": \"$target\", \"direction\": \"$direction\"}"
}
gitnexus-cypher() {
local query="$1"
if [ -z "$query" ]; then
echo "Usage: gitnexus-cypher <cypher_query>"
echo "Execute a raw Cypher query against the code knowledge graph."
echo ""
echo "Schema: Nodes: File, Function, Class, Method, Interface, Community, Process"
echo "Edges via CodeRelation.type: CALLS, IMPORTS, EXTENDS, IMPLEMENTS, DEFINES, MEMBER_OF, STEP_IN_PROCESS"
echo ""
echo "Examples:"
echo " gitnexus-cypher 'MATCH (a)-[:CodeRelation {type: \"CALLS\"}]->(b:Function {name: \"save\"}) RETURN a.name, a.filePath'"
echo " gitnexus-cypher 'MATCH (n:Class) RETURN n.name, n.filePath LIMIT 20'"
return 1
fi
_gitnexus_call cypher "{\"query\": \"$query\"}"
}
gitnexus-overview() {
echo "=== Code Knowledge Graph Overview ==="
_gitnexus_call list_repos '{}'
}
# Export functions so they're available in subshells
export -f _gitnexus_call 2>/dev/null
export -f gitnexus-query 2>/dev/null
export -f gitnexus-context 2>/dev/null
export -f gitnexus-impact 2>/dev/null
export -f gitnexus-cypher 2>/dev/null
export -f gitnexus-overview 2>/dev/null
================================================
FILE: eval/bridge/mcp_bridge.py
================================================
"""
MCP Bridge for GitNexus
Starts the GitNexus MCP server as a subprocess and provides a Python interface
to call MCP tools. Used by the bash wrapper scripts and the augmentation layer..
The bridge communicates with the MCP server via stdio using the JSON-RPC protocol.
"""
import json
import logging
import os
import subprocess
import sys
import threading
import time
from pathlib import Path
from typing import Any
logger = logging.getLogger("mcp_bridge")
class MCPBridge:
"""
Manages a GitNexus MCP server subprocess and proxies tool calls to it.
Usage:
bridge = MCPBridge(repo_path="/path/to/repo")
bridge.start()
result = bridge.call_tool("query", {"query": "authentication"})
bridge.stop()
"""
def __init__(self, repo_path: str | None = None):
self.repo_path = repo_path or os.getcwd()
self.process: subprocess.Popen | None = None
self._request_id = 0
self._lock = threading.Lock()
self._started = False
def start(self) -> bool:
"""Start the GitNexus MCP server subprocess."""
if self._started:
return True
try:
# Find gitnexus binary
gitnexus_bin = self._find_gitnexus()
if not gitnexus_bin:
logger.error("GitNexus not found. Install with: npm install -g gitnexus")
return False
self.process = subprocess.Popen(
[gitnexus_bin, "mcp"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=self.repo_path,
text=False,
)
# Send initialize request
init_result = self._send_request("initialize", {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "gitnexus-eval", "version": "0.1.0"},
})
if init_result is None:
logger.error("MCP server failed to initialize")
self.stop()
return False
# Send initialized notification
self._send_notification("notifications/initialized", {})
self._started = True
logger.info("MCP bridge started successfully")
return True
except Exception as e:
logger.error(f"Failed to start MCP bridge: {e}")
self.stop()
return False
def stop(self):
"""Stop the MCP server subprocess."""
if self.process:
try:
self.process.stdin.close()
self.process.terminate()
self.process.wait(timeout=5)
except Exception:
try:
self.process.kill()
except Exception:
pass
self.process = None
self._started = False
def call_tool(self, tool_name: str, arguments: dict[str, Any] | None = None) -> dict[str, Any] | None:
"""
Call a GitNexus MCP tool and return the result.
Returns the tool result content or None on error.
"""
if not self._started:
logger.error("MCP bridge not started")
return None
result = self._send_request("tools/call", {
"name": tool_name,
"arguments": arguments or {},
})
if result is None:
return None
# Extract text content from MCP response
content = result.get("content", [])
if content and isinstance(content, list):
texts = [item.get("text", "") for item in content if item.get("type") == "text"]
return {"text": "\n".join(texts), "raw": content}
return {"text": "", "raw": content}
def list_tools(self) -> list[dict]:
"""List available MCP tools."""
result = self._send_request("tools/list", {})
if result:
return result.get("tools", [])
return []
def read_resource(self, uri: str) -> str | None:
"""Read an MCP resource by URI."""
result = self._send_request("resources/read", {"uri": uri})
if result:
contents = result.get("contents", [])
if contents:
return contents[0].get("text", "")
return None
def _find_gitnexus(self) -> str | None:
"""Find the gitnexus CLI binary."""
# Check if npx is available (preferred - uses local install)
for cmd in ["npx"]:
try:
result = subprocess.run(
[cmd, "gitnexus", "--version"],
capture_output=True, text=True, timeout=15,
cwd=self.repo_path,
)
if result.returncode == 0:
return cmd # Will use "npx gitnexus mcp"
except Exception:
continue
# Check for global install
try:
result = subprocess.run(
["gitnexus", "--version"],
capture_output=True, text=True, timeout=10,
)
if result.returncode == 0:
return "gitnexus"
except Exception:
pass
return None
def _next_id(self) -> int:
with self._lock:
self._request_id += 1
return self._request_id
def _send_request(self, method: str, params: dict) -> dict | None:
"""Send a JSON-RPC request and wait for response."""
if not self.process or not self.process.stdin or not self.process.stdout:
return None
request_id = self._next_id()
request = {
"jsonrpc": "2.0",
"id": request_id,
"method": method,
"params": params,
}
try:
message = json.dumps(request)
# MCP uses Content-Length header framing
header = f"Content-Length: {len(message.encode('utf-8'))}\r\n\r\n"
self.process.stdin.write(header.encode("utf-8"))
self.process.stdin.write(message.encode("utf-8"))
self.process.stdin.flush()
# Read response
response = self._read_response(timeout=30)
if response and response.get("id") == request_id:
if "error" in response:
logger.error(f"MCP error: {response['error']}")
return None
return response.get("result")
return None
except Exception as e:
logger.error(f"MCP request failed: {e}")
return None
def _send_notification(self, method: str, params: dict):
"""Send a JSON-RPC notification (no response expected)."""
if not self.process or not self.process.stdin:
return
notification = {
"jsonrpc": "2.0",
"method": method,
"params": params,
}
try:
message = json.dumps(notification)
header = f"Content-Length: {len(message.encode('utf-8'))}\r\n\r\n"
self.process.stdin.write(header.encode("utf-8"))
self.process.stdin.write(message.encode("utf-8"))
self.process.stdin.flush()
except Exception as e:
logger.error(f"MCP notification failed: {e}")
def _read_response(self, timeout: float = 30) -> dict | None:
"""Read a JSON-RPC response from the MCP server."""
if not self.process or not self.process.stdout:
return None
start = time.time()
try:
while time.time() - start < timeout:
# Read Content-Length header
header_line = b""
while True:
byte = self.process.stdout.read(1)
if not byte:
return None
header_line += byte
if header_line.endswith(b"\r\n\r\n"):
break
if header_line.endswith(b"\n\n"):
break
# Parse content length
header_str = header_line.decode("utf-8").strip()
content_length = None
for line in header_str.split("\r\n"):
if line.lower().startswith("content-length:"):
content_length = int(line.split(":")[1].strip())
break
if content_length is None:
continue
# Read body
body = self.process.stdout.read(content_length)
if not body:
return None
message = json.loads(body.decode("utf-8"))
# Skip notifications (no id), return responses
if "id" in message:
return message
return None
except Exception as e:
logger.error(f"Error reading MCP response: {e}")
return None
class MCPToolCLI:
"""
CLI wrapper that exposes MCP tools as simple command-line calls.
Used by the bash wrapper scripts inside Docker containers.
Usage from bash:
python -m bridge.mcp_bridge query '{"query": "authentication"}'
python -m bridge.mcp_bridge context '{"name": "validateUser"}'
"""
def __init__(self):
self.bridge = MCPBridge()
def run(self, tool_name: str, args_json: str = "{}") -> int:
"""Run a single tool call and print the result."""
try:
args = json.loads(args_json)
except json.JSONDecodeError:
# Try to parse as simple key=value pairs
args = self._parse_simple_args(args_json)
if not self.bridge.start():
print("ERROR: Failed to start GitNexus MCP bridge", file=sys.stderr)
return 1
try:
result = self.bridge.call_tool(tool_name, args)
if result:
print(result.get("text", ""))
return 0
else:
print("No results", file=sys.stderr)
return 1
finally:
self.bridge.stop()
@staticmethod
def _parse_simple_args(args_str: str) -> dict:
"""Parse 'key=value key2=value2' style arguments."""
args = {}
for part in args_str.split():
if "=" in part:
key, value = part.split("=", 1)
args[key] = value
return args
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python -m bridge.mcp_bridge <tool_name> [args_json]", file=sys.stderr)
print("Tools: query, context, impact, cypher, list_repos, detect_changes, rename", file=sys.stderr)
sys.exit(1)
tool = sys.argv[1]
args_json = sys.argv[2] if len(sys.argv) > 2 else "{}"
cli = MCPToolCLI()
sys.exit(cli.run(tool, args_json))
================================================
FILE: eval/configs/models/claude-haiku.yaml
================================================
# Claude Haiku 4.5 — fast, cheap, good baseline
# Via OpenRouter (set OPENROUTER_API_KEY in .env)
model:
model_name: "openrouter/anthropic/claude-haiku-4.5"
cost_tracking: "ignore_errors"
model_kwargs:
max_tokens: 8192
temperature: 0
================================================
FILE: eval/configs/models/claude-opus.yaml
================================================
# Claude Opus 4 — most capable, highest cost
# Via OpenRouter (set OPENROUTER_API_KEY in .env)
# To use Anthropic directly, change to: anthropic/claude-opus-4-20250514
model:
model_name: "openrouter/anthropic/claude-opus-4"
cost_tracking: "ignore_errors"
model_kwargs:
max_tokens: 16384
temperature: 0
================================================
FILE: eval/configs/models/claude-sonnet.yaml
================================================
# Claude Sonnet 4 — strong all-around model
# Via OpenRouter (set OPENROUTER_API_KEY in .env)
# To use Anthropic directly, change to: anthropic/claude-sonnet-4-20250514
model:
model_name: "openrouter/anthropic/claude-sonnet-4"
cost_tracking: "ignore_errors"
model_kwargs:
max_tokens: 16384
temperature: 0
================================================
FILE: eval/configs/models/deepseek-chat.yaml
================================================
model: deepseek-ai/deepseek-chat
provider: openrouter
cost:
input: 0.14 # per 1M tokens
output: 0.28 # per 1M tokens
# Native DeepSeek API (direct)
api_key: null
base_url: null
# For OpenRouter, uncomment below and comment out direct config above
# api_key: \${OPENROUTER_API_KEY}
# base_url: https://openrouter.ai/api/v1
================================================
FILE: eval/configs/models/deepseek-v3.yaml
================================================
model: deepseek-ai/DeepSeek-V3
provider: openrouter
cost:
input: 0.27 # per 1M tokens
output: 1.10 # per 1M tokens
# Native DeepSeek API (direct)
# Get your API key at: https://platform.deepseek.com/
# Or use OpenRouter with: OPENROUTER_API_KEY
api_key: null
base_url: null
# For OpenRouter, uncomment below and comment out direct config above
# api_key: \${OPENROUTER_API_KEY}
# base_url: https://openrouter.ai/api/v1
================================================
FILE: eval/configs/models/glm-4.7.yaml
================================================
# GLM 4.7 — via OpenRouter (set OPENROUTER_API_KEY in .env)
model:
model_name: "openrouter/zhipuai/glm-4.7"
cost_tracking: "ignore_errors"
model_kwargs:
max_tokens: 8192
temperature: 0
================================================
FILE: eval/configs/models/glm-5.yaml
================================================
# GLM 5 — via OpenRouter (set OPENROUTER_API_KEY in .env)
model:
model_name: "openrouter/zhipuai/glm-5"
cost_tracking: "ignore_errors"
model_kwargs:
max_tokens: 8192
temperature: 0
================================================
FILE: eval/configs/models/minimax-2.5.yaml
================================================
# MiniMax M1 2.5 — via OpenRouter (set OPENROUTER_API_KEY in .env)
model:
model_name: "openrouter/minimax/minimax-m1-2.5"
cost_tracking: "ignore_errors"
model_kwargs:
max_tokens: 8192
temperature: 0
================================================
FILE: eval/configs/models/minimax-m2.1.yaml
================================================
# MiniMax M2.5 — via OpenRouter (set OPENROUTER_API_KEY in .env)
# Uses text-based model class because MiniMax doesn't support tool_calls natively.
# The action_regex tells mini-swe-agent to parse ```bash blocks from responses.
model:
model_class: litellm_textbased
model_name: "openrouter/minimax/minimax-m2.5"
action_regex: "```(?:bash|mswea_bash_command)\\s*\\n(.*?)\\n```"
cost_tracking: "ignore_errors"
model_kwargs:
max_tokens: 8192
temperature: 0
================================================
FILE: eval/configs/modes/baseline.yaml
================================================
# Baseline mode — no GitNexus, pure mini-swe-agent (control group)
agent:
agent_class: "eval.agents.gitnexus_agent.GitNexusAgent"
gitnexus_mode: "baseline"
step_limit: 30
cost_limit: 3.0
environment:
environment_class: "docker"
================================================
FILE: eval/configs/modes/native.yaml
================================================
# Native mode — GitNexus tools only, no grep enrichment
#
# Explicit tools: gitnexus-query, gitnexus-context, gitnexus-impact, gitnexus-cypher
# Available as fast bash commands (~100ms via eval-server)
#
# Use this mode to isolate the value of explicit tools without grep augmentation.
agent:
agent_class: "eval.agents.gitnexus_agent.GitNexusAgent"
gitnexus_mode: "native"
step_limit: 30
cost_limit: 3.0
track_gitnexus_usage: true
environment:
environment_class: "eval.environments.gitnexus_docker.GitNexusDockerEnvironment"
enable_gitnexus: true
skip_embeddings: true
gitnexus_timeout: 120
eval_server_port: 4848
================================================
FILE: eval/configs/modes/native_augment.yaml
================================================
# Native + Augment mode — the primary evaluation mode
#
# Combines two capabilities (mirroring the Claude Code model):
# 1. Explicit GitNexus tools: gitnexus-query, gitnexus-context, gitnexus-impact, gitnexus-cypher
# Available as fast bash commands (~100ms via eval-server)
# 2. Automatic grep enrichment: grep/rg results are transparently augmented with
# [GitNexus] annotations showing callers, callees, and execution flows
#
# The agent decides when to use explicit tools vs rely on enriched grep results.
agent:
agent_class: "eval.agents.gitnexus_agent.GitNexusAgent"
gitnexus_mode: "native_augment"
step_limit: 30
cost_limit: 3.0
augment_timeout: 5.0
augment_min_pattern_length: 3
track_gitnexus_usage: true
environment:
environment_class: "eval.environments.gitnexus_docker.GitNexusDockerEnvironment"
enable_gitnexus: true
skip_embeddings: true
gitnexus_timeout: 120
eval_server_port: 4848
================================================
FILE: eval/environments/__init__.py
================================================
================================================
FILE: eval/environments/gitnexus_docker.py
================================================
"""
GitNexus Docker Environment for SWE-bench Evaluation
Extends mini-swe-agent's Docker environment to:
1. Install GitNexus (Node.js + npm + gitnexus package)
2. Run `gitnexus analyze` on the repository
3. Start the eval-server daemon (persistent HTTP server with warm KuzuDB)
4. Install standalone tool scripts in /usr/local/bin/ (works with subprocess.run)
5. Cache indexes per (repo, base_commit) to avoid re-indexing
IMPORTANT: mini-swe-agent runs every command with subprocess.run in a fresh subshell.
This means .bashrc is NOT sourced, exported functions are NOT available, and env vars
don't persist. The tool scripts must be standalone executables in $PATH.
Architecture:
Agent bash cmd → /usr/local/bin/gitnexus-query → curl localhost:4848/tool/query → eval-server → KuzuDB
Fallback: → npx gitnexus query (cold start, slower)
Tool call latency: ~50-100ms via eval-server, ~5-10s via CLI fallback.
"""
import hashlib
import json
import logging
import shutil
import time
from pathlib import Path
from minisweagent.environments.docker import DockerEnvironment
logger = logging.getLogger("gitnexus_docker")
DEFAULT_CACHE_DIR = Path.home() / ".gitnexus-eval-cache"
EVAL_SERVER_PORT = 4848
# Standalone tool scripts installed into /usr/local/bin/ inside the container.
# Each script calls the eval-server via curl, with a CLI fallback.
# These are standalone — no sourcing, no env inheritance needed.
TOOL_SCRIPT_QUERY = r'''#!/bin/bash
PORT="${GITNEXUS_EVAL_PORT:-__PORT__}"
query="$1"; task_ctx="${2:-}"; goal="${3:-}"
[ -z "$query" ] && echo "Usage: gitnexus-query <query> [task_context] [goal]" && exit 1
args="{\"query\": \"$query\""
[ -n "$task_ctx" ] && args="$args, \"task_context\": \"$task_ctx\""
[ -n "$goal" ] && args="$args, \"goal\": \"$goal\""
args="$args}"
result=$(curl -sf -X POST "http://127.0.0.1:${PORT}/tool/query" -H "Content-Type: application/json" -d "$args" 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$result" ]; then echo "$result"; exit 0; fi
cd /testbed && npx gitnexus query "$query" 2>&1
'''
TOOL_SCRIPT_CONTEXT = r'''#!/bin/bash
PORT="${GITNEXUS_EVAL_PORT:-__PORT__}"
name="$1"; file_path="${2:-}"
[ -z "$name" ] && echo "Usage: gitnexus-context <symbol_name> [file_path]" && exit 1
args="{\"name\": \"$name\""
[ -n "$file_path" ] && args="$args, \"file_path\": \"$file_path\""
args="$args}"
result=$(curl -sf -X POST "http://127.0.0.1:${PORT}/tool/context" -H "Content-Type: application/json" -d "$args" 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$result" ]; then echo "$result"; exit 0; fi
cd /testbed && npx gitnexus context "$name" 2>&1
'''
TOOL_SCRIPT_IMPACT = r'''#!/bin/bash
PORT="${GITNEXUS_EVAL_PORT:-__PORT__}"
target="$1"; direction="${2:-upstream}"
[ -z "$target" ] && echo "Usage: gitnexus-impact <symbol_name> [upstream|downstream]" && exit 1
result=$(curl -sf -X POST "http://127.0.0.1:${PORT}/tool/impact" -H "Content-Type: application/json" -d "{\"target\": \"$target\", \"direction\": \"$direction\"}" 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$result" ]; then echo "$result"; exit 0; fi
cd /testbed && npx gitnexus impact "$target" --direction "$direction" 2>&1
'''
TOOL_SCRIPT_CYPHER = r'''#!/bin/bash
PORT="${GITNEXUS_EVAL_PORT:-__PORT__}"
query="$1"
[ -z "$query" ] && echo "Usage: gitnexus-cypher <cypher_query>" && exit 1
result=$(curl -sf -X POST "http://127.0.0.1:${PORT}/tool/cypher" -H "Content-Type: application/json" -d "{\"query\": \"$query\"}" 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$result" ]; then echo "$result"; exit 0; fi
cd /testbed && npx gitnexus cypher "$query" 2>&1
'''
TOOL_SCRIPT_AUGMENT = r'''#!/bin/bash
cd /testbed && npx gitnexus augment "$1" 2>&1 || true
'''
TOOL_SCRIPT_OVERVIEW = r'''#!/bin/bash
PORT="${GITNEXUS_EVAL_PORT:-__PORT__}"
echo "=== Code Knowledge Graph Overview ==="
result=$(curl -sf -X POST "http://127.0.0.1:${PORT}/tool/list_repos" -H "Content-Type: application/json" -d "{}" 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$result" ]; then echo "$result"; exit 0; fi
cd /testbed && npx gitnexus list 2>&1
'''
class GitNexusDockerEnvironment(DockerEnvironment):
"""
Docker environment with GitNexus pre-installed, indexed, and eval-server running.
Setup flow:
1. Start Docker container (base SWE-bench image)
2. Install Node.js + gitnexus inside the container
3. Run `gitnexus analyze` (or restore from cache)
4. Start `gitnexus eval-server` daemon (keeps KuzuDB warm)
5. Install standalone tool scripts in /usr/local/bin/
6. Agent runs with near-instant GitNexus tool calls
"""
def __init__(
self,
*,
enable_gitnexus: bool = True,
cache_dir: str | Path | None = None,
skip_embeddings: bool = True,
gitnexus_timeout: int = 120,
eval_server_port: int = EVAL_SERVER_PORT,
**kwargs,
):
super().__init__(**kwargs)
self.enable_gitnexus = enable_gitnexus
self.cache_dir = Path(cache_dir) if cache_dir else DEFAULT_CACHE_DIR
self.skip_embeddings = skip_embeddings
self.gitnexus_timeout = gitnexus_timeout
self.eval_server_port = eval_server_port
self.index_time: float = 0.0
self._gitnexus_ready = False
def start(self) -> dict:
"""Start the container and set up GitNexus."""
result = super().start()
if self.enable_gitnexus:
try:
self._setup_gitnexus()
except Exception as e:
logger.warning(f"GitNexus setup failed, continuing without it: {e}")
self._gitnexus_ready = False
return result
def _setup_gitnexus(self):
"""Install and configure GitNexus in the container."""
start = time.time()
self._ensure_nodejs()
self._install_gitnexus()
self._index_repository()
self._start_eval_server()
self._install_tools()
self.index_time = time.time() - start
self._gitnexus_ready = True
logger.info(f"GitNexus setup completed in {self.index_time:.1f}s")
def _ensure_nodejs(self):
"""Ensure Node.js >= 18 is available in the container."""
check = self.execute({"command": "node --version 2>/dev/null || echo 'NOT_FOUND'"})
output = check.get("output", "").strip()
if "NOT_FOUND" in output:
logger.info("Installing Node.js in container...")
install_cmds = [
"apt-get update -qq",
"apt-get install -y -qq curl ca-certificates",
"curl -fsSL https://deb.nodesource.com/setup_20.x | bash -",
"apt-get install -y -qq nodejs",
]
for cmd in install_cmds:
result = self.execute({"command": cmd, "timeout": 60})
if result.get("returncode", 1) != 0:
raise RuntimeError(f"Failed to install Node.js: {result.get('output', '')}")
else:
logger.info(f"Node.js already available: {output}")
def _install_gitnexus(self):
"""Install the gitnexus npm package globally."""
check = self.execute({"command": "npx gitnexus --version 2>/dev/null || echo 'NOT_FOUND'"})
if "NOT_FOUND" in check.get("output", ""):
logger.info("Installing gitnexus...")
result = self.execute({
"command": "npm install -g gitnexus",
"timeout": 60,
})
if result.get("returncode", 1) != 0:
raise RuntimeError(f"Failed to install gitnexus: {result.get('output', '')}")
def _index_repository(self):
"""Run gitnexus analyze on the repo, using cache if available."""
repo_info = self._get_repo_info()
cache_key = self._make_cache_key(repo_info)
cache_path = self.cache_dir / cache_key
if cache_path.exists():
logger.info(f"Restoring GitNexus index from cache: {cache_key}")
self._restore_cache(cache_path)
return
logger.info("Running gitnexus analyze...")
skip_flag = "--skip-embeddings" if self.skip_embeddings else ""
result = self.execute({
"command": f"cd /testbed && npx gitnexus analyze . {skip_flag} 2>&1",
"timeout": self.gitnexus_timeout,
})
if result.get("returncode", 1) != 0:
output = result.get("output", "")
if "error" in output.lower() and "indexed" not in output.lower():
raise RuntimeError(f"gitnexus analyze failed: {output[-500:]}")
self._save_cache(cache_path, repo_info)
def _start_eval_server(self):
"""Start the GitNexus eval-server daemon in the background."""
logger.info(f"Starting eval-server on port {self.eval_server_port}...")
self.execute({
"command": (
f"nohup npx gitnexus eval-server --port {self.eval_server_port} "
f"--idle-timeout 600 "
f"> /tmp/gitnexus-eval-server.log 2>&1 &"
),
"timeout": 5,
})
# Wait for the server to be ready (up to 15s for KuzuDB init)
for i in range(30):
time.sleep(0.5)
health = self.execute({
"command": f"curl -sf http://127.0.0.1:{self.eval_server_port}/health 2>/dev/null || echo 'NOT_READY'",
"timeout": 3,
})
output = health.get("output", "").strip()
if "NOT_READY" not in output and "ok" in output:
logger.info(f"Eval-server ready after {(i + 1) * 0.5:.1f}s")
return
log_output = self.execute({
"command": "cat /tmp/gitnexus-eval-server.log 2>/dev/null | tail -20",
})
logger.warning(
f"Eval-server didn't become ready in 15s. "
f"Tools will fall back to direct CLI.\n"
f"Server log: {log_output.get('output', 'N/A')}"
)
def _install_tools(self):
"""
Install standalone GitNexus tool scripts in /usr/local/bin/.
Each script is a self-contained bash script that:
1. Calls the eval-server via curl (fast path, ~100ms)
2. Falls back to direct CLI if eval-server is unavailable
These are standalone executables — no sourcing, env inheritance, or .bashrc
needed. This is critical because mini-swe-agent runs every command via
subprocess.run in a fresh subshell.
Uses heredocs with quoted delimiter to avoid all quoting/escaping issues.
"""
port = str(self.eval_server_port)
tools = {
"gitnexus-query": TOOL_SCRIPT_QUERY,
"gitnexus-context": TOOL_SCRIPT_CONTEXT,
"gitnexus-impact": TOOL_SCRIPT_IMPACT,
"gitnexus-cypher": TOOL_SCRIPT_CYPHER,
"gitnexus-augment": TOOL_SCRIPT_AUGMENT,
"gitnexus-overview": TOOL_SCRIPT_OVERVIEW,
}
for name, script in tools.items():
script_content = script.replace("__PORT__", port).strip()
# Use heredoc with quoted delimiter — prevents all variable expansion and quoting issues
self.execute({
"command": f"cat << 'GITNEXUS_SCRIPT_EOF' > /usr/local/bin/{name}\n{script_content}\nGITNEXUS_SCRIPT_EOF\nchmod +x /usr/local/bin/{name}",
"timeout": 5,
})
logger.info(f"Installed {len(tools)} GitNexus tool scripts in /usr/local/bin/")
def _get_repo_info(self) -> dict:
"""Get repository identity info from the container."""
repo_result = self.execute({
"command": "cd /testbed && basename $(git remote get-url origin 2>/dev/null || basename $(pwd)) .git"
})
commit_result = self.execute({"command": "cd /testbed && git rev-parse HEAD 2>/dev/null || echo unknown"})
return {
"repo": repo_result.get("output", "unknown").strip(),
"commit": commit_result.get("output", "unknown").strip(),
}
@staticmethod
def _make_cache_key(repo_info: dict) -> str:
"""Create a deterministic cache key from repo info."""
content = f"{repo_info['repo']}:{repo_info['commit']}"
return hashlib.sha256(content.encode()).hexdigest()[:16]
def _save_cache(self, cache_path: Path, repo_info: dict):
"""Save the GitNexus index to the host cache directory."""
try:
cache_path.mkdir(parents=True, exist_ok=True)
find_result = self.execute({
"command": "find /root/.gitnexus -name 'kuzu' -type d 2>/dev/null | head -1"
})
gitnexus_dir = find_result.get("output", "").strip()
if gitnexus_dir:
parent = str(Path(gitnexus_dir).parent)
self.execute({
"command": f"cd {parent} && tar czf /tmp/gitnexus-cache.tar.gz .",
"timeout": 30,
})
container_id = getattr(self, "_container_id", None) or getattr(self, "container_id", None)
if container_id:
import subprocess as sp
sp.run(
["docker", "cp", f"{container_id}:/tmp/gitnexus-cache.tar.gz",
str(cache_path / "index.tar.gz")],
check=True, capture_output=True,
)
(cache_path / "metadata.json").write_text(json.dumps(repo_info, indent=2))
logger.info(f"Cached GitNexus index: {cache_path}")
except Exception as e:
logger.warning(f"Failed to cache GitNexus index: {e}")
if cache_path.exists():
shutil.rmtree(cache_path, ignore_errors=True)
def _restore_cache(self, cache_path: Path):
"""Restore a cached GitNexus index into the container."""
try:
cache_tarball = cache_path / "index.tar.gz"
if not cache_tarball.exists():
logger.warning("Cache tarball not found, re-indexing")
self._index_repository()
return
container_id = getattr(self, "_container_id", None) or getattr(self, "container_id", None)
if container_id:
import subprocess as sp
self.execute({"command": "mkdir -p /root/.gitnexus"})
storage_result = self.execute({
"command": "npx gitnexus list 2>/dev/null | grep -o '/root/.gitnexus/[^ ]*' | head -1 || echo '/root/.gitnexus/repos/default'"
})
storage_path = storage_result.get("output", "").strip() or "/root/.gitnexus/repos/default"
self.execute({"command": f"mkdir -p {storage_path}"})
sp.run(
["docker", "cp", str(cache_tarball), f"{container_id}:/tmp/gitnexus-cache.tar.gz"],
check=True, capture_output=True,
)
self.execute({
"command": f"cd {storage_path} && tar xzf /tmp/gitnexus-cache.tar.gz",
"timeout": 30,
})
logger.info("GitNexus index restored from cache")
except Exception as e:
logger.warning(f"Failed to restore cache, re-indexing: {e}")
self._index_repository()
def stop(self) -> dict:
"""Stop the container, shutting down eval-server first."""
if self._gitnexus_ready:
try:
self.execute({
"command": f"curl -sf -X POST http://127.0.0.1:{self.eval_server_port}/shutdown 2>/dev/null || true",
"timeout": 3,
})
except Exception:
pass
return super().stop()
def get_template_vars(self) -> dict:
"""Add GitNexus-specific template variables."""
base_vars = super().get_template_vars()
base_vars["gitnexus_ready"] = self._gitnexus_ready
base_vars["gitnexus_index_time"] = self.index_time
return base_vars
def serialize(self) -> dict:
"""Include GitNexus environment info in serialization."""
base = super().serialize()
base.setdefault("info", {})["gitnexus_env"] = {
"enabled": self.enable_gitnexus,
"ready": self._gitnexus_ready,
"index_time_seconds": round(self.index_time, 2),
"skip_embeddings": self.skip_embeddings,
"eval_server_port": self.eval_server_port,
}
return base
================================================
FILE: eval/prompts/instance_baseline.jinja
================================================
Please solve this issue: {{task}}
You can execute bash commands and edit files to implement the necessary changes.
## Recommended Workflow
This workflows should be done step-by-step so that you can iterate on your changes and any possible problems.
1. Analyze the codebase by finding and reading relevant files
2. Create a script to reproduce the issue
3. Edit the source code to resolve the issue
4. Verify your fix works by running your script again
5. Test edge cases to ensure your fix is robust
6. Submit your changes and finish your work by issuing the following command: `echo COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT`.
Do not combine it with any other command. After this command, you cannot continue working on this task.
## Important Rules
1. Every response must contain exactly one action
2. The action must be enclosed in triple backticks
3. Directory or environment variable changes are not persistent. Every action is executed in a new subshell.
However, you can prefix any action with `MY_ENV_VAR=MY_VALUE cd /path/to/working/dir && ...` or write/load environment variables from files
<system_info>
{{system}} {{release}} {{version}} {{machine}}
</system_info>
## Formatting your response
Here is an example of a correct response:
<example_response>
THOUGHT: I need to understand the structure of the repository first. Let me check what files are in the current directory to get a better understanding of the codebase.
```mswea_bash_command
ls -la
```
</example_response>
## Useful command examples
### Create a new file:
```bash
cat <<'EOF' > newfile.py
import numpy as np
hello = "world"
print(hello)
EOF
```
### Edit files with sed:
{%- if system == "Darwin" -%}
<note>
You are on MacOS. For all the below examples, you need to use `sed -i ''` instead of `sed -i`.
</note>
{%- endif -%}
```bash
# Replace all occurrences
sed -i 's/old_string/new_string/g' filename.py
# Replace only first occurrence
sed -i 's/old_string/new_string/' filename.py
# Replace all occurrences in lines 1-10
sed -i '1,10s/old_string/new_string/g' filename.py
```
### View file content:
```bash
# View specific lines with numbers
nl -ba filename.py | sed -n '10,20p'
```
### Any other command you want to run
```bash
anything
```
================================================
FILE: eval/prompts/instance_native.jinja
================================================
Please solve this issue: {{task}}
You can execute bash commands and edit files to implement the necessary changes.
## Recommended Workflow
Work step-by-step so you can iterate on your changes and catch problems early.
1. **Understand the issue** — read the problem statement, identify the symptom and affected area
2. **Find the relevant code** — use `gitnexus-query "<feature area>"` to find execution flows, or `grep` for specific strings
3. **Understand the suspect** — use `gitnexus-context "<symbol>"` to see all callers and callees, then `cat` to read the source
4. **Check blast radius** — before editing shared code, run `gitnexus-impact "<symbol>" upstream` to see what depends on it
5. **Implement the fix** — make minimal, targeted changes
6. **Verify** — run relevant tests, check edge cases
7. **Submit** — issue: `echo COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT`
Do not combine it with any other command. After this command, you cannot continue working on this task.
## Debugging Patterns
| Symptom | Approach |
|---------|----------|
| Error message / exception | `gitnexus-query` for error text → `gitnexus-context` on throw sites |
| Wrong return value | `gitnexus-context` on the function → trace callees for data flow |
| Missing feature / incomplete behavior | `gitnexus-query` for feature area → find the execution flow → locate the gap |
| Need to understand callers | `gitnexus-context` — graph-complete, finds callers grep would miss |
## Risk Assessment
Before editing shared code, check the blast radius:
| Impact | Risk | Action |
|--------|------|--------|
| <5 symbols at d=1 | Low | Fix with confidence |
| 5-15 symbols at d=1 | Medium | Fix carefully, run broader tests |
| >15 symbols at d=1 | High | Minimal change, run full test suite |
## Important Rules
1. Every response must contain exactly one action
2. The action must be enclosed in triple backticks
3. Directory or environment variable changes are not persistent. Every action is executed in a new subshell.
However, you can prefix any action with `MY_ENV_VAR=MY_VALUE cd /path/to/working/dir && ...` or write/load environment variables from files
4. Make minimal, targeted changes. Don't refactor unrelated code.
5. GitNexus tools are ~100ms. Use them when they save you multiple grep iterations.
<system_info>
{{system}} {{release}} {{version}} {{machine}}
</system_info>
## Formatting your response
Here is an example of a correct response:
<example_response>
THOUGHT: The issue mentions a problem with form field validation. Let me search the code knowledge graph for the relevant execution flows to understand how validation works in this codebase.
```mswea_bash_command
gitnexus-query "form field validation"
```
</example_response>
## Useful command examples
### Create a new file:
```bash
cat <<'EOF' > newfile.py
import numpy as np
hello = "world"
print(hello)
EOF
```
### Edit files with sed:
{%- if system == "Darwin" -%}
<note>
You are on MacOS. For all the below examples, you need to use `sed -i ''` instead of `sed -i`.
</note>
{%- endif -%}
```bash
# Replace all occurrences
sed -i 's/old_string/new_string/g' filename.py
# Replace only first occurrence
sed -i 's/old_string/new_string/' filename.py
# Replace all occurrences in lines 1-10
sed -i '1,10s/old_string/new_string/g' filename.py
```
### View file content:
```bash
# View specific lines with numbers
nl -ba filename.py | sed -n '10,20p'
```
### Any other command you want to run
```bash
anything
```
================================================
FILE: eval/prompts/instance_native_augment.jinja
================================================
Please solve this issue: {{task}}
You can execute bash commands and edit files to implement the necessary changes.
## Recommended Workflow
Work step-by-step so you can iterate on your changes and catch problems early.
1. **Understand the issue** — read the problem statement, identify the symptom and affected area
2. **Find the relevant code** — use `gitnexus-query "<feature area>"` to find execution flows, or `grep` for specific strings
3. **Understand the suspect** — use `gitnexus-context "<symbol>"` to see all callers and callees, then `cat` to read the source
4. **Check blast radius** — before editing shared code, run `gitnexus-impact "<symbol>" upstream` to see what depends on it
5. **Implement the fix** — make minimal, targeted changes
6. **Verify** — run relevant tests, check edge cases
7. **Submit** — issue: `echo COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT`
Do not combine it with any other command. After this command, you cannot continue working on this task.
## Debugging Patterns
| Symptom | Approach |
|---------|----------|
| Error message / exception | `gitnexus-query` for error text → `gitnexus-context` on throw sites |
| Wrong return value | `gitnexus-context` on the function → trace callees for data flow |
| Missing feature / incomplete behavior | `gitnexus-query` for feature area → find the execution flow → locate the gap |
| Need to understand callers | `gitnexus-context` — graph-complete, finds callers grep would miss |
## Risk Assessment
Before editing shared code, check the blast radius:
| Impact | Risk | Action |
|--------|------|--------|
| <5 symbols at d=1 | Low | Fix with confidence |
| 5-15 symbols at d=1 | Medium | Fix carefully, run broader tests |
| >15 symbols at d=1 | High | Minimal change, run full test suite |
## Important Rules
1. Every response must contain exactly one action
2. The action must be enclosed in triple backticks
3. Directory or environment variable changes are not persistent. Every action is executed in a new subshell.
However, you can prefix any action with `MY_ENV_VAR=MY_VALUE cd /path/to/working/dir && ...` or write/load environment variables from files
4. Make minimal, targeted changes. Don't refactor unrelated code.
5. GitNexus tools are ~100ms. Use them when they save you multiple grep iterations.
6. When grep results show `[GitNexus]` enrichments, use those for navigation.
<system_info>
{{system}} {{release}} {{version}} {{machine}}
</system_info>
## Formatting your response
Here is an example of a correct response:
<example_response>
THOUGHT: The issue mentions a problem with form field validation. Let me search the code knowledge graph for the relevant execution flows to understand how validation works in this codebase.
```mswea_bash_command
gitnexus-query "form field validation"
```
</example_response>
## Useful command examples
### Create a new file:
```bash
cat <<'EOF' > newfile.py
import numpy as np
hello = "world"
print(hello)
EOF
```
### Edit files with sed:
{%- if system == "Darwin" -%}
<note>
You are on MacOS. For all the below examples, you need to use `sed -i ''` instead of `sed -i`.
</note>
{%- endif -%}
```bash
# Replace all occurrences
sed -i 's/old_string/new_string/g' filename.py
# Replace only first occurrence
sed -i 's/old_string/new_string/' filename.py
# Replace all occurrences in lines 1-10
sed -i '1,10s/old_string/new_string/g' filename.py
```
### View file content:
```bash
# View specific lines with numbers
nl -ba filename.py | sed -n '10,20p'
```
### Any other command you want to run
```bash
anything
```
================================================
FILE: eval/prompts/system_baseline.jinja
================================================
You are a helpful assistant that can interact with a computer to solve software engineering tasks.
Your response must contain exactly ONE bash code block with ONE command (or commands
gitextract_jd_m7yp2/ ├── .claude/ │ └── skills/ │ └── gitnexus/ │ ├── gitnexus-cli/ │ │ └── SKILL.md │ ├── gitnexus-debugging/ │ │ └── SKILL.md │ ├── gitnexus-exploring/ │ │ └── SKILL.md │ ├── gitnexus-guide/ │ │ └── SKILL.md │ ├── gitnexus-impact-analysis/ │ │ └── SKILL.md │ ├── gitnexus-pr-review/ │ │ └── SKILL.md │ └── gitnexus-refactoring/ │ └── SKILL.md ├── .claude-plugin/ │ └── marketplace.json ├── .cursorrules ├── .github/ │ ├── FUNDING.yml │ ├── actions/ │ │ └── setup-gitnexus/ │ │ └── action.yml │ ├── release.yml │ └── workflows/ │ ├── ci-quality.yml │ ├── ci-report.yml │ ├── ci-tests.yml │ ├── ci.yml │ ├── claude-code-review.yml │ ├── claude.yml │ └── publish.yml ├── .gitignore ├── .history/ │ └── gitnexus/ │ └── vitest.config_20260317171253.ts ├── .mcp.json ├── .sisyphus/ │ └── drafts/ │ ├── gitnexus-brainstorming.md │ └── noodlbox-comparison.md ├── .windsurfrules ├── AGENTS.md ├── CHANGELOG.md ├── CLAUDE.md ├── LICENSE ├── README.md ├── compound-engineering.local.md ├── eval/ │ ├── .gitignore │ ├── README.md │ ├── __init__.py │ ├── agents/ │ │ ├── __init__.py │ │ └── gitnexus_agent.py │ ├── analysis/ │ │ ├── __init__.py │ │ └── analyze_results.py │ ├── bridge/ │ │ ├── __init__.py │ │ ├── gitnexus_tools.sh │ │ └── mcp_bridge.py │ ├── configs/ │ │ ├── models/ │ │ │ ├── claude-haiku.yaml │ │ │ ├── claude-opus.yaml │ │ │ ├── claude-sonnet.yaml │ │ │ ├── deepseek-chat.yaml │ │ │ ├── deepseek-v3.yaml │ │ │ ├── glm-4.7.yaml │ │ │ ├── glm-5.yaml │ │ │ ├── minimax-2.5.yaml │ │ │ └── minimax-m2.1.yaml │ │ └── modes/ │ │ ├── baseline.yaml │ │ ├── native.yaml │ │ └── native_augment.yaml │ ├── environments/ │ │ ├── __init__.py │ │ └── gitnexus_docker.py │ ├── prompts/ │ │ ├── instance_baseline.jinja │ │ ├── instance_native.jinja │ │ ├── instance_native_augment.jinja │ │ ├── system_baseline.jinja │ │ ├── system_native.jinja │ │ └── system_native_augment.jinja │ ├── pyproject.toml │ └── run_eval.py ├── gitnexus/ │ ├── .claude/ │ │ └── settings.local.json │ ├── .npmignore │ ├── CHANGELOG.md │ ├── Dockerfile.test │ ├── README.md │ ├── hooks/ │ │ └── claude/ │ │ ├── gitnexus-hook.cjs │ │ ├── pre-tool-use.sh │ │ └── session-start.sh │ ├── package.json │ ├── scripts/ │ │ └── patch-tree-sitter-swift.cjs │ ├── skills/ │ │ ├── gitnexus-cli.md │ │ ├── gitnexus-debugging.md │ │ ├── gitnexus-exploring.md │ │ ├── gitnexus-guide.md │ │ ├── gitnexus-impact-analysis.md │ │ ├── gitnexus-pr-review.md │ │ └── gitnexus-refactoring.md │ ├── src/ │ │ ├── cli/ │ │ │ ├── ai-context.ts │ │ │ ├── analyze.ts │ │ │ ├── augment.ts │ │ │ ├── clean.ts │ │ │ ├── eval-server.ts │ │ │ ├── index.ts │ │ │ ├── lazy-action.ts │ │ │ ├── list.ts │ │ │ ├── mcp.ts │ │ │ ├── serve.ts │ │ │ ├── setup.ts │ │ │ ├── skill-gen.ts │ │ │ ├── status.ts │ │ │ ├── tool.ts │ │ │ └── wiki.ts │ │ ├── config/ │ │ │ ├── ignore-service.ts │ │ │ └── supported-languages.ts │ │ ├── core/ │ │ │ ├── augmentation/ │ │ │ │ └── engine.ts │ │ │ ├── embeddings/ │ │ │ │ ├── embedder.ts │ │ │ │ ├── embedding-pipeline.ts │ │ │ │ ├── index.ts │ │ │ │ ├── text-generator.ts │ │ │ │ └── types.ts │ │ │ ├── graph/ │ │ │ │ ├── graph.ts │ │ │ │ └── types.ts │ │ │ ├── ingestion/ │ │ │ │ ├── ast-cache.ts │ │ │ │ ├── call-processor.ts │ │ │ │ ├── call-routing.ts │ │ │ │ ├── cluster-enricher.ts │ │ │ │ ├── community-processor.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── entry-point-scoring.ts │ │ │ │ ├── export-detection.ts │ │ │ │ ├── filesystem-walker.ts │ │ │ │ ├── framework-detection.ts │ │ │ │ ├── heritage-processor.ts │ │ │ │ ├── import-processor.ts │ │ │ │ ├── language-config.ts │ │ │ │ ├── mro-processor.ts │ │ │ │ ├── named-binding-extraction.ts │ │ │ │ ├── parsing-processor.ts │ │ │ │ ├── pipeline.ts │ │ │ │ ├── process-processor.ts │ │ │ │ ├── resolution-context.ts │ │ │ │ ├── resolvers/ │ │ │ │ │ ├── csharp.ts │ │ │ │ │ ├── go.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── jvm.ts │ │ │ │ │ ├── php.ts │ │ │ │ │ ├── python.ts │ │ │ │ │ ├── ruby.ts │ │ │ │ │ ├── rust.ts │ │ │ │ │ ├── standard.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── structure-processor.ts │ │ │ │ ├── symbol-table.ts │ │ │ │ ├── tree-sitter-queries.ts │ │ │ │ ├── type-env.ts │ │ │ │ ├── type-extractors/ │ │ │ │ │ ├── c-cpp.ts │ │ │ │ │ ├── csharp.ts │ │ │ │ │ ├── go.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── jvm.ts │ │ │ │ │ ├── php.ts │ │ │ │ │ ├── python.ts │ │ │ │ │ ├── ruby.ts │ │ │ │ │ ├── rust.ts │ │ │ │ │ ├── shared.ts │ │ │ │ │ ├── swift.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── typescript.ts │ │ │ │ ├── utils.ts │ │ │ │ └── workers/ │ │ │ │ ├── parse-worker.ts │ │ │ │ └── worker-pool.ts │ │ │ ├── lbug/ │ │ │ │ ├── csv-generator.ts │ │ │ │ ├── lbug-adapter.ts │ │ │ │ └── schema.ts │ │ │ ├── search/ │ │ │ │ ├── bm25-index.ts │ │ │ │ └── hybrid-search.ts │ │ │ ├── tree-sitter/ │ │ │ │ └── parser-loader.ts │ │ │ └── wiki/ │ │ │ ├── generator.ts │ │ │ ├── graph-queries.ts │ │ │ ├── html-viewer.ts │ │ │ ├── llm-client.ts │ │ │ └── prompts.ts │ │ ├── lib/ │ │ │ └── utils.ts │ │ ├── mcp/ │ │ │ ├── compatible-stdio-transport.ts │ │ │ ├── core/ │ │ │ │ ├── embedder.ts │ │ │ │ └── lbug-adapter.ts │ │ │ ├── local/ │ │ │ │ └── local-backend.ts │ │ │ ├── resources.ts │ │ │ ├── server.ts │ │ │ ├── staleness.ts │ │ │ └── tools.ts │ │ ├── server/ │ │ │ ├── api.ts │ │ │ └── mcp-http.ts │ │ ├── storage/ │ │ │ ├── git.ts │ │ │ └── repo-manager.ts │ │ └── types/ │ │ └── pipeline.ts │ ├── test/ │ │ ├── fixtures/ │ │ │ ├── lang-resolution/ │ │ │ │ ├── cpp-ambiguous/ │ │ │ │ │ ├── handler_a.h │ │ │ │ │ ├── handler_b.h │ │ │ │ │ └── processor.h │ │ │ │ ├── cpp-assignment-chain/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.h │ │ │ │ │ │ └── User.h │ │ │ │ │ └── services/ │ │ │ │ │ └── App.cpp │ │ │ │ ├── cpp-brace-init-inference/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.h │ │ │ │ │ │ └── User.h │ │ │ │ │ └── services/ │ │ │ │ │ └── App.cpp │ │ │ │ ├── cpp-call-result-binding/ │ │ │ │ │ ├── app.cpp │ │ │ │ │ └── user.h │ │ │ │ ├── cpp-calls/ │ │ │ │ │ ├── main.cpp │ │ │ │ │ ├── one.h │ │ │ │ │ └── zero.h │ │ │ │ ├── cpp-chain-call/ │ │ │ │ │ ├── app.cpp │ │ │ │ │ ├── repo.h │ │ │ │ │ ├── service.h │ │ │ │ │ └── user.h │ │ │ │ ├── cpp-constructor-calls/ │ │ │ │ │ ├── app.cpp │ │ │ │ │ └── user.h │ │ │ │ ├── cpp-constructor-type-inference/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.h │ │ │ │ │ │ └── User.h │ │ │ │ │ └── services/ │ │ │ │ │ └── App.cpp │ │ │ │ ├── cpp-deep-field-chain/ │ │ │ │ │ ├── models.h │ │ │ │ │ └── service.cpp │ │ │ │ ├── cpp-default-params/ │ │ │ │ │ └── src/ │ │ │ │ │ └── app.cpp │ │ │ │ ├── cpp-deref-range-for/ │ │ │ │ │ ├── App.cpp │ │ │ │ │ ├── Repo.h │ │ │ │ │ └── User.h │ │ │ │ ├── cpp-diamond/ │ │ │ │ │ ├── animal.h │ │ │ │ │ ├── duck.cpp │ │ │ │ │ ├── duck.h │ │ │ │ │ ├── flyer.h │ │ │ │ │ └── swimmer.h │ │ │ │ ├── cpp-field-types/ │ │ │ │ │ ├── models.h │ │ │ │ │ └── service.cpp │ │ │ │ ├── cpp-grandparent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── A.h │ │ │ │ │ ├── B.h │ │ │ │ │ ├── C.h │ │ │ │ │ ├── Greeting.h │ │ │ │ │ └── app.cpp │ │ │ │ ├── cpp-local-shadow/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.cpp │ │ │ │ │ ├── utils.cpp │ │ │ │ │ └── utils.h │ │ │ │ ├── cpp-member-calls/ │ │ │ │ │ ├── app.cpp │ │ │ │ │ └── user.h │ │ │ │ ├── cpp-method-chain-binding/ │ │ │ │ │ ├── app.cpp │ │ │ │ │ └── models.h │ │ │ │ ├── cpp-nullable-receiver/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.h │ │ │ │ │ │ └── User.h │ │ │ │ │ └── services/ │ │ │ │ │ └── App.cpp │ │ │ │ ├── cpp-overload-param-types/ │ │ │ │ │ └── service.cpp │ │ │ │ ├── cpp-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── BaseModel.h │ │ │ │ │ └── User.h │ │ │ │ ├── cpp-pointer-ref-fields/ │ │ │ │ │ ├── models.h │ │ │ │ │ └── service.cpp │ │ │ │ ├── cpp-range-for/ │ │ │ │ │ ├── App.cpp │ │ │ │ │ ├── Repo.h │ │ │ │ │ └── User.h │ │ │ │ ├── cpp-receiver-resolution/ │ │ │ │ │ ├── app.cpp │ │ │ │ │ ├── repo.h │ │ │ │ │ └── user.h │ │ │ │ ├── cpp-return-type/ │ │ │ │ │ ├── app.cpp │ │ │ │ │ └── user.h │ │ │ │ ├── cpp-return-type-inference/ │ │ │ │ │ ├── app.cpp │ │ │ │ │ ├── repo.h │ │ │ │ │ └── user.h │ │ │ │ ├── cpp-scoped-brace-init/ │ │ │ │ │ ├── main.cpp │ │ │ │ │ └── models.h │ │ │ │ ├── cpp-self-this-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── Repo.cpp │ │ │ │ │ └── User.cpp │ │ │ │ ├── cpp-smart-ptr-dispatch/ │ │ │ │ │ └── src/ │ │ │ │ │ └── app.cpp │ │ │ │ ├── cpp-structured-binding/ │ │ │ │ │ ├── App.cpp │ │ │ │ │ ├── Repo.h │ │ │ │ │ └── User.h │ │ │ │ ├── cpp-variadic-resolution/ │ │ │ │ │ ├── logger.h │ │ │ │ │ └── main.cpp │ │ │ │ ├── cpp-write-access/ │ │ │ │ │ ├── models.h │ │ │ │ │ └── service.cpp │ │ │ │ ├── csharp-alias-imports/ │ │ │ │ │ ├── CsharpAlias.csproj │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── Services/ │ │ │ │ │ └── Main.cs │ │ │ │ ├── csharp-ambiguous/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Handler.cs │ │ │ │ │ │ └── IProcessor.cs │ │ │ │ │ ├── Other/ │ │ │ │ │ │ ├── Handler.cs │ │ │ │ │ │ └── IProcessor.cs │ │ │ │ │ └── Services/ │ │ │ │ │ └── UserHandler.cs │ │ │ │ ├── csharp-assignment-chain/ │ │ │ │ │ ├── AssignmentChain.csproj │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── Program.cs │ │ │ │ ├── csharp-async-binding/ │ │ │ │ │ ├── Order.cs │ │ │ │ │ ├── OrderService.cs │ │ │ │ │ ├── Program.cs │ │ │ │ │ ├── User.cs │ │ │ │ │ └── UserService.cs │ │ │ │ ├── csharp-call-result-binding/ │ │ │ │ │ └── App.cs │ │ │ │ ├── csharp-calls/ │ │ │ │ │ ├── CallProj.csproj │ │ │ │ │ ├── Services/ │ │ │ │ │ │ └── UserService.cs │ │ │ │ │ └── Utils/ │ │ │ │ │ ├── OneArg.cs │ │ │ │ │ └── ZeroArg.cs │ │ │ │ ├── csharp-chain-call/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ ├── Program.cs │ │ │ │ │ └── Services/ │ │ │ │ │ └── UserService.cs │ │ │ │ ├── csharp-deep-field-chain/ │ │ │ │ │ ├── Models.cs │ │ │ │ │ └── Service.cs │ │ │ │ ├── csharp-dictionary-keys-values/ │ │ │ │ │ ├── App.cs │ │ │ │ │ ├── Repo.cs │ │ │ │ │ └── User.cs │ │ │ │ ├── csharp-field-types/ │ │ │ │ │ ├── Models.cs │ │ │ │ │ └── Service.cs │ │ │ │ ├── csharp-foreach/ │ │ │ │ │ ├── ForeachProj.csproj │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── Program.cs │ │ │ │ ├── csharp-generic-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── Models/ │ │ │ │ │ ├── BaseModel.cs │ │ │ │ │ ├── Repo.cs │ │ │ │ │ └── User.cs │ │ │ │ ├── csharp-grandparent-resolution/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── A.cs │ │ │ │ │ │ ├── B.cs │ │ │ │ │ │ ├── C.cs │ │ │ │ │ │ └── Greeting.cs │ │ │ │ │ └── Services/ │ │ │ │ │ └── App.cs │ │ │ │ ├── csharp-is-pattern/ │ │ │ │ │ ├── IsPatternProj.csproj │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── services/ │ │ │ │ │ └── App.cs │ │ │ │ ├── csharp-local-shadow/ │ │ │ │ │ ├── App/ │ │ │ │ │ │ └── Main.cs │ │ │ │ │ └── Utils/ │ │ │ │ │ └── Logger.cs │ │ │ │ ├── csharp-member-calls/ │ │ │ │ │ ├── MemberCallProj.csproj │ │ │ │ │ ├── Models/ │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── Services/ │ │ │ │ │ └── UserService.cs │ │ │ │ ├── csharp-method-chain-binding/ │ │ │ │ │ └── App.cs │ │ │ │ ├── csharp-mixed-decl-chain/ │ │ │ │ │ ├── MixedDeclChain.csproj │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── Program.cs │ │ │ │ ├── csharp-nested-member-foreach/ │ │ │ │ │ ├── App.cs │ │ │ │ │ ├── Repo.cs │ │ │ │ │ └── User.cs │ │ │ │ ├── csharp-null-check-narrowing/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── Services/ │ │ │ │ │ └── App.cs │ │ │ │ ├── csharp-null-conditional/ │ │ │ │ │ ├── App.cs │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── NullConditional.csproj │ │ │ │ ├── csharp-optional-params/ │ │ │ │ │ └── Services/ │ │ │ │ │ └── App.cs │ │ │ │ ├── csharp-overload-param-types/ │ │ │ │ │ └── Models/ │ │ │ │ │ └── UserService.cs │ │ │ │ ├── csharp-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── Models/ │ │ │ │ │ ├── BaseModel.cs │ │ │ │ │ ├── ISerializable.cs │ │ │ │ │ └── User.cs │ │ │ │ ├── csharp-pattern-matching/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ └── Animal.cs │ │ │ │ │ ├── PatternMatchProj.csproj │ │ │ │ │ └── Services/ │ │ │ │ │ └── AnimalService.cs │ │ │ │ ├── csharp-primary-ctors/ │ │ │ │ │ ├── App.cs │ │ │ │ │ └── Models/ │ │ │ │ │ ├── Person.cs │ │ │ │ │ └── User.cs │ │ │ │ ├── csharp-proj/ │ │ │ │ │ ├── Interfaces/ │ │ │ │ │ │ └── IRepository.cs │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── BaseEntity.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── Services/ │ │ │ │ │ └── UserService.cs │ │ │ │ ├── csharp-receiver-resolution/ │ │ │ │ │ ├── App.cs │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ └── ReceiverProj.csproj │ │ │ │ ├── csharp-recursive-pattern/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ ├── Program.cs │ │ │ │ │ └── RecursivePatternProj.csproj │ │ │ │ ├── csharp-return-type/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ ├── ReturnType.csproj │ │ │ │ │ └── Services/ │ │ │ │ │ └── App.cs │ │ │ │ ├── csharp-self-this-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── Models/ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ └── User.cs │ │ │ │ ├── csharp-super-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── Models/ │ │ │ │ │ ├── BaseModel.cs │ │ │ │ │ ├── Repo.cs │ │ │ │ │ └── User.cs │ │ │ │ ├── csharp-switch-pattern/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ ├── Program.cs │ │ │ │ │ └── SwitchPattern.csproj │ │ │ │ ├── csharp-var-foreach/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.cs │ │ │ │ │ │ └── User.cs │ │ │ │ │ ├── Program.cs │ │ │ │ │ └── VarForeach.csproj │ │ │ │ ├── csharp-variadic-resolution/ │ │ │ │ │ ├── Services/ │ │ │ │ │ │ └── App.cs │ │ │ │ │ ├── Utils/ │ │ │ │ │ │ └── Logger.cs │ │ │ │ │ └── VariadicProj.csproj │ │ │ │ ├── csharp-write-access/ │ │ │ │ │ ├── Models.cs │ │ │ │ │ └── Service.cs │ │ │ │ ├── field-types/ │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── go-ambiguous/ │ │ │ │ │ ├── go.mod │ │ │ │ │ └── internal/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── handler.go │ │ │ │ │ ├── other/ │ │ │ │ │ │ └── handler.go │ │ │ │ │ └── services/ │ │ │ │ │ └── user.go │ │ │ │ ├── go-assignment-chain/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-call-result-binding/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ └── user.go │ │ │ │ ├── go-calls/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── internal/ │ │ │ │ │ ├── onearg/ │ │ │ │ │ │ └── log.go │ │ │ │ │ └── zeroarg/ │ │ │ │ │ └── log.go │ │ │ │ ├── go-chain-call/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-constructor-type-inference/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-deep-field-chain/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ └── models.go │ │ │ │ ├── go-field-types/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ └── models.go │ │ │ │ ├── go-for-call-expr/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-inc-dec-write-access/ │ │ │ │ │ └── main.go │ │ │ │ ├── go-local-shadow/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── internal/ │ │ │ │ │ └── utils/ │ │ │ │ │ └── utils.go │ │ │ │ ├── go-make-builtin/ │ │ │ │ │ ├── main.go │ │ │ │ │ └── models.go │ │ │ │ ├── go-map-range/ │ │ │ │ │ ├── main.go │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-member-calls/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ └── user.go │ │ │ │ ├── go-method-chain-binding/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ └── user.go │ │ │ │ ├── go-mixed-chain/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ └── models.go │ │ │ │ ├── go-multi-assign/ │ │ │ │ │ ├── app.go │ │ │ │ │ └── models.go │ │ │ │ ├── go-multi-return-inference/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-new-builtin/ │ │ │ │ │ ├── main.go │ │ │ │ │ └── models.go │ │ │ │ ├── go-nullable-receiver/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-parent-resolution/ │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── base.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-pkg/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── internal/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── service.go │ │ │ │ │ └── models/ │ │ │ │ │ ├── admin.go │ │ │ │ │ ├── repository.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-pointer-constructor-inference/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-receiver-resolution/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-return-type-inference/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-struct-literals/ │ │ │ │ │ ├── app.go │ │ │ │ │ └── user.go │ │ │ │ ├── go-type-assertion/ │ │ │ │ │ ├── main.go │ │ │ │ │ └── models.go │ │ │ │ ├── go-variadic-resolution/ │ │ │ │ │ ├── cmd/ │ │ │ │ │ │ └── main.go │ │ │ │ │ ├── go.mod │ │ │ │ │ └── internal/ │ │ │ │ │ └── logger/ │ │ │ │ │ └── logger.go │ │ │ │ ├── go-write-access/ │ │ │ │ │ └── main.go │ │ │ │ ├── java-ambiguous/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Handler.java │ │ │ │ │ │ └── Processor.java │ │ │ │ │ ├── other/ │ │ │ │ │ │ ├── Handler.java │ │ │ │ │ │ └── Processor.java │ │ │ │ │ └── services/ │ │ │ │ │ └── UserHandler.java │ │ │ │ ├── java-assignment-chain/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-call-result-binding/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-calls/ │ │ │ │ │ ├── services/ │ │ │ │ │ │ └── UserService.java │ │ │ │ │ └── util/ │ │ │ │ │ ├── OneArg.java │ │ │ │ │ └── ZeroArg.java │ │ │ │ ├── java-chain-call/ │ │ │ │ │ ├── App.java │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.java │ │ │ │ │ │ └── User.java │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.java │ │ │ │ ├── java-constructor-calls/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ └── User.java │ │ │ │ ├── java-constructor-type-inference/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-deep-field-chain/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Address.java │ │ │ │ │ ├── City.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-enum-static-call/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── Status.java │ │ │ │ ├── java-field-types/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Address.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-foreach/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-foreach-call-expr/ │ │ │ │ │ ├── Main.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-generic-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── BaseModel.java │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-grandparent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── A.java │ │ │ │ │ │ ├── B.java │ │ │ │ │ │ ├── C.java │ │ │ │ │ │ └── Greeting.java │ │ │ │ │ └── services/ │ │ │ │ │ └── App.java │ │ │ │ ├── java-heritage/ │ │ │ │ │ ├── interfaces/ │ │ │ │ │ │ ├── Serializable.java │ │ │ │ │ │ └── Validatable.java │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── BaseModel.java │ │ │ │ │ │ └── User.java │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.java │ │ │ │ ├── java-instanceof-pattern/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.java │ │ │ │ │ │ └── User.java │ │ │ │ │ └── services/ │ │ │ │ │ └── App.java │ │ │ │ ├── java-local-shadow/ │ │ │ │ │ └── src/ │ │ │ │ │ └── main/ │ │ │ │ │ └── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── Main.java │ │ │ │ │ └── utils/ │ │ │ │ │ └── Logger.java │ │ │ │ ├── java-map-keys-values/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── App.java │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-member-calls/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── User.java │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.java │ │ │ │ ├── java-method-chain-binding/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── Models.java │ │ │ │ ├── java-mixed-chain/ │ │ │ │ │ ├── App.java │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Address.java │ │ │ │ │ │ ├── City.java │ │ │ │ │ │ └── User.java │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.java │ │ │ │ ├── java-named-imports/ │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── Main.java │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── User.java │ │ │ │ │ └── other/ │ │ │ │ │ └── User.java │ │ │ │ ├── java-nullable-receiver/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-optional-receiver/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-overload-param-types/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── User.java │ │ │ │ │ └── UserService.java │ │ │ │ ├── java-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── interfaces/ │ │ │ │ │ │ └── Serializable.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── BaseModel.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-receiver-resolution/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-return-type-inference/ │ │ │ │ │ ├── App.java │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── User.java │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.java │ │ │ │ ├── java-self-this-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-super-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── BaseModel.java │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-switch-pattern/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.java │ │ │ │ │ └── User.java │ │ │ │ ├── java-variadic-resolution/ │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── Main.java │ │ │ │ │ └── util/ │ │ │ │ │ └── Logger.java │ │ │ │ ├── java-virtual-dispatch/ │ │ │ │ │ └── models/ │ │ │ │ │ └── App.java │ │ │ │ ├── java-write-access/ │ │ │ │ │ ├── App.java │ │ │ │ │ └── models/ │ │ │ │ │ ├── Address.java │ │ │ │ │ └── User.java │ │ │ │ ├── javascript-chain-call/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── repo.js │ │ │ │ │ ├── service.js │ │ │ │ │ └── user.js │ │ │ │ ├── javascript-constructor-type-inference/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── repo.js │ │ │ │ │ └── user.js │ │ │ │ ├── javascript-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── Base.js │ │ │ │ │ └── User.js │ │ │ │ ├── javascript-self-this-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.js │ │ │ │ │ └── User.js │ │ │ │ ├── javascript-super-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── Base.js │ │ │ │ │ ├── Repo.js │ │ │ │ │ └── User.js │ │ │ │ ├── js-call-result-binding/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── models.js │ │ │ │ │ └── service.js │ │ │ │ ├── js-field-types/ │ │ │ │ │ ├── models.js │ │ │ │ │ └── service.js │ │ │ │ ├── js-fixpoint-for-loop/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── models.js │ │ │ │ ├── js-jsdoc-async-return-type/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── repo.js │ │ │ │ │ └── user.js │ │ │ │ ├── js-jsdoc-qualified-return-type/ │ │ │ │ │ ├── app.js │ │ │ │ │ └── user.js │ │ │ │ ├── js-jsdoc-return-type/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── repo.js │ │ │ │ │ └── user.js │ │ │ │ ├── js-nullable-receiver/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── repo.js │ │ │ │ │ └── user.js │ │ │ │ ├── js-object-destructuring/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── models.js │ │ │ │ │ └── service.js │ │ │ │ ├── js-write-access/ │ │ │ │ │ ├── models.js │ │ │ │ │ └── service.js │ │ │ │ ├── kotlin-alias-imports/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── App.kt │ │ │ │ │ └── models/ │ │ │ │ │ └── Models.kt │ │ │ │ ├── kotlin-ambiguous/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Handler.kt │ │ │ │ │ │ └── Runnable.kt │ │ │ │ │ ├── other/ │ │ │ │ │ │ ├── Handler.kt │ │ │ │ │ │ └── Runnable.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── UserHandler.kt │ │ │ │ ├── kotlin-assignment-chain/ │ │ │ │ │ ├── App.kt │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-call-result-binding/ │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-calls/ │ │ │ │ │ ├── services/ │ │ │ │ │ │ └── UserService.kt │ │ │ │ │ └── util/ │ │ │ │ │ ├── OneArg.kt │ │ │ │ │ └── ZeroArg.kt │ │ │ │ ├── kotlin-chain-call/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── App.kt │ │ │ │ │ ├── Repo.kt │ │ │ │ │ ├── User.kt │ │ │ │ │ └── UserService.kt │ │ │ │ ├── kotlin-class-method-chain/ │ │ │ │ │ ├── App.kt │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-constructor-calls/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── App.kt │ │ │ │ │ └── models/ │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-constructor-type-inference/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ │ └── User.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── App.kt │ │ │ │ ├── kotlin-data-class-fields/ │ │ │ │ │ ├── Models.kt │ │ │ │ │ └── Service.kt │ │ │ │ ├── kotlin-deep-field-chain/ │ │ │ │ │ ├── Models.kt │ │ │ │ │ └── Service.kt │ │ │ │ ├── kotlin-default-params/ │ │ │ │ │ └── App.kt │ │ │ │ ├── kotlin-field-types/ │ │ │ │ │ ├── Models.kt │ │ │ │ │ └── Service.kt │ │ │ │ ├── kotlin-foreach/ │ │ │ │ │ ├── App.kt │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-foreach-call-expr/ │ │ │ │ │ ├── Main.kt │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-generic-parent-resolution/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── BaseModel.kt │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-grandparent-resolution/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── A.kt │ │ │ │ │ │ ├── B.kt │ │ │ │ │ │ ├── C.kt │ │ │ │ │ │ └── Greeting.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── App.kt │ │ │ │ ├── kotlin-heritage/ │ │ │ │ │ ├── interfaces/ │ │ │ │ │ │ ├── Serializable.kt │ │ │ │ │ │ └── Validatable.kt │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── BaseModel.kt │ │ │ │ │ │ └── User.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.kt │ │ │ │ ├── kotlin-local-shadow/ │ │ │ │ │ └── src/ │ │ │ │ │ └── main/ │ │ │ │ │ └── kotlin/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── Main.kt │ │ │ │ │ └── utils/ │ │ │ │ │ └── Logger.kt │ │ │ │ ├── kotlin-map-keys-values/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── App.kt │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-member-calls/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── User.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.kt │ │ │ │ ├── kotlin-method-chain-binding/ │ │ │ │ │ └── Models.kt │ │ │ │ ├── kotlin-null-check-narrowing/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ │ └── User.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── App.kt │ │ │ │ ├── kotlin-nullable-receiver/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ │ └── User.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── App.kt │ │ │ │ ├── kotlin-overload-param-types/ │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.kt │ │ │ │ ├── kotlin-parent-resolution/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── BaseModel.kt │ │ │ │ │ ├── Serializable.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-receiver-resolution/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ │ └── User.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── App.kt │ │ │ │ ├── kotlin-return-type/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ │ └── User.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── App.kt │ │ │ │ ├── kotlin-self-this-resolution/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── AppConfig.kt │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-super-resolution/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── BaseModel.kt │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-var-foreach/ │ │ │ │ │ ├── app.kt │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-variadic-resolution/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── App.kt │ │ │ │ │ └── util/ │ │ │ │ │ └── Logger.kt │ │ │ │ ├── kotlin-virtual-dispatch/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Animal.kt │ │ │ │ │ │ └── Dog.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── App.kt │ │ │ │ ├── kotlin-when-complex/ │ │ │ │ │ ├── App.kt │ │ │ │ │ └── models/ │ │ │ │ │ ├── Admin.kt │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-when-pattern/ │ │ │ │ │ ├── App.kt │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.kt │ │ │ │ │ └── User.kt │ │ │ │ ├── kotlin-write-access/ │ │ │ │ │ ├── Models.kt │ │ │ │ │ └── Service.kt │ │ │ │ ├── php-alias-imports/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ │ └── User.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── Main.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-ambiguous/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── Dispatchable.php │ │ │ │ │ │ │ └── Handler.php │ │ │ │ │ │ ├── Other/ │ │ │ │ │ │ │ ├── Dispatchable.php │ │ │ │ │ │ │ └── Handler.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── UserHandler.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-app/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Contracts/ │ │ │ │ │ │ │ ├── Loggable.php │ │ │ │ │ │ │ └── Repository.php │ │ │ │ │ │ ├── Enums/ │ │ │ │ │ │ │ └── UserRole.php │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── BaseModel.php │ │ │ │ │ │ │ └── User.php │ │ │ │ │ │ ├── Services/ │ │ │ │ │ │ │ └── UserService.php │ │ │ │ │ │ └── Traits/ │ │ │ │ │ │ ├── HasTimestamps.php │ │ │ │ │ │ └── SoftDeletes.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-assignment-chain/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ │ └── User.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── AppService.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-call-result-binding/ │ │ │ │ │ └── App.php │ │ │ │ ├── php-calls/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Services/ │ │ │ │ │ │ │ └── UserService.php │ │ │ │ │ │ └── Utils/ │ │ │ │ │ │ ├── OneArg/ │ │ │ │ │ │ │ └── log.php │ │ │ │ │ │ └── ZeroArg/ │ │ │ │ │ │ └── log.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-constructor-calls/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ └── User.php │ │ │ │ │ └── app.php │ │ │ │ ├── php-constructor-promotion-fields/ │ │ │ │ │ ├── Models.php │ │ │ │ │ └── Service.php │ │ │ │ ├── php-constructor-type-inference/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ │ └── User.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── AppService.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-deep-field-chain/ │ │ │ │ │ ├── Models.php │ │ │ │ │ └── Service.php │ │ │ │ ├── php-default-params/ │ │ │ │ │ └── app.php │ │ │ │ ├── php-field-types/ │ │ │ │ │ ├── Models.php │ │ │ │ │ └── Service.php │ │ │ │ ├── php-foreach-call-expr/ │ │ │ │ │ ├── Repo.php │ │ │ │ │ ├── User.php │ │ │ │ │ └── main.php │ │ │ │ ├── php-foreach-generic/ │ │ │ │ │ ├── App.php │ │ │ │ │ ├── Repo.php │ │ │ │ │ └── User.php │ │ │ │ ├── php-foreach-loop/ │ │ │ │ │ ├── App.php │ │ │ │ │ ├── Repo.php │ │ │ │ │ └── User.php │ │ │ │ ├── php-foreach-member-access/ │ │ │ │ │ ├── App.php │ │ │ │ │ ├── Repo.php │ │ │ │ │ └── User.php │ │ │ │ ├── php-grandparent-resolution/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── A.php │ │ │ │ │ │ │ ├── B.php │ │ │ │ │ │ │ ├── C.php │ │ │ │ │ │ │ └── Greeting.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── App.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-grouped-imports/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ │ └── User.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── Main.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-local-shadow/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Services/ │ │ │ │ │ │ │ └── Main.php │ │ │ │ │ │ └── Utils/ │ │ │ │ │ │ └── Logger.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-member-calls/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ └── User.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── UserService.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-method-chain-binding/ │ │ │ │ │ └── App.php │ │ │ │ ├── php-nullable-receiver/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ │ └── User.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── AppService.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-parent-resolution/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── Models/ │ │ │ │ │ │ ├── BaseModel.php │ │ │ │ │ │ ├── Serializable.php │ │ │ │ │ │ └── User.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-phpdoc-attribute-return-type/ │ │ │ │ │ ├── Models.php │ │ │ │ │ └── Services.php │ │ │ │ ├── php-phpdoc-return-type/ │ │ │ │ │ ├── Models.php │ │ │ │ │ └── Services.php │ │ │ │ ├── php-property-promotion/ │ │ │ │ │ └── UserService.php │ │ │ │ ├── php-receiver-resolution/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ │ └── User.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── AppService.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-return-type/ │ │ │ │ │ └── app/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ └── User.php │ │ │ │ │ └── Services/ │ │ │ │ │ └── UserService.php │ │ │ │ ├── php-self-this-resolution/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── Models/ │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ └── User.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-super-resolution/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ └── Models/ │ │ │ │ │ │ ├── BaseModel.php │ │ │ │ │ │ ├── Repo.php │ │ │ │ │ │ └── User.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-this-receiver-disambiguation/ │ │ │ │ │ ├── AdminService.php │ │ │ │ │ ├── Models.php │ │ │ │ │ └── UserService.php │ │ │ │ ├── php-typed-properties/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ │ └── UserRepo.php │ │ │ │ │ │ └── Services/ │ │ │ │ │ │ └── UserService.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-variadic-resolution/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── Services/ │ │ │ │ │ │ │ └── AppService.php │ │ │ │ │ │ └── Utils/ │ │ │ │ │ │ └── Logger.php │ │ │ │ │ └── composer.json │ │ │ │ ├── php-write-access/ │ │ │ │ │ ├── models.php │ │ │ │ │ └── service.php │ │ │ │ ├── python-alias-imports/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── models.py │ │ │ │ ├── python-ambiguous/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── handler.py │ │ │ │ │ ├── other/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── handler.py │ │ │ │ │ └── services/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── user_handler.py │ │ │ │ ├── python-assignment-chain/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-bare-import/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.py │ │ │ │ │ └── services/ │ │ │ │ │ ├── auth.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-call-result-binding/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── models.py │ │ │ │ │ └── service.py │ │ │ │ ├── python-calls/ │ │ │ │ │ ├── one.py │ │ │ │ │ ├── service.py │ │ │ │ │ └── zero.py │ │ │ │ ├── python-chain-call/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── repo.py │ │ │ │ │ │ └── user.py │ │ │ │ │ └── service.py │ │ │ │ ├── python-class-annotations/ │ │ │ │ │ ├── repo.py │ │ │ │ │ ├── service.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-constructor-calls/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── models.py │ │ │ │ ├── python-constructor-type-inference/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── repo.py │ │ │ │ │ │ └── user.py │ │ │ │ │ └── services/ │ │ │ │ │ └── app.py │ │ │ │ ├── python-default-params/ │ │ │ │ │ └── app.py │ │ │ │ ├── python-dict-items-loop/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-enumerate-loop/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-field-type-disambig/ │ │ │ │ │ ├── address.py │ │ │ │ │ ├── service.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-field-types/ │ │ │ │ │ ├── models.py │ │ │ │ │ └── service.py │ │ │ │ ├── python-for-call-expr/ │ │ │ │ │ ├── main.py │ │ │ │ │ └── models.py │ │ │ │ ├── python-grandparent-resolution/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── models/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── a.py │ │ │ │ │ ├── b.py │ │ │ │ │ ├── c.py │ │ │ │ │ └── greeting.py │ │ │ │ ├── python-local-shadow/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── utils.py │ │ │ │ ├── python-match-case/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-member-access-for-loop/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-member-calls/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-method-chain-binding/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── models.py │ │ │ │ ├── python-named-imports/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── format_prefix.py │ │ │ │ │ └── format_upper.py │ │ │ │ ├── python-nullable-chain/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-nullable-receiver/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-parent-resolution/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-pkg/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── base.py │ │ │ │ │ │ └── user.py │ │ │ │ │ ├── services/ │ │ │ │ │ │ └── auth.py │ │ │ │ │ └── utils/ │ │ │ │ │ └── helpers.py │ │ │ │ ├── python-qualified-constructor/ │ │ │ │ │ ├── main.py │ │ │ │ │ └── models.py │ │ │ │ ├── python-receiver-resolution/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-reexport-chain/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── models/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── base.py │ │ │ │ ├── python-return-type-inference/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── models.py │ │ │ │ │ └── service.py │ │ │ │ ├── python-self-this-resolution/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-static-class-methods/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── service.py │ │ │ │ ├── python-super-resolution/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base.py │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-variadic-resolution/ │ │ │ │ │ ├── app.py │ │ │ │ │ └── logger.py │ │ │ │ ├── python-walrus-chain/ │ │ │ │ │ ├── app.py │ │ │ │ │ ├── repo.py │ │ │ │ │ └── user.py │ │ │ │ ├── python-walrus-operator/ │ │ │ │ │ ├── main.py │ │ │ │ │ └── models.py │ │ │ │ ├── python-write-access/ │ │ │ │ │ ├── models.py │ │ │ │ │ └── service.py │ │ │ │ ├── ruby-ambiguous/ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ └── user_handler.rb │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── handler.rb │ │ │ │ │ └── other/ │ │ │ │ │ └── handler.rb │ │ │ │ ├── ruby-app/ │ │ │ │ │ └── lib/ │ │ │ │ │ ├── base_model.rb │ │ │ │ │ ├── concerns/ │ │ │ │ │ │ ├── cacheable.rb │ │ │ │ │ │ ├── loggable.rb │ │ │ │ │ │ └── serializable.rb │ │ │ │ │ ├── service.rb │ │ │ │ │ └── user.rb │ │ │ │ ├── ruby-call-result-binding/ │ │ │ │ │ └── app.rb │ │ │ │ ├── ruby-calls/ │ │ │ │ │ └── lib/ │ │ │ │ │ ├── one_arg.rb │ │ │ │ │ ├── service.rb │ │ │ │ │ └── two_args.rb │ │ │ │ ├── ruby-chain-call/ │ │ │ │ │ └── lib/ │ │ │ │ │ ├── app.rb │ │ │ │ │ ├── repo.rb │ │ │ │ │ ├── user.rb │ │ │ │ │ └── user_service.rb │ │ │ │ ├── ruby-constant-constructor/ │ │ │ │ │ ├── app.rb │ │ │ │ │ └── models.rb │ │ │ │ ├── ruby-constant-factory-call/ │ │ │ │ │ ├── admin_service.rb │ │ │ │ │ ├── app.rb │ │ │ │ │ └── user_service.rb │ │ │ │ ├── ruby-constructor-type-inference/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── repo.rb │ │ │ │ │ │ └── user.rb │ │ │ │ │ └── services/ │ │ │ │ │ └── app.rb │ │ │ │ ├── ruby-default-params/ │ │ │ │ │ └── app.rb │ │ │ │ ├── ruby-field-type-disambig/ │ │ │ │ │ ├── address.rb │ │ │ │ │ ├── service.rb │ │ │ │ │ └── user.rb │ │ │ │ ├── ruby-field-types/ │ │ │ │ │ ├── models.rb │ │ │ │ │ └── service.rb │ │ │ │ ├── ruby-for-in-loop/ │ │ │ │ │ ├── app.rb │ │ │ │ │ ├── repo.rb │ │ │ │ │ └── user.rb │ │ │ │ ├── ruby-grandparent-resolution/ │ │ │ │ │ └── lib/ │ │ │ │ │ ├── app.rb │ │ │ │ │ └── models/ │ │ │ │ │ ├── a.rb │ │ │ │ │ ├── b.rb │ │ │ │ │ ├── c.rb │ │ │ │ │ └── greeting.rb │ │ │ │ ├── ruby-local-shadow/ │ │ │ │ │ └── lib/ │ │ │ │ │ ├── app.rb │ │ │ │ │ └── utils.rb │ │ │ │ ├── ruby-member-calls/ │ │ │ │ │ └── lib/ │ │ │ │ │ ├── app.rb │ │ │ │ │ └── user.rb │ │ │ │ ├── ruby-method-chain-binding/ │ │ │ │ │ └── app.rb │ │ │ │ ├── ruby-namespaced-constructor/ │ │ │ │ │ ├── app.rb │ │ │ │ │ └── models/ │ │ │ │ │ └── user_service.rb │ │ │ │ ├── ruby-parent-resolution/ │ │ │ │ │ └── lib/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── base_model.rb │ │ │ │ │ ├── serializable.rb │ │ │ │ │ └── user.rb │ │ │ │ ├── ruby-return-type/ │ │ │ │ │ ├── app.rb │ │ │ │ │ ├── models.rb │ │ │ │ │ └── repo.rb │ │ │ │ ├── ruby-self-this-resolution/ │ │ │ │ │ └── lib/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.rb │ │ │ │ │ └── user.rb │ │ │ │ ├── ruby-super-resolution/ │ │ │ │ │ └── lib/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── base_model.rb │ │ │ │ │ ├── repo.rb │ │ │ │ │ └── user.rb │ │ │ │ ├── ruby-write-access/ │ │ │ │ │ ├── models.rb │ │ │ │ │ └── service.rb │ │ │ │ ├── ruby-yard-annotations/ │ │ │ │ │ ├── models.rb │ │ │ │ │ └── service.rb │ │ │ │ ├── ruby-yard-generics/ │ │ │ │ │ ├── models.rb │ │ │ │ │ └── service.rb │ │ │ │ ├── rust-alias-imports/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models.rs │ │ │ │ ├── rust-ambiguous/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── handler.rs │ │ │ │ │ │ └── mod.rs │ │ │ │ │ ├── other/ │ │ │ │ │ │ ├── handler.rs │ │ │ │ │ │ └── mod.rs │ │ │ │ │ └── services/ │ │ │ │ │ └── mod.rs │ │ │ │ ├── rust-assignment-chain/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-async-binding/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-call-result-binding/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models.rs │ │ │ │ ├── rust-calls/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── onearg/ │ │ │ │ │ │ └── mod.rs │ │ │ │ │ └── zeroarg/ │ │ │ │ │ └── mod.rs │ │ │ │ ├── rust-chain-call/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models/ │ │ │ │ │ ├── mod.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-constructor-type-inference/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-deep-field-chain/ │ │ │ │ │ ├── models.rs │ │ │ │ │ └── service.rs │ │ │ │ ├── rust-default-constructor/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-err-unwrap/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── error.rs │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-field-types/ │ │ │ │ │ ├── models.rs │ │ │ │ │ └── service.rs │ │ │ │ ├── rust-for-call-expr/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-for-loop/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-grouped-imports/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ └── mod.rs │ │ │ │ │ └── main.rs │ │ │ │ ├── rust-if-let/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models.rs │ │ │ │ ├── rust-if-let-unwrap/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── mod.rs │ │ │ │ │ │ ├── repo.rs │ │ │ │ │ │ └── user.rs │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-iter-for-loop/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-local-shadow/ │ │ │ │ │ ├── Cargo.toml │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── utils.rs │ │ │ │ ├── rust-match-unwrap/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-member-calls/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-method-chain-binding/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models.rs │ │ │ │ ├── rust-nullable-receiver/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-option-receiver/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── lib.rs │ │ │ │ │ ├── serializable.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-receiver-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-reexport-chain/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models/ │ │ │ │ │ ├── handler.rs │ │ │ │ │ └── mod.rs │ │ │ │ ├── rust-return-type/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models.rs │ │ │ │ ├── rust-return-type-inference/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models.rs │ │ │ │ ├── rust-self-struct-literal/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models.rs │ │ │ │ ├── rust-self-this-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── repo.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-struct-destructuring/ │ │ │ │ │ ├── main.rs │ │ │ │ │ ├── point.rs │ │ │ │ │ └── vec2.rs │ │ │ │ ├── rust-struct-literal-inference/ │ │ │ │ │ ├── main.rs │ │ │ │ │ └── models.rs │ │ │ │ ├── rust-struct-literals/ │ │ │ │ │ ├── app.rs │ │ │ │ │ └── user.rs │ │ │ │ ├── rust-traits/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── impls/ │ │ │ │ │ │ └── button.rs │ │ │ │ │ ├── main.rs │ │ │ │ │ └── traits/ │ │ │ │ │ ├── clickable.rs │ │ │ │ │ └── drawable.rs │ │ │ │ ├── rust-write-access/ │ │ │ │ │ ├── models.rs │ │ │ │ │ └── service.rs │ │ │ │ ├── swift-constructor-type-inference/ │ │ │ │ │ ├── Models/ │ │ │ │ │ │ ├── Repo.swift │ │ │ │ │ │ └── User.swift │ │ │ │ │ └── Services/ │ │ │ │ │ └── App.swift │ │ │ │ ├── swift-init-cross-file/ │ │ │ │ │ ├── User.swift │ │ │ │ │ └── main.swift │ │ │ │ ├── swift-parent-resolution/ │ │ │ │ │ └── Sources/ │ │ │ │ │ └── Models/ │ │ │ │ │ ├── BaseModel.swift │ │ │ │ │ ├── Serializable.swift │ │ │ │ │ └── User.swift │ │ │ │ ├── swift-return-type/ │ │ │ │ │ ├── App.swift │ │ │ │ │ └── Models.swift │ │ │ │ ├── swift-return-type-inference/ │ │ │ │ │ ├── App.swift │ │ │ │ │ └── Models.swift │ │ │ │ ├── swift-self-this-resolution/ │ │ │ │ │ └── Sources/ │ │ │ │ │ └── Models/ │ │ │ │ │ ├── Repo.swift │ │ │ │ │ └── User.swift │ │ │ │ ├── ts-assignment-chain/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── ts-call-result-binding/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── ts-class-field-foreach/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── ts-deep-field-chain/ │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── ts-field-type-disambig/ │ │ │ │ │ ├── address.ts │ │ │ │ │ ├── service.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── ts-fixpoint-for-loop/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── models.ts │ │ │ │ ├── ts-grandparent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── derived.ts │ │ │ │ │ ├── greeting.ts │ │ │ │ │ └── middle.ts │ │ │ │ ├── ts-method-chain-binding/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── ts-mixed-chain/ │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── ts-multi-hop-chain/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── ts-null-check-narrowing/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── models.ts │ │ │ │ ├── ts-nullable-chain/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── ts-nullable-receiver/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── ts-object-destructuring/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── ts-optional-params/ │ │ │ │ │ └── src/ │ │ │ │ │ └── app.ts │ │ │ │ ├── ts-overload-disambiguation/ │ │ │ │ │ └── src/ │ │ │ │ │ └── app.ts │ │ │ │ ├── ts-param-property-fields/ │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── ts-readonly-foreach/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── ts-return-type-inference/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── ts-virtual-dispatch/ │ │ │ │ │ └── src/ │ │ │ │ │ └── app.ts │ │ │ │ ├── ts-write-access/ │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── typescript-alias-imports/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── models.ts │ │ │ │ ├── typescript-ambiguous/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── logger.ts │ │ │ │ │ ├── models.ts │ │ │ │ │ └── service.ts │ │ │ │ ├── typescript-calls/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── one.ts │ │ │ │ │ ├── service.ts │ │ │ │ │ └── zero.ts │ │ │ │ ├── typescript-cast-constructor-inference/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-chain-call/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.ts │ │ │ │ │ │ └── User.ts │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.ts │ │ │ │ ├── typescript-constructor-calls/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-constructor-type-inference/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-destructured-for-of/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-double-cast-inference/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-for-of-call-expr/ │ │ │ │ │ ├── main.ts │ │ │ │ │ └── models/ │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-generic-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── Base.ts │ │ │ │ │ ├── Repo.ts │ │ │ │ │ └── User.ts │ │ │ │ ├── typescript-instanceof-narrowing/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-local-shadow/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── typescript-member-access-for-loop/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.ts │ │ │ │ │ └── User.ts │ │ │ │ ├── typescript-member-calls/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-named-imports/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── format-prefix.ts │ │ │ │ │ └── format-upper.ts │ │ │ │ ├── typescript-overloaded-receiver/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── db/ │ │ │ │ │ │ ├── Cache.ts │ │ │ │ │ │ └── Database.ts │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.ts │ │ │ │ │ └── User.ts │ │ │ │ ├── typescript-parent-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── Base.ts │ │ │ │ │ └── User.ts │ │ │ │ ├── typescript-receiver-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-reexport-chain/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── base.ts │ │ │ │ │ └── models.ts │ │ │ │ ├── typescript-reexport-type/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── base.ts │ │ │ │ │ └── models.ts │ │ │ │ ├── typescript-scoped-receiver/ │ │ │ │ │ └── src/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── repo.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typescript-self-this-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── Repo.ts │ │ │ │ │ └── User.ts │ │ │ │ ├── typescript-static-chain/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.ts │ │ │ │ │ │ └── User.ts │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.ts │ │ │ │ ├── typescript-super-resolution/ │ │ │ │ │ └── src/ │ │ │ │ │ └── models/ │ │ │ │ │ ├── Base.ts │ │ │ │ │ ├── Repo.ts │ │ │ │ │ └── User.ts │ │ │ │ ├── typescript-typed-param-chain/ │ │ │ │ │ ├── app.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Repo.ts │ │ │ │ │ │ └── User.ts │ │ │ │ │ └── services/ │ │ │ │ │ └── UserService.ts │ │ │ │ └── typescript-variadic-resolution/ │ │ │ │ └── src/ │ │ │ │ ├── app.ts │ │ │ │ └── logger.ts │ │ │ ├── local-backend-seed.ts │ │ │ ├── mini-repo/ │ │ │ │ └── src/ │ │ │ │ ├── db.ts │ │ │ │ ├── formatter.ts │ │ │ │ ├── handler.ts │ │ │ │ ├── index.ts │ │ │ │ ├── logger.ts │ │ │ │ ├── middleware.ts │ │ │ │ └── validator.ts │ │ │ ├── sample-code/ │ │ │ │ ├── simple.c │ │ │ │ ├── simple.cpp │ │ │ │ ├── simple.cs │ │ │ │ ├── simple.go │ │ │ │ ├── simple.java │ │ │ │ ├── simple.js │ │ │ │ ├── simple.php │ │ │ │ ├── simple.py │ │ │ │ ├── simple.rs │ │ │ │ ├── simple.swift │ │ │ │ ├── simple.ts │ │ │ │ ├── simple.tsx │ │ │ │ └── swift-extension.swift │ │ │ └── search-seed.ts │ │ ├── global-setup.ts │ │ ├── helpers/ │ │ │ ├── test-db.ts │ │ │ ├── test-graph.ts │ │ │ └── test-indexed-db.ts │ │ ├── integration/ │ │ │ ├── augmentation.test.ts │ │ │ ├── cli-e2e.test.ts │ │ │ ├── csv-pipeline.test.ts │ │ │ ├── enrichment.test.ts │ │ │ ├── filesystem-walker.test.ts │ │ │ ├── has-method.test.ts │ │ │ ├── hooks-e2e.test.ts │ │ │ ├── ignore-and-skip-e2e.test.ts │ │ │ ├── lbug-core-adapter.test.ts │ │ │ ├── lbug-pool-stability.test.ts │ │ │ ├── lbug-pool.test.ts │ │ │ ├── local-backend-calltool.test.ts │ │ │ ├── local-backend.test.ts │ │ │ ├── parsing.test.ts │ │ │ ├── pipeline.test.ts │ │ │ ├── query-compilation.test.ts │ │ │ ├── resolvers/ │ │ │ │ ├── cpp.test.ts │ │ │ │ ├── csharp.test.ts │ │ │ │ ├── go.test.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── java.test.ts │ │ │ │ ├── javascript.test.ts │ │ │ │ ├── kotlin.test.ts │ │ │ │ ├── php.test.ts │ │ │ │ ├── python.test.ts │ │ │ │ ├── ruby.test.ts │ │ │ │ ├── rust.test.ts │ │ │ │ ├── swift.test.ts │ │ │ │ └── typescript.test.ts │ │ │ ├── search-core.test.ts │ │ │ ├── search-pool.test.ts │ │ │ ├── setup-skills.test.ts │ │ │ ├── skills-e2e.test.ts │ │ │ ├── tree-sitter-languages.test.ts │ │ │ └── worker-pool.test.ts │ │ ├── unit/ │ │ │ ├── ai-context.test.ts │ │ │ ├── ast-cache.test.ts │ │ │ ├── bm25-search.test.ts │ │ │ ├── call-form.test.ts │ │ │ ├── call-processor.test.ts │ │ │ ├── call-routing.test.ts │ │ │ ├── calltool-dispatch.test.ts │ │ │ ├── cli-commands.test.ts │ │ │ ├── cli-index-help.test.ts │ │ │ ├── cohesion-consistency.test.ts │ │ │ ├── community-processor.test.ts │ │ │ ├── compatible-stdio-transport.test.ts │ │ │ ├── csv-escaping.test.ts │ │ │ ├── embedder.test.ts │ │ │ ├── entry-point-scoring.test.ts │ │ │ ├── eval-formatters.test.ts │ │ │ ├── extract-element-type-from-string.test.ts │ │ │ ├── extract-generic-type-args.test.ts │ │ │ ├── framework-detection.test.ts │ │ │ ├── git.test.ts │ │ │ ├── graph.test.ts │ │ │ ├── has-method.test.ts │ │ │ ├── heritage-processor.test.ts │ │ │ ├── hooks.test.ts │ │ │ ├── hybrid-search.test.ts │ │ │ ├── ignore-service.test.ts │ │ │ ├── import-processor.test.ts │ │ │ ├── ingestion-utils.test.ts │ │ │ ├── language-skip.test.ts │ │ │ ├── lazy-action.test.ts │ │ │ ├── method-signature.test.ts │ │ │ ├── mro-processor.test.ts │ │ │ ├── named-binding-extraction.test.ts │ │ │ ├── parser-loader.test.ts │ │ │ ├── pipeline-exports.test.ts │ │ │ ├── process-processor.test.ts │ │ │ ├── repo-manager.test.ts │ │ │ ├── resources.test.ts │ │ │ ├── schema.test.ts │ │ │ ├── security.test.ts │ │ │ ├── sequential-language-availability.test.ts │ │ │ ├── server.test.ts │ │ │ ├── shared-type-extractors.test.ts │ │ │ ├── skill-gen.test.ts │ │ │ ├── staleness.test.ts │ │ │ ├── structure-processor.test.ts │ │ │ ├── suffix-index-ambiguity.test.ts │ │ │ ├── symbol-resolver.test.ts │ │ │ ├── symbol-table.test.ts │ │ │ ├── tools.test.ts │ │ │ ├── tree-sitter-queries.test.ts │ │ │ ├── type-env.test.ts │ │ │ └── utils.test.ts │ │ ├── utils/ │ │ │ └── hook-test-helpers.ts │ │ └── vitest.d.ts │ ├── tsconfig.json │ ├── tsconfig.test.json │ ├── vendor/ │ │ └── leiden/ │ │ ├── index.cjs │ │ └── utils.cjs │ └── vitest.config.ts ├── gitnexus-claude-plugin/ │ ├── .claude-plugin/ │ │ └── plugin.json │ ├── .mcp.json │ ├── hooks/ │ │ ├── gitnexus-hook.js │ │ └── hooks.json │ └── skills/ │ ├── gitnexus-cli/ │ │ ├── SKILL.md │ │ └── mcp.json │ ├── gitnexus-debugging/ │ │ ├── SKILL.md │ │ └── mcp.json │ ├── gitnexus-exploring/ │ │ ├── SKILL.md │ │ └── mcp.json │ ├── gitnexus-guide/ │ │ ├── SKILL.md │ │ └── mcp.json │ ├── gitnexus-impact-analysis/ │ │ ├── SKILL.md │ │ └── mcp.json │ ├── gitnexus-pr-review/ │ │ └── SKILL.md │ └── gitnexus-refactoring/ │ ├── SKILL.md │ └── mcp.json ├── gitnexus-cursor-integration/ │ ├── hooks/ │ │ ├── augment-shell.sh │ │ └── hooks.json │ └── skills/ │ ├── gitnexus-debugging/ │ │ └── SKILL.md │ ├── gitnexus-exploring/ │ │ └── SKILL.md │ ├── gitnexus-impact-analysis/ │ │ └── SKILL.md │ ├── gitnexus-pr-review/ │ │ └── SKILL.md │ └── gitnexus-refactoring/ │ └── SKILL.md ├── gitnexus-test-setup/ │ └── .gitignore ├── gitnexus-web/ │ ├── .gitignore │ ├── api/ │ │ └── proxy.ts │ ├── index.html │ ├── package.json │ ├── public/ │ │ └── wasm/ │ │ ├── c/ │ │ │ └── tree-sitter-c.wasm │ │ ├── cpp/ │ │ │ └── tree-sitter-cpp.wasm │ │ ├── csharp/ │ │ │ └── tree-sitter-csharp.wasm │ │ ├── go/ │ │ │ └── tree-sitter-go.wasm │ │ ├── java/ │ │ │ └── tree-sitter-java.wasm │ │ ├── javascript/ │ │ │ └── tree-sitter-javascript.wasm │ │ ├── php/ │ │ │ └── tree-sitter-php.wasm │ │ ├── python/ │ │ │ └── tree-sitter-python.wasm │ │ ├── ruby/ │ │ │ └── tree-sitter-ruby.wasm │ │ ├── rust/ │ │ │ └── tree-sitter-rust.wasm │ │ ├── swift/ │ │ │ └── tree-sitter-swift.wasm │ │ ├── tree-sitter.wasm │ │ └── typescript/ │ │ ├── tree-sitter-tsx.wasm │ │ └── tree-sitter-typescript.wasm │ ├── src/ │ │ ├── App.tsx │ │ ├── components/ │ │ │ ├── BackendRepoSelector.tsx │ │ │ ├── CodeReferencesPanel.tsx │ │ │ ├── DropZone.tsx │ │ │ ├── EmbeddingStatus.tsx │ │ │ ├── FileTreePanel.tsx │ │ │ ├── GraphCanvas.tsx │ │ │ ├── Header.tsx │ │ │ ├── LoadingOverlay.tsx │ │ │ ├── MarkdownRenderer.tsx │ │ │ ├── MermaidDiagram.tsx │ │ │ ├── ProcessFlowModal.tsx │ │ │ ├── ProcessesPanel.tsx │ │ │ ├── QueryFAB.tsx │ │ │ ├── RightPanel.tsx │ │ │ ├── SettingsPanel.tsx │ │ │ ├── StatusBar.tsx │ │ │ ├── ToolCallCard.tsx │ │ │ └── WebGPUFallbackDialog.tsx │ │ ├── config/ │ │ │ ├── ignore-service.ts │ │ │ └── supported-languages.ts │ │ ├── core/ │ │ │ ├── embeddings/ │ │ │ │ ├── embedder.ts │ │ │ │ ├── embedding-pipeline.ts │ │ │ │ ├── index.ts │ │ │ │ ├── text-generator.ts │ │ │ │ └── types.ts │ │ │ ├── graph/ │ │ │ │ ├── graph.ts │ │ │ │ └── types.ts │ │ │ ├── ingestion/ │ │ │ │ ├── ast-cache.ts │ │ │ │ ├── call-processor.ts │ │ │ │ ├── call-routing.ts │ │ │ │ ├── cluster-enricher.ts │ │ │ │ ├── community-processor.ts │ │ │ │ ├── entry-point-scoring.ts │ │ │ │ ├── framework-detection.ts │ │ │ │ ├── heritage-processor.ts │ │ │ │ ├── import-processor.ts │ │ │ │ ├── parsing-processor.ts │ │ │ │ ├── pipeline.ts │ │ │ │ ├── process-processor.ts │ │ │ │ ├── structure-processor.ts │ │ │ │ ├── symbol-table.ts │ │ │ │ ├── tree-sitter-queries.ts │ │ │ │ └── utils.ts │ │ │ ├── lbug/ │ │ │ │ ├── csv-generator.ts │ │ │ │ ├── lbug-adapter.ts │ │ │ │ └── schema.ts │ │ │ ├── llm/ │ │ │ │ ├── agent.ts │ │ │ │ ├── context-builder.ts │ │ │ │ ├── index.ts │ │ │ │ ├── settings-service.ts │ │ │ │ ├── tools.ts │ │ │ │ └── types.ts │ │ │ ├── search/ │ │ │ │ ├── bm25-index.ts │ │ │ │ ├── hybrid-search.ts │ │ │ │ └── index.ts │ │ │ └── tree-sitter/ │ │ │ └── parser-loader.ts │ │ ├── hooks/ │ │ │ ├── useAppState.tsx │ │ │ ├── useBackend.ts │ │ │ ├── useSettings.ts │ │ │ └── useSigma.ts │ │ ├── index.css │ │ ├── lib/ │ │ │ ├── constants.ts │ │ │ ├── graph-adapter.ts │ │ │ ├── mermaid-generator.ts │ │ │ └── utils.ts │ │ ├── main.tsx │ │ ├── services/ │ │ │ ├── backend.ts │ │ │ ├── git-clone.ts │ │ │ ├── server-connection.ts │ │ │ └── zip.ts │ │ ├── types/ │ │ │ ├── lbug-wasm.d.ts │ │ │ └── pipeline.ts │ │ ├── vendor/ │ │ │ └── leiden/ │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── utils.js │ │ ├── vite-env.d.ts │ │ └── workers/ │ │ └── ingestion.worker.ts │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── vercel.json │ └── vite.config.ts ├── skills.mdm ├── type-resolution-roadmap.md └── type-resolution-system.md
Showing preview only (286K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3199 symbols across 1073 files)
FILE: eval/agents/gitnexus_agent.py
class GitNexusMode (line 33) | class GitNexusMode(str, Enum):
class GitNexusAgentConfig (line 40) | class GitNexusAgentConfig(AgentConfig):
class GitNexusAgent (line 48) | class GitNexusAgent(DefaultAgent):
method __init__ (line 57) | def __init__(self, model: Model, env: Environment, *, config_class: ty...
method execute_actions (line 76) | def execute_actions(self, message: dict) -> list[dict]:
method _maybe_augment (line 95) | def _maybe_augment(self, action: dict, output: dict) -> dict | None:
method _extract_search_pattern (line 132) | def _extract_search_pattern(command: str) -> str | None:
method _track_tool_usage (line 151) | def _track_tool_usage(self, message: dict):
method serialize (line 166) | def serialize(self, *extra_dicts) -> dict:
class GitNexusMetrics (line 179) | class GitNexusMetrics:
method __init__ (line 182) | def __init__(self):
method total_tool_calls (line 197) | def total_tool_calls(self) -> int:
method to_dict (line 200) | def to_dict(self) -> dict:
FILE: eval/analysis/analyze_results.py
function load_run_results (line 35) | def load_run_results(results_dir: Path) -> dict[str, dict]:
function parse_run_id (line 79) | def parse_run_id(run_id: str) -> tuple[str, str]:
function compute_metrics (line 90) | def compute_metrics(run_data: dict) -> dict:
function run_swebench_evaluation (line 149) | def run_swebench_evaluation(results_dir: Path, run_id: str, subset: str ...
function summary (line 197) | def summary(
function compare_modes (line 244) | def compare_modes(
function gitnexus_usage (line 332) | def gitnexus_usage(
function _print_table (line 390) | def _print_table(all_metrics: dict):
function _print_markdown (line 423) | def _print_markdown(all_metrics: dict):
function _print_csv (line 432) | def _print_csv(all_metrics: dict):
FILE: eval/bridge/mcp_bridge.py
class MCPBridge (line 23) | class MCPBridge:
method __init__ (line 34) | def __init__(self, repo_path: str | None = None):
method start (line 41) | def start(self) -> bool:
method stop (line 85) | def stop(self):
method call_tool (line 100) | def call_tool(self, tool_name: str, arguments: dict[str, Any] | None =...
method list_tools (line 126) | def list_tools(self) -> list[dict]:
method read_resource (line 133) | def read_resource(self, uri: str) -> str | None:
method _find_gitnexus (line 142) | def _find_gitnexus(self) -> str | None:
method _next_id (line 170) | def _next_id(self) -> int:
method _send_request (line 175) | def _send_request(self, method: str, params: dict) -> dict | None:
method _send_notification (line 209) | def _send_notification(self, method: str, params: dict):
method _read_response (line 229) | def _read_response(self, timeout: float = 30) -> dict | None:
class MCPToolCLI (line 279) | class MCPToolCLI:
method __init__ (line 289) | def __init__(self):
method run (line 292) | def run(self, tool_name: str, args_json: str = "{}") -> int:
method _parse_simple_args (line 316) | def _parse_simple_args(args_str: str) -> dict:
FILE: eval/environments/gitnexus_docker.py
class GitNexusDockerEnvironment (line 96) | class GitNexusDockerEnvironment(DockerEnvironment):
method __init__ (line 109) | def __init__(
method start (line 128) | def start(self) -> dict:
method _setup_gitnexus (line 141) | def _setup_gitnexus(self):
method _ensure_nodejs (line 155) | def _ensure_nodejs(self):
method _install_gitnexus (line 175) | def _install_gitnexus(self):
method _index_repository (line 187) | def _index_repository(self):
method _start_eval_server (line 212) | def _start_eval_server(self):
method _install_tools (line 246) | def _install_tools(self):
method _get_repo_info (line 281) | def _get_repo_info(self) -> dict:
method _make_cache_key (line 294) | def _make_cache_key(repo_info: dict) -> str:
method _save_cache (line 299) | def _save_cache(self, cache_path: Path, repo_info: dict):
method _restore_cache (line 332) | def _restore_cache(self, cache_path: Path):
method stop (line 367) | def stop(self) -> dict:
method get_template_vars (line 380) | def get_template_vars(self) -> dict:
method serialize (line 387) | def serialize(self) -> dict:
FILE: eval/run_eval.py
function load_yaml_config (line 77) | def load_yaml_config(path: Path) -> dict:
function merge_configs (line 83) | def merge_configs(*configs: dict) -> dict:
function build_config (line 95) | def build_config(model_name: str, mode_name: str) -> dict:
function load_instances (line 111) | def load_instances(subset: str, split: str, slice_spec: str = "", filter...
function get_swebench_docker_image (line 131) | def get_swebench_docker_image(instance: dict) -> str:
function process_instance (line 141) | def process_instance(
function _update_preds (line 233) | def _update_preds(preds_path: Path, instance_id: str, model_name: str, r...
function run_configuration (line 248) | def run_configuration(
function single (line 315) | def single(
function matrix (line 341) | def matrix(
function debug (line 396) | def debug(
function list_configs (line 427) | def list_configs():
function _print_summary (line 447) | def _print_summary(results: list[dict], model: str, mode: str):
function _print_matrix_summary (line 484) | def _print_matrix_summary(all_results: dict[str, list[dict]]):
FILE: gitnexus-claude-plugin/hooks/gitnexus-hook.js
function readInput (line 21) | function readInput() {
function findGitNexusDir (line 34) | function findGitNexusDir(startDir) {
function extractPattern (line 49) | function extractPattern(toolName, toolInput) {
function runGitNexusCli (line 95) | function runGitNexusCli(args, cwd, timeout) {
function sendHookResponse (line 124) | function sendHookResponse(hookEventName, message) {
function handlePreToolUse (line 133) | function handlePreToolUse(input) {
function handlePostToolUse (line 168) | function handlePostToolUse(input) {
function main (line 219) | function main() {
FILE: gitnexus-web/api/proxy.ts
function handler (line 8) | async function handler(req: VercelRequest, res: VercelResponse) {
FILE: gitnexus-web/src/App.tsx
function App (line 307) | function App() {
FILE: gitnexus-web/src/components/BackendRepoSelector.tsx
type BackendRepoSelectorProps (line 4) | interface BackendRepoSelectorProps {
FILE: gitnexus-web/src/components/CodeReferencesPanel.tsx
type CodeReferencesPanelProps (line 62) | interface CodeReferencesPanelProps {
FILE: gitnexus-web/src/components/DropZone.tsx
type DropZoneProps (line 7) | interface DropZoneProps {
function formatBytes (line 13) | function formatBytes(bytes: number): string {
FILE: gitnexus-web/src/components/FileTreePanel.tsx
type TreeNode (line 23) | interface TreeNode {
type TreeItemProps (line 78) | interface TreeItemProps {
type FileTreePanelProps (line 193) | interface FileTreePanelProps {
FILE: gitnexus-web/src/components/GraphCanvas.tsx
type GraphCanvasHandle (line 9) | interface GraphCanvasHandle {
FILE: gitnexus-web/src/components/Header.tsx
constant NODE_TYPE_COLORS (line 9) | const NODE_TYPE_COLORS: Record<string, string> = {
type HeaderProps (line 21) | interface HeaderProps {
FILE: gitnexus-web/src/components/LoadingOverlay.tsx
type LoadingOverlayProps (line 3) | interface LoadingOverlayProps {
FILE: gitnexus-web/src/components/MarkdownRenderer.tsx
type MarkdownRendererProps (line 28) | interface MarkdownRendererProps {
FILE: gitnexus-web/src/components/MermaidDiagram.tsx
type MermaidDiagramProps (line 50) | interface MermaidDiagramProps {
FILE: gitnexus-web/src/components/ProcessFlowModal.tsx
type ProcessFlowModalProps (line 12) | interface ProcessFlowModalProps {
FILE: gitnexus-web/src/components/ProcessesPanel.tsx
type ProcessItemProps (line 442) | interface ProcessItemProps {
FILE: gitnexus-web/src/components/QueryFAB.tsx
constant EXAMPLE_QUERIES (line 5) | const EXAMPLE_QUERIES = [
FILE: gitnexus-web/src/components/SettingsPanel.tsx
type SettingsPanelProps (line 11) | interface SettingsPanelProps {
type OpenRouterModelComboboxProps (line 23) | interface OpenRouterModelComboboxProps {
FILE: gitnexus-web/src/components/ToolCallCard.tsx
type ToolCallCardProps (line 12) | interface ToolCallCardProps {
FILE: gitnexus-web/src/components/WebGPUFallbackDialog.tsx
type WebGPUFallbackDialogProps (line 4) | interface WebGPUFallbackDialogProps {
FILE: gitnexus-web/src/config/ignore-service.ts
constant DEFAULT_IGNORE_LIST (line 1) | const DEFAULT_IGNORE_LIST = new Set([
constant IGNORED_EXTENSIONS (line 99) | const IGNORED_EXTENSIONS = new Set([
constant IGNORED_FILES (line 151) | const IGNORED_FILES = new Set([
FILE: gitnexus-web/src/config/supported-languages.ts
type SupportedLanguages (line 1) | enum SupportedLanguages {
FILE: gitnexus-web/src/core/embeddings/embedder.ts
type ModelProgressCallback (line 22) | type ModelProgressCallback = (progress: ModelProgress) => void;
class WebGPUNotAvailableError (line 28) | class WebGPUNotAvailableError extends Error {
method constructor (line 29) | constructor(originalError?: Error) {
FILE: gitnexus-web/src/core/embeddings/embedding-pipeline.ts
type EmbeddingProgressCallback (line 27) | type EmbeddingProgressCallback = (progress: EmbeddingProgress) => void;
FILE: gitnexus-web/src/core/embeddings/types.ts
constant EMBEDDABLE_LABELS (line 11) | const EMBEDDABLE_LABELS = [
type EmbeddableLabel (line 19) | type EmbeddableLabel = typeof EMBEDDABLE_LABELS[number];
type EmbeddingPhase (line 30) | type EmbeddingPhase =
type EmbeddingProgress (line 41) | interface EmbeddingProgress {
type EmbeddingConfig (line 55) | interface EmbeddingConfig {
constant DEFAULT_EMBEDDING_CONFIG (line 73) | const DEFAULT_EMBEDDING_CONFIG: EmbeddingConfig = {
type SemanticSearchResult (line 84) | interface SemanticSearchResult {
type EmbeddableNode (line 97) | interface EmbeddableNode {
type ModelProgress (line 110) | interface ModelProgress {
FILE: gitnexus-web/src/core/graph/graph.ts
method nodes (line 20) | get nodes(){
method relationships (line 24) | get relationships(){
method nodeCount (line 29) | get nodeCount() {
method relationshipCount (line 33) | get relationshipCount() {
FILE: gitnexus-web/src/core/graph/types.ts
type NodeLabel (line 1) | type NodeLabel =
type NodeProperties (line 21) | type NodeProperties = {
type RelationshipType (line 46) | type RelationshipType =
type GraphNode (line 61) | interface GraphNode {
type GraphRelationship (line 67) | interface GraphRelationship {
type KnowledgeGraph (line 80) | interface KnowledgeGraph {
FILE: gitnexus-web/src/core/ingestion/ast-cache.ts
type ASTCache (line 5) | interface ASTCache {
FILE: gitnexus-web/src/core/ingestion/call-processor.ts
constant FUNCTION_NODE_TYPES (line 15) | const FUNCTION_NODE_TYPES = new Set([
constant CLASS_CONTAINER_TYPES (line 146) | const CLASS_CONTAINER_TYPES = new Set([
constant CONTAINER_TYPE_TO_LABEL (line 157) | const CONTAINER_TYPE_TO_LABEL: Record<string, string> = {
type ExtractedRoute (line 403) | interface ExtractedRoute {
type RouteGroupContext (line 414) | interface RouteGroupContext {
constant ROUTE_HTTP_METHODS (line 420) | const ROUTE_HTTP_METHODS = new Set([
constant ROUTE_RESOURCE_METHODS (line 424) | const ROUTE_RESOURCE_METHODS = new Set(['resource', 'apiResource']);
constant RESOURCE_ACTIONS (line 426) | const RESOURCE_ACTIONS = ['index', 'create', 'store', 'show', 'edit', 'u...
constant API_RESOURCE_ACTIONS (line 427) | const API_RESOURCE_ACTIONS = ['index', 'store', 'show', 'update', 'destr...
function isRouteStaticCall (line 429) | function isRouteStaticCall(node: any): boolean {
function getCallMethodName (line 435) | function getCallMethodName(node: any): string | null {
function getArguments (line 441) | function getArguments(node: any): any {
function findClosureBody (line 445) | function findClosureBody(argsNode: any): any | null {
function findDescendant (line 466) | function findDescendant(node: any, type: string): any {
function extractStringContent (line 475) | function extractStringContent(node: any): string | null {
function extractFirstStringArg (line 483) | function extractFirstStringArg(argsNode: any): string | null {
function extractMiddlewareArg (line 495) | function extractMiddlewareArg(argsNode: any): string[] {
function extractClassArg (line 519) | function extractClassArg(argsNode: any): string | null {
function extractControllerTarget (line 530) | function extractControllerTarget(argsNode: any): { controller: string | ...
type ChainedRouteCall (line 578) | interface ChainedRouteCall {
function unwrapRouteChain (line 586) | function unwrapRouteChain(node: any): ChainedRouteCall | null {
function parseArrayGroupArgs (line 620) | function parseArrayGroupArgs(argsNode: any): RouteGroupContext {
function extractLaravelRoutes (line 660) | function extractLaravelRoutes(tree: any, filePath: string): ExtractedRou...
type ResolveResult (line 783) | interface ResolveResult {
constant BUILT_IN_NAMES (line 836) | const BUILT_IN_NAMES = new Set([
FILE: gitnexus-web/src/core/ingestion/call-routing.ts
type CallRoutingResult (line 19) | type CallRoutingResult = RubyCallRouting | null;
type CallRouter (line 21) | type CallRouter = (
type RubyCallRouting (line 48) | type RubyCallRouting =
type RubyHeritageItem (line 55) | interface RubyHeritageItem {
type RubyAccessorType (line 61) | type RubyAccessorType = 'attr_accessor' | 'attr_reader' | 'attr_writer';
type RubyPropertyItem (line 63) | interface RubyPropertyItem {
constant CALL_RESULT (line 71) | const CALL_RESULT: RubyCallRouting = { kind: 'call' };
constant SKIP_RESULT (line 72) | const SKIP_RESULT: RubyCallRouting = { kind: 'skip' };
constant MAX_PARENT_DEPTH (line 75) | const MAX_PARENT_DEPTH = 50;
function routeRubyCall (line 86) | function routeRubyCall(calledName: string, callNode: any): RubyCallRouti...
FILE: gitnexus-web/src/core/ingestion/cluster-enricher.ts
type ClusterEnrichment (line 14) | interface ClusterEnrichment {
type EnrichmentResult (line 20) | interface EnrichmentResult {
type LLMClient (line 25) | interface LLMClient {
type ClusterMemberInfo (line 29) | interface ClusterMemberInfo {
FILE: gitnexus-web/src/core/ingestion/community-processor.ts
type CommunityNode (line 19) | interface CommunityNode {
type CommunityMembership (line 27) | interface CommunityMembership {
type CommunityDetectionResult (line 32) | interface CommunityDetectionResult {
constant COMMUNITY_COLORS (line 46) | const COMMUNITY_COLORS = [
FILE: gitnexus-web/src/core/ingestion/entry-point-scoring.ts
constant ENTRY_POINT_PATTERNS (line 23) | const ENTRY_POINT_PATTERNS: Record<string, RegExp[]> = {
constant UTILITY_PATTERNS (line 163) | const UTILITY_PATTERNS: RegExp[] = [
type EntryPointScoreResult (line 185) | interface EntryPointScoreResult {
function calculateEntryPointScore (line 207) | function calculateEntryPointScore(
function isTestFile (line 279) | function isTestFile(filePath: string): boolean {
function isUtilityFile (line 325) | function isUtilityFile(filePath: string): boolean {
FILE: gitnexus-web/src/core/ingestion/framework-detection.ts
type FrameworkHint (line 15) | interface FrameworkHint {
function detectFrameworkFromPath (line 31) | function detectFrameworkFromPath(filePath: string): FrameworkHint | null {
constant FRAMEWORK_AST_PATTERNS (line 341) | const FRAMEWORK_AST_PATTERNS = {
FILE: gitnexus-web/src/core/ingestion/import-processor.ts
type ImportMap (line 11) | type ImportMap = Map<string, Set<string>>;
FILE: gitnexus-web/src/core/ingestion/parsing-processor.ts
type FileProgressCallback (line 9) | type FileProgressCallback = (current: number, total: number, filePath: s...
FILE: gitnexus-web/src/core/ingestion/process-processor.ts
type ProcessDetectionConfig (line 21) | interface ProcessDetectionConfig {
constant DEFAULT_CONFIG (line 28) | const DEFAULT_CONFIG: ProcessDetectionConfig = {
type ProcessNode (line 39) | interface ProcessNode {
type ProcessStep (line 51) | interface ProcessStep {
type ProcessDetectionResult (line 57) | interface ProcessDetectionResult {
type AdjacencyList (line 205) | type AdjacencyList = Map<string, string[]>;
FILE: gitnexus-web/src/core/ingestion/symbol-table.ts
type SymbolDefinition (line 1) | interface SymbolDefinition {
type SymbolTable (line 7) | interface SymbolTable {
FILE: gitnexus-web/src/core/ingestion/tree-sitter-queries.ts
constant TYPESCRIPT_QUERIES (line 12) | const TYPESCRIPT_QUERIES = `
constant JAVASCRIPT_QUERIES (line 73) | const JAVASCRIPT_QUERIES = `
constant PYTHON_QUERIES (line 124) | const PYTHON_QUERIES = `
constant JAVA_QUERIES (line 152) | const JAVA_QUERIES = `
constant C_QUERIES (line 180) | const C_QUERIES = `
constant GO_QUERIES (line 204) | const GO_QUERIES = `
constant CPP_QUERIES (line 224) | const CPP_QUERIES = `
constant CSHARP_QUERIES (line 256) | const CSHARP_QUERIES = `
constant RUST_QUERIES (line 291) | const RUST_QUERIES = `
constant PHP_QUERIES (line 321) | const PHP_QUERIES = `
constant RUBY_QUERIES (line 406) | const RUBY_QUERIES = `
constant SWIFT_QUERIES (line 434) | const SWIFT_QUERIES = `
constant LANGUAGE_QUERIES (line 486) | const LANGUAGE_QUERIES: Record<SupportedLanguages, string> = {
FILE: gitnexus-web/src/core/ingestion/utils.ts
constant RUBY_EXTENSIONLESS_FILES (line 4) | const RUBY_EXTENSIONLESS_FILES = new Set(['Rakefile', 'Gemfile', 'Guardf...
FILE: gitnexus-web/src/core/lbug/csv-generator.ts
type CSVData (line 125) | interface CSVData {
FILE: gitnexus-web/src/core/lbug/lbug-adapter.ts
constant COPY_CSV_OPTS (line 220) | const COPY_CSV_OPTS = `(HEADER=true, ESCAPE='"', DELIM=',', QUOTE='"', P...
constant BACKTICK_TABLES (line 223) | const BACKTICK_TABLES = new Set([
constant TABLES_WITH_EXPORTED (line 234) | const TABLES_WITH_EXPORTED = new Set<string>(['Function', 'Class', 'Inte...
FILE: gitnexus-web/src/core/lbug/schema.ts
constant NODE_TABLES (line 15) | const NODE_TABLES = [
type NodeTableName (line 21) | type NodeTableName = typeof NODE_TABLES[number];
constant REL_TABLE_NAME (line 26) | const REL_TABLE_NAME = 'CodeRelation';
constant REL_TYPES (line 29) | const REL_TYPES = ['CONTAINS', 'DEFINES', 'IMPORTS', 'CALLS', 'EXTENDS',...
type RelType (line 30) | type RelType = typeof REL_TYPES[number];
constant EMBEDDING_TABLE_NAME (line 35) | const EMBEDDING_TABLE_NAME = 'CodeEmbedding';
constant FILE_SCHEMA (line 41) | const FILE_SCHEMA = `
constant FOLDER_SCHEMA (line 50) | const FOLDER_SCHEMA = `
constant FUNCTION_SCHEMA (line 58) | const FUNCTION_SCHEMA = `
constant CLASS_SCHEMA (line 70) | const CLASS_SCHEMA = `
constant INTERFACE_SCHEMA (line 82) | const INTERFACE_SCHEMA = `
constant METHOD_SCHEMA (line 94) | const METHOD_SCHEMA = `
constant CODE_ELEMENT_SCHEMA (line 106) | const CODE_ELEMENT_SCHEMA = `
constant COMMUNITY_SCHEMA (line 122) | const COMMUNITY_SCHEMA = `
constant PROCESS_SCHEMA (line 139) | const PROCESS_SCHEMA = `
constant STRUCT_SCHEMA (line 168) | const STRUCT_SCHEMA = CODE_ELEMENT_BASE('Struct');
constant ENUM_SCHEMA (line 169) | const ENUM_SCHEMA = CODE_ELEMENT_BASE('Enum');
constant MACRO_SCHEMA (line 170) | const MACRO_SCHEMA = CODE_ELEMENT_BASE('Macro');
constant TYPEDEF_SCHEMA (line 171) | const TYPEDEF_SCHEMA = CODE_ELEMENT_BASE('Typedef');
constant UNION_SCHEMA (line 172) | const UNION_SCHEMA = CODE_ELEMENT_BASE('Union');
constant NAMESPACE_SCHEMA (line 173) | const NAMESPACE_SCHEMA = CODE_ELEMENT_BASE('Namespace');
constant TRAIT_SCHEMA (line 174) | const TRAIT_SCHEMA = CODE_ELEMENT_BASE('Trait');
constant IMPL_SCHEMA (line 175) | const IMPL_SCHEMA = CODE_ELEMENT_BASE('Impl');
constant TYPE_ALIAS_SCHEMA (line 176) | const TYPE_ALIAS_SCHEMA = CODE_ELEMENT_BASE('TypeAlias');
constant CONST_SCHEMA (line 177) | const CONST_SCHEMA = CODE_ELEMENT_BASE('Const');
constant STATIC_SCHEMA (line 178) | const STATIC_SCHEMA = CODE_ELEMENT_BASE('Static');
constant PROPERTY_SCHEMA (line 179) | const PROPERTY_SCHEMA = CODE_ELEMENT_BASE('Property');
constant RECORD_SCHEMA (line 180) | const RECORD_SCHEMA = CODE_ELEMENT_BASE('Record');
constant DELEGATE_SCHEMA (line 181) | const DELEGATE_SCHEMA = CODE_ELEMENT_BASE('Delegate');
constant ANNOTATION_SCHEMA (line 182) | const ANNOTATION_SCHEMA = CODE_ELEMENT_BASE('Annotation');
constant CONSTRUCTOR_SCHEMA (line 183) | const CONSTRUCTOR_SCHEMA = CODE_ELEMENT_BASE('Constructor');
constant TEMPLATE_SCHEMA (line 184) | const TEMPLATE_SCHEMA = CODE_ELEMENT_BASE('Template');
constant MODULE_SCHEMA (line 185) | const MODULE_SCHEMA = CODE_ELEMENT_BASE('Module');
constant RELATION_SCHEMA (line 192) | const RELATION_SCHEMA = `
constant EMBEDDING_SCHEMA (line 351) | const EMBEDDING_SCHEMA = `
constant CREATE_VECTOR_INDEX_QUERY (line 362) | const CREATE_VECTOR_INDEX_QUERY = `
constant NODE_SCHEMA_QUERIES (line 371) | const NODE_SCHEMA_QUERIES = [
constant REL_SCHEMA_QUERIES (line 402) | const REL_SCHEMA_QUERIES = [
constant SCHEMA_QUERIES (line 406) | const SCHEMA_QUERIES = [
FILE: gitnexus-web/src/core/llm/agent.ts
constant BASE_SYSTEM_PROMPT (line 51) | const BASE_SYSTEM_PROMPT = `You are Nexus, a Code Analysis Agent with ac...
type AgentMessage (line 301) | interface AgentMessage {
FILE: gitnexus-web/src/core/llm/context-builder.ts
type CodebaseStats (line 12) | interface CodebaseStats {
type Hotspot (line 24) | interface Hotspot {
type FolderInfo (line 34) | interface FolderInfo {
type CodebaseContext (line 46) | interface CodebaseContext {
function getCodebaseStats (line 55) | async function getCodebaseStats(
function getHotspots (line 107) | async function getHotspots(
function getFolderTree (line 150) | async function getFolderTree(
function formatAsHybridAscii (line 188) | function formatAsHybridAscii(paths: string[], maxDepth: number): string {
function buildTreeFromPaths (line 263) | function buildTreeFromPaths(paths: string[], maxDepth: number): Map<stri...
function formatTreeAsAscii (line 297) | function formatTreeAsAscii(
function countItems (line 339) | function countItems(tree: Map<string, any>): number {
function buildCodebaseContext (line 354) | async function buildCodebaseContext(
function formatContextForPrompt (line 375) | function formatContextForPrompt(context: CodebaseContext): string {
function buildDynamicSystemPrompt (line 417) | function buildDynamicSystemPrompt(
FILE: gitnexus-web/src/core/llm/settings-service.ts
constant STORAGE_KEY (line 21) | const STORAGE_KEY = 'gitnexus-llm-settings';
FILE: gitnexus-web/src/core/llm/tools.ts
type ProcessInfo (line 67) | type ProcessInfo = { id: string; label: string; step?: number; stepCount...
type ResultInfo (line 68) | type ResultInfo = {
type NodeInfo (line 1180) | interface NodeInfo {
FILE: gitnexus-web/src/core/llm/types.ts
type LLMProvider (line 11) | type LLMProvider = 'openai' | 'azure-openai' | 'gemini' | 'anthropic' | ...
type BaseProviderConfig (line 16) | interface BaseProviderConfig {
type OpenAIConfig (line 26) | interface OpenAIConfig extends BaseProviderConfig {
type AzureOpenAIConfig (line 36) | interface AzureOpenAIConfig extends BaseProviderConfig {
type GeminiConfig (line 47) | interface GeminiConfig extends BaseProviderConfig {
type AnthropicConfig (line 56) | interface AnthropicConfig extends BaseProviderConfig {
type OllamaConfig (line 65) | interface OllamaConfig extends BaseProviderConfig {
type OpenRouterConfig (line 74) | interface OpenRouterConfig extends BaseProviderConfig {
type ProviderConfig (line 84) | type ProviderConfig = OpenAIConfig | AzureOpenAIConfig | GeminiConfig | ...
type LLMSettings (line 89) | interface LLMSettings {
constant DEFAULT_LLM_SETTINGS (line 112) | const DEFAULT_LLM_SETTINGS: LLMSettings = {
type MessageStep (line 157) | interface MessageStep {
type ChatMessage (line 169) | interface ChatMessage {
type ToolCallInfo (line 184) | interface ToolCallInfo {
type AgentStreamChunk (line 196) | interface AgentStreamChunk {
type AgentStep (line 212) | interface AgentStep {
constant GRAPH_SCHEMA_DESCRIPTION (line 226) | const GRAPH_SCHEMA_DESCRIPTION = `
FILE: gitnexus-web/src/core/search/bm25-index.ts
type BM25Document (line 10) | interface BM25Document {
type BM25SearchResult (line 16) | interface BM25SearchResult {
constant STOP_WORDS (line 151) | const STOP_WORDS = new Set([
FILE: gitnexus-web/src/core/search/hybrid-search.ts
constant RRF_K (line 18) | const RRF_K = 60;
type HybridSearchResult (line 20) | interface HybridSearchResult {
FILE: gitnexus-web/src/hooks/useAppState.tsx
type ViewMode (line 17) | type ViewMode = 'onboarding' | 'loading' | 'exploring';
type RightPanelTab (line 18) | type RightPanelTab = 'code' | 'chat';
type EmbeddingStatus (line 19) | type EmbeddingStatus = 'idle' | 'loading' | 'embedding' | 'indexing' | '...
type QueryResult (line 21) | interface QueryResult {
type AnimationType (line 28) | type AnimationType = 'pulse' | 'ripple' | 'glow';
type NodeAnimation (line 30) | interface NodeAnimation {
type CodeReference (line 37) | interface CodeReference {
type CodeReferenceFocus (line 48) | interface CodeReferenceFocus {
type AppState (line 55) | interface AppState {
FILE: gitnexus-web/src/hooks/useBackend.ts
constant LS_URL_KEY (line 12) | const LS_URL_KEY = 'gitnexus-backend-url';
constant LS_REPO_KEY (line 13) | const LS_REPO_KEY = 'gitnexus-backend-repo';
constant DEFAULT_URL (line 14) | const DEFAULT_URL = 'http://localhost:4747';
constant DEBOUNCE_MS (line 18) | const DEBOUNCE_MS = 500;
type UseBackendResult (line 22) | interface UseBackendResult {
function useBackend (line 47) | function useBackend(): UseBackendResult {
FILE: gitnexus-web/src/hooks/useSigma.ts
type UseSigmaOptions (line 52) | interface UseSigmaOptions {
type UseSigmaReturn (line 62) | interface UseSigmaReturn {
constant NOVERLAP_SETTINGS (line 79) | const NOVERLAP_SETTINGS = {
FILE: gitnexus-web/src/lib/constants.ts
constant NODE_COLORS (line 4) | const NODE_COLORS: Record<NodeLabel, string> = {
constant NODE_SIZES (line 26) | const NODE_SIZES: Record<NodeLabel, number> = {
constant COMMUNITY_COLORS (line 47) | const COMMUNITY_COLORS = [
constant DEFAULT_VISIBLE_LABELS (line 67) | const DEFAULT_VISIBLE_LABELS: NodeLabel[] = [
constant FILTERABLE_LABELS (line 82) | const FILTERABLE_LABELS: NodeLabel[] = [
type EdgeType (line 94) | type EdgeType = 'CONTAINS' | 'DEFINES' | 'IMPORTS' | 'CALLS' | 'EXTENDS'...
constant ALL_EDGE_TYPES (line 96) | const ALL_EDGE_TYPES: EdgeType[] = [
constant DEFAULT_VISIBLE_EDGES (line 106) | const DEFAULT_VISIBLE_EDGES: EdgeType[] = [
constant EDGE_INFO (line 116) | const EDGE_INFO: Record<EdgeType, { color: string; label: string }> = {
FILE: gitnexus-web/src/lib/graph-adapter.ts
type SigmaNodeAttributes (line 5) | interface SigmaNodeAttributes {
type SigmaEdgeAttributes (line 23) | interface SigmaEdgeAttributes {
FILE: gitnexus-web/src/lib/mermaid-generator.ts
type ProcessStep (line 8) | interface ProcessStep {
type ProcessEdge (line 16) | interface ProcessEdge {
type ProcessData (line 22) | interface ProcessData {
function generateProcessMermaid (line 34) | function generateProcessMermaid(process: ProcessData): string {
function generateSimpleMermaid (line 151) | function generateSimpleMermaid(processLabel: string, stepCount: number):...
FILE: gitnexus-web/src/services/backend.ts
type BackendRepo (line 8) | interface BackendRepo {
constant DEFAULT_TIMEOUT_MS (line 34) | const DEFAULT_TIMEOUT_MS = 10_000;
constant PROBE_TIMEOUT_MS (line 35) | const PROBE_TIMEOUT_MS = 2_000;
FILE: gitnexus-web/src/services/git-clone.ts
constant HOSTED_PROXY_URL (line 21) | const HOSTED_PROXY_URL = 'https://gitnexus.vercel.app/api/proxy';
FILE: gitnexus-web/src/services/server-connection.ts
type RepoSummary (line 3) | interface RepoSummary {
type ServerRepoInfo (line 17) | interface ServerRepoInfo {
type ConnectToServerResult (line 30) | interface ConnectToServerResult {
function normalizeServerUrl (line 37) | function normalizeServerUrl(input: string): string {
function fetchRepos (line 60) | async function fetchRepos(baseUrl: string): Promise<RepoSummary[]> {
function fetchRepoInfo (line 66) | async function fetchRepoInfo(baseUrl: string, repoName?: string): Promis...
function fetchGraph (line 77) | async function fetchGraph(
function extractFileContents (line 121) | function extractFileContents(nodes: GraphNode[]): Record<string, string> {
function connectToServer (line 131) | async function connectToServer(
FILE: gitnexus-web/src/services/zip.ts
type FileEntry (line 4) | interface FileEntry {
FILE: gitnexus-web/src/types/lbug-wasm.d.ts
class Database (line 3) | class Database {
class Connection (line 7) | class Connection {
type QueryResult (line 14) | interface QueryResult {
type PreparedStatement (line 19) | interface PreparedStatement {
FILE: gitnexus-web/src/types/pipeline.ts
type PipelinePhase (line 5) | type PipelinePhase = 'idle' | 'extracting' | 'structure' | 'parsing' | '...
type PipelineProgress (line 7) | interface PipelineProgress {
type PipelineResult (line 20) | interface PipelineResult {
type SerializablePipelineResult (line 29) | interface SerializablePipelineResult {
FILE: gitnexus-web/src/vendor/leiden/index.d.ts
type RNGFunction (line 3) | type RNGFunction = () => number;
type LeidenOptions (line 5) | type LeidenOptions = {
type LeidenMapping (line 16) | type LeidenMapping = { [key: string]: number };
type DetailedLeidenOutput (line 18) | type DetailedLeidenOutput = {
FILE: gitnexus-web/src/vendor/leiden/index.js
function tieBreaker (line 45) | function tieBreaker(
function undirectedLeiden (line 65) | function undirectedLeiden(detailed, graph, options) {
function leiden (line 241) | function leiden(assign, detailed, graph, options) {
FILE: gitnexus-web/src/vendor/leiden/utils.js
function addWeightToCommunity (line 16) | function addWeightToCommunity(map, community, weight) {
function UndirectedLeidenAddenda (line 26) | function UndirectedLeidenAddenda(index, options) {
FILE: gitnexus-web/src/workers/ingestion.worker.ts
method runPipeline (line 155) | async runPipeline(
method runQuery (line 215) | async runQuery(cypher: string): Promise<any[]> {
method isReady (line 226) | async isReady(): Promise<boolean> {
method getStats (line 238) | async getStats(): Promise<{ nodes: number; edges: number }> {
method runPipelineFromFiles (line 253) | async runPipelineFromFiles(
method startEmbeddingPipeline (line 324) | async startEmbeddingPipeline(
method startBackgroundEnrichment (line 358) | async startBackgroundEnrichment(
method cancelEnrichment (line 385) | async cancelEnrichment(): Promise<void> {
method semanticSearch (line 398) | async semanticSearch(
method semanticSearchWithContext (line 422) | async semanticSearchWithContext(
method hybridSearch (line 446) | async hybridSearch(
method isBM25Ready (line 477) | isBM25Ready(): boolean {
method getBM25Stats (line 484) | getBM25Stats(): { documentCount: number; termCount: number } {
method isEmbeddingModelReady (line 491) | isEmbeddingModelReady(): boolean {
method isEmbeddingComplete (line 498) | isEmbeddingComplete(): boolean {
method getEmbeddingProgress (line 505) | getEmbeddingProgress(): EmbeddingProgress | null {
method disposeEmbeddingModel (line 512) | async disposeEmbeddingModel(): Promise<void> {
method testArrayParams (line 522) | async testArrayParams(): Promise<{ success: boolean; error?: string }> {
method initializeAgent (line 540) | async initializeAgent(config: ProviderConfig, projectName?: string): Pro...
method initializeBackendAgent (line 637) | async initializeBackendAgent(
method isAgentReady (line 695) | isAgentReady(): boolean {
method getAgentProvider (line 702) | getAgentProvider(): { provider: string; model: string } | null {
method chatStream (line 716) | async chatStream(
method stopChat (line 749) | stopChat(): void {
method disposeAgent (line 756) | disposeAgent(): void {
method enrichCommunities (line 764) | async enrichCommunities(
type IngestionWorkerApi (line 897) | type IngestionWorkerApi = typeof workerApi;
FILE: gitnexus/hooks/claude/gitnexus-hook.cjs
function readInput (line 21) | function readInput() {
function findGitNexusDir (line 34) | function findGitNexusDir(startDir) {
function extractPattern (line 49) | function extractPattern(toolName, toolInput) {
function resolveCliPath (line 94) | function resolveCliPath() {
function runGitNexusCli (line 110) | function runGitNexusCli(cliPath, args, cwd, timeout) {
function handlePreToolUse (line 130) | function handlePreToolUse(input) {
function sendHookResponse (line 160) | function sendHookResponse(hookEventName, message) {
function handlePostToolUse (line 175) | function handlePostToolUse(input) {
function main (line 226) | function main() {
FILE: gitnexus/src/cli/ai-context.ts
type RepoStats (line 18) | interface RepoStats {
constant GITNEXUS_START_MARKER (line 27) | const GITNEXUS_START_MARKER = '<!-- gitnexus:start -->';
constant GITNEXUS_END_MARKER (line 28) | const GITNEXUS_END_MARKER = '<!-- gitnexus:end -->';
function generateGitNexusContent (line 41) | function generateGitNexusContent(projectName: string, stats: RepoStats, ...
function fileExists (line 157) | async function fileExists(filePath: string): Promise<boolean> {
function upsertGitNexusSection (line 172) | async function upsertGitNexusSection(
function installSkills (line 208) | async function installSkills(repoPath: string): Promise<string[]> {
function generateAIContextFiles (line 283) | async function generateAIContextFiles(
FILE: gitnexus/src/cli/analyze.ts
constant HEAP_MB (line 24) | const HEAP_MB = 8192;
constant HEAP_FLAG (line 25) | const HEAP_FLAG = `--max-old-space-size=${HEAP_MB}`;
function ensureHeap (line 28) | function ensureHeap(): boolean {
type AnalyzeOptions (line 46) | interface AnalyzeOptions {
constant EMBEDDING_NODE_LIMIT (line 54) | const EMBEDDING_NODE_LIMIT = 50_000;
constant PHASE_LABELS (line 56) | const PHASE_LABELS: Record<string, string> = {
FILE: gitnexus/src/cli/augment.ts
function augmentCommand (line 16) | async function augmentCommand(pattern: string): Promise<void> {
FILE: gitnexus/src/cli/eval-server.ts
type EvalServerOptions (line 31) | interface EvalServerOptions {
function formatQueryResult (line 40) | function formatQueryResult(result: any): string {
function formatContextResult (line 81) | function formatContextResult(result: any): string {
function formatImpactResult (line 145) | function formatImpactResult(result: any): string {
function formatCypherResult (line 192) | function formatCypherResult(result: any): string {
function formatDetectChangesResult (line 213) | function formatDetectChangesResult(result: any): string {
function formatListReposResult (line 249) | function formatListReposResult(result: any): string {
function formatToolResult (line 267) | function formatToolResult(toolName: string, result: any): string {
function getNextStepHint (line 283) | function getNextStepHint(toolName: string): string {
function evalServerCommand (line 307) | async function evalServerCommand(options?: EvalServerOptions): Promise<v...
constant MAX_BODY_SIZE (line 432) | const MAX_BODY_SIZE = 1024 * 1024;
function readBody (line 434) | function readBody(req: http.IncomingMessage): Promise<string> {
FILE: gitnexus/src/cli/lazy-action.ts
function isCallable (line 7) | function isCallable(value: unknown): value is (...args: unknown[]) => un...
function createLazyAction (line 11) | function createLazyAction<
FILE: gitnexus/src/cli/setup.ts
type SetupResult (line 19) | interface SetupResult {
function getMcpEntry (line 29) | function getMcpEntry() {
function mergeMcpConfig (line 46) | function mergeMcpConfig(existing: any): any {
function readJsonFile (line 60) | async function readJsonFile(filePath: string): Promise<any | null> {
function writeJsonFile (line 72) | async function writeJsonFile(filePath: string, data: any): Promise<void> {
function dirExists (line 80) | async function dirExists(dirPath: string): Promise<boolean> {
function setupCursor (line 91) | async function setupCursor(result: SetupResult): Promise<void> {
function setupClaudeCode (line 109) | async function setupClaudeCode(result: SetupResult): Promise<void> {
function installClaudeCodeSkills (line 130) | async function installClaudeCodeSkills(result: SetupResult): Promise<voi...
function installClaudeCodeHooks (line 149) | async function installClaudeCodeHooks(result: SetupResult): Promise<void> {
function setupOpenCode (line 222) | async function setupOpenCode(result: SetupResult): Promise<void> {
function installSkillsTo (line 253) | async function installSkillsTo(targetDir: string): Promise<string[]> {
function copyDirRecursive (line 306) | async function copyDirRecursive(src: string, dest: string): Promise<void> {
function installCursorSkills (line 323) | async function installCursorSkills(result: SetupResult): Promise<void> {
function installOpenCodeSkills (line 341) | async function installOpenCodeSkills(result: SetupResult): Promise<void> {
FILE: gitnexus/src/cli/skill-gen.ts
type GeneratedSkillInfo (line 21) | interface GeneratedSkillInfo {
type AggregatedCommunity (line 28) | interface AggregatedCommunity {
type MemberSymbol (line 35) | interface MemberSymbol {
type FileInfo (line 44) | interface FileInfo {
type CrossConnection (line 49) | interface CrossConnection {
FILE: gitnexus/src/cli/tool.ts
function getBackend (line 23) | async function getBackend(): Promise<LocalBackend> {
function output (line 44) | function output(data: any): void {
function queryCommand (line 59) | async function queryCommand(queryText: string, options?: {
function contextCommand (line 83) | async function contextCommand(name: string, options?: {
function impactCommand (line 105) | async function impactCommand(target: string, options?: {
function cypherCommand (line 139) | async function cypherCommand(query: string, options?: {
FILE: gitnexus/src/cli/wiki.ts
type WikiCommandOptions (line 17) | interface WikiCommandOptions {
function prompt (line 29) | function prompt(question: string, hide = false): Promise<string> {
function hasGhCLI (line 335) | function hasGhCLI(): boolean {
function publishGist (line 344) | function publishGist(htmlPath: string): { url: string; rawUrl: string } ...
function maybePublishGist (line 372) | async function maybePublishGist(htmlPath: string, gistFlag?: boolean): P...
FILE: gitnexus/src/config/ignore-service.ts
constant DEFAULT_IGNORE_LIST (line 6) | const DEFAULT_IGNORE_LIST = new Set([
constant IGNORED_EXTENSIONS (line 104) | const IGNORED_EXTENSIONS = new Set([
constant IGNORED_FILES (line 156) | const IGNORED_FILES = new Set([
type IgnoreOptions (line 258) | interface IgnoreOptions {
method ignored (line 304) | ignored(p: Path): boolean {
method childrenIgnored (line 314) | childrenIgnored(p: Path): boolean {
FILE: gitnexus/src/config/supported-languages.ts
type SupportedLanguages (line 1) | enum SupportedLanguages {
FILE: gitnexus/src/core/augmentation/engine.ts
function findRepoForCwd (line 24) | async function findRepoForCwd(cwd: string): Promise<{
function augment (line 86) | async function augment(pattern: string, cwd?: string): Promise<string> {
FILE: gitnexus/src/core/embeddings/embedder.ts
function isCudaAvailable (line 31) | function isCudaAvailable(): boolean {
type ModelProgressCallback (line 65) | type ModelProgressCallback = (progress: ModelProgress) => void;
FILE: gitnexus/src/core/embeddings/embedding-pipeline.ts
type EmbeddingProgressCallback (line 29) | type EmbeddingProgressCallback = (progress: EmbeddingProgress) => void;
FILE: gitnexus/src/core/embeddings/types.ts
constant EMBEDDABLE_LABELS (line 11) | const EMBEDDABLE_LABELS = [
type EmbeddableLabel (line 19) | type EmbeddableLabel = typeof EMBEDDABLE_LABELS[number];
type EmbeddingPhase (line 30) | type EmbeddingPhase =
type EmbeddingProgress (line 41) | interface EmbeddingProgress {
type EmbeddingConfig (line 55) | interface EmbeddingConfig {
constant DEFAULT_EMBEDDING_CONFIG (line 73) | const DEFAULT_EMBEDDING_CONFIG: EmbeddingConfig = {
type SemanticSearchResult (line 84) | interface SemanticSearchResult {
type EmbeddableNode (line 97) | interface EmbeddableNode {
type ModelProgress (line 110) | interface ModelProgress {
FILE: gitnexus/src/core/graph/graph.ts
method nodes (line 51) | get nodes(){
method relationships (line 55) | get relationships(){
method forEachNode (line 61) | forEachNode(fn: (node: GraphNode) => void) { nodeMap.forEach(fn); }
method forEachRelationship (line 62) | forEachRelationship(fn: (rel: GraphRelationship) => void) { relationship...
method nodeCount (line 66) | get nodeCount() {
method relationshipCount (line 70) | get relationshipCount() {
FILE: gitnexus/src/core/graph/types.ts
type NodeLabel (line 1) | type NodeLabel =
type NodeProperties (line 40) | type NodeProperties = {
type RelationshipType (line 71) | type RelationshipType =
type GraphNode (line 88) | interface GraphNode {
type GraphRelationship (line 94) | interface GraphRelationship {
type KnowledgeGraph (line 107) | interface KnowledgeGraph {
FILE: gitnexus/src/core/ingestion/ast-cache.ts
type ASTCache (line 5) | interface ASTCache {
FILE: gitnexus/src/core/ingestion/call-processor.ts
constant TYPE_PRESERVING_METHODS (line 39) | const TYPE_PRESERVING_METHODS = new Set([
type ResolveResult (line 497) | interface ResolveResult {
constant CALLABLE_SYMBOL_TYPES (line 504) | const CALLABLE_SYMBOL_TYPES = new Set([
constant CONSTRUCTOR_TARGET_TYPES (line 512) | const CONSTRUCTOR_TARGET_TYPES = new Set(['Constructor', 'Class', 'Struc...
type OverloadHints (line 559) | interface OverloadHints {
constant KOTLIN_BOXED_TO_PRIMITIVE (line 573) | const KOTLIN_BOXED_TO_PRIMITIVE: Readonly<Record<string, string>> = {
type ReceiverTypeEntry (line 768) | type ReceiverTypeEntry =
type ReceiverTypeIndex (line 771) | type ReceiverTypeIndex = Map<string, Map<string, ReceiverTypeEntry>>;
type FieldResolution (line 830) | interface FieldResolution {
type OnFieldResolved (line 911) | type OnFieldResolved = (fieldNodeId: string) => void;
FILE: gitnexus/src/core/ingestion/call-routing.ts
type CallRoutingResult (line 19) | type CallRoutingResult = RubyCallRouting | null;
type CallRouter (line 21) | type CallRouter = (
type RubyCallRouting (line 48) | type RubyCallRouting =
type RubyHeritageItem (line 55) | interface RubyHeritageItem {
type RubyAccessorType (line 61) | type RubyAccessorType = 'attr_accessor' | 'attr_reader' | 'attr_writer';
type RubyPropertyItem (line 63) | interface RubyPropertyItem {
constant CALL_RESULT (line 73) | const CALL_RESULT: RubyCallRouting = { kind: 'call' };
constant SKIP_RESULT (line 74) | const SKIP_RESULT: RubyCallRouting = { kind: 'skip' };
constant MAX_PARENT_DEPTH (line 77) | const MAX_PARENT_DEPTH = 50;
function routeRubyCall (line 88) | function routeRubyCall(calledName: string, callNode: any): RubyCallRouti...
FILE: gitnexus/src/core/ingestion/cluster-enricher.ts
type ClusterEnrichment (line 14) | interface ClusterEnrichment {
type EnrichmentResult (line 20) | interface EnrichmentResult {
type LLMClient (line 25) | interface LLMClient {
type ClusterMemberInfo (line 29) | interface ClusterMemberInfo {
FILE: gitnexus/src/core/ingestion/community-processor.ts
type CommunityNode (line 31) | interface CommunityNode {
type CommunityMembership (line 39) | interface CommunityMembership {
type CommunityDetectionResult (line 44) | interface CommunityDetectionResult {
constant COMMUNITY_COLORS (line 58) | const COMMUNITY_COLORS = [
constant MIN_CONFIDENCE_LARGE (line 187) | const MIN_CONFIDENCE_LARGE = 0.5;
FILE: gitnexus/src/core/ingestion/constants.ts
constant TREE_SITTER_BUFFER_SIZE (line 5) | const TREE_SITTER_BUFFER_SIZE = 512 * 1024;
constant TREE_SITTER_MAX_BUFFER (line 11) | const TREE_SITTER_MAX_BUFFER = 32 * 1024 * 1024;
FILE: gitnexus/src/core/ingestion/entry-point-scoring.ts
constant ENTRY_POINT_PATTERNS (line 24) | const ENTRY_POINT_PATTERNS: Record<string, RegExp[]> = {
constant MERGED_ENTRY_POINT_PATTERNS (line 204) | const MERGED_ENTRY_POINT_PATTERNS: Record<string, RegExp[]> = {};
constant UNIVERSAL_PATTERNS (line 205) | const UNIVERSAL_PATTERNS = ENTRY_POINT_PATTERNS['*'] || [];
constant UTILITY_PATTERNS (line 219) | const UTILITY_PATTERNS: RegExp[] = [
type EntryPointScoreResult (line 241) | interface EntryPointScoreResult {
function calculateEntryPointScore (line 263) | function calculateEntryPointScore(
function isTestFile (line 333) | function isTestFile(filePath: string): boolean {
function isUtilityFile (line 384) | function isUtilityFile(filePath: string): boolean {
FILE: gitnexus/src/core/ingestion/export-detection.ts
type ExportChecker (line 14) | type ExportChecker = (node: SyntaxNode, name: string) => boolean;
constant CSHARP_DECL_TYPES (line 66) | const CSHARP_DECL_TYPES = new Set([
constant RUST_DECL_TYPES (line 102) | const RUST_DECL_TYPES = new Set([
FILE: gitnexus/src/core/ingestion/filesystem-walker.ts
type FileEntry (line 6) | interface FileEntry {
type ScannedFile (line 12) | interface ScannedFile {
type FilePath (line 18) | interface FilePath {
constant READ_CONCURRENCY (line 22) | const READ_CONCURRENCY = 32;
constant MAX_FILE_SIZE (line 25) | const MAX_FILE_SIZE = 512 * 1024;
FILE: gitnexus/src/core/ingestion/framework-detection.ts
type FrameworkHint (line 17) | interface FrameworkHint {
function detectFrameworkFromPath (line 33) | function detectFrameworkFromPath(filePath: string): FrameworkHint | null {
constant FRAMEWORK_AST_PATTERNS (line 414) | const FRAMEWORK_AST_PATTERNS = {
type AstFrameworkPatternConfig (line 454) | interface AstFrameworkPatternConfig {
constant AST_FRAMEWORK_PATTERNS_BY_LANGUAGE (line 461) | const AST_FRAMEWORK_PATTERNS_BY_LANGUAGE: Record<string, AstFrameworkPat...
constant AST_PATTERNS_LOWERED (line 494) | const AST_PATTERNS_LOWERED: Record<string, Array<{ framework: string; en...
function detectFrameworkFromAST (line 507) | function detectFrameworkFromAST(
FILE: gitnexus/src/core/ingestion/heritage-processor.ts
constant INTERFACE_NAME_RE (line 30) | const INTERFACE_NAME_RE = /^I[A-Z]/;
FILE: gitnexus/src/core/ingestion/import-processor.ts
type ImportMap (line 59) | type ImportMap = Map<string, Set<string>>;
type PackageMap (line 64) | type PackageMap = Map<string, Set<string>>;
type NamedImportBinding (line 72) | interface NamedImportBinding { sourcePath: string; exportedName: string }
type NamedImportMap (line 73) | type NamedImportMap = Map<string, Map<string, NamedImportBinding>>;
function isFileInPackageDir (line 79) | function isFileInPackageDir(filePath: string, dirSuffix: string): boolean {
type ImportResolutionContext (line 88) | interface ImportResolutionContext {
function buildImportResolutionContext (line 96) | function buildImportResolutionContext(allPaths: string[]): ImportResolut...
type LanguageConfigs (line 112) | interface LanguageConfigs {
type ResolveCtx (line 121) | interface ResolveCtx {
type ImportResult (line 135) | type ImportResult =
function resolveLanguageImport (line 144) | function resolveLanguageImport(
function applyImportResult (line 270) | function applyImportResult(
FILE: gitnexus/src/core/ingestion/language-config.ts
type TsconfigPaths (line 11) | interface TsconfigPaths {
type GoModuleConfig (line 19) | interface GoModuleConfig {
type ComposerConfig (line 25) | interface ComposerConfig {
type CSharpProjectConfig (line 31) | interface CSharpProjectConfig {
type SwiftPackageConfig (line 39) | interface SwiftPackageConfig {
function loadTsconfigPaths (line 52) | async function loadTsconfigPaths(repoRoot: string): Promise<TsconfigPath...
function loadGoModulePath (line 96) | async function loadGoModulePath(repoRoot: string): Promise<GoModuleConfi...
function loadComposerConfig (line 114) | async function loadComposerConfig(repoRoot: string): Promise<ComposerCon...
function loadCSharpProjectConfig (line 143) | async function loadCSharpProjectConfig(repoRoot: string): Promise<CSharp...
function loadSwiftPackageConfig (line 187) | async function loadSwiftPackageConfig(repoRoot: string): Promise<SwiftPa...
FILE: gitnexus/src/core/ingestion/mro-processor.ts
type MROEntry (line 30) | interface MROEntry {
type MethodAmbiguity (line 38) | interface MethodAmbiguity {
type MROResult (line 45) | interface MROResult {
function buildAdjacency (line 56) | function buildAdjacency(graph: KnowledgeGraph) {
function gatherAncestors (line 98) | function gatherAncestors(
function c3Linearize (line 131) | function c3Linearize(
type MethodDef (line 211) | type MethodDef = { classId: string; className: string; methodId: string };
type Resolution (line 212) | type Resolution = { resolvedTo: string | null; reason: string };
function resolveByMroOrder (line 215) | function resolveByMroOrder(
function resolveCsharpJava (line 233) | function resolveCsharpJava(
function computeMRO (line 278) | function computeMRO(graph: KnowledgeGraph): MROResult {
function buildTransitiveEdgeTypes (line 432) | function buildTransitiveEdgeTypes(
FILE: gitnexus/src/core/ingestion/named-binding-extraction.ts
function walkBindingChain (line 20) | function walkBindingChain(
function extractNamedBindings (line 67) | function extractNamedBindings(
function extractTsNamedBindings (line 95) | function extractTsNamedBindings(importNode: any): { local: string; expor...
function extractPythonNamedBindings (line 153) | function extractPythonNamedBindings(importNode: any): { local: string; e...
function extractKotlinNamedBindings (line 185) | function extractKotlinNamedBindings(importNode: any): { local: string; e...
function extractRustNamedBindings (line 214) | function extractRustNamedBindings(importNode: any): { local: string; exp...
function collectRustBindings (line 223) | function collectRustBindings(node: any, bindings: { local: string; expor...
function extractPhpNamedBindings (line 281) | function extractPhpNamedBindings(importNode: any): { local: string; expo...
function extractCsharpNamedBindings (line 333) | function extractCsharpNamedBindings(importNode: any): { local: string; e...
function extractJavaNamedBindings (line 353) | function extractJavaNamedBindings(importNode: any): { local: string; exp...
function findChild (line 378) | function findChild(node: any, type: string): any {
FILE: gitnexus/src/core/ingestion/parsing-processor.ts
type FileProgressCallback (line 18) | type FileProgressCallback = (current: number, total: number, filePath: s...
type WorkerExtractedData (line 20) | interface WorkerExtractedData {
FILE: gitnexus/src/core/ingestion/pipeline.ts
constant CHUNK_BYTE_BUDGET (line 31) | const CHUNK_BYTE_BUDGET = 20 * 1024 * 1024;
constant AST_CACHE_CAP (line 34) | const AST_CACHE_CAP = 50;
type PipelineOptions (line 36) | interface PipelineOptions {
FILE: gitnexus/src/core/ingestion/process-processor.ts
type ProcessDetectionConfig (line 24) | interface ProcessDetectionConfig {
constant DEFAULT_CONFIG (line 31) | const DEFAULT_CONFIG: ProcessDetectionConfig = {
type ProcessNode (line 42) | interface ProcessNode {
type ProcessStep (line 54) | interface ProcessStep {
type ProcessDetectionResult (line 60) | interface ProcessDetectionResult {
type AdjacencyList (line 213) | type AdjacencyList = Map<string, string[]>;
constant MIN_TRACE_CONFIDENCE (line 220) | const MIN_TRACE_CONFIDENCE = 0.5;
FILE: gitnexus/src/core/ingestion/resolution-context.ts
type ResolutionTier (line 23) | type ResolutionTier = 'same-file' | 'import-scoped' | 'global';
type TieredCandidates (line 26) | interface TieredCandidates {
constant TIER_CONFIDENCE (line 32) | const TIER_CONFIDENCE: Record<ResolutionTier, number> = {
type ImportMap (line 39) | type ImportMap = Map<string, Set<string>>;
type PackageMap (line 40) | type PackageMap = Map<string, Set<string>>;
type NamedImportMap (line 41) | type NamedImportMap = Map<string, Map<string, NamedImportBinding>>;
type ResolutionContext (line 43) | interface ResolutionContext {
FILE: gitnexus/src/core/ingestion/resolvers/csharp.ts
type CSharpProjectConfig (line 10) | interface CSharpProjectConfig {
function resolveCSharpImport (line 21) | function resolveCSharpImport(
function resolveCSharpNamespaceDir (line 102) | function resolveCSharpNamespaceDir(
FILE: gitnexus/src/core/ingestion/resolvers/go.ts
type GoModuleConfig (line 7) | interface GoModuleConfig {
function resolveGoPackageDir (line 16) | function resolveGoPackageDir(
function resolveGoPackage (line 30) | function resolveGoPackage(
FILE: gitnexus/src/core/ingestion/resolvers/jvm.ts
constant KOTLIN_EXTENSIONS (line 9) | const KOTLIN_EXTENSIONS: readonly string[] = ['.kt', '.kts'];
function resolveJvmWildcard (line 28) | function resolveJvmWildcard(
function resolveJvmMemberImport (line 72) | function resolveJvmMemberImport(
FILE: gitnexus/src/core/ingestion/resolvers/php.ts
type ComposerConfig (line 10) | interface ComposerConfig {
function resolvePhpImport (line 19) | function resolvePhpImport(
FILE: gitnexus/src/core/ingestion/resolvers/python.ts
function resolvePythonImport (line 22) | function resolvePythonImport(
FILE: gitnexus/src/core/ingestion/resolvers/ruby.ts
function resolveRubyImport (line 15) | function resolveRubyImport(
FILE: gitnexus/src/core/ingestion/resolvers/rust.ts
function resolveRustImport (line 10) | function resolveRustImport(
function tryRustModulePath (line 64) | function tryRustModulePath(modulePath: string, allFiles: Set<string>): s...
FILE: gitnexus/src/core/ingestion/resolvers/standard.ts
type TsconfigPaths (line 13) | interface TsconfigPaths {
constant RESOLVE_CACHE_CAP (line 22) | const RESOLVE_CACHE_CAP = 100_000;
FILE: gitnexus/src/core/ingestion/resolvers/utils.ts
constant EXTENSIONS (line 7) | const EXTENSIONS = [
function tryResolveWithExtensions (line 37) | function tryResolveWithExtensions(
type SuffixIndex (line 57) | interface SuffixIndex {
function buildSuffixIndex (line 66) | function buildSuffixIndex(normalizedFileList: string[], allFileList: str...
function suffixResolve (line 125) | function suffixResolve(
FILE: gitnexus/src/core/ingestion/symbol-table.ts
type SymbolDefinition (line 3) | interface SymbolDefinition {
type SymbolTable (line 23) | interface SymbolTable {
FILE: gitnexus/src/core/ingestion/tree-sitter-queries.ts
constant TYPESCRIPT_QUERIES (line 12) | const TYPESCRIPT_QUERIES = `
constant JAVASCRIPT_QUERIES (line 112) | const JAVASCRIPT_QUERIES = `
constant PYTHON_QUERIES (line 189) | const PYTHON_QUERIES = `
constant JAVA_QUERIES (line 242) | const JAVA_QUERIES = `
constant C_QUERIES (line 285) | const C_QUERIES = `
constant GO_QUERIES (line 316) | const GO_QUERIES = `
constant CPP_QUERIES (line 370) | const CPP_QUERIES = `
constant CSHARP_QUERIES (line 478) | const CSHARP_QUERIES = `
constant RUST_QUERIES (line 539) | const RUST_QUERIES = `
constant PHP_QUERIES (line 594) | const PHP_QUERIES = `
constant RUBY_QUERIES (line 703) | const RUBY_QUERIES = `
constant KOTLIN_QUERIES (line 757) | const KOTLIN_QUERIES = `
constant SWIFT_QUERIES (line 851) | const SWIFT_QUERIES = `
constant LANGUAGE_QUERIES (line 917) | const LANGUAGE_QUERIES: Record<SupportedLanguages, string> = {
FILE: gitnexus/src/core/ingestion/type-env.ts
type TypeEnv (line 22) | type TypeEnv = Map<string, Map<string, string>>;
constant FILE_SCOPE (line 25) | const FILE_SCOPE = '';
type TypeEnvironment (line 42) | interface TypeEnvironment {
type PatternOverride (line 59) | interface PatternOverride {
type PatternOverrides (line 66) | type PatternOverrides = Map<string, Map<string, PatternOverride[]>>;
constant NARROWING_BRANCH_TYPES (line 70) | const NARROWING_BRANCH_TYPES = new Set([
constant FAST_NULLABLE_KEYWORDS (line 91) | const FAST_NULLABLE_KEYWORDS = new Set(['null', 'undefined', 'void', 'No...
constant THIS_RECEIVERS (line 174) | const THIS_RECEIVERS = new Set(['this', 'self', '$this', 'Me']);
method has (line 350) | has(name: string): boolean {
constant SKIP_SUBTREE_TYPES (line 379) | const SKIP_SUBTREE_TYPES = new Set([
constant CLASS_LIKE_TYPES (line 393) | const CLASS_LIKE_TYPES = new Set(['Class', 'Struct', 'Interface']);
constant CONSTRUCTOR_EXPR_TYPES (line 416) | const CONSTRUCTOR_EXPR_TYPES = new Set([
constant MAX_MRO_DEPTH (line 451) | const MAX_MRO_DEPTH = 5;
constant MAX_FIXPOINT_ITERATIONS (line 586) | const MAX_FIXPOINT_ITERATIONS = 10;
type BuildTypeEnvOptions (line 647) | interface BuildTypeEnvOptions {
method lookupReturnType (line 673) | lookupReturnType(callee: string): string | undefined {
method lookupRawReturnType (line 682) | lookupRawReturnType(callee: string): string | undefined {
type ConstructorBinding (line 1038) | interface ConstructorBinding {
FILE: gitnexus/src/core/ingestion/type-extractors/c-cpp.ts
constant DECLARATION_NODE_TYPES (line 5) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant SMART_PTR_FACTORIES (line 10) | const SMART_PTR_FACTORIES = new Set([
constant SMART_PTR_WRAPPERS (line 16) | const SMART_PTR_WRAPPERS = new Set(['shared_ptr', 'unique_ptr', 'weak_pt...
constant FOR_LOOP_NODE_TYPES (line 255) | const FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set(['for_range_loo...
FILE: gitnexus/src/core/ingestion/type-extractors/csharp.ts
constant KNOWN_CONTAINER_PROPS (line 6) | const KNOWN_CONTAINER_PROPS: ReadonlySet<string> = new Set(['Keys', 'Val...
constant DECLARATION_NODE_TYPES (line 8) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant FOR_LOOP_NODE_TYPES (line 133) | const FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set([
FILE: gitnexus/src/core/ingestion/type-extractors/go.ts
constant DECLARATION_NODE_TYPES (line 5) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant FOR_LOOP_NODE_TYPES (line 184) | const FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set([
constant GO_FUNCTION_NODE_TYPES (line 189) | const GO_FUNCTION_NODE_TYPES = new Set([
FILE: gitnexus/src/core/ingestion/type-extractors/jvm.ts
constant JAVA_DECLARATION_NODE_TYPES (line 7) | const JAVA_DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant JAVA_FOR_LOOP_NODE_TYPES (line 88) | const JAVA_FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set([
constant KOTLIN_DECLARATION_NODE_TYPES (line 319) | const KOTLIN_DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant KOTLIN_FOR_LOOP_NODE_TYPES (line 460) | const KOTLIN_FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set([
FILE: gitnexus/src/core/ingestion/type-extractors/php.ts
constant DECLARATION_NODE_TYPES (line 5) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant SKIP_NODE_TYPES (line 79) | const SKIP_NODE_TYPES: ReadonlySet<string> = new Set(['attribute_list', ...
constant PHPDOC_PARAM_RE (line 82) | const PHPDOC_PARAM_RE = /@param\s+(\S+)\s+\$(\w+)/g;
constant PHPDOC_PARAM_ALT_RE (line 84) | const PHPDOC_PARAM_ALT_RE = /@param\s+\$(\w+)\s+(\S+)/g;
constant PHPDOC_VAR_RE (line 86) | const PHPDOC_VAR_RE = /@var\s+(\S+)/;
constant PHPDOC_RETURN_RE (line 304) | const PHPDOC_RETURN_RE = /@return\s+(\S+)/;
constant FOR_LOOP_NODE_TYPES (line 387) | const FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set([
FILE: gitnexus/src/core/ingestion/type-extractors/python.ts
constant DECLARATION_NODE_TYPES (line 5) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant FOR_LOOP_NODE_TYPES (line 141) | const FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set([
constant PY_FUNCTION_NODE_TYPES (line 146) | const PY_FUNCTION_NODE_TYPES = new Set([
constant PATTERN_BINDING_NODE_TYPES (line 447) | const PATTERN_BINDING_NODE_TYPES: ReadonlySet<string> = new Set(['as_pat...
FILE: gitnexus/src/core/ingestion/type-extractors/ruby.ts
constant YARD_PARAM_RE (line 27) | const YARD_PARAM_RE = /@param\s+(\w+)\s+\[([^\]]+)\]/g;
constant YARD_PARAM_ALT_RE (line 29) | const YARD_PARAM_ALT_RE = /@param\s+\[([^\]]+)\]\s+(\w+)/g;
constant YARD_RETURN_RE (line 32) | const YARD_RETURN_RE = /@return\s+\[([^\]]+)\]/;
constant DECLARATION_NODE_TYPES (line 160) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant RUBY_METHOD_NODE_TYPES (line 265) | const RUBY_METHOD_NODE_TYPES = new Set(['method', 'singleton_method']);
constant FOR_LOOP_NODE_TYPES (line 267) | const FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set(['for']);
FILE: gitnexus/src/core/ingestion/type-extractors/rust.ts
constant DECLARATION_NODE_TYPES (line 5) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant FOR_LOOP_NODE_TYPES (line 357) | const FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set(['for_expressio...
FILE: gitnexus/src/core/ingestion/type-extractors/shared.ts
type TypeArgPosition (line 6) | type TypeArgPosition = 'first' | 'last';
type ContainerDescriptor (line 17) | interface ContainerDescriptor {
constant NO_KEYS (line 27) | const NO_KEYS: ReadonlySet<string> = new Set();
constant STD_KEY_METHODS (line 30) | const STD_KEY_METHODS: ReadonlySet<string> = new Set(['keys']);
constant JAVA_KEY_METHODS (line 31) | const JAVA_KEY_METHODS: ReadonlySet<string> = new Set(['keySet']);
constant CSHARP_KEY_METHODS (line 32) | const CSHARP_KEY_METHODS: ReadonlySet<string> = new Set(['Keys']);
constant STD_VALUE_METHODS (line 35) | const STD_VALUE_METHODS: ReadonlySet<string> = new Set(['values', 'get',...
constant CSHARP_VALUE_METHODS (line 36) | const CSHARP_VALUE_METHODS: ReadonlySet<string> = new Set(['Values', 'Tr...
constant SINGLE_ELEMENT_METHODS (line 37) | const SINGLE_ELEMENT_METHODS: ReadonlySet<string> = new Set([
constant CONTAINER_DESCRIPTORS (line 42) | const CONTAINER_DESCRIPTORS: ReadonlyMap<string, ContainerDescriptor> = ...
function methodToTypeArgPosition (line 104) | function methodToTypeArgPosition(methodName: string | undefined, contain...
function getContainerDescriptor (line 124) | function getContainerDescriptor(typeName: string): ContainerDescriptor |...
function resolveIterableElementType (line 141) | function resolveIterableElementType(
constant NULLABLE_WRAPPER_TYPES (line 173) | const NULLABLE_WRAPPER_TYPES = new Set([
constant TYPED_PARAMETER_TYPES (line 324) | const TYPED_PARAMETER_TYPES = new Set([
constant NULLABLE_KEYWORDS (line 446) | const NULLABLE_KEYWORDS = new Set(['null', 'undefined', 'void', 'None', ...
function extractFirstArg (line 511) | function extractFirstArg(args: string): string {
function extractElementTypeFromString (line 540) | function extractElementTypeFromString(typeStr: string, pos: TypeArgPosit...
constant PRIMITIVE_TYPES (line 628) | const PRIMITIVE_TYPES = new Set([
constant WRAPPER_GENERICS (line 648) | const WRAPPER_GENERICS = new Set([
function extractFirstGenericArg (line 669) | function extractFirstGenericArg(args: string): string {
function extractFirstTypeArg (line 686) | function extractFirstTypeArg(args: string): string {
constant MAX_RETURN_TYPE_INPUT_LENGTH (line 699) | const MAX_RETURN_TYPE_INPUT_LENGTH = 2048;
constant MAX_RETURN_TYPE_LENGTH (line 700) | const MAX_RETURN_TYPE_LENGTH = 512;
FILE: gitnexus/src/core/ingestion/type-extractors/swift.ts
constant DECLARATION_NODE_TYPES (line 5) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
FILE: gitnexus/src/core/ingestion/type-extractors/types.ts
type TypeBindingExtractor (line 4) | type TypeBindingExtractor = (node: SyntaxNode, env: Map<string, string>)...
type ParameterExtractor (line 7) | type ParameterExtractor = (node: SyntaxNode, env: Map<string, string>) =...
type ClassNameLookup (line 11) | type ClassNameLookup = { has(name: string): boolean };
type InitializerExtractor (line 14) | type InitializerExtractor = (node: SyntaxNode, env: Map<string, string>,...
type ConstructorBindingScanner (line 20) | type ConstructorBindingScanner = (node: SyntaxNode) => { varName: string...
type ReturnTypeExtractor (line 25) | type ReturnTypeExtractor = (node: SyntaxNode) => string | undefined;
type LiteralTypeInferrer (line 31) | type LiteralTypeInferrer = (node: SyntaxNode) => string | undefined;
type ConstructorTypeDetector (line 38) | type ConstructorTypeDetector = (node: SyntaxNode, classNames: ClassNameL...
type DeclaredTypeUnwrapper (line 42) | type DeclaredTypeUnwrapper = (declaredType: string, typeNode: SyntaxNode...
type ReturnTypeLookup (line 47) | interface ReturnTypeLookup {
type ForLoopExtractorContext (line 58) | interface ForLoopExtractorContext {
type ForLoopExtractor (line 70) | type ForLoopExtractor = (node: SyntaxNode, ctx: ForLoopExtractorContext)...
type PendingAssignment (line 77) | type PendingAssignment =
type PendingAssignmentExtractor (line 90) | type PendingAssignmentExtractor = (
type PatternBindingResult (line 96) | interface PatternBindingResult {
type PatternBindingExtractor (line 117) | type PatternBindingExtractor = (
type LanguageTypeConfig (line 125) | interface LanguageTypeConfig {
FILE: gitnexus/src/core/ingestion/type-extractors/typescript.ts
constant DECLARATION_NODE_TYPES (line 5) | const DECLARATION_NODE_TYPES: ReadonlySet<string> = new Set([
constant JSDOC_PARAM_RE (line 37) | const JSDOC_PARAM_RE = /@param\s*\{([^}]+)\}\s+\[?(\w+)[\]=]?[^\s]*/g;
constant JSDOC_RETURN_RE (line 170) | const JSDOC_RETURN_RE = /@returns?\s*\{([^}]+)\}/;
constant FOR_LOOP_NODE_TYPES (line 207) | const FOR_LOOP_NODE_TYPES: ReadonlySet<string> = new Set([
constant TS_FUNCTION_NODE_TYPES (line 212) | const TS_FUNCTION_NODE_TYPES = new Set([
constant NULL_CHECK_KEYWORDS (line 509) | const NULL_CHECK_KEYWORDS = new Set(['null', 'undefined']);
FILE: gitnexus/src/core/ingestion/utils.ts
type SyntaxNode (line 7) | type SyntaxNode = Parser.SyntaxNode;
constant DEFINITION_CAPTURE_KEYS (line 13) | const DEFINITION_CAPTURE_KEYS = [
constant FUNCTION_NODE_TYPES (line 50) | const FUNCTION_NODE_TYPES = new Set([
constant FUNCTION_DECLARATION_TYPES (line 90) | const FUNCTION_DECLARATION_TYPES = new Set([
constant BUILT_IN_NAMES (line 102) | const BUILT_IN_NAMES = new Set([
constant CLASS_CONTAINER_TYPES (line 264) | const CLASS_CONTAINER_TYPES = new Set([
constant CONTAINER_TYPE_TO_LABEL (line 280) | const CONTAINER_TYPE_TO_LABEL: Record<string, string> = {
constant RUBY_EXTENSIONLESS_FILES (line 536) | const RUBY_EXTENSIONLESS_FILES = new Set(['Rakefile', 'Gemfile', 'Guardf...
type MethodSignature (line 604) | interface MethodSignature {
constant CALL_ARGUMENT_LIST_TYPES (line 617) | const CALL_ARGUMENT_LIST_TYPES = new Set([
constant MEMBER_ACCESS_NODE_TYPES (line 892) | const MEMBER_ACCESS_NODE_TYPES = new Set([
constant CONSTRUCTOR_CALL_NODE_TYPES (line 906) | const CONSTRUCTOR_CALL_NODE_TYPES = new Set([
constant SCOPED_CALL_NODE_TYPES (line 918) | const SCOPED_CALL_NODE_TYPES = new Set([
type CallForm (line 923) | type CallForm = 'free' | 'member' | 'constructor';
constant SIMPLE_RECEIVER_TYPES (line 984) | const SIMPLE_RECEIVER_TYPES = new Set([
constant CALL_EXPRESSION_TYPES (line 1159) | const CALL_EXPRESSION_TYPES = new Set([
constant MAX_CHAIN_DEPTH (line 1172) | const MAX_CHAIN_DEPTH = 3;
function extractCallChain (line 1184) | function extractCallChain(
constant FIELD_ACCESS_NODE_TYPES (line 1257) | const FIELD_ACCESS_NODE_TYPES = new Set([
type MixedChainStep (line 1269) | type MixedChainStep = { kind: 'field' | 'call'; name: string };
function extractMixedChain (line 1287) | function extractMixedChain(
FILE: gitnexus/src/core/ingestion/workers/parse-worker.ts
type ParsedNode (line 58) | interface ParsedNode {
type ParsedRelationship (line 77) | interface ParsedRelationship {
type ParsedSymbol (line 86) | interface ParsedSymbol {
type ExtractedImport (line 99) | interface ExtractedImport {
type ExtractedCall (line 107) | interface ExtractedCall {
type ExtractedAssignment (line 130) | interface ExtractedAssignment {
type ExtractedHeritage (line 142) | interface ExtractedHeritage {
type ExtractedRoute (line 150) | interface ExtractedRoute {
type FileConstructorBindings (line 162) | interface FileConstructorBindings {
type ParseWorkerResult (line 167) | interface ParseWorkerResult {
type ParseWorkerInput (line 181) | interface ParseWorkerInput {
constant ELOQUENT_ARRAY_PROPS (line 390) | const ELOQUENT_ARRAY_PROPS = new Set(['fillable', 'casts', 'hidden', 'gu...
constant ELOQUENT_RELATIONS (line 393) | const ELOQUENT_RELATIONS = new Set([
function findDescendant (line 399) | function findDescendant(node: any, type: string): any {
function extractStringContent (line 408) | function extractStringContent(node: any): string | null {
function extractPhpPropertyDescription (line 420) | function extractPhpPropertyDescription(propName: string, propDeclNode: a...
function extractEloquentRelationDescription (line 450) | function extractEloquentRelationDescription(methodNode: any): string | n...
type RouteGroupContext (line 492) | interface RouteGroupContext {
constant ROUTE_HTTP_METHODS (line 498) | const ROUTE_HTTP_METHODS = new Set([
constant ROUTE_RESOURCE_METHODS (line 502) | const ROUTE_RESOURCE_METHODS = new Set(['resource', 'apiResource']);
constant RESOURCE_ACTIONS (line 504) | const RESOURCE_ACTIONS = ['index', 'create', 'store', 'show', 'edit', 'u...
constant API_RESOURCE_ACTIONS (line 505) | const API_RESOURCE_ACTIONS = ['index', 'store', 'show', 'update', 'destr...
function isRouteStaticCall (line 508) | function isRouteStaticCall(node: any): boolean {
function getCallMethodName (line 515) | function getCallMethodName(node: any): string | null {
function getArguments (line 522) | function getArguments(node: any): any {
function findClosureBody (line 527) | function findClosureBody(argsNode: any): any | null {
function extractFirstStringArg (line 549) | function extractFirstStringArg(argsNode: any): string | null {
function extractMiddlewareArg (line 562) | function extractMiddlewareArg(argsNode: any): string[] {
function extractClassArg (line 587) | function extractClassArg(argsNode: any): string | null {
function extractControllerTarget (line 599) | function extractControllerTarget(argsNode: any): { controller: string | ...
type ChainedRouteCall (line 651) | interface ChainedRouteCall {
function unwrapRouteChain (line 662) | function unwrapRouteChain(node: any): ChainedRouteCall | null {
function parseArrayGroupArgs (line 697) | function parseArrayGroupArgs(argsNode: any): RouteGroupContext {
function extractLaravelRoutes (line 737) | function extractLaravelRoutes(tree: any, filePath: string): ExtractedRou...
FILE: gitnexus/src/core/ingestion/workers/worker-pool.ts
type WorkerPool (line 6) | interface WorkerPool {
constant SUB_BATCH_SIZE (line 25) | const SUB_BATCH_SIZE = 1500;
constant SUB_BATCH_TIMEOUT_MS (line 29) | const SUB_BATCH_TIMEOUT_MS = 30_000;
FILE: gitnexus/src/core/lbug/csv-generator.ts
constant FLUSH_EVERY (line 22) | const FLUSH_EVERY = 500;
class FileContentCache (line 69) | class FileContentCache {
method constructor (line 75) | constructor(repoPath: string, maxSize: number = 3000) {
method get (line 80) | async get(relativePath: string): Promise<string> {
method set (line 103) | private set(key: string, value: string) {
class BufferedCSVWriter (line 148) | class BufferedCSVWriter {
method constructor (line 153) | constructor(filePath: string, header: string) {
method addRow (line 160) | addRow(row: string) {
method flush (line 169) | flush(): Promise<void> {
method finish (line 188) | async finish(): Promise<void> {
type StreamedCSVResult (line 201) | interface StreamedCSVResult {
FILE: gitnexus/src/core/lbug/lbug-adapter.ts
type LbugProgressCallback (line 126) | type LbugProgressCallback = (message: string) => void;
constant COPY_CSV_OPTS (line 272) | const COPY_CSV_OPTS = `(HEADER=true, ESCAPE='"', DELIM=',', QUOTE='"', P...
constant BACKTICK_TABLES (line 276) | const BACKTICK_TABLES = new Set([
constant TABLES_WITH_EXPORTED (line 323) | const TABLES_WITH_EXPORTED = new Set<string>(['Function', 'Class', 'Inte...
FILE: gitnexus/src/core/lbug/schema.ts
constant NODE_TABLES (line 15) | const NODE_TABLES = [
type NodeTableName (line 21) | type NodeTableName = typeof NODE_TABLES[number];
constant REL_TABLE_NAME (line 26) | const REL_TABLE_NAME = 'CodeRelation';
constant REL_TYPES (line 29) | const REL_TYPES = ['CONTAINS', 'DEFINES', 'IMPORTS', 'CALLS', 'EXTENDS',...
type RelType (line 30) | type RelType = typeof REL_TYPES[number];
constant EMBEDDING_TABLE_NAME (line 35) | const EMBEDDING_TABLE_NAME = 'CodeEmbedding';
constant FILE_SCHEMA (line 41) | const FILE_SCHEMA = `
constant FOLDER_SCHEMA (line 50) | const FOLDER_SCHEMA = `
constant FUNCTION_SCHEMA (line 58) | const FUNCTION_SCHEMA = `
constant CLASS_SCHEMA (line 71) | const CLASS_SCHEMA = `
constant INTERFACE_SCHEMA (line 84) | const INTERFACE_SCHEMA = `
constant METHOD_SCHEMA (line 97) | const METHOD_SCHEMA = `
constant CODE_ELEMENT_SCHEMA (line 112) | const CODE_ELEMENT_SCHEMA = `
constant COMMUNITY_SCHEMA (line 129) | const COMMUNITY_SCHEMA = `
constant PROCESS_SCHEMA (line 146) | const PROCESS_SCHEMA = `
constant STRUCT_SCHEMA (line 177) | const STRUCT_SCHEMA = CODE_ELEMENT_BASE('Struct');
constant ENUM_SCHEMA (line 178) | const ENUM_SCHEMA = CODE_ELEMENT_BASE('Enum');
constant MACRO_SCHEMA (line 179) | const MACRO_SCHEMA = CODE_ELEMENT_BASE('Macro');
constant TYPEDEF_SCHEMA (line 180) | const TYPEDEF_SCHEMA = CODE_ELEMENT_BASE('Typedef');
constant UNION_SCHEMA (line 181) | const UNION_SCHEMA = CODE_ELEMENT_BASE('Union');
constant NAMESPACE_SCHEMA (line 182) | const NAMESPACE_SCHEMA = CODE_ELEMENT_BASE('Namespace');
constant TRAIT_SCHEMA (line 183) | const TRAIT_SCHEMA = CODE_ELEMENT_BASE('Trait');
constant IMPL_SCHEMA (line 184) | const IMPL_SCHEMA = CODE_ELEMENT_BASE('Impl');
constant TYPE_ALIAS_SCHEMA (line 185) | const TYPE_ALIAS_SCHEMA = CODE_ELEMENT_BASE('TypeAlias');
constant CONST_SCHEMA (line 186) | const CONST_SCHEMA = CODE_ELEMENT_BASE('Const');
constant STATIC_SCHEMA (line 187) | const STATIC_SCHEMA = CODE_ELEMENT_BASE('Static');
constant PROPERTY_SCHEMA (line 188) | const PROPERTY_SCHEMA = CODE_ELEMENT_BASE('Property');
constant RECORD_SCHEMA (line 189) | const RECORD_SCHEMA = CODE_ELEMENT_BASE('Record');
constant DELEGATE_SCHEMA (line 190) | const DELEGATE_SCHEMA = CODE_ELEMENT_BASE('Delegate');
constant ANNOTATION_SCHEMA (line 191) | const ANNOTATION_SCHEMA = CODE_ELEMENT_BASE('Annotation');
constant CONSTRUCTOR_SCHEMA (line 192) | const CONSTRUCTOR_SCHEMA = CODE_ELEMENT_BASE('Constructor');
constant TEMPLATE_SCHEMA (line 193) | const TEMPLATE_SCHEMA = CODE_ELEMENT_BASE('Template');
constant MODULE_SCHEMA (line 194) | const MODULE_SCHEMA = CODE_ELEMENT_BASE('Module');
constant RELATION_SCHEMA (line 201) | const RELATION_SCHEMA = `
constant EMBEDDING_SCHEMA (line 401) | const EMBEDDING_SCHEMA = `
constant CREATE_VECTOR_INDEX_QUERY (line 412) | const CREATE_VECTOR_INDEX_QUERY = `
constant NODE_SCHEMA_QUERIES (line 421) | const NODE_SCHEMA_QUERIES = [
constant REL_SCHEMA_QUERIES (line 452) | const REL_SCHEMA_QUERIES = [
constant SCHEMA_QUERIES (line 456) | const SCHEMA_QUERIES = [
FILE: gitnexus/src/core/search/bm25-index.ts
type BM25SearchResult (line 10) | interface BM25SearchResult {
function queryFTSViaExecutor (line 20) | async function queryFTSViaExecutor(
FILE: gitnexus/src/core/search/hybrid-search.ts
constant RRF_K (line 18) | const RRF_K = 60;
type HybridSearchResult (line 20) | interface HybridSearchResult {
FILE: gitnexus/src/core/wiki/generator.ts
type WikiOptions (line 59) | interface WikiOptions {
type WikiMeta (line 68) | interface WikiMeta {
type ModuleTreeNode (line 76) | interface ModuleTreeNode {
type ProgressCallback (line 83) | type ProgressCallback = (phase: string, percent: number, detail?: string...
constant DEFAULT_MAX_TOKENS_PER_MODULE (line 87) | const DEFAULT_MAX_TOKENS_PER_MODULE = 30_000;
constant WIKI_DIR (line 88) | const WIKI_DIR = 'wiki';
class WikiGenerator (line 92) | class WikiGenerator {
method constructor (line 104) | constructor(
method streamOpts (line 133) | private streamOpts(label: string, fixedPercent?: number): CallLLMOptio...
method run (line 146) | async run(): Promise<{ pagesGenerated: number; mode: 'full' | 'increme...
method ensureHTMLViewer (line 195) | private async ensureHTMLViewer(): Promise<void> {
method fullGeneration (line 208) | private async fullGeneration(currentCommit: string): Promise<{ pagesGe...
method buildModuleTree (line 309) | private async buildModuleTree(files: FileWithExports[]): Promise<Modul...
method parseGroupingResponse (line 365) | private parseGroupingResponse(
method fallbackGrouping (line 423) | private fallbackGrouping(files: FileWithExports[]): Record<string, str...
method splitBySubdirectory (line 438) | private splitBySubdirectory(moduleName: string, files: string[]): Modu...
method generateLeafPage (line 461) | private async generateLeafPage(node: ModuleTreeNode): Promise<void> {
method generateParentPage (line 503) | private async generateParentPage(node: ModuleTreeNode): Promise<void> {
method generateOverview (line 544) | private async generateOverview(moduleTree: ModuleTreeNode[]): Promise<...
method incrementalUpdate (line 591) | private async incrementalUpdate(
method getCurrentCommit (line 705) | private getCurrentCommit(): string {
method getChangedFiles (line 713) | private getChangedFiles(fromCommit: string, toCommit: string): string[] {
method readSourceFiles (line 725) | private async readSourceFiles(filePaths: string[]): Promise<string> {
method truncateSource (line 739) | private truncateSource(source: string, maxTokens: number): string {
method estimateModuleTokens (line 746) | private async estimateModuleTokens(filePaths: string[]): Promise<numbe...
method readProjectInfo (line 759) | private async readProjectInfo(): Promise<string> {
method extractModuleFiles (line 796) | private extractModuleFiles(tree: ModuleTreeNode[]): Record<string, str...
method countModules (line 811) | private countModules(tree: ModuleTreeNode[]): number {
method flattenModuleTree (line 826) | private flattenModuleTree(tree: ModuleTreeNode[]): { leaves: ModuleTre...
method runParallel (line 848) | private async runParallel<T>(
method findNodeBySlug (line 901) | private findNodeBySlug(tree: ModuleTreeNode[], slug: string): ModuleTr...
method slugify (line 912) | private slugify(name: string): string {
method fileExists (line 920) | private async fileExists(fp: string): Promise<boolean> {
method loadWikiMeta (line 929) | private async loadWikiMeta(): Promise<WikiMeta | null> {
method saveWikiMeta (line 938) | private async saveWikiMeta(meta: WikiMeta): Promise<void> {
method saveModuleTree (line 946) | private async saveModuleTree(tree: ModuleTreeNode[]): Promise<void> {
FILE: gitnexus/src/core/wiki/graph-queries.ts
constant REPO_ID (line 10) | const REPO_ID = '__wiki__';
type FileWithExports (line 12) | interface FileWithExports {
type CallEdge (line 17) | interface CallEdge {
type ProcessInfo (line 24) | interface ProcessInfo {
function initWikiDb (line 40) | async function initWikiDb(lbugPath: string): Promise<void> {
function closeWikiDb (line 47) | async function closeWikiDb(): Promise<void> {
function getFilesWithExports (line 54) | async function getFilesWithExports(): Promise<FileWithExports[]> {
function getAllFiles (line 82) | async function getAllFiles(): Promise<string[]> {
function getInterFileCallEdges (line 94) | async function getInterFileCallEdges(): Promise<CallEdge[]> {
function getIntraModuleCallEdges (line 113) | async function getIntraModuleCallEdges(filePaths: string[]): Promise<Cal...
function getInterModuleCallEdges (line 135) | async function getInterModuleCallEdges(filePaths: string[]): Promise<{
function getProcessesForFiles (line 179) | async function getProcessesForFiles(filePaths: string[], limit = 5): Pro...
function getAllProcesses (line 228) | async function getAllProcesses(limit = 20): Promise<ProcessInfo[]> {
function getInterModuleEdgesForOverview (line 271) | async function getInterModuleEdgesForOverview(
FILE: gitnexus/src/core/wiki/html-viewer.ts
type ModuleTreeNode (line 11) | interface ModuleTreeNode {
function generateHTMLViewer (line 21) | async function generateHTMLViewer(
function esc (line 55) | function esc(text: string): string {
function buildHTML (line 63) | function buildHTML(
constant BOOK_SVG (line 130) | const BOOK_SVG =
constant CSS (line 136) | const CSS = `
constant JS_APP (line 208) | const JS_APP = `
FILE: gitnexus/src/core/wiki/llm-client.ts
type LLMConfig (line 10) | interface LLMConfig {
type LLMResponse (line 18) | interface LLMResponse {
function resolveLLMConfig (line 30) | async function resolveLLMConfig(overrides?: Partial<LLMConfig>): Promise...
function estimateTokens (line 58) | function estimateTokens(text: string): number {
type CallLLMOptions (line 62) | interface CallLLMOptions {
function callLLM (line 71) | async function callLLM(
function readSSEStream (line 164) | async function readSSEStream(
function sleep (line 207) | function sleep(ms: number): Promise<void> {
FILE: gitnexus/src/core/wiki/prompts.ts
constant GROUPING_SYSTEM_PROMPT (line 10) | const GROUPING_SYSTEM_PROMPT = `You are a documentation architect. Given...
constant GROUPING_USER_PROMPT (line 20) | const GROUPING_USER_PROMPT = `Group these source files into documentatio...
constant MODULE_SYSTEM_PROMPT (line 37) | const MODULE_SYSTEM_PROMPT = `You are a technical documentation writer. ...
constant MODULE_USER_PROMPT (line 46) | const MODULE_USER_PROMPT = `Write documentation for the **{{MODULE_NAME}...
constant PARENT_SYSTEM_PROMPT (line 65) | const PARENT_SYSTEM_PROMPT = `You are a technical documentation writer. ...
constant PARENT_USER_PROMPT (line 73) | const PARENT_USER_PROMPT = `Write documentation for the **{{MODULE_NAME}...
constant OVERVIEW_SYSTEM_PROMPT (line 86) | const OVERVIEW_SYSTEM_PROMPT = `You are a technical documentation writer...
constant OVERVIEW_USER_PROMPT (line 95) | const OVERVIEW_USER_PROMPT = `Write the overview page for this repositor...
function fillTemplate (line 119) | function fillTemplate(
function formatFileListForGrouping (line 135) | function formatFileListForGrouping(
function formatDirectoryTree (line 151) | function formatDirectoryTree(filePaths: string[]): string {
function formatCallEdges (line 169) | function formatCallEdges(
function formatProcesses (line 182) | function formatProcesses(
function shortPath (line 204) | function shortPath(fp: string): string {
FILE: gitnexus/src/mcp/compatible-stdio-transport.ts
type StdioFraming (line 5) | type StdioFraming = 'content-length' | 'newline';
function deserializeMessage (line 7) | function deserializeMessage(raw: string): JSONRPCMessage {
function serializeNewlineMessage (line 11) | function serializeNewlineMessage(message: JSONRPCMessage): string {
function serializeContentLengthMessage (line 15) | function serializeContentLengthMessage(message: JSONRPCMessage): string {
function findHeaderEnd (line 20) | function findHeaderEnd(buffer: Buffer): { index: number; separatorLength...
function looksLikeContentLength (line 34) | function looksLikeContentLength(buffer: Buffer): boolean {
constant MAX_BUFFER_SIZE (line 42) | const MAX_BUFFER_SIZE = 10 * 1024 * 1024;
class CompatibleStdioServerTransport (line 44) | class CompatibleStdioServerTransport implements Transport {
method constructor (line 53) | constructor(
method start (line 72) | async start() {
method detectFraming (line 82) | private detectFraming(): StdioFraming | null {
method discardBufferedInput (line 99) | private discardBufferedInput() {
method readContentLengthMessage (line 104) | private readContentLengthMessage(): JSONRPCMessage | null {
method readNewlineMessage (line 144) | private readNewlineMessage(): JSONRPCMessage | null {
method readMessage (line 165) | private readMessage(): JSONRPCMessage | null {
method processReadBuffer (line 182) | private processReadBuffer() {
method close (line 197) | async close() {
method send (line 211) | send(message: JSONRPCMessage, _options?: TransportSendOptions) {
FILE: gitnexus/src/mcp/core/embedder.ts
constant MODEL_ID (line 11) | const MODEL_ID = 'Snowflake/snowflake-arctic-embed-xs';
constant EMBEDDING_DIMS (line 12) | const EMBEDDING_DIMS = 384;
FILE: gitnexus/src/mcp/core/lbug-adapter.ts
type PoolEntry (line 20) | interface PoolEntry {
type SharedDB (line 41) | interface SharedDB {
constant MAX_POOL_SIZE (line 51) | const MAX_POOL_SIZE = 5;
constant IDLE_TIMEOUT_MS (line 53) | const IDLE_TIMEOUT_MS = 5 * 60 * 1000;
constant MAX_CONNS_PER_REPO (line 55) | const MAX_CONNS_PER_REPO = 8;
function ensureIdleTimer (line 68) | function ensureIdleTimer(): void {
function evictLRU (line 86) | function evictLRU(): void {
function closeOne (line 107) | function closeOne(repoId: string): void {
function silenceStdout (line 151) | function silenceStdout(): void {
function restoreStdout (line 157) | function restoreStdout(): void {
function createConnection (line 173) | function createConnection(db: lbug.Database): lbug.Connection {
constant QUERY_TIMEOUT_MS (line 183) | const QUERY_TIMEOUT_MS = 30_000;
constant WAITER_TIMEOUT_MS (line 185) | const WAITER_TIMEOUT_MS = 15_000;
constant LOCK_RETRY_ATTEMPTS (line 187) | const LOCK_RETRY_ATTEMPTS = 3;
constant LOCK_RETRY_DELAY_MS (line 188) | const LOCK_RETRY_DELAY_MS = 2000;
function doInitLbug (line 227) | async function doInitLbug(repoId: string, dbPath: string): Promise<void> {
function initLbugWithDb (line 322) | async function initLbugWithDb(
function checkout (line 378) | function checkout(entry: PoolEntry): Promise<lbug.Connection> {
function checkin (line 419) | function checkin(entry: PoolEntry, conn: lbug.Connection): void {
function withTimeout (line 440) | function withTimeout<T>(promise: Promise<T>, ms: number, label: string):...
constant CYPHER_WRITE_RE (line 531) | const CYPHER_WRITE_RE = /\b(CREATE|DELETE|SET|MERGE|REMOVE|DROP|ALTER|CO...
function isWriteQuery (line 534) | function isWriteQuery(query: string): boolean {
FILE: gitnexus/src/mcp/local/local-backend.ts
function isTestFilePath (line 28) | function isTestFilePath(filePath: string): boolean {
constant VALID_NODE_LABELS (line 42) | const VALID_NODE_LABELS = new Set([
constant VALID_RELATION_TYPES (line 50) | const VALID_RELATION_TYPES = new Set(['CALLS', 'IMPORTS', 'EXTENDS', 'IM...
constant CYPHER_WRITE_RE (line 53) | const CYPHER_WRITE_RE = /\b(CREATE|DELETE|SET|MERGE|REMOVE|DROP|ALTER|CO...
function isWriteQuery (line 56) | function isWriteQuery(query: string): boolean {
function logQueryError (line 61) | function logQueryError(context: string, err: unknown): void {
type CodebaseContext (line 66) | interface CodebaseContext {
type RepoHandle (line 76) | interface RepoHandle {
class LocalBackend (line 87) | class LocalBackend {
method init (line 98) | async init(): Promise<boolean> {
method refreshRepos (line 108) | private async refreshRepos(): Promise<void> {
method repoId (line 166) | private repoId(name: string, repoPath: string): string {
method resolveRepo (line 190) | async resolveRepo(repoParam?: string): Promise<RepoHandle> {
method resolveRepoFromCache (line 216) | private resolveRepoFromCache(repoParam?: string): RepoHandle | null {
method ensureInitialized (line 248) | private async ensureInitialized(repoId: string): Promise<void> {
method getContext (line 270) | getContext(repoId?: string): CodebaseContext | null {
method listRepos (line 285) | async listRepos(): Promise<Array<{ name: string; path: string; indexed...
method callTool (line 298) | async callTool(method: string, params: any): Promise<any> {
method query (line 343) | private async query(repo: RepoHandle, params: {
method bm25Search (line 547) | private async bm25Search(repo: RepoHandle, query: string, limit: numbe...
method semanticSearch (line 607) | private async semanticSearch(repo: RepoHandle, query: string, limit: n...
method executeCypher (line 672) | async executeCypher(repoName: string, query: string): Promise<any> {
method cypher (line 677) | private async cypher(repo: RepoHandle, params: { query: string }): Pro...
method formatCypherAsMarkdown (line 701) | private formatCypherAsMarkdown(result: any): any {
method aggregateClusters (line 732) | private aggregateClusters(clusters: any[]): any[] {
method overview (line 766) | private async overview(repo: RepoHandle, params: { showClusters?: bool...
method context (line 829) | private async context(repo: RepoHandle, params: {
method explore (line 966) | private async explore(repo: RepoHandle, params: { name: string; type: ...
method detectChanges (line 1051) | private async detectChanges(repo: RepoHandle, params: {
method rename (line 1164) | private async rename(repo: RepoHandle, params: {
method impact (line 1325) | private async impact(repo: RepoHandle, params: {
method _impactImpl (line 1348) | private async _impactImpl(repo: RepoHandle, params: {
method queryClusters (line 1525) | async queryClusters(repoName?: string, limit = 100): Promise<{ cluster...
method queryProcesses (line 1554) | async queryProcesses(repoName?: string, limit = 50): Promise<{ process...
method queryClusterDetail (line 1583) | async queryClusterDetail(name: string, repoName?: string): Promise<any> {
method queryProcessDetail (line 1632) | async queryProcessDetail(name: string, repoName?: string): Promise<any> {
method disconnect (line 1663) | async disconnect(): Promise<void> {
FILE: gitnexus/src/mcp/resources.ts
type ResourceDefinition (line 11) | interface ResourceDefinition {
type ResourceTemplate (line 18) | interface ResourceTemplate {
function getResourceDefinitions (line 28) | function getResourceDefinitions(): ResourceDefinition[] {
function getResourceTemplates (line 48) | function getResourceTemplates(): ResourceTemplate[] {
function parseUri (line 92) | function parseUri(uri: string): { repoName?: string; resourceType: strin...
function readResource (line 118) | async function readResource(uri: string, backend: LocalBackend): Promise...
function getReposResource (line 156) | async function getReposResource(backend: LocalBackend): Promise<string> {
function getContextResource (line 188) | async function getContextResource(backend: LocalBackend, repoName?: stri...
function getClustersResource (line 242) | async function getClustersResource(backend: LocalBackend, repoName?: str...
function getProcessesResource (line 276) | async function getProcessesResource(backend: LocalBackend, repoName?: st...
function getSchemaResource (line 308) | function getSchemaResource(): string {
function getClusterDetailResource (line 368) | async function getClusterDetailResource(name: string, backend: LocalBack...
function getProcessDetailResource (line 410) | async function getProcessDetailResource(name: string, backend: LocalBack...
function getSetupResource (line 445) | async function getSetupResource(backend: LocalBackend): Promise<string> {
FILE: gitnexus/src/mcp/server.ts
function getNextStepHint (line 40) | function getNextStepHint(toolName: string, args: Record<string, any> | u...
function createMCPServer (line 84) | function createMCPServer(backend: LocalBackend): Server {
function startMCPServer (line 277) | async function startMCPServer(backend: LocalBackend): Promise<void> {
FILE: gitnexus/src/mcp/staleness.ts
type StalenessInfo (line 11) | interface StalenessInfo {
function checkStaleness (line 20) | function checkStaleness(repoPath: string, lastCommit: string): Staleness...
FILE: gitnexus/src/mcp/tools.ts
type ToolDefinition (line 8) | interface ToolDefinition {
constant GITNEXUS_TOOLS (line 24) | const GITNEXUS_TOOLS: ToolDefinition[] = [
FILE: gitnexus/src/server/mcp-http.ts
type MCPSession (line 19) | interface MCPSession {
constant SESSION_TTL_MS (line 26) | const SESSION_TTL_MS = 30 * 60 * 1000;
constant CLEANUP_INTERVAL_MS (line 28) | const CLEANUP_INTERVAL_MS = 5 * 60 * 1000;
function mountMCPEndpoints (line 30) | function mountMCPEndpoints(app: Express, backend: LocalBackend): () => P...
FILE: gitnexus/src/storage/repo-manager.ts
type RepoMeta (line 13) | interface RepoMeta {
type IndexedRepo (line 27) | interface IndexedRepo {
type RegistryEntry (line 38) | interface RegistryEntry {
constant GITNEXUS_DIR (line 47) | const GITNEXUS_DIR = '.gitnexus';
type CLIConfig (line 321) | interface CLIConfig {
FILE: gitnexus/src/types/pipeline.ts
type PipelinePhase (line 5) | type PipelinePhase = 'idle' | 'extracting' | 'structure' | 'parsing' | '...
type PipelineProgress (line 7) | interface PipelineProgress {
type PipelineResult (line 20) | interface PipelineResult {
type SerializablePipelineResult (line 32) | interface SerializablePipelineResult {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-ambiguous/handler_a.h
function class (line 3) | class Handler {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-ambiguous/handler_b.h
function class (line 3) | class Handler {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-ambiguous/processor.h
function class (line 5) | class Processor : public Handler {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-assignment-chain/models/Repo.h
function class (line 4) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-assignment-chain/models/User.h
function class (line 4) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-assignment-chain/services/App.cpp
function processEntities (line 5) | void processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-brace-init-inference/models/Repo.h
function class (line 1) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-brace-init-inference/models/User.h
function class (line 1) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-brace-init-inference/services/App.cpp
function process (line 4) | void process() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-call-result-binding/app.cpp
function processUser (line 3) | void processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-call-result-binding/user.h
function class (line 4) | class User {
function User (line 12) | User getUser(const std::string& name) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-calls/main.cpp
function run (line 4) | void run() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-chain-call/app.cpp
function processUser (line 5) | void processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-chain-call/repo.h
function class (line 3) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-chain-call/service.h
function class (line 4) | class UserService {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-chain-call/user.h
function class (line 3) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-constructor-calls/app.cpp
function processUser (line 3) | void processUser(const std::string& name) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-constructor-calls/user.h
function class (line 4) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-constructor-type-inference/models/Repo.h
function class (line 4) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-constructor-type-inference/models/User.h
function class (line 4) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-constructor-type-inference/services/App.cpp
function processEntities (line 4) | void processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-deep-field-chain/models.h
function class (line 3) | class City {
function class (line 12) | class Address {
function class (line 22) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-deep-field-chain/service.cpp
function processUser (line 3) | void processUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-default-params/src/app.cpp
function greet (line 3) | std::string greet(std::string name, std::string greeting = "Hello") {
function process (line 7) | void process() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-deref-range-for/App.cpp
function processUsers (line 5) | void processUsers(std::vector<User>* usersPtr) {
function processRepos (line 11) | void processRepos(std::vector<Repo>* reposPtr) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-deref-range-for/Repo.h
function class (line 4) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-deref-range-for/User.h
function class (line 4) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-diamond/animal.h
function class (line 3) | class Animal {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-diamond/flyer.h
function class (line 4) | class Flyer : public Animal {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-diamond/swimmer.h
function class (line 4) | class Swimmer : public Animal {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-field-types/models.h
function class (line 3) | class Address {
function class (line 12) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-field-types/service.cpp
function processUser (line 3) | void processUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-grandparent-resolution/src/A.h
function class (line 4) | class A {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-grandparent-resolution/src/B.h
function class (line 4) | class B : public A {}
FILE: gitnexus/test/fixtures/lang-resolution/cpp-grandparent-resolution/src/C.h
function class (line 4) | class C : public B {}
FILE: gitnexus/test/fixtures/lang-resolution/cpp-grandparent-resolution/src/Greeting.h
function class (line 3) | class Greeting {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-grandparent-resolution/src/app.cpp
function process (line 3) | void process() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-local-shadow/src/main.cpp
function save (line 4) | void save(const char* data) {
function run (line 8) | void run() {
function main (line 12) | int main() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-local-shadow/src/utils.cpp
function save (line 4) | void save(const char* data) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-member-calls/app.cpp
function processUser (line 3) | void processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-member-calls/user.h
function class (line 3) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-method-chain-binding/app.cpp
function processChain (line 3) | void processChain() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-method-chain-binding/models.h
function class (line 4) | class City {
function class (line 11) | class Address {
function class (line 18) | class User {
function User (line 24) | User getUser() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-nullable-receiver/models/Repo.h
function class (line 4) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-nullable-receiver/models/User.h
function class (line 4) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-nullable-receiver/services/App.cpp
function User (line 4) | User* findUser() {
function Repo (line 8) | Repo* findRepo() {
function processEntities (line 12) | void processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-overload-param-types/service.cpp
class User (line 3) | class User {}
class UserService (line 5) | class UserService {
method User (line 7) | User* lookup(int id) {
method User (line 11) | User* lookup(std::string name) {
method run (line 15) | void run() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-parent-resolution/src/BaseModel.h
function class (line 3) | class BaseModel {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-parent-resolution/src/User.h
function class (line 4) | class User : public BaseModel {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-pointer-ref-fields/models.h
function class (line 3) | class Address {
function class (line 12) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-pointer-ref-fields/service.cpp
function processUser (line 3) | void processUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-range-for/App.cpp
function processUsers (line 5) | void processUsers(const std::vector<User>& users) {
function processRepos (line 11) | void processRepos(const std::vector<Repo>& repos) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-range-for/Repo.h
function class (line 4) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-range-for/User.h
function class (line 4) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-receiver-resolution/app.cpp
function processEntities (line 4) | void processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-receiver-resolution/repo.h
function class (line 3) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-receiver-resolution/user.h
function class (line 3) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-return-type-inference/app.cpp
function User (line 4) | User getUser(const char* name) {
function Repo (line 8) | Repo getRepo(const char* name) {
function processUser (line 12) | void processUser() {
function processRepo (line 17) | void processRepo() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-return-type-inference/repo.h
function class (line 3) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-return-type-inference/user.h
function class (line 3) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-return-type/app.cpp
function User (line 3) | User getUser(const char* name) {
function processUser (line 7) | void processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-return-type/user.h
function class (line 3) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-scoped-brace-init/main.cpp
function run (line 3) | void run() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-scoped-brace-init/models.h
function namespace (line 1) | namespace ns {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-self-this-resolution/src/Repo.cpp
class Repo (line 1) | class Repo {
method save (line 3) | bool save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/cpp-self-this-resolution/src/User.cpp
class User (line 1) | class User {
method save (line 3) | bool save() { return true; }
method process (line 4) | void process() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-smart-ptr-dispatch/src/app.cpp
class Animal (line 4) | class Animal {
method speak (line 6) | virtual std::string speak() { return "..."; }
class Dog (line 9) | class Dog : public Animal {
method speak (line 11) | std::string speak() override { return "woof"; }
function process (line 14) | void process() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-structured-binding/App.cpp
function processUserMap (line 7) | void processUserMap(std::map<std::string, User> userMap) {
function processRepoMap (line 13) | void processRepoMap(std::map<std::string, Repo> repoMap) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-structured-binding/Repo.h
function class (line 4) | class Repo {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-structured-binding/User.h
function class (line 4) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-variadic-resolution/logger.h
function log_entry (line 7) | void log_entry(const char* fmt, ...) {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-variadic-resolution/main.cpp
function main (line 3) | int main() {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-write-access/models.h
function class (line 3) | class Address {
function class (line 8) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/cpp-write-access/service.cpp
function updateUser (line 3) | void updateUser(User& user) {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-alias-imports/Models/Repo.cs
class Repo (line 3) | public class Repo
method Repo (line 6) | public Repo(string url) { Url = url; }
method Persist (line 7) | public bool Persist() => true;
FILE: gitnexus/test/fixtures/lang-resolution/csharp-alias-imports/Models/User.cs
class User (line 3) | public class User
method User (line 6) | public User(string name) { Name = name; }
method Save (line 7) | public bool Save() => true;
FILE: gitnexus/test/fixtures/lang-resolution/csharp-alias-imports/Services/Main.cs
class Main (line 6) | public class Main
method Run (line 8) | public void Run()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-ambiguous/Models/Handler.cs
class Handler (line 3) | public class Handler
method Handle (line 5) | public void Handle() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-ambiguous/Models/IProcessor.cs
type IProcessor (line 3) | public interface IProcessor
method Run (line 5) | void Run();
FILE: gitnexus/test/fixtures/lang-resolution/csharp-ambiguous/Other/Handler.cs
class Handler (line 3) | public class Handler
method Process (line 5) | public void Process() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-ambiguous/Other/IProcessor.cs
type IProcessor (line 3) | public interface IProcessor
method Execute (line 5) | void Execute();
FILE: gitnexus/test/fixtures/lang-resolution/csharp-ambiguous/Services/UserHandler.cs
class UserHandler (line 5) | public class UserHandler : Handler, IProcessor
method Run (line 7) | public void Run() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-assignment-chain/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-assignment-chain/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-assignment-chain/Program.cs
class Program (line 5) | public class Program
method GetUser (line 7) | static User GetUser() => new User();
method GetRepo (line 8) | static Repo GetRepo() => new Repo();
method ProcessEntities (line 10) | public static void ProcessEntities()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-async-binding/Order.cs
class Order (line 3) | public class Order
method Save (line 7) | public void Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-async-binding/OrderService.cs
class OrderService (line 3) | public class OrderService
method GetOrderAsync (line 5) | public async Task<Order> GetOrderAsync(string name)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-async-binding/Program.cs
class Program (line 3) | public class Program
method Main (line 5) | public static async Task Main(string[] args)
method ProcessUser (line 13) | public static async Task ProcessUser(UserService userSvc)
method ProcessOrder (line 19) | public static async Task ProcessOrder(OrderService orderSvc)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-async-binding/User.cs
class User (line 3) | public class User
method Save (line 7) | public void Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-async-binding/UserService.cs
class UserService (line 3) | public class UserService
method GetUserAsync (line 5) | public async Task<User> GetUserAsync(string name)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-call-result-binding/App.cs
class User (line 1) | class User {
method User (line 4) | public User(string name) {
method Save (line 8) | public bool Save() {
class App (line 13) | class App {
method GetUser (line 14) | static User GetUser(string name) {
method ProcessUser (line 18) | void ProcessUser() {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-calls/Services/UserService.cs
class UserService (line 6) | public class UserService
method CreateUser (line 8) | public void CreateUser()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-calls/Utils/OneArg.cs
class OneArg (line 3) | public static class OneArg
method WriteAudit (line 5) | public static string WriteAudit(string message)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-calls/Utils/ZeroArg.cs
class ZeroArg (line 3) | public static class ZeroArg
method WriteAudit (line 5) | public static string WriteAudit()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-chain-call/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-chain-call/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-chain-call/Program.cs
class App (line 3) | public class App
method ProcessUser (line 5) | public void ProcessUser()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-chain-call/Services/UserService.cs
class UserService (line 5) | public class UserService
method GetUser (line 7) | public User GetUser()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-deep-field-chain/Models.cs
class City (line 3) | public class City
method GetName (line 7) | public string GetName()
class Address (line 13) | public class Address
method Save (line 18) | public void Save()
class User (line 24) | public class User
method Greet (line 29) | public string Greet()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-deep-field-chain/Service.cs
class Service (line 3) | public class Service
method ProcessUser (line 5) | public static void ProcessUser(User user)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-dictionary-keys-values/App.cs
class App (line 3) | public class App {
method ProcessValues (line 4) | public void ProcessValues(Dictionary<string, User> data) {
method ProcessList (line 10) | public void ProcessList(List<User> users) {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-dictionary-keys-values/Repo.cs
class Repo (line 1) | public class Repo {
method Save (line 3) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-dictionary-keys-values/User.cs
class User (line 1) | public class User {
method Save (line 3) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-field-types/Models.cs
class Address (line 3) | public class Address
method Save (line 7) | public void Save()
class User (line 13) | public class User
method Greet (line 18) | public string Greet()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-field-types/Service.cs
class Service (line 3) | public class Service
method ProcessUser (line 5) | public static void ProcessUser(User user)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-foreach/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-foreach/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-foreach/Program.cs
class AppService (line 6) | public class AppService
method ProcessEntities (line 8) | public void ProcessEntities(List<User> users, List<Repo> repos)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-generic-parent-resolution/src/Models/BaseModel.cs
class BaseModel (line 3) | public class BaseModel<T> {
method Save (line 4) | public virtual bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-generic-parent-resolution/src/Models/Repo.cs
class Repo (line 3) | public class Repo {
method Save (line 4) | public bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-generic-parent-resolution/src/Models/User.cs
class User (line 3) | public class User : BaseModel<string> {
method Save (line 4) | public override bool Save() {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-grandparent-resolution/Models/A.cs
class A (line 3) | public class A
method Greet (line 5) | public Greeting Greet() => new Greeting();
FILE: gitnexus/test/fixtures/lang-resolution/csharp-grandparent-resolution/Models/B.cs
class B (line 3) | public class B : A {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-grandparent-resolution/Models/C.cs
class C (line 3) | public class C : B {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-grandparent-resolution/Models/Greeting.cs
class Greeting (line 3) | public class Greeting
method Save (line 5) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-grandparent-resolution/Services/App.cs
class App (line 5) | public class App
method Process (line 7) | public void Process()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-is-pattern/models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-is-pattern/models/User.cs
class User (line 3) | public class User
method Save (line 5) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-is-pattern/services/App.cs
class App (line 5) | public class App
method Process (line 7) | public void Process(object obj)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-local-shadow/App/Main.cs
class Main (line 4) | public class Main {
method Save (line 6) | public static void Save(string data) {
method Run (line 10) | public static void Run() {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-local-shadow/Utils/Logger.cs
class Logger (line 2) | public class Logger {
method Save (line 3) | public static void Save(string data) {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-member-calls/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-member-calls/Services/UserService.cs
class UserService (line 5) | public class UserService
method ProcessUser (line 7) | public bool ProcessUser()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-method-chain-binding/App.cs
class City (line 1) | class City {
method City (line 3) | public City(string name) { Name = name; }
method Save (line 4) | public bool Save() { return true; }
class Address (line 7) | class Address {
method Address (line 9) | public Address(City city) { City = city; }
method GetCity (line 10) | public City GetCity() { return City; }
class User (line 13) | class User {
method User (line 15) | public User(Address address) { Address = address; }
class App (line 18) | class App {
method GetUser (line 19) | static User GetUser() {
method ProcessChain (line 23) | void ProcessChain() {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-mixed-decl-chain/Models/Repo.cs
class Repo (line 1) | public class Repo
method Save (line 3) | public bool Save() => false;
FILE: gitnexus/test/fixtures/lang-resolution/csharp-mixed-decl-chain/Models/User.cs
class User (line 1) | public class User
method Save (line 3) | public bool Save() => true;
FILE: gitnexus/test/fixtures/lang-resolution/csharp-mixed-decl-chain/Program.cs
class App (line 6) | public class App
method ProcessWithChain (line 8) | public static void ProcessWithChain()
method ProcessWithPattern (line 15) | public static void ProcessWithPattern(object obj)
method ProcessRepoChain (line 23) | public static void ProcessRepoChain()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-nested-member-foreach/App.cs
class App (line 3) | public class App {
method ProcessValues (line 6) | public void ProcessValues() {
method ProcessKeys (line 12) | public void ProcessKeys() {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-nested-member-foreach/Repo.cs
class Repo (line 1) | public class Repo {
method Save (line 3) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-nested-member-foreach/User.cs
class User (line 1) | public class User {
method Save (line 3) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-null-check-narrowing/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-null-check-narrowing/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public void Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/csharp-null-check-narrowing/Services/App.cs
class App (line 6) | public class App
method App (line 8) | public App(User? x)
method ProcessInequality (line 16) | public void ProcessInequality(User x)
method ProcessIsNotNull (line 24) | public void ProcessIsNotNull(User x)
method ProcessInLambda (line 32) | public void ProcessInLambda(User? x)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-null-conditional/App.cs
class AppService (line 5) | public class AppService
method Process (line 7) | public void Process()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-null-conditional/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-null-conditional/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-optional-params/Services/App.cs
class Greeter (line 1) | public class Greeter {
method Greet (line 2) | public string Greet(string name, string greeting = "Hello") {
class Program (line 7) | public class Program {
method Main (line 8) | public static void Main() {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-overload-param-types/Models/UserService.cs
class User (line 3) | public class User
method GetName (line 5) | public string GetName() => "user";
class UserService (line 8) | public class UserService
method Lookup (line 10) | public User Lookup(int id)
method Lookup (line 15) | public User Lookup(string name)
method Run (line 20) | public void Run()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-parent-resolution/src/Models/BaseModel.cs
class BaseModel (line 3) | public class BaseModel {
method Save (line 4) | public bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-parent-resolution/src/Models/ISerializable.cs
type ISerializable (line 3) | public interface ISerializable {
method Serialize (line 4) | string Serialize();
FILE: gitnexus/test/fixtures/lang-resolution/csharp-parent-resolution/src/Models/User.cs
class User (line 3) | public class User : BaseModel, ISerializable {
method Serialize (line 4) | public string Serialize() { return ""; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-pattern-matching/Models/Animal.cs
class Animal (line 3) | public class Animal
class Dog (line 8) | public class Dog : Animal
method Bark (line 10) | public void Bark()
class Cat (line 15) | public class Cat : Animal
method Meow (line 17) | public void Meow()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-pattern-matching/Services/AnimalService.cs
class AnimalService (line 5) | public class AnimalService
method HandleAnimal (line 7) | public void HandleAnimal(Animal animal)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-primary-ctors/App.cs
class App (line 3) | public class App
method Run (line 5) | public void Run()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-primary-ctors/Models/Person.cs
type Person (line 4) | public record Person(string FirstName, string LastName);
FILE: gitnexus/test/fixtures/lang-resolution/csharp-primary-ctors/Models/User.cs
class User (line 4) | public class User(string name, int age)
method Save (line 9) | public void Save() { }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-proj/Interfaces/IRepository.cs
type IRepository (line 3) | public interface IRepository
method Save (line 5) | void Save();
method Delete (line 6) | void Delete();
type ILogger (line 9) | public interface ILogger
method Log (line 11) | void Log(string message);
FILE: gitnexus/test/fixtures/lang-resolution/csharp-proj/Models/BaseEntity.cs
class BaseEntity (line 3) | public class BaseEntity
method Validate (line 7) | public virtual void Validate()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-proj/Models/User.cs
class User (line 5) | public class User : BaseEntity, IRepository
method Save (line 9) | public void Save()
method Delete (line 13) | public void Delete()
method Validate (line 17) | public override void Validate()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-proj/Services/UserService.cs
class UserService (line 6) | public class UserService
method CreateUser (line 11) | public void CreateUser(string name)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-receiver-resolution/App.cs
class AppService (line 5) | public class AppService
method ProcessEntities (line 7) | public void ProcessEntities()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-receiver-resolution/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-receiver-resolution/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-recursive-pattern/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 6) | public bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-recursive-pattern/Models/User.cs
class User (line 3) | public class User
method Save (line 6) | public bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-recursive-pattern/Program.cs
class AppService (line 5) | public class AppService
method ProcessWithRecursivePattern (line 7) | public void ProcessWithRecursivePattern(object obj)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-return-type/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public bool Save()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-return-type/Models/User.cs
class User (line 3) | public class User
method User (line 7) | public User(string name)
method Save (line 12) | public bool Save()
class UserService (line 18) | public class UserService
method GetUser (line 20) | public User GetUser(string name)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-return-type/Services/App.cs
class App (line 5) | public class App
method Run (line 7) | public void Run()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-self-this-resolution/src/Models/Repo.cs
class Repo (line 3) | public class Repo {
method Save (line 4) | public bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-self-this-resolution/src/Models/User.cs
class User (line 3) | public class User {
method Save (line 4) | public bool Save() { return true; }
method Process (line 5) | public void Process() {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-super-resolution/src/Models/BaseModel.cs
class BaseModel (line 3) | public class BaseModel {
method Save (line 4) | public virtual bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-super-resolution/src/Models/Repo.cs
class Repo (line 3) | public class Repo {
method Save (line 4) | public bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-super-resolution/src/Models/User.cs
class User (line 3) | public class User : BaseModel {
method Save (line 4) | public override bool Save() {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-switch-pattern/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public bool Save() { return false; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-switch-pattern/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-switch-pattern/Program.cs
class AppService (line 5) | public class AppService
method Process (line 7) | public void Process(object obj)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-var-foreach/Models/Repo.cs
class Repo (line 3) | public class Repo
method Save (line 5) | public bool Save() { return false; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-var-foreach/Models/User.cs
class User (line 3) | public class User
method Save (line 5) | public bool Save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/csharp-var-foreach/Program.cs
class AppService (line 6) | public class AppService
method ProcessUsers (line 8) | public void ProcessUsers(List<User> users)
method ProcessRepos (line 16) | public void ProcessRepos(List<Repo> repos)
method Direct (line 24) | public void Direct(User u, Repo r)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-variadic-resolution/Services/App.cs
class App (line 5) | public class App
method Execute (line 7) | public void Execute()
FILE: gitnexus/test/fixtures/lang-resolution/csharp-variadic-resolution/Utils/Logger.cs
class Logger (line 3) | public static class Logger
method Record (line 5) | public static string Record(params string[] args)
FILE: gitnexus/test/fixtures/lang-resolution/csharp-write-access/Models.cs
class Address (line 1) | public class Address {
class User (line 5) | public class User {
FILE: gitnexus/test/fixtures/lang-resolution/csharp-write-access/Service.cs
class UserService (line 1) | public class UserService {
method UpdateUser (line 2) | public void UpdateUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/field-types/models.ts
class Address (line 1) | class Address {
method save (line 4) | save(): void {
class User (line 9) | class User {
method greet (line 13) | greet(): string {
class Config (line 18) | class Config {
method validate (line 21) | validate(): boolean {
FILE: gitnexus/test/fixtures/lang-resolution/field-types/service.ts
function processUser (line 3) | function processUser(user: User) {
function validateConfig (line 8) | function validateConfig() {
FILE: gitnexus/test/fixtures/lang-resolution/go-ambiguous/internal/models/handler.go
type Handler (line 3) | type Handler struct
method Handle (line 7) | func (h *Handler) Handle() {}
FILE: gitnexus/test/fixtures/lang-resolution/go-ambiguous/internal/other/handler.go
type Handler (line 3) | type Handler struct
method Process (line 7) | func (h *Handler) Process() {}
FILE: gitnexus/test/fixtures/lang-resolution/go-ambiguous/internal/services/user.go
type UserHandler (line 5) | type UserHandler struct
method Run (line 9) | func (u *UserHandler) Run() {}
FILE: gitnexus/test/fixtures/lang-resolution/go-assignment-chain/cmd/main.go
function getUser (line 5) | func getUser() models.User {
function getRepo (line 9) | func getRepo() models.Repo {
function processEntities (line 13) | func processEntities() {
function processWithVar (line 23) | func processWithVar() {
FILE: gitnexus/test/fixtures/lang-resolution/go-assignment-chain/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 5) | func (r *Repo) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-assignment-chain/models/user.go
type User (line 3) | type User struct
method Save (line 5) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-call-result-binding/cmd/main.go
function GetUser (line 5) | func GetUser(name string) *models.User {
function processUser (line 9) | func processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/go-call-result-binding/models/user.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-calls/cmd/main.go
function main (line 8) | func main() {
FILE: gitnexus/test/fixtures/lang-resolution/go-calls/internal/onearg/log.go
function WriteAudit (line 3) | func WriteAudit(message string) string {
FILE: gitnexus/test/fixtures/lang-resolution/go-calls/internal/zeroarg/log.go
function WriteAudit (line 3) | func WriteAudit() string {
FILE: gitnexus/test/fixtures/lang-resolution/go-chain-call/cmd/main.go
type UserService (line 5) | type UserService struct
method GetUser (line 7) | func (s *UserService) GetUser() *models.User {
function processUser (line 11) | func processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/go-chain-call/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 7) | func (r *Repo) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-chain-call/models/user.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-constructor-type-inference/cmd/main.go
function processEntities (line 5) | func processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/go-constructor-type-inference/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 5) | func (r *Repo) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-constructor-type-inference/models/user.go
type User (line 3) | type User struct
method Save (line 5) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-deep-field-chain/cmd/main.go
function processUser (line 5) | func processUser(user models.User) {
FILE: gitnexus/test/fixtures/lang-resolution/go-deep-field-chain/models/models.go
type City (line 3) | type City struct
method GetName (line 7) | func (c *City) GetName() string {
type Address (line 11) | type Address struct
method Save (line 16) | func (a *Address) Save() bool {
type User (line 20) | type User struct
method Greet (line 25) | func (u *User) Greet() string {
FILE: gitnexus/test/fixtures/lang-resolution/go-field-types/cmd/main.go
function processUser (line 5) | func processUser(user models.User) {
FILE: gitnexus/test/fixtures/lang-resolution/go-field-types/models/models.go
type Address (line 3) | type Address struct
method Save (line 7) | func (a *Address) Save() bool {
type User (line 11) | type User struct
method Greet (line 16) | func (u *User) Greet() string {
FILE: gitnexus/test/fixtures/lang-resolution/go-for-call-expr/cmd/main.go
function processUsers (line 5) | func processUsers() {
function processRepos (line 11) | func processRepos() {
function main (line 17) | func main() {}
FILE: gitnexus/test/fixtures/lang-resolution/go-for-call-expr/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 7) | func (r *Repo) Save() error {
function GetRepos (line 11) | func GetRepos() []Repo {
FILE: gitnexus/test/fixtures/lang-resolution/go-for-call-expr/models/user.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() error {
function GetUsers (line 11) | func GetUsers() []User {
FILE: gitnexus/test/fixtures/lang-resolution/go-inc-dec-write-access/main.go
type Counter (line 3) | type Counter struct
function increment (line 8) | func increment(c *Counter) {
function decrement (line 13) | func decrement(c *Counter) {
FILE: gitnexus/test/fixtures/lang-resolution/go-local-shadow/cmd/main.go
function Save (line 5) | func Save(data string) {
function main (line 9) | func main() {
FILE: gitnexus/test/fixtures/lang-resolution/go-local-shadow/internal/utils/utils.go
function Save (line 3) | func Save(data string) {
FILE: gitnexus/test/fixtures/lang-resolution/go-make-builtin/main.go
function main (line 3) | func main() {
FILE: gitnexus/test/fixtures/lang-resolution/go-make-builtin/models.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() {}
method Greet (line 8) | func (u *User) Greet() string {
FILE: gitnexus/test/fixtures/lang-resolution/go-map-range/main.go
function processMap (line 5) | func processMap(userMap map[string]models.User) {
FILE: gitnexus/test/fixtures/lang-resolution/go-map-range/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 7) | func (r Repo) Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/go-map-range/models/user.go
type User (line 3) | type User struct
method Save (line 7) | func (u User) Save() {}
FILE: gitnexus/test/fixtures/lang-resolution/go-member-calls/cmd/main.go
function processUser (line 5) | func processUser() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-member-calls/models/user.go
type User (line 3) | type User struct
method Save (line 5) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-method-chain-binding/cmd/main.go
function GetUser (line 5) | func GetUser() *models.User {
function processChain (line 9) | func processChain() {
FILE: gitnexus/test/fixtures/lang-resolution/go-method-chain-binding/models/user.go
type City (line 3) | type City struct
method Save (line 7) | func (c *City) Save() bool {
type Address (line 11) | type Address struct
method GetCity (line 15) | func (a *Address) GetCity() *City {
type User (line 19) | type User struct
FILE: gitnexus/test/fixtures/lang-resolution/go-mixed-chain/cmd/main.go
function processWithService (line 5) | func processWithService(svc *models.UserService) {
function processWithUser (line 9) | func processWithUser(user *models.User) {
FILE: gitnexus/test/fixtures/lang-resolution/go-mixed-chain/models/models.go
type City (line 3) | type City struct
method GetName (line 7) | func (c *City) GetName() string {
type Address (line 11) | type Address struct
method Save (line 16) | func (a *Address) Save() {
type User (line 19) | type User struct
method GetAddress (line 24) | func (u *User) GetAddress() *Address {
type UserService (line 28) | type UserService struct
method GetUser (line 30) | func (s *UserService) GetUser() *User {
FILE: gitnexus/test/fixtures/lang-resolution/go-multi-assign/app.go
function process (line 3) | func process(name string, url string) {
FILE: gitnexus/test/fixtures/lang-resolution/go-multi-assign/models.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() bool {
type Repo (line 11) | type Repo struct
method Persist (line 15) | func (r *Repo) Persist() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-multi-return-inference/cmd/main.go
function NewUser (line 5) | func NewUser(name string) (*models.User, error) {
function NewRepo (line 9) | func NewRepo(name string) (*models.Repo, error) {
function processUser (line 13) | func processUser() {
function processRepo (line 21) | func processRepo() {
FILE: gitnexus/test/fixtures/lang-resolution/go-multi-return-inference/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 7) | func (r *Repo) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-multi-return-inference/models/user.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-new-builtin/main.go
function main (line 3) | func main() {
FILE: gitnexus/test/fixtures/lang-resolution/go-new-builtin/models.go
type User (line 3) | type User struct
method Save (line 8) | func (u *User) Save() {}
method Greet (line 9) | func (u *User) Greet() string {
FILE: gitnexus/test/fixtures/lang-resolution/go-nullable-receiver/cmd/main.go
function findUser (line 5) | func findUser() *models.User {
function findRepo (line 9) | func findRepo() *models.Repo {
function processEntities (line 13) | func processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/go-nullable-receiver/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 5) | func (r *Repo) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-nullable-receiver/models/user.go
type User (line 3) | type User struct
method Save (line 5) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-parent-resolution/models/base.go
type BaseModel (line 3) | type BaseModel struct
method Save (line 5) | func (b *BaseModel) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-parent-resolution/models/user.go
type User (line 3) | type User struct
method Serialize (line 7) | func (u *User) Serialize() string {
FILE: gitnexus/test/fixtures/lang-resolution/go-pkg/cmd/main.go
function main (line 8) | func main() {
FILE: gitnexus/test/fixtures/lang-resolution/go-pkg/internal/auth/service.go
function Authenticate (line 5) | func Authenticate(name string) *models.User {
function ValidateToken (line 10) | func ValidateToken(token string) bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-pkg/internal/models/admin.go
type Admin (line 3) | type Admin struct
function NewAdmin (line 8) | func NewAdmin(name string, role string) *Admin {
FILE: gitnexus/test/fixtures/lang-resolution/go-pkg/internal/models/repository.go
type Repository (line 3) | type Repository interface
FILE: gitnexus/test/fixtures/lang-resolution/go-pkg/internal/models/user.go
type User (line 3) | type User struct
function NewUser (line 8) | func NewUser(name string) *User {
FILE: gitnexus/test/fixtures/lang-resolution/go-pointer-constructor-inference/cmd/main.go
function process (line 5) | func process() {
FILE: gitnexus/test/fixtures/lang-resolution/go-pointer-constructor-inference/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 7) | func (r *Repo) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-pointer-constructor-inference/models/user.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-receiver-resolution/cmd/main.go
function processEntities (line 5) | func processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/go-receiver-resolution/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 5) | func (r *Repo) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-receiver-resolution/models/user.go
type User (line 3) | type User struct
method Save (line 5) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-return-type-inference/cmd/main.go
function GetUser (line 5) | func GetUser(name string) *models.User {
function processUser (line 9) | func processUser() {
function processUserCrossPackage (line 15) | func processUserCrossPackage() {
function GetRepo (line 20) | func GetRepo(name string) *models.Repo {
function processRepo (line 24) | func processRepo() {
FILE: gitnexus/test/fixtures/lang-resolution/go-return-type-inference/models/repo.go
type Repo (line 3) | type Repo struct
method Save (line 7) | func (r *Repo) Save() bool {
function GetRepo (line 11) | func GetRepo(name string) *Repo {
FILE: gitnexus/test/fixtures/lang-resolution/go-return-type-inference/models/user.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() bool {
function NewUser (line 11) | func NewUser(name string) *User {
FILE: gitnexus/test/fixtures/lang-resolution/go-struct-literals/app.go
function processUser (line 3) | func processUser(name string) {
FILE: gitnexus/test/fixtures/lang-resolution/go-struct-literals/user.go
type User (line 3) | type User struct
method Save (line 7) | func (u *User) Save() bool {
FILE: gitnexus/test/fixtures/lang-resolution/go-type-assertion/main.go
function process (line 3) | func process(s Saver) {
FILE: gitnexus/test/fixtures/lang-resolution/go-type-assertion/models.go
type Saver (line 3) | type Saver interface
type User (line 7) | type User struct
method Save (line 11) | func (u *User) Save() {}
method Greet (line 12) | func (u *User) Greet() string {
FILE: gitnexus/test/fixtures/lang-resolution/go-variadic-resolution/cmd/main.go
function main (line 5) | func main() {
FILE: gitnexus/test/fixtures/lang-resolution/go-variadic-resolution/internal/logger/logger.go
function Entry (line 3) | func Entry(args ...interface{}) {
FILE: gitnexus/test/fixtures/lang-resolution/go-write-access/main.go
type Address (line 3) | type Address struct
type User (line 7) | type User struct
function updateUser (line 12) | func updateUser(user *User) {
FILE: gitnexus/test/fixtures/lang-resolution/java-ambiguous/models/Handler.java
class Handler (line 3) | public class Handler {
method handle (line 4) | public void handle() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-ambiguous/models/Processor.java
type Processor (line 3) | public interface Processor {
method run (line 4) | void run();
FILE: gitnexus/test/fixtures/lang-resolution/java-ambiguous/other/Handler.java
class Handler (line 3) | public class Handler {
method process (line 4) | public void process() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-ambiguous/other/Processor.java
type Processor (line 3) | public interface Processor {
method execute (line 4) | void execute();
FILE: gitnexus/test/fixtures/lang-resolution/java-ambiguous/services/UserHandler.java
class UserHandler (line 6) | public class UserHandler extends Handler implements Processor {
method run (line 7) | public void run() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-assignment-chain/App.java
class App (line 4) | public class App {
method getUser (line 5) | static User getUser() { return new User(); }
method getRepo (line 6) | static Repo getRepo() { return new Repo(); }
method processEntities (line 8) | public static void processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/java-assignment-chain/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-assignment-chain/models/User.java
class User (line 3) | public class User {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-call-result-binding/App.java
class App (line 1) | public class App {
method getUser (line 2) | static User getUser(String name) {
method processUser (line 6) | void processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/java-call-result-binding/User.java
class User (line 1) | public class User {
method User (line 4) | public User(String name) {
method save (line 8) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-calls/services/UserService.java
class UserService (line 6) | public class UserService {
method processUser (line 7) | public void processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/java-calls/util/OneArg.java
class OneArg (line 3) | public class OneArg {
method writeAudit (line 4) | public static String writeAudit(String message) {
FILE: gitnexus/test/fixtures/lang-resolution/java-calls/util/ZeroArg.java
class ZeroArg (line 3) | public class ZeroArg {
method writeAudit (line 4) | public static String writeAudit() {
FILE: gitnexus/test/fixtures/lang-resolution/java-chain-call/App.java
class App (line 3) | public class App {
method processUser (line 4) | public static void processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/java-chain-call/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-chain-call/models/User.java
class User (line 3) | public class User {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-chain-call/services/UserService.java
class UserService (line 5) | public class UserService {
method getUser (line 6) | public User getUser() {
FILE: gitnexus/test/fixtures/lang-resolution/java-constructor-calls/App.java
class App (line 3) | public class App {
method processUser (line 4) | public static void processUser(String name) {
FILE: gitnexus/test/fixtures/lang-resolution/java-constructor-calls/models/User.java
class User (line 3) | public class User {
method User (line 6) | public User(String name) {
method save (line 10) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-constructor-type-inference/App.java
class App (line 4) | public class App {
method processEntities (line 5) | public static void processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/java-constructor-type-inference/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-constructor-type-inference/models/User.java
class User (line 3) | public class User {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-deep-field-chain/App.java
class App (line 3) | public class App {
method processUser (line 4) | public static void processUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/java-deep-field-chain/models/Address.java
class Address (line 3) | public class Address {
method save (line 7) | public void save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-deep-field-chain/models/City.java
class City (line 3) | public class City {
method getName (line 6) | public String getName() {
FILE: gitnexus/test/fixtures/lang-resolution/java-deep-field-chain/models/User.java
class User (line 3) | public class User {
method greet (line 7) | public String greet() {
FILE: gitnexus/test/fixtures/lang-resolution/java-enum-static-call/src/App.java
class App (line 1) | public class App {
method process (line 2) | public void process() {
FILE: gitnexus/test/fixtures/lang-resolution/java-enum-static-call/src/Status.java
type Status (line 1) | public enum Status {
method fromCode (line 5) | public static Status fromCode(int code) {
method label (line 9) | public String label() {
FILE: gitnexus/test/fixtures/lang-resolution/java-field-types/App.java
class App (line 3) | public class App {
method processUser (line 4) | public static void processUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/java-field-types/models/Address.java
class Address (line 3) | public class Address {
method save (line 6) | public void save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-field-types/models/User.java
class User (line 3) | public class User {
method greet (line 7) | public String greet() {
FILE: gitnexus/test/fixtures/lang-resolution/java-foreach-call-expr/Main.java
class Main (line 4) | public class Main {
method processUsers (line 5) | void processUsers() {
method processRepos (line 11) | void processRepos() {
FILE: gitnexus/test/fixtures/lang-resolution/java-foreach-call-expr/models/Repo.java
class Repo (line 5) | public class Repo {
method Repo (line 8) | public Repo(String name) {
method save (line 12) | public void save() {}
method getRepos (line 14) | public static List<Repo> getRepos() {
FILE: gitnexus/test/fixtures/lang-resolution/java-foreach-call-expr/models/User.java
class User (line 5) | public class User {
method User (line 8) | public User(String name) {
method save (line 12) | public void save() {}
method getUsers (line 14) | public static List<User> getUsers() {
FILE: gitnexus/test/fixtures/lang-resolution/java-foreach/App.java
class App (line 4) | public class App {
method processEntities (line 5) | public static void processEntities(User[] users, Repo[] repos) {
FILE: gitnexus/test/fixtures/lang-resolution/java-foreach/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-foreach/models/User.java
class User (line 3) | public class User {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-generic-parent-resolution/src/models/BaseModel.java
class BaseModel (line 3) | public class BaseModel<T> {
method save (line 4) | public boolean save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/java-generic-parent-resolution/src/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/java-generic-parent-resolution/src/models/User.java
class User (line 3) | public class User extends BaseModel<String> {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-grandparent-resolution/src/models/A.java
class A (line 3) | public class A {
method greet (line 4) | public Greeting greet() { return new Greeting(); }
FILE: gitnexus/test/fixtures/lang-resolution/java-grandparent-resolution/src/models/B.java
class B (line 3) | public class B extends A {}
FILE: gitnexus/test/fixtures/lang-resolution/java-grandparent-resolution/src/models/C.java
class C (line 3) | public class C extends B {}
FILE: gitnexus/test/fixtures/lang-resolution/java-grandparent-resolution/src/models/Greeting.java
class Greeting (line 3) | public class Greeting {
method save (line 4) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-grandparent-resolution/src/services/App.java
class App (line 5) | public class App {
method process (line 6) | public void process() {
FILE: gitnexus/test/fixtures/lang-resolution/java-heritage/interfaces/Serializable.java
type Serializable (line 3) | public interface Serializable {
method serialize (line 4) | String serialize();
method deserialize (line 5) | void deserialize(String data);
FILE: gitnexus/test/fixtures/lang-resolution/java-heritage/interfaces/Validatable.java
type Validatable (line 3) | public interface Validatable {
method validate (line 4) | boolean validate();
FILE: gitnexus/test/fixtures/lang-resolution/java-heritage/models/BaseModel.java
class BaseModel (line 3) | public class BaseModel {
method getId (line 6) | public int getId() {
method save (line 10) | public void save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-heritage/models/User.java
class User (line 6) | public class User extends BaseModel implements Serializable, Validatable {
method serialize (line 9) | public String serialize() {
method deserialize (line 13) | public void deserialize(String data) {
method validate (line 17) | public boolean validate() {
FILE: gitnexus/test/fixtures/lang-resolution/java-heritage/services/UserService.java
class UserService (line 6) | public class UserService {
method processUser (line 7) | public void processUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/java-instanceof-pattern/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-instanceof-pattern/models/User.java
class User (line 3) | public class User {
method save (line 4) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-instanceof-pattern/services/App.java
class App (line 6) | public class App {
method process (line 7) | public void process(Object obj) {
FILE: gitnexus/test/fixtures/lang-resolution/java-local-shadow/src/main/java/com/example/app/Main.java
class Main (line 5) | public class Main {
method save (line 7) | public static void save(String data) {
method run (line 11) | public static void run() {
FILE: gitnexus/test/fixtures/lang-resolution/java-local-shadow/src/main/java/com/example/utils/Logger.java
class Logger (line 3) | public class Logger {
method save (line 4) | public static void save(String data) {
FILE: gitnexus/test/fixtures/lang-resolution/java-map-keys-values/src/App.java
class App (line 6) | public class App {
method processValues (line 7) | public void processValues(Map<String, User> data) {
method processList (line 13) | public void processList(List<User> users) {
FILE: gitnexus/test/fixtures/lang-resolution/java-map-keys-values/src/Repo.java
class Repo (line 3) | public class Repo {
method Repo (line 5) | public Repo(String name) { this.name = name; }
method save (line 6) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-map-keys-values/src/User.java
class User (line 3) | public class User {
method User (line 5) | public User(String name) { this.name = name; }
method save (line 6) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-member-calls/models/User.java
class User (line 3) | public class User {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-member-calls/services/UserService.java
class UserService (line 5) | public class UserService {
method processUser (line 6) | public boolean processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/java-method-chain-binding/App.java
class App (line 1) | class App {
method getUser (line 2) | static User getUser() {
method processChain (line 6) | void processChain() {
FILE: gitnexus/test/fixtures/lang-resolution/java-method-chain-binding/Models.java
class City (line 1) | class City {
method City (line 3) | City(String name) { this.name = name; }
method save (line 4) | boolean save() { return true; }
class Address (line 7) | class Address {
method Address (line 9) | Address(City city) { this.city = city; }
method getCity (line 10) | City getCity() { return city; }
class User (line 13) | class User {
method User (line 15) | User(Address address) { this.address = address; }
FILE: gitnexus/test/fixtures/lang-resolution/java-mixed-chain/App.java
class App (line 4) | public class App {
method processWithService (line 5) | public static void processWithService(UserService svc) {
method processWithUser (line 9) | public static void processWithUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/java-mixed-chain/models/Address.java
class Address (line 3) | public class Address {
method save (line 6) | public void save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-mixed-chain/models/City.java
class City (line 3) | public class City {
method getName (line 4) | public String getName() {
FILE: gitnexus/test/fixtures/lang-resolution/java-mixed-chain/models/User.java
class User (line 3) | public class User {
method getAddress (line 6) | public Address getAddress() {
FILE: gitnexus/test/fixtures/lang-resolution/java-mixed-chain/services/UserService.java
class UserService (line 5) | public class UserService {
method getUser (line 6) | public User getUser() {
FILE: gitnexus/test/fixtures/lang-resolution/java-named-imports/com/example/app/Main.java
class Main (line 5) | public class Main {
method run (line 6) | public void run() {
FILE: gitnexus/test/fixtures/lang-resolution/java-named-imports/com/example/models/User.java
class User (line 3) | public class User {
method save (line 4) | public void save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-named-imports/com/example/other/User.java
class User (line 3) | public class User {
method save (line 4) | public void save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-nullable-receiver/App.java
class App (line 4) | public class App {
method processEntities (line 5) | public static void processEntities() {
method findUser (line 12) | private static User findUser() {
method findRepo (line 16) | private static Repo findRepo() {
FILE: gitnexus/test/fixtures/lang-resolution/java-nullable-receiver/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-nullable-receiver/models/User.java
class User (line 3) | public class User {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-optional-receiver/App.java
class App (line 6) | public class App {
method findUser (line 7) | static User findUser() { return new User(); }
method findRepo (line 8) | static Repo findRepo() { return new Repo(); }
method processEntities (line 10) | static void processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/java-optional-receiver/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-optional-receiver/models/User.java
class User (line 3) | public class User {
method save (line 4) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-overload-param-types/models/User.java
class User (line 3) | public class User {
method getName (line 4) | public String getName() {
FILE: gitnexus/test/fixtures/lang-resolution/java-overload-param-types/models/UserService.java
class UserService (line 3) | public class UserService {
method lookup (line 4) | public User lookup(int id) {
method lookup (line 8) | public User lookup(String name) {
method run (line 12) | public void run() {
FILE: gitnexus/test/fixtures/lang-resolution/java-parent-resolution/src/interfaces/Serializable.java
type Serializable (line 3) | public interface Serializable {
method serialize (line 4) | String serialize();
FILE: gitnexus/test/fixtures/lang-resolution/java-parent-resolution/src/models/BaseModel.java
class BaseModel (line 3) | public class BaseModel {
method save (line 4) | public boolean save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/java-parent-resolution/src/models/User.java
class User (line 5) | public class User extends BaseModel implements Serializable {
method serialize (line 6) | public String serialize() { return ""; }
FILE: gitnexus/test/fixtures/lang-resolution/java-receiver-resolution/App.java
class App (line 4) | public class App {
method processEntities (line 5) | public static void processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/java-receiver-resolution/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-receiver-resolution/models/User.java
class User (line 3) | public class User {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-return-type-inference/App.java
class App (line 3) | public class App {
method processUser (line 4) | public static void processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/java-return-type-inference/models/User.java
class User (line 3) | public class User {
method User (line 6) | public User(String name) {
method save (line 10) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-return-type-inference/services/UserService.java
class UserService (line 5) | public class UserService {
method getUser (line 6) | public User getUser(String name) {
FILE: gitnexus/test/fixtures/lang-resolution/java-self-this-resolution/src/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/java-self-this-resolution/src/models/User.java
class User (line 3) | public class User {
method save (line 4) | public boolean save() { return true; }
method process (line 5) | public void process() {
FILE: gitnexus/test/fixtures/lang-resolution/java-super-resolution/src/models/BaseModel.java
class BaseModel (line 3) | public class BaseModel {
method save (line 4) | public boolean save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/java-super-resolution/src/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public boolean save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/java-super-resolution/src/models/User.java
class User (line 3) | public class User extends BaseModel {
method save (line 4) | public boolean save() {
FILE: gitnexus/test/fixtures/lang-resolution/java-switch-pattern/App.java
class App (line 4) | public class App {
method processAny (line 5) | public static void processAny(Object obj) {
method handleUser (line 13) | public static void handleUser(Object obj) {
FILE: gitnexus/test/fixtures/lang-resolution/java-switch-pattern/models/Repo.java
class Repo (line 3) | public class Repo {
method save (line 4) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-switch-pattern/models/User.java
class User (line 3) | public class User {
method save (line 4) | public void save() {}
FILE: gitnexus/test/fixtures/lang-resolution/java-variadic-resolution/com/example/app/Main.java
class Main (line 5) | public class Main {
method run (line 6) | public void run() {
FILE: gitnexus/test/fixtures/lang-resolution/java-variadic-resolution/com/example/util/Logger.java
class Logger (line 3) | public class Logger {
method record (line 4) | public void record(String... args) {
FILE: gitnexus/test/fixtures/lang-resolution/java-virtual-dispatch/models/App.java
class Animal (line 5) | class Animal {
method speak (line 6) | public String speak() {
class Dog (line 11) | class Dog extends Animal {
method speak (line 12) | public String speak() {
method fetchBall (line 16) | public String fetchBall() {
class App (line 21) | public class App {
method run (line 22) | public void run() {
FILE: gitnexus/test/fixtures/lang-resolution/java-write-access/App.java
class App (line 4) | public class App {
method updateUser (line 5) | public static void updateUser(User user) {
FILE: gitnexus/test/fixtures/lang-resolution/java-write-access/models/Address.java
class Address (line 3) | public class Address {
FILE: gitnexus/test/fixtures/lang-resolution/java-write-access/models/User.java
class User (line 3) | public class User {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-chain-call/src/app.js
function processUser (line 3) | function processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-chain-call/src/repo.js
class Repo (line 1) | class Repo {
method save (line 2) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-chain-call/src/service.js
class UserService (line 3) | class UserService {
method getUser (line 7) | getUser() {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-chain-call/src/user.js
class User (line 1) | class User {
method save (line 2) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-constructor-type-inference/src/app.js
function processEntities (line 4) | function processEntities() {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-constructor-type-inference/src/repo.js
class Repo (line 1) | class Repo {
method save (line 2) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-constructor-type-inference/src/user.js
class User (line 1) | class User {
method save (line 2) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-parent-resolution/src/models/Base.js
class BaseModel (line 1) | class BaseModel {
method save (line 2) | save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/javascript-parent-resolution/src/models/User.js
class User (line 3) | class User extends BaseModel {
method serialize (line 4) | serialize() { return ''; }
FILE: gitnexus/test/fixtures/lang-resolution/javascript-self-this-resolution/src/models/Repo.js
class Repo (line 1) | class Repo {
method save (line 2) | save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/javascript-self-this-resolution/src/models/User.js
class User (line 1) | class User {
method save (line 2) | save() { return true; }
method process (line 3) | process() {
FILE: gitnexus/test/fixtures/lang-resolution/javascript-super-resolution/src/models/Base.js
class BaseModel (line 1) | class BaseModel {
method save (line 2) | save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/javascript-super-resolution/src/models/Repo.js
class Repo (line 1) | class Repo {
method save (line 2) | save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/javascript-super-resolution/src/models/User.js
class User (line 3) | class User extends BaseModel {
method save (line 4) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/js-call-result-binding/app.js
function processUser (line 3) | function processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/js-call-result-binding/models.js
class User (line 1) | class User {
method constructor (line 2) | constructor(name) {
method save (line 6) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/js-call-result-binding/service.js
function getUser (line 7) | function getUser(name) {
FILE: gitnexus/test/fixtures/lang-resolution/js-field-types/models.js
class Address (line 1) | class Address {
method save (line 4) | save() {
class User (line 9) | class User {
method greet (line 13) | greet() {
class Config (line 18) | class Config {
method validate (line 21) | validate() {
FILE: gitnexus/test/fixtures/lang-resolution/js-field-types/service.js
function processUser (line 3) | function processUser(user) {
function validateConfig (line 7) | function validateConfig() {
FILE: gitnexus/test/fixtures/lang-resolution/js-fixpoint-for-loop/app.js
function process (line 3) | function process() {
FILE: gitnexus/test/fixtures/lang-resolution/js-fixpoint-for-loop/models.js
class User (line 4) | class User {
method save (line 5) | save() {}
function getUsers (line 11) | function getUsers() { return []; }
FILE: gitnexus/test/fixtures/lang-resolution/js-jsdoc-async-return-type/app.js
function fetchUser (line 7) | async function fetchUser(name) {
function fetchRepo (line 14) | async function fetchRepo(path) {
function processUser (line 18) | async function processUser() {
function processRepo (line 23) | async function processRepo() {
FILE: gitnexus/test/fixtures/lang-resolution/js-jsdoc-async-return-type/repo.js
class Repo (line 1) | class Repo {
method constructor (line 2) | constructor(path) {
method save (line 6) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/js-jsdoc-async-return-type/user.js
class User (line 1) | class User {
method constructor (line 2) | constructor(name) {
method save (line 6) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/js-jsdoc-qualified-return-type/app.js
function fetchUser (line 6) | async function fetchUser(name) {
function processUser (line 10) | async function processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/js-jsdoc-qualified-return-type/user.js
class User (line 1) | class User {
method constructor (line 2) | constructor(name) {
method save (line 6) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/js-jsdoc-return-type/app.js
function getUser (line 7) | function getUser(name) {
function getRepo (line 14) | function getRepo(path) {
function processUser (line 18) | function processUser() {
function processRepo (line 23) | function processRepo() {
function handleUser (line 31) | function handleUser(user) {
function handleRepo (line 38) | function handleRepo(repo) {
FILE: gitnexus/test/fixtures/lang-resolution/js-jsdoc-return-type/repo.js
class Repo (line 1) | class Repo {
method constructor (line 2) | constructor(path) {
method save (line 6) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/js-jsdoc-return-type/user.js
class User (line 1) | class User {
method constructor (line 2) | constructor(name) {
method save (line 6) | save() {
FILE: gitnexus/test/fixtures/lang-resolution/js-nullable-receiver/src/app.js
function processEntities (line 8) | function processEntities(user, repo) {
FILE: gitnexus/test/fixtures/lang-resolution/js-nullable-receiver/src/repo.js
class Repo (line 1) | class Repo {
method save (line 2) | save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/js-nullable-receiver/src/user.js
class User (line 1) | class User {
method save (line 2) | save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/js-object-destructuring/app.js
function processDestructured (line 3) | function processDestructured() {
FILE: gitnexus/test/fixtures/lang-resolution/js-object-destructuring/models.js
class Address (line 4) | class Address {
method save (line 6) | save() { return true; }
class User (line 12) | class User {
method constructor (line 13) | constructor() {
FILE: gitnexus/test/fixtures/lang-resolution/js-object-destructuring/service.js
function getUser (line 6) | function getUser() { return new User(); }
FILE: gitnexus/test/fixtures/lang-resolution/js-write-access/models.js
class Address (line 1) | class Address {
class User (line 5) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/js-write-access/service.js
function updateUser (line 3) | function updateUser() {
FILE: gitnexus/test/fixtures/lang-resolution/php-alias-imports/app/Models/Repo.php
class Repo (line 4) | class Repo {
method __construct (line 7) | public function __construct(string $url) {
method persist (line 11) | public function persist(): bool {
FILE: gitnexus/test/fixtures/lang-resolution/php-alias-imports/app/Models/User.php
class User (line 4) | class User {
method __construct (line 7) | public function __construct(string $name) {
method save (line 11) | public function save(): bool {
FILE: gitnexus/test/fixtures/lang-resolution/php-alias-imports/app/Services/Main.php
class Main (line 7) | class Main {
method run (line 8) | public function run(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-ambiguous/app/Models/Dispatchable.php
type Dispatchable (line 5) | interface Dispatchable
method dispatch (line 7) | public function dispatch(): void;
FILE: gitnexus/test/fixtures/lang-resolution/php-ambiguous/app/Models/Handler.php
class Handler (line 5) | class Handler
method handle (line 7) | public function handle(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-ambiguous/app/Other/Dispatchable.php
type Dispatchable (line 5) | interface Dispatchable
method queue (line 7) | public function queue(): void;
FILE: gitnexus/test/fixtures/lang-resolution/php-ambiguous/app/Other/Handler.php
class Handler (line 5) | class Handler
method process (line 7) | public function process(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-ambiguous/app/Services/UserHandler.php
class UserHandler (line 8) | class UserHandler extends Handler implements Dispatchable
method dispatch (line 10) | public function dispatch(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-app/app/Contracts/Loggable.php
type Loggable (line 5) | interface Loggable
method log (line 7) | public function log(string $message): void;
FILE: gitnexus/test/fixtures/lang-resolution/php-app/app/Contracts/Repository.php
type Repository (line 5) | interface Repository
method find (line 7) | public function find(int $id): mixed;
method save (line 8) | public function save(mixed $entity): void;
FILE: gitnexus/test/fixtures/lang-resolution/php-app/app/Enums/UserRole.php
method label (line 11) | public function label(): string
FILE: gitnexus/test/fixtures/lang-resolution/php-app/app/Models/BaseModel.php
class BaseModel (line 8) | abstract class BaseModel implements Loggable
method getId (line 14) | public function getId(): int
method log (line 19) | public function log(string $message): void
FILE: gitnexus/test/fixtures/lang-resolution/php-app/app/Models/User.php
class User (line 7) | class User extends BaseModel
method __construct (line 14) | public function __construct(string $name, string $email)
method getName (line 20) | public function getName(): string
method getEmail (line 25) | public function getEmail(): string
FILE: gitnexus/test/fixtures/lang-resolution/php-app/app/Services/UserService.php
class UserService (line 9) | class UserService implements Repository
method find (line 13) | public function find(int $id): ?User
method save (line 18) | public function save(mixed $entity): void
method createUser (line 23) | public function createUser(string $name, string $email): User
method instance (line 34) | public static function instance(): self
FILE: gitnexus/test/fixtures/lang-resolution/php-app/app/Traits/HasTimestamps.php
type HasTimestamps (line 5) | trait HasTimestamps
method touch (line 9) | public function touch(): void
FILE: gitnexus/test/fixtures/lang-resolution/php-app/app/Traits/SoftDeletes.php
type SoftDeletes (line 5) | trait SoftDeletes
method softDelete (line 9) | public function softDelete(): void
method restore (line 14) | public function restore(): void
FILE: gitnexus/test/fixtures/lang-resolution/php-assignment-chain/app/Models/Repo.php
class Repo (line 4) | class Repo {
method save (line 5) | public function save(): bool {
FILE: gitnexus/test/fixtures/lang-resolution/php-assignment-chain/app/Models/User.php
class User (line 4) | class User {
method save (line 5) | public function save(): bool {
FILE: gitnexus/test/fixtures/lang-resolution/php-assignment-chain/app/Services/AppService.php
class AppService (line 7) | class AppService {
method process (line 8) | public function process(User $user, Repo $repo): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-call-result-binding/App.php
class User (line 3) | class User {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): bool {
function getUser (line 15) | function getUser(string $name): User {
function processUser (line 19) | function processUser(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-calls/app/Services/UserService.php
function create_user (line 8) | function create_user(): string
FILE: gitnexus/test/fixtures/lang-resolution/php-calls/app/Utils/OneArg/log.php
function write_audit (line 5) | function write_audit(string $message): string
FILE: gitnexus/test/fixtures/lang-resolution/php-calls/app/Utils/ZeroArg/log.php
function write_audit (line 5) | function write_audit(): string
FILE: gitnexus/test/fixtures/lang-resolution/php-constructor-calls/Models/User.php
class User (line 5) | class User {
method __construct (line 8) | public function __construct(string $name) {
method save (line 12) | public function save(): bool {
FILE: gitnexus/test/fixtures/lang-resolution/php-constructor-calls/app.php
function processUser (line 5) | function processUser(string $name): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-constructor-promotion-fields/Models.php
class Address (line 3) | class Address {
method save (line 6) | public function save(): void {
class User (line 11) | class User {
method __construct (line 12) | public function __construct(
method greet (line 17) | public function greet(): string {
FILE: gitnexus/test/fixtures/lang-resolution/php-constructor-promotion-fields/Service.php
class Service (line 3) | class Service {
method processUser (line 4) | public function processUser(User $user): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-constructor-type-inference/app/Models/Repo.php
class Repo (line 5) | class Repo
method save (line 7) | public function save(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-constructor-type-inference/app/Models/User.php
class User (line 5) | class User
method save (line 7) | public function save(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-constructor-type-inference/app/Services/AppService.php
class AppService (line 8) | class AppService
method processEntities (line 10) | public function processEntities(): void
FILE: gitnexus/test/fixtures/lang-resolution/php-deep-field-chain/Models.php
class City (line 3) | class City {
method getName (line 7) | public function getName(): string {
class Address (line 12) | class Address {
method save (line 19) | public function save(): void {
class User (line 24) | class User {
method greet (line 31) | public function greet(): string {
FILE: gitnexus/test/fixtures/lang-resolution/php-deep-field-chain/Service.php
class Service (line 3) | class Service {
method processUser (line 4) | public function processUser(User $user): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-default-params/app.php
function greet (line 3) | function greet(string $name, string $greeting = "Hello"): string {
function process (line 7) | function process(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-field-types/Models.php
class Address (line 3) | class Address {
method save (line 7) | public function save(): void {
class User (line 12) | class User {
method greet (line 19) | public function greet(): string {
FILE: gitnexus/test/fixtures/lang-resolution/php-field-types/Service.php
class Service (line 3) | class Service {
method processUser (line 4) | public function processUser(User $user): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-call-expr/Repo.php
class Repo (line 3) | class Repo {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): void {}
function getRepos (line 16) | function getRepos(): array {
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-call-expr/User.php
class User (line 3) | class User {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): void {}
function getUsers (line 16) | function getUsers(): array {
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-call-expr/main.php
function processUsers (line 6) | function processUsers(): void {
function processRepos (line 12) | function processRepos(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-generic/App.php
class App (line 6) | class App {
method processCollection (line 11) | public function processCollection($users): void {
method processArray (line 21) | public function processArray(array $repos): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-generic/Repo.php
class Repo (line 3) | class Repo {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-generic/User.php
class User (line 3) | class User {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-loop/App.php
class App (line 5) | class App {
method processUsers (line 7) | public function processUsers(array $users): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-loop/Repo.php
class Repo (line 3) | class Repo {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-loop/User.php
class User (line 3) | class User {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-member-access/App.php
class App (line 6) | class App {
method __construct (line 10) | public function __construct() {
method processMembers (line 19) | public function processMembers(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-member-access/Repo.php
class Repo (line 3) | class Repo {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-foreach-member-access/User.php
class User (line 3) | class User {
method __construct (line 6) | public function __construct(string $name) {
method save (line 10) | public function save(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-grandparent-resolution/app/Models/A.php
class A (line 5) | class A
method greet (line 7) | public function greet(): Greeting { return new Greeting(); }
FILE: gitnexus/test/fixtures/lang-resolution/php-grandparent-resolution/app/Models/B.php
class B (line 5) | class B extends A {}
FILE: gitnexus/test/fixtures/lang-resolution/php-grandparent-resolution/app/Models/C.php
class C (line 5) | class C extends B {}
FILE: gitnexus/test/fixtures/lang-resolution/php-grandparent-resolution/app/Models/Greeting.php
class Greeting (line 5) | class Greeting
method save (line 7) | public function save(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-grandparent-resolution/app/Services/App.php
class App (line 7) | class App
method process (line 9) | public function process(): void
FILE: gitnexus/test/fixtures/lang-resolution/php-grouped-imports/app/Models/Repo.php
class Repo (line 4) | class Repo {
method persist (line 5) | public function persist(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-grouped-imports/app/Models/User.php
class User (line 4) | class User {
method save (line 5) | public function save(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-grouped-imports/app/Services/Main.php
class Main (line 6) | class Main {
method run (line 7) | public function run(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-local-shadow/app/Services/Main.php
function save (line 7) | function save(string $data): void {
function run (line 11) | function run(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-local-shadow/app/Utils/Logger.php
function save (line 4) | function save(string $data): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-member-calls/app/Models/User.php
class User (line 5) | class User
method save (line 7) | public function save(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-member-calls/app/Services/UserService.php
class UserService (line 7) | class UserService
method processUser (line 9) | public function processUser(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-method-chain-binding/App.php
class City (line 3) | class City {
method __construct (line 5) | public function __construct(string $name) { $this->name = $name; }
method save (line 6) | public function save(): bool { return true; }
class Address (line 9) | class Address {
method __construct (line 11) | public function __construct(City $city) { $this->city = $city; }
method getCity (line 12) | public function getCity(): City { return $this->city; }
class User (line 15) | class User {
method __construct (line 17) | public function __construct(Address $address) { $this->address = $addr...
function getUser (line 20) | function getUser(): User {
function processChain (line 24) | function processChain(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-nullable-receiver/app/Models/Repo.php
class Repo (line 5) | class Repo
method save (line 7) | public function save(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-nullable-receiver/app/Models/User.php
class User (line 5) | class User
method save (line 7) | public function save(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-nullable-receiver/app/Services/AppService.php
class AppService (line 8) | class AppService
method process (line 10) | public function process(?User $user, ?Repo $repo): void
FILE: gitnexus/test/fixtures/lang-resolution/php-parent-resolution/app/Models/BaseModel.php
class BaseModel (line 5) | class BaseModel
method save (line 7) | public function save(): bool { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/php-parent-resolution/app/Models/Serializable.php
type Serializable (line 5) | interface Serializable
method serialize (line 7) | public function serialize(): string;
FILE: gitnexus/test/fixtures/lang-resolution/php-parent-resolution/app/Models/User.php
class User (line 5) | class User extends BaseModel implements Serializable
method serialize (line 7) | public function serialize(): string { return ''; }
FILE: gitnexus/test/fixtures/lang-resolution/php-phpdoc-attribute-return-type/Models.php
class User (line 2) | class User {
method save (line 3) | public function save() { return true; }
class Repo (line 6) | class Repo {
method save (line 7) | public function save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/php-phpdoc-attribute-return-type/Services.php
class UserService (line 4) | class UserService {
method getUser (line 8) | #[Route('/user')]
method getRepo (line 16) | #[Route('/repo')]
method processUser (line 21) | public function processUser() {
method processRepo (line 26) | public function processRepo() {
method handleUser (line 34) | #[Validate]
method handleRepo (line 42) | #[Validate]
FILE: gitnexus/test/fixtures/lang-resolution/php-phpdoc-return-type/Models.php
class User (line 2) | class User {
method save (line 3) | public function save() { return true; }
class Repo (line 6) | class Repo {
method save (line 7) | public function save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/php-phpdoc-return-type/Services.php
class UserService (line 4) | class UserService {
method getUser (line 8) | public function getUser(string $name) {
method getRepo (line 15) | public function getRepo(string $path) {
method processUser (line 19) | public function processUser() {
method processRepo (line 24) | public function processRepo() {
method handleUser (line 32) | public function handleUser($user) {
method handleRepo (line 39) | public function handleRepo($repo) {
FILE: gitnexus/test/fixtures/lang-resolution/php-property-promotion/UserService.php
class UserRepo (line 3) | class UserRepo {
method find (line 4) | public function find(int $id): void {}
method save (line 5) | public function save(): void {}
class UserService (line 8) | class UserService {
method __construct (line 9) | public function __construct(
FILE: gitnexus/test/fixtures/lang-resolution/php-receiver-resolution/app/Models/Repo.php
class Repo (line 5) | class Repo
method save (line 7) | public function save(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-receiver-resolution/app/Models/User.php
class User (line 5) | class User
method save (line 7) | public function save(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-receiver-resolution/app/Services/AppService.php
class AppService (line 8) | class AppService
method processEntities (line 10) | public function processEntities(User $user, Repo $repo): void
FILE: gitnexus/test/fixtures/lang-resolution/php-return-type/app/Models/Repo.php
class Repo (line 5) | class Repo {
method save (line 6) | public function save(): bool {
FILE: gitnexus/test/fixtures/lang-resolution/php-return-type/app/Models/User.php
class User (line 5) | class User {
method __construct (line 8) | public function __construct(string $name) {
method save (line 12) | public function save(): bool {
FILE: gitnexus/test/fixtures/lang-resolution/php-return-type/app/Services/UserService.php
class UserService (line 7) | class UserService {
method getUser (line 8) | public function getUser(string $name): User {
method processUser (line 12) | public function processUser(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-self-this-resolution/app/Models/Repo.php
class Repo (line 5) | class Repo
method save (line 7) | public function save(): bool { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/php-self-this-resolution/app/Models/User.php
class User (line 5) | class User
method save (line 7) | public function save(): bool { return true; }
method process (line 8) | public function process(): void
FILE: gitnexus/test/fixtures/lang-resolution/php-super-resolution/app/Models/BaseModel.php
class BaseModel (line 5) | class BaseModel
method save (line 7) | public function save(): bool { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/php-super-resolution/app/Models/Repo.php
class Repo (line 5) | class Repo
method save (line 7) | public function save(): bool { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/php-super-resolution/app/Models/User.php
class User (line 5) | class User extends BaseModel
method save (line 7) | public function save(): bool
FILE: gitnexus/test/fixtures/lang-resolution/php-this-receiver-disambiguation/AdminService.php
class AdminService (line 4) | class AdminService {
method getUser (line 6) | public function getUser(string $name) {
method processAdmin (line 10) | public function processAdmin() {
FILE: gitnexus/test/fixtures/lang-resolution/php-this-receiver-disambiguation/Models.php
class User (line 2) | class User {
method save (line 3) | public function save() { return true; }
class Repo (line 6) | class Repo {
method save (line 7) | public function save() { return true; }
FILE: gitnexus/test/fixtures/lang-resolution/php-this-receiver-disambiguation/UserService.php
class UserService (line 4) | class UserService {
method getUser (line 6) | public function getUser(string $name) {
method processUser (line 10) | public function processUser() {
FILE: gitnexus/test/fixtures/lang-resolution/php-typed-properties/app/Models/UserRepo.php
class UserRepo (line 5) | class UserRepo
method find (line 7) | public function find(int $id): void {}
method save (line 8) | public function save(): void {}
FILE: gitnexus/test/fixtures/lang-resolution/php-typed-properties/app/Services/UserService.php
class UserService (line 7) | class UserService
method process (line 11) | public function process(UserRepo $repo): void
FILE: gitnexus/test/fixtures/lang-resolution/php-variadic-resolution/app/Services/AppService.php
class AppService (line 6) | class AppService {
method run (line 7) | public function run(): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-variadic-resolution/app/Utils/Logger.php
class Logger (line 4) | class Logger {
method record (line 5) | public static function record(string $level, string ...$messages): void {
FILE: gitnexus/test/fixtures/lang-resolution/php-write-access/models.php
class Address (line 3) | class Address {
class User (line 7) | class User {
FILE: gitnexus/test/fixtures/lang-resolution/php-write-access/service.php
function updateUser (line 5) | function updateUser(User $user) {
FILE: gitnexus/test/fixtures/lang-resolution/python-alias-imports/app.py
function main (line 3) | def main():
FILE: gitnexus/test/fixtures/lang-resolution/python-alias-imports/models.py
class User (line 1) | class User:
method __init__ (line 2) | def __init__(self, name):
method save (line 5) | def save(self):
class Repo (line 8) | class Repo:
method __init__ (line 9) | def __init__(self, url):
method persist (line 12) | def persist(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-ambiguous/models/handler.py
class Handler (line 1) | class Handler:
method handle (line 2) | def handle(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-ambiguous/other/handler.py
class Handler (line 1) | class Handler:
method process (line 2) | def process(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-ambiguous/services/user_handler.py
class UserHandler (line 3) | class UserHandler(Handler):
method run (line 4) | def run(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-assignment-chain/app.py
function get_user (line 4) | def get_user() -> User:
function get_repo (line 7) | def get_repo() -> Repo:
function process (line 10) | def process():
FILE: gitnexus/test/fixtures/lang-resolution/python-assignment-chain/repo.py
class Repo (line 1) | class Repo:
method save (line 2) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-assignment-chain/user.py
class User (line 1) | class User:
method save (line 2) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-bare-import/models/user.py
class User (line 1) | class User:
method save (line 2) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-bare-import/services/auth.py
function authenticate (line 3) | def authenticate():
FILE: gitnexus/test/fixtures/lang-resolution/python-bare-import/services/user.py
class UserService (line 1) | class UserService:
method execute (line 2) | def execute(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-call-result-binding/app.py
function process_user (line 3) | def process_user():
FILE: gitnexus/test/fixtures/lang-resolution/python-call-result-binding/models.py
class User (line 1) | class User:
method __init__ (line 2) | def __init__(self, name: str):
method save (line 5) | def save(self) -> bool:
FILE: gitnexus/test/fixtures/lang-resolution/python-call-result-binding/service.py
function get_user (line 3) | def get_user(name: str) -> User:
FILE: gitnexus/test/fixtures/lang-resolution/python-calls/one.py
function write_audit (line 1) | def write_audit(message):
FILE: gitnexus/test/fixtures/lang-resolution/python-calls/service.py
function run (line 5) | def run():
FILE: gitnexus/test/fixtures/lang-resolution/python-calls/zero.py
function write_audit (line 1) | def write_audit():
FILE: gitnexus/test/fixtures/lang-resolution/python-chain-call/app.py
function process_user (line 4) | def process_user():
FILE: gitnexus/test/fixtures/lang-resolution/python-chain-call/models/repo.py
class Repo (line 1) | class Repo:
method save (line 2) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-chain-call/models/user.py
class User (line 1) | class User:
method save (line 2) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-chain-call/service.py
class UserService (line 4) | class UserService:
method get_user (line 5) | def get_user(self) -> User:
FILE: gitnexus/test/fixtures/lang-resolution/python-class-annotations/repo.py
class Repo (line 1) | class Repo:
method save (line 4) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-class-annotations/service.py
function process (line 8) | def process():
FILE: gitnexus/test/fixtures/lang-resolution/python-class-annotations/user.py
class User (line 1) | class User:
method save (line 4) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-constructor-calls/app.py
function process (line 3) | def process():
FILE: gitnexus/test/fixtures/lang-resolution/python-constructor-calls/models.py
class User (line 1) | class User:
method __init__ (line 2) | def __init__(self, name):
method save (line 5) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-constructor-type-inference/models/repo.py
class Repo (line 1) | class Repo:
method __init__ (line 2) | def __init__(self, db_name: str):
method save (line 5) | def save(self) -> bool:
FILE: gitnexus/test/fixtures/lang-resolution/python-constructor-type-inference/models/user.py
class User (line 1) | class User:
method __init__ (line 2) | def __init__(self, name: str):
method save (line 5) | def save(self) -> bool:
FILE: gitnexus/test/fixtures/lang-resolution/python-constructor-type-inference/services/app.py
function process_entities (line 5) | def process_entities():
FILE: gitnexus/test/fixtures/lang-resolution/python-default-params/app.py
function greet (line 1) | def greet(name: str, greeting: str = "Hello") -> str:
function search (line 4) | def search(query: str, limit: int = 10) -> list:
function process (line 7) | def process():
FILE: gitnexus/test/fixtures/lang-resolution/python-dict-items-loop/app.py
function process (line 3) | def process(data: dict[str, User]):
FILE: gitnexus/test/fixtures/lang-resolution/python-dict-items-loop/repo.py
class Repo (line 1) | class Repo:
method __init__ (line 2) | def __init__(self, name: str):
method save (line 5) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-dict-items-loop/user.py
class User (line 1) | class User:
method __init__ (line 2) | def __init__(self, name: str):
method save (line 5) | def save(self):
FILE: gitnexus/test/fixtures/lang-resolution/python-enumerate-loop/app.py
function process_users (line 5) | def process_users(users: dict[str, User]):
function process_nested_tuple (line 11) | def process_nested_tuple(users: dict[str, User]):
function process_parenthesized_tuple (line 17) | def process_parenthesized_tuple(users: List[User]):
FILE: gitnexus/test/fixtures/lang-resolution/python-enumerate-loop/repo.py
class Repo (line 1) | class Repo:
method save (line 2) | def save(self) -> bool:
FILE: gitnexus/test/fixtures/lang-resolution/python-enumerate-loop/user.py
class User (line 1) | class User:
method __init__ (line 2) | def __init__(self, name: str):
method save (line 5) | def save(self) -> bool:
Condensed preview — 1482 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,323K chars).
[
{
"path": ".claude/skills/gitnexus/gitnexus-cli/SKILL.md",
"chars": 3433,
"preview": "---\nname: gitnexus-cli\ndescription: \"Use when the user needs to run GitNexus CLI commands like analyze/index a repo, che"
},
{
"path": ".claude/skills/gitnexus/gitnexus-debugging/SKILL.md",
"chars": 3120,
"preview": "---\nname: gitnexus-debugging\ndescription: \"Use when the user is debugging a bug, tracing an error, or asking why somethi"
},
{
"path": ".claude/skills/gitnexus/gitnexus-exploring/SKILL.md",
"chars": 2993,
"preview": "---\nname: gitnexus-exploring\ndescription: \"Use when the user asks how code works, wants to understand architecture, trac"
},
{
"path": ".claude/skills/gitnexus/gitnexus-guide/SKILL.md",
"chars": 3468,
"preview": "---\nname: gitnexus-guide\ndescription: \"Use when the user asks about GitNexus itself — available tools, how to query the "
},
{
"path": ".claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md",
"chars": 2889,
"preview": "---\nname: gitnexus-impact-analysis\ndescription: \"Use when the user wants to know what will break if they change somethin"
},
{
"path": ".claude/skills/gitnexus/gitnexus-pr-review/SKILL.md",
"chars": 5355,
"preview": "---\nname: gitnexus-pr-review\ndescription: \"Use when the user wants to review a pull request, understand what a PR change"
},
{
"path": ".claude/skills/gitnexus/gitnexus-refactoring/SKILL.md",
"chars": 4039,
"preview": "---\nname: gitnexus-refactoring\ndescription: \"Use when the user wants to rename, extract, split, move, or restructure cod"
},
{
"path": ".claude-plugin/marketplace.json",
"chars": 607,
"preview": "{\n \"name\": \"gitnexus-marketplace\",\n \"owner\": {\n \"name\": \"GitNexus\",\n \"email\": \"nico@gitnexus.dev\"\n },\n \"metada"
},
{
"path": ".cursorrules",
"chars": 209,
"preview": "# AI Agent Rules\n\nFollow .gitnexus/RULES.md for all project context and coding guidelines.\n\nThis project uses GitNexus M"
},
{
"path": ".github/FUNDING.yml",
"chars": 71,
"preview": "# These are supported funding model platforms\n\ngithub: abhigyanpatwari\n"
},
{
"path": ".github/actions/setup-gitnexus/action.yml",
"chars": 680,
"preview": "name: Setup GitNexus\ndescription: Setup Node.js 20, install dependencies, and optionally build\n\ninputs:\n build:\n des"
},
{
"path": ".github/release.yml",
"chars": 939,
"preview": "changelog:\n exclude:\n labels:\n - chore\n authors:\n - dependabot\n - dependabot[bot]\n categories:\n "
},
{
"path": ".github/workflows/ci-quality.yml",
"chars": 315,
"preview": "name: Quality Checks\n\non:\n workflow_call:\n\njobs:\n typecheck:\n runs-on: ubuntu-latest\n timeout-minutes: 10\n st"
},
{
"path": ".github/workflows/ci-report.yml",
"chars": 14730,
"preview": "name: CI Report\n\non:\n workflow_run:\n workflows: ['CI']\n types: [completed]\n\npermissions:\n actions: read\n conten"
},
{
"path": ".github/workflows/ci-tests.yml",
"chars": 1601,
"preview": "name: Tests\n\non:\n workflow_call:\n\njobs:\n tests:\n name: ubuntu / coverage\n runs-on: ubuntu-latest\n timeout-min"
},
{
"path": ".github/workflows/ci.yml",
"chars": 2503,
"preview": "name: CI\n\non:\n push:\n branches: [main]\n paths-ignore: ['**.md', 'docs/**', 'LICENSE']\n pull_request:\n branche"
},
{
"path": ".github/workflows/claude-code-review.yml",
"chars": 3756,
"preview": "name: Claude Code Review\n\n# Uses pull_request_target so the workflow runs as defined on the default branch,\n# which allo"
},
{
"path": ".github/workflows/claude.yml",
"chars": 4221,
"preview": "name: Claude Code\n\non:\n issue_comment:\n types: [created]\n pull_request_review_comment:\n types: [created]\n issue"
},
{
"path": ".github/workflows/publish.yml",
"chars": 1996,
"preview": "name: Publish to npm\n\non:\n push:\n tags:\n - 'v*'\n\n# No workflow-level permissions — scoped per job below.\n\njobs:"
},
{
"path": ".gitignore",
"chars": 900,
"preview": "# Dependencies\nnode_modules/\n\n# Build output\ndist/\n\n# TypeScript build info\n*.tsbuildinfo\n\n# IDE\n.vscode/\n.idea/\n*.swp\n*"
},
{
"path": ".history/gitnexus/vitest.config_20260317171253.ts",
"chars": 1038,
"preview": "import { defineConfig } from 'vitest/config';\n\nexport default defineConfig({\n test: {\n globalSetup: ['test/global-se"
},
{
"path": ".mcp.json",
"chars": 144,
"preview": "{\n \"mcpServers\": {\n \"gitnexus\": {\n \"type\": \"stdio\",\n \"command\": \"npx\",\n \"args\": [\"-y\", \"gitnexus@late"
},
{
"path": ".sisyphus/drafts/gitnexus-brainstorming.md",
"chars": 787,
"preview": "# Draft: Gitnexus Brainstorming - Clustering & Process Maps\n\n## Initial Context\n- Project: **GitnexusV2**\n- Structure: \n"
},
{
"path": ".sisyphus/drafts/noodlbox-comparison.md",
"chars": 2385,
"preview": "# Draft: Gitnexus vs Noodlbox Strategy\n\n## Objectives\n- Understand GitnexusV2 current state and goals.\n- Analyze Noodlbo"
},
{
"path": ".windsurfrules",
"chars": 209,
"preview": "# AI Agent Rules\n\nFollow .gitnexus/RULES.md for all project context and coding guidelines.\n\nThis project uses GitNexus M"
},
{
"path": "AGENTS.md",
"chars": 5451,
"preview": "<!-- gitnexus:start -->\n# GitNexus — Code Intelligence\n\nThis project is indexed by GitNexus as **GitNexus** (2184 symbol"
},
{
"path": "CHANGELOG.md",
"chars": 7200,
"preview": "# Changelog\n\nAll notable changes to GitNexus will be documented in this file.\n\n## [Unreleased]\n\n### Changed\n- Migrated f"
},
{
"path": "CLAUDE.md",
"chars": 5451,
"preview": "<!-- gitnexus:start -->\n# GitNexus — Code Intelligence\n\nThis project is indexed by GitNexus as **GitNexus** (2184 symbol"
},
{
"path": "LICENSE",
"chars": 4588,
"preview": "PolyForm Noncommercial License 1.0.0\n\n<https://polyformproject.org/licenses/noncommercial/1.0.0>\n\n## Acceptance\n\nIn orde"
},
{
"path": "README.md",
"chars": 22906,
"preview": "# GitNexus\n⚠️ Important Notice:** GitNexus has NO official cryptocurrency, token, or coin. Any token/coin using the GitN"
},
{
"path": "compound-engineering.local.md",
"chars": 4525,
"preview": "---\nreview_agents: [kieran-typescript-reviewer, pattern-recognition-specialist, architecture-strategist, data-integrity-"
},
{
"path": "eval/.gitignore",
"chars": 174,
"preview": "# Evaluation results (large, should not be committed)\nresults/\n*.traj.json\npreds.json\n\n# Python\n__pycache__/\n*.pyc\n*.egg"
},
{
"path": "eval/README.md",
"chars": 7978,
"preview": "# GitNexus SWE-bench Evaluation Harness\n\nEvaluate whether GitNexus code intelligence improves AI agent performance on re"
},
{
"path": "eval/__init__.py",
"chars": 40,
"preview": "# GitNexus SWE-bench Evaluation Harness\n"
},
{
"path": "eval/agents/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "eval/agents/gitnexus_agent.py",
"chars": 8148,
"preview": "\"\"\"\nGitNexus-Enhanced Agent for SWE-bench Evaluation\n\nExtends mini-swe-agent's DefaultAgent with:\n1. Native augment mode"
},
{
"path": "eval/analysis/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "eval/analysis/analyze_results.py",
"chars": 16230,
"preview": "#!/usr/bin/env python3\n\"\"\"\nResults Analyzer for GitNexus SWE-bench Evaluation\n\nReads evaluation results and generates co"
},
{
"path": "eval/bridge/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "eval/bridge/gitnexus_tools.sh",
"chars": 5360,
"preview": "#!/bin/bash\n# GitNexus CLI tool wrappers for SWE-bench evaluation\n#\n# These functions call the GitNexus eval-server (HTT"
},
{
"path": "eval/bridge/mcp_bridge.py",
"chars": 10967,
"preview": "\"\"\"\nMCP Bridge for GitNexus\n\nStarts the GitNexus MCP server as a subprocess and provides a Python interface\nto call MCP "
},
{
"path": "eval/configs/models/claude-haiku.yaml",
"chars": 248,
"preview": "# Claude Haiku 4.5 — fast, cheap, good baseline\n# Via OpenRouter (set OPENROUTER_API_KEY in .env)\nmodel:\n model_name: \""
},
{
"path": "eval/configs/models/claude-opus.yaml",
"chars": 316,
"preview": "# Claude Opus 4 — most capable, highest cost\n# Via OpenRouter (set OPENROUTER_API_KEY in .env)\n# To use Anthropic direct"
},
{
"path": "eval/configs/models/claude-sonnet.yaml",
"chars": 319,
"preview": "# Claude Sonnet 4 — strong all-around model\n# Via OpenRouter (set OPENROUTER_API_KEY in .env)\n# To use Anthropic directl"
},
{
"path": "eval/configs/models/deepseek-chat.yaml",
"chars": 332,
"preview": "model: deepseek-ai/deepseek-chat\nprovider: openrouter\ncost:\n input: 0.14 # per 1M tokens\n output: 0.28 # per 1M toke"
},
{
"path": "eval/configs/models/deepseek-v3.yaml",
"chars": 429,
"preview": "model: deepseek-ai/DeepSeek-V3\nprovider: openrouter\ncost:\n input: 0.27 # per 1M tokens\n output: 1.10 # per 1M tokens"
},
{
"path": "eval/configs/models/glm-4.7.yaml",
"chars": 199,
"preview": "# GLM 4.7 — via OpenRouter (set OPENROUTER_API_KEY in .env)\nmodel:\n model_name: \"openrouter/zhipuai/glm-4.7\"\n cost_tra"
},
{
"path": "eval/configs/models/glm-5.yaml",
"chars": 195,
"preview": "# GLM 5 — via OpenRouter (set OPENROUTER_API_KEY in .env)\nmodel:\n model_name: \"openrouter/zhipuai/glm-5\"\n cost_trackin"
},
{
"path": "eval/configs/models/minimax-2.5.yaml",
"chars": 213,
"preview": "# MiniMax M1 2.5 — via OpenRouter (set OPENROUTER_API_KEY in .env)\nmodel:\n model_name: \"openrouter/minimax/minimax-m1-2"
},
{
"path": "eval/configs/models/minimax-m2.1.yaml",
"chars": 472,
"preview": "# MiniMax M2.5 — via OpenRouter (set OPENROUTER_API_KEY in .env)\n# Uses text-based model class because MiniMax doesn't s"
},
{
"path": "eval/configs/modes/baseline.yaml",
"chars": 239,
"preview": "# Baseline mode — no GitNexus, pure mini-swe-agent (control group)\nagent:\n agent_class: \"eval.agents.gitnexus_agent.Git"
},
{
"path": "eval/configs/modes/native.yaml",
"chars": 635,
"preview": "# Native mode — GitNexus tools only, no grep enrichment\n#\n# Explicit tools: gitnexus-query, gitnexus-context, gitnexus-i"
},
{
"path": "eval/configs/modes/native_augment.yaml",
"chars": 928,
"preview": "# Native + Augment mode — the primary evaluation mode\n#\n# Combines two capabilities (mirroring the Claude Code model):\n#"
},
{
"path": "eval/environments/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "eval/environments/gitnexus_docker.py",
"chars": 16464,
"preview": "\"\"\"\nGitNexus Docker Environment for SWE-bench Evaluation\n\nExtends mini-swe-agent's Docker environment to:\n1. Install Git"
},
{
"path": "eval/prompts/instance_baseline.jinja",
"chars": 2249,
"preview": "Please solve this issue: {{task}}\n\nYou can execute bash commands and edit files to implement the necessary changes.\n\n## "
},
{
"path": "eval/prompts/instance_native.jinja",
"chars": 3496,
"preview": "Please solve this issue: {{task}}\n\nYou can execute bash commands and edit files to implement the necessary changes.\n\n## "
},
{
"path": "eval/prompts/instance_native_augment.jinja",
"chars": 3574,
"preview": "Please solve this issue: {{task}}\n\nYou can execute bash commands and edit files to implement the necessary changes.\n\n## "
},
{
"path": "eval/prompts/system_baseline.jinja",
"chars": 568,
"preview": "You are a helpful assistant that can interact with a computer to solve software engineering tasks.\n\nYour response must c"
},
{
"path": "eval/prompts/system_native.jinja",
"chars": 2107,
"preview": "You are a helpful assistant that can interact with a computer to solve software engineering tasks.\n\nYour response must c"
},
{
"path": "eval/prompts/system_native_augment.jinja",
"chars": 2347,
"preview": "You are a helpful assistant that can interact with a computer to solve software engineering tasks.\n\nYour response must c"
},
{
"path": "eval/pyproject.toml",
"chars": 866,
"preview": "[project]\nname = \"gitnexus-swebench-eval\"\nversion = \"0.1.0\"\ndescription = \"SWE-bench evaluation harness with GitNexus co"
},
{
"path": "eval/run_eval.py",
"chars": 19456,
"preview": "#!/usr/bin/env python3\n\"\"\"\nGitNexus SWE-bench Evaluation Runner\n\nMain entry point for running SWE-bench evaluations with"
},
{
"path": "gitnexus/.claude/settings.local.json",
"chars": 108,
"preview": "{\n \"permissions\": {\n \"allow\": [\n \"mcp__plugin_claude-mem_mcp-search__get_observations\"\n ]\n }\n}\n"
},
{
"path": "gitnexus/.npmignore",
"chars": 207,
"preview": "# Source (dist/ is the compiled output)\nsrc/\ntsconfig.json\n\n# Dev files\n*.ts\n!dist/**/*.d.ts\n.git/\n.gitignore\nnode_modul"
},
{
"path": "gitnexus/CHANGELOG.md",
"chars": 5974,
"preview": "# Changelog\n\nAll notable changes to GitNexus will be documented in this file.\n\n## [1.4.7] - 2026-03-19\n\n### Added\n- **Ph"
},
{
"path": "gitnexus/Dockerfile.test",
"chars": 397,
"preview": "FROM node:22-bookworm\nWORKDIR /app\nRUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/list"
},
{
"path": "gitnexus/README.md",
"chars": 9208,
"preview": "# GitNexus\n\n**Graph-powered code intelligence for AI agents.** Index any codebase into a knowledge graph, then query it "
},
{
"path": "gitnexus/hooks/claude/gitnexus-hook.cjs",
"chars": 7042,
"preview": "#!/usr/bin/env node\n/**\n * GitNexus Claude Code Hook\n *\n * PreToolUse — intercepts Grep/Glob/Bash searches and augments"
},
{
"path": "gitnexus/hooks/claude/pre-tool-use.sh",
"chars": 2363,
"preview": "#!/bin/bash\n# GitNexus PreToolUse hook for Claude Code\n# Intercepts Grep/Glob/Bash searches and augments with graph cont"
},
{
"path": "gitnexus/hooks/claude/session-start.sh",
"chars": 1389,
"preview": "#!/bin/bash\n# GitNexus SessionStart hook for Claude Code\n# Fires on session startup. Stdout is injected into Claude's co"
},
{
"path": "gitnexus/package.json",
"chars": 2704,
"preview": "{\n \"name\": \"gitnexus\",\n \"version\": \"1.4.7\",\n \"description\": \"Graph-powered code intelligence for AI agents. Index any"
},
{
"path": "gitnexus/scripts/patch-tree-sitter-swift.cjs",
"chars": 2909,
"preview": "#!/usr/bin/env node\n/**\n * WORKAROUND: tree-sitter-swift@0.6.0 binding.gyp build failure\n *\n * Background:\n * tree-sit"
},
{
"path": "gitnexus/skills/gitnexus-cli.md",
"chars": 3433,
"preview": "---\nname: gitnexus-cli\ndescription: \"Use when the user needs to run GitNexus CLI commands like analyze/index a repo, che"
},
{
"path": "gitnexus/skills/gitnexus-debugging.md",
"chars": 3120,
"preview": "---\nname: gitnexus-debugging\ndescription: \"Use when the user is debugging a bug, tracing an error, or asking why somethi"
},
{
"path": "gitnexus/skills/gitnexus-exploring.md",
"chars": 2993,
"preview": "---\nname: gitnexus-exploring\ndescription: \"Use when the user asks how code works, wants to understand architecture, trac"
},
{
"path": "gitnexus/skills/gitnexus-guide.md",
"chars": 3468,
"preview": "---\nname: gitnexus-guide\ndescription: \"Use when the user asks about GitNexus itself — available tools, how to query the "
},
{
"path": "gitnexus/skills/gitnexus-impact-analysis.md",
"chars": 2889,
"preview": "---\nname: gitnexus-impact-analysis\ndescription: \"Use when the user wants to know what will break if they change somethin"
},
{
"path": "gitnexus/skills/gitnexus-pr-review.md",
"chars": 5355,
"preview": "---\nname: gitnexus-pr-review\ndescription: \"Use when the user wants to review a pull request, understand what a PR change"
},
{
"path": "gitnexus/skills/gitnexus-refactoring.md",
"chars": 4039,
"preview": "---\nname: gitnexus-refactoring\ndescription: \"Use when the user wants to rename, extract, split, move, or restructure cod"
},
{
"path": "gitnexus/src/cli/ai-context.ts",
"chars": 13269,
"preview": "/**\n * AI Context Generator\n * \n * Creates AGENTS.md and CLAUDE.md with full inline GitNexus context.\n * AGENTS.md is th"
},
{
"path": "gitnexus/src/cli/analyze.ts",
"chars": 15029,
"preview": "/**\n * Analyze Command\n *\n * Indexes a repository and stores the knowledge graph in .gitnexus/\n */\n\nimport path from 'pa"
},
{
"path": "gitnexus/src/cli/augment.ts",
"chars": 1107,
"preview": "/**\n * Augment CLI Command\n * \n * Fast-path command for platform hooks.\n * Shells out from Claude Code PreToolUse / Curs"
},
{
"path": "gitnexus/src/cli/clean.ts",
"chars": 2005,
"preview": "/**\n * Clean Command\n * \n * Removes the .gitnexus index from the current repository.\n * Also unregisters it from the glo"
},
{
"path": "gitnexus/src/cli/eval-server.ts",
"chars": 15588,
"preview": "/**\n * Eval Server — Lightweight HTTP server for SWE-bench evaluation\n * \n * Keeps LadybugDB warm in memory so tool call"
},
{
"path": "gitnexus/src/cli/index.ts",
"chars": 5517,
"preview": "#!/usr/bin/env node\n\n// Heap re-spawn removed — only analyze.ts needs the 8GB heap (via its own ensureHeap()).\n// Removi"
},
{
"path": "gitnexus/src/cli/lazy-action.ts",
"chars": 852,
"preview": "/**\n * Creates a lazy-loaded CLI action that defers module import until invocation.\n * The generic constraints ensure th"
},
{
"path": "gitnexus/src/cli/list.ts",
"chars": 1182,
"preview": "/**\n * List Command\n * \n * Shows all indexed repositories from the global registry.\n */\n\nimport { listRegisteredRepos } "
},
{
"path": "gitnexus/src/cli/mcp.ts",
"chars": 1642,
"preview": "/**\n * MCP Command\n * \n * Starts the MCP server in standalone mode.\n * Loads all indexed repos from the global registry."
},
{
"path": "gitnexus/src/cli/serve.ts",
"chars": 262,
"preview": "import { createServer } from '../server/api.js';\n\nexport const serveCommand = async (options?: { port?: string; host?: s"
},
{
"path": "gitnexus/src/cli/setup.ts",
"chars": 13350,
"preview": "/**\n * Setup Command\n * \n * One-time global MCP configuration writer.\n * Detects installed AI editors and writes the app"
},
{
"path": "gitnexus/src/cli/skill-gen.ts",
"chars": 23486,
"preview": "/**\n * Skill File Generator\n *\n * Generates repo-specific SKILL.md files from detected Leiden communities.\n * Each signi"
},
{
"path": "gitnexus/src/cli/status.ts",
"chars": 1436,
"preview": "/**\n * Status Command\n * \n * Shows the indexing status of the current repository.\n */\n\nimport { findRepo, getStoragePath"
},
{
"path": "gitnexus/src/cli/tool.ts",
"chars": 4723,
"preview": "/**\n * Direct CLI Tool Commands\n * \n * Exposes GitNexus tools (query, context, impact, cypher) as direct CLI commands.\n "
},
{
"path": "gitnexus/src/cli/wiki.ts",
"chars": 13259,
"preview": "/**\n * Wiki Command\n * \n * Generates repository documentation from the knowledge graph.\n * Usage: gitnexus wiki [path] ["
},
{
"path": "gitnexus/src/config/ignore-service.ts",
"chars": 9262,
"preview": "import ignore, { type Ignore } from 'ignore';\nimport fs from 'fs/promises';\nimport nodePath from 'path';\nimport type { P"
},
{
"path": "gitnexus/src/config/supported-languages.ts",
"chars": 311,
"preview": "export enum SupportedLanguages {\n JavaScript = 'javascript',\n TypeScript = 'typescript',\n Python = 'python',\n "
},
{
"path": "gitnexus/src/core/augmentation/engine.ts",
"chars": 8955,
"preview": "/**\n * Augmentation Engine\n * \n * Lightweight, fast-path enrichment of search patterns with knowledge graph context.\n * "
},
{
"path": "gitnexus/src/core/embeddings/embedder.ts",
"chars": 9531,
"preview": "/**\n * Embedder Module\n *\n * Singleton factory for transformers.js embedding pipeline.\n * Handles model loading, caching"
},
{
"path": "gitnexus/src/core/embeddings/embedding-pipeline.ts",
"chars": 13290,
"preview": "/**\n * Embedding Pipeline Module\n * \n * Orchestrates the background embedding process:\n * 1. Query embeddable nodes from"
},
{
"path": "gitnexus/src/core/embeddings/index.ts",
"chars": 221,
"preview": "/**\n * Embeddings Module\n * \n * Re-exports for the embedding pipeline system.\n */\n\nexport * from './types.js';\nexport * "
},
{
"path": "gitnexus/src/core/embeddings/text-generator.ts",
"chars": 5892,
"preview": "/**\n * Text Generator Module\n * \n * Pure functions to generate embedding text from code nodes.\n * Combines node metadata"
},
{
"path": "gitnexus/src/core/embeddings/types.ts",
"chars": 2647,
"preview": "/**\n * Embedding Pipeline Types\n * \n * Type definitions for the embedding generation and semantic search system.\n */\n\n/*"
},
{
"path": "gitnexus/src/core/graph/graph.ts",
"chars": 2092,
"preview": "import { GraphNode, GraphRelationship, KnowledgeGraph } from './types.js'\n\nexport const createKnowledgeGraph = (): Knowl"
},
{
"path": "gitnexus/src/core/graph/types.ts",
"chars": 3279,
"preview": "export type NodeLabel =\n | 'Project'\n | 'Package'\n | 'Module'\n | 'Folder'\n | 'File'\n | 'Class'\n | 'Function'\n | "
},
{
"path": "gitnexus/src/core/ingestion/ast-cache.ts",
"chars": 1366,
"preview": "import { LRUCache } from 'lru-cache';\nimport Parser from 'tree-sitter';\n\n// Define the interface for the Cache\nexport in"
},
{
"path": "gitnexus/src/core/ingestion/call-processor.ts",
"chars": 49032,
"preview": "import { KnowledgeGraph } from '../graph/types.js';\nimport { ASTCache } from './ast-cache.js';\nimport type { SymbolDefin"
},
{
"path": "gitnexus/src/core/ingestion/call-routing.ts",
"chars": 6824,
"preview": "/**\n * Shared Ruby call routing logic.\n *\n * Ruby expresses imports, heritage (mixins), and property definitions as\n * m"
},
{
"path": "gitnexus/src/core/ingestion/cluster-enricher.ts",
"chars": 7302,
"preview": "/**\n * Cluster Enricher\n * \n * LLM-based enrichment for community clusters.\n * Generates semantic names, keywords, and d"
},
{
"path": "gitnexus/src/core/ingestion/community-processor.ts",
"chars": 13078,
"preview": "/**\n * Community Detection Processor\n * \n * Uses the Leiden algorithm (via graphology-communities-leiden) to detect\n * c"
},
{
"path": "gitnexus/src/core/ingestion/constants.ts",
"chars": 775,
"preview": "/**\n * Default minimum buffer size for tree-sitter parsing (512 KB).\n * tree-sitter requires bufferSize >= file size in "
},
{
"path": "gitnexus/src/core/ingestion/entry-point-scoring.ts",
"chars": 15106,
"preview": "/**\n * Entry Point Scoring\n * \n * Calculates entry point scores for process detection based on:\n * 1. Call ratio (existi"
},
{
"path": "gitnexus/src/core/ingestion/export-detection.ts",
"chars": 9151,
"preview": "/**\n * Export Detection\n *\n * Determines whether a symbol (function, class, etc.) is exported/public\n * in its language."
},
{
"path": "gitnexus/src/core/ingestion/filesystem-walker.ts",
"chars": 3705,
"preview": "import fs from 'fs/promises';\nimport path from 'path';\nimport { glob } from 'glob';\nimport { createIgnoreFilter } from '"
},
{
"path": "gitnexus/src/core/ingestion/framework-detection.ts",
"chars": 21388,
"preview": "/**\n * Framework Detection\n * \n * Detects frameworks from:\n * 1) file path patterns\n * 2) AST definition text (decorator"
},
{
"path": "gitnexus/src/core/ingestion/heritage-processor.ts",
"chars": 11491,
"preview": "/**\n * Heritage Processor\n *\n * Extracts class inheritance relationships:\n * - EXTENDS: Class extends another Class (TS,"
},
{
"path": "gitnexus/src/core/ingestion/import-processor.ts",
"chars": 22418,
"preview": "import { KnowledgeGraph } from '../graph/types.js';\nimport { ASTCache } from './ast-cache.js';\nimport Parser from 'tree-"
},
{
"path": "gitnexus/src/core/ingestion/language-config.ts",
"chars": 7664,
"preview": "import fs from 'fs/promises';\nimport path from 'path';\n\nconst isDev = process.env.NODE_ENV === 'development';\n\n// ======"
},
{
"path": "gitnexus/src/core/ingestion/mro-processor.ts",
"chars": 15002,
"preview": "/**\n * MRO (Method Resolution Order) Processor\n *\n * Walks the inheritance DAG (EXTENDS/IMPLEMENTS edges), collects meth"
},
{
"path": "gitnexus/src/core/ingestion/named-binding-extraction.ts",
"chars": 15547,
"preview": "import { SupportedLanguages } from '../../config/supported-languages.js';\nimport type { SymbolTable, SymbolDefinition } "
},
{
"path": "gitnexus/src/core/ingestion/parsing-processor.ts",
"chars": 15384,
"preview": "import { KnowledgeGraph, GraphNode, GraphRelationship, type NodeLabel } from '../graph/types.js';\nimport Parser from 'tr"
},
{
"path": "gitnexus/src/core/ingestion/pipeline.ts",
"chars": 19440,
"preview": "import { createKnowledgeGraph } from '../graph/graph.js';\nimport { processStructure } from './structure-processor.js';\ni"
},
{
"path": "gitnexus/src/core/ingestion/process-processor.ts",
"chars": 15008,
"preview": "/**\n * Process Detection Processor\n * \n * Detects execution flows (Processes) in the code graph by:\n * 1. Finding entry "
},
{
"path": "gitnexus/src/core/ingestion/resolution-context.ts",
"chars": 6199,
"preview": "/**\n * Resolution Context\n *\n * Single implementation of tiered name resolution. Replaces the duplicated\n * tier-selecti"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/csharp.ts",
"chars": 4367,
"preview": "/**\n * C# namespace import resolution.\n * Handles using-directive resolution via .csproj root namespace stripping.\n */\n\n"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/go.ts",
"chars": 1897,
"preview": "/**\n * Go package import resolution.\n * Handles Go module path-based package imports.\n */\n\n/** Go module config parsed f"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/index.ts",
"chars": 999,
"preview": "/**\n * Language-specific import resolvers.\n * Extracted from import-processor.ts for maintainability.\n */\n\nexport { EXTE"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/jvm.ts",
"chars": 3704,
"preview": "/**\n * JVM import resolution (Java + Kotlin).\n * Handles wildcard imports, member/static imports, and Kotlin-specific pa"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/php.ts",
"chars": 1878,
"preview": "/**\n * PHP PSR-4 import resolution.\n * Handles use-statement resolution via composer.json autoload mappings.\n */\n\nimport"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/python.ts",
"chars": 2438,
"preview": "/**\n * Python import resolution — PEP 328 relative imports and proximity-based bare imports.\n * Import system spec: PEP "
},
{
"path": "gitnexus/src/core/ingestion/resolvers/ruby.ts",
"chars": 778,
"preview": "/**\n * Ruby require/require_relative import resolution.\n * Handles path resolution for Ruby's require and require_relati"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/rust.ts",
"chars": 2797,
"preview": "/**\n * Rust module import resolution.\n * Handles crate::, super::, self:: prefix paths and :: separators.\n */\n\n/**\n * Re"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/standard.ts",
"chars": 5910,
"preview": "/**\n * Standard import path resolution.\n * Handles relative imports, path alias rewriting, and generic suffix matching.\n"
},
{
"path": "gitnexus/src/core/ingestion/resolvers/utils.ts",
"chars": 4742,
"preview": "/**\n * Shared utilities for import resolution.\n * Extracted from import-processor.ts to reduce file size.\n */\n\n/** All f"
},
{
"path": "gitnexus/src/core/ingestion/structure-processor.ts",
"chars": 1395,
"preview": "import { generateId } from \"../../lib/utils.js\";\nimport { KnowledgeGraph, GraphNode, GraphRelationship } from \"../graph/"
},
{
"path": "gitnexus/src/core/ingestion/symbol-table.ts",
"chars": 7997,
"preview": "import type { NodeLabel } from '../graph/types.js';\n\nexport interface SymbolDefinition {\n nodeId: string;\n filePath: s"
},
{
"path": "gitnexus/src/core/ingestion/tree-sitter-queries.ts",
"chars": 35227,
"preview": "import { SupportedLanguages } from '../../config/supported-languages.js';\n\n/* \n * Tree-sitter queries for extracting cod"
},
{
"path": "gitnexus/src/core/ingestion/type-env.ts",
"chars": 46924,
"preview": "import type { SyntaxNode } from './utils.js';\nimport { FUNCTION_NODE_TYPES, extractFunctionName, CLASS_CONTAINER_TYPES, "
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/c-cpp.ts",
"chars": 21659,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { LanguageTypeConfig, ParameterExtractor, TypeBindingExtracto"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/csharp.ts",
"chars": 22527,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { ConstructorBindingScanner, ForLoopExtractor, LanguageTypeCo"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/go.ts",
"chars": 20725,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { ConstructorBindingScanner, ForLoopExtractor, LanguageTypeCo"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/index.ts",
"chars": 1875,
"preview": "/**\n * Per-language type extraction configurations.\n * Assembled here into a dispatch map keyed by SupportedLanguages.\n "
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/jvm.ts",
"chars": 34844,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { LanguageTypeConfig, ParameterExtractor, TypeBindingExtracto"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/php.ts",
"chars": 23653,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { LanguageTypeConfig, ParameterExtractor, TypeBindingExtracto"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/python.ts",
"chars": 19763,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { LanguageTypeConfig, ParameterExtractor, TypeBindingExtracto"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/ruby.ts",
"chars": 15682,
"preview": "import type { LanguageTypeConfig, ParameterExtractor, TypeBindingExtractor, InitializerExtractor, ClassNameLookup, Const"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/rust.ts",
"chars": 21710,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { LanguageTypeConfig, ParameterExtractor, TypeBindingExtracto"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/shared.ts",
"chars": 38552,
"preview": "import type { SyntaxNode } from '../utils.js';\n\n/** Which type argument to extract from a multi-arg generic container.\n "
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/swift.ts",
"chars": 5366,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { LanguageTypeConfig, ParameterExtractor, TypeBindingExtracto"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/types.ts",
"chars": 10468,
"preview": "import type { SyntaxNode } from '../utils.js';\n\n/** Extracts type bindings from a declaration node into the env map */\ne"
},
{
"path": "gitnexus/src/core/ingestion/type-extractors/typescript.ts",
"chars": 27389,
"preview": "import type { SyntaxNode } from '../utils.js';\nimport type { LanguageTypeConfig, ParameterExtractor, TypeBindingExtracto"
},
{
"path": "gitnexus/src/core/ingestion/utils.ts",
"chars": 57683,
"preview": "import type Parser from 'tree-sitter';\nimport { SupportedLanguages } from '../../config/supported-languages.js';\nimport "
},
{
"path": "gitnexus/src/core/ingestion/workers/parse-worker.ts",
"chars": 51939,
"preview": "import { parentPort } from 'node:worker_threads';\nimport Parser from 'tree-sitter';\nimport JavaScript from 'tree-sitter-"
},
{
"path": "gitnexus/src/core/ingestion/workers/worker-pool.ts",
"chars": 5067,
"preview": "import { Worker } from 'node:worker_threads';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport { fileURLToPath"
},
{
"path": "gitnexus/src/core/lbug/csv-generator.ts",
"chars": 15880,
"preview": "/**\n * CSV Generator for LadybugDB Hybrid Schema\n *\n * Streams CSV rows directly to disk files in a single pass over gra"
},
{
"path": "gitnexus/src/core/lbug/lbug-adapter.ts",
"chars": 30085,
"preview": "import fs from 'fs/promises';\nimport { createReadStream } from 'fs';\nimport { createInterface } from 'readline';\nimport "
},
{
"path": "gitnexus/src/core/lbug/schema.ts",
"chars": 13784,
"preview": "/**\n * LadybugDB Schema Definitions\n * \n * Hybrid Schema:\n * - Separate node tables for each code element type (File, Fu"
},
{
"path": "gitnexus/src/core/search/bm25-index.ts",
"chars": 4369,
"preview": "/**\n * Full-Text Search via LadybugDB FTS\n *\n * Uses LadybugDB's built-in full-text search indexes for keyword-based sea"
},
{
"path": "gitnexus/src/core/search/hybrid-search.ts",
"chars": 4961,
"preview": "/**\n * Hybrid Search with Reciprocal Rank Fusion (RRF)\n * \n * Combines BM25 (keyword) and semantic (embedding) search re"
},
{
"path": "gitnexus/src/core/tree-sitter/parser-loader.ts",
"chars": 2270,
"preview": "import Parser from 'tree-sitter';\nimport JavaScript from 'tree-sitter-javascript';\nimport TypeScript from 'tree-sitter-t"
},
{
"path": "gitnexus/src/core/wiki/generator.ts",
"chars": 31347,
"preview": "/**\n * Wiki Generator\n * \n * Orchestrates the full wiki generation pipeline:\n * Phase 0: Validate prerequisites + gath"
},
{
"path": "gitnexus/src/core/wiki/graph-queries.ts",
"chars": 8711,
"preview": "/**\n * Graph Queries for Wiki Generation\n *\n * Encapsulated Cypher queries against the GitNexus knowledge graph.\n * Uses"
},
{
"path": "gitnexus/src/core/wiki/html-viewer.ts",
"chars": 12368,
"preview": "/**\n * HTML Viewer Generator for Wiki\n *\n * Produces a self-contained index.html that embeds all markdown pages,\n * modu"
},
{
"path": "gitnexus/src/core/wiki/llm-client.ts",
"chars": 5897,
"preview": "/**\n * LLM Client for Wiki Generation\n * \n * OpenAI-compatible API client using native fetch.\n * Supports OpenAI, Azure,"
},
{
"path": "gitnexus/src/core/wiki/prompts.ts",
"chars": 7891,
"preview": "/**\n * LLM Prompt Templates for Wiki Generation\n * \n * All prompts produce deterministic, source-grounded documentation."
},
{
"path": "gitnexus/src/lib/utils.ts",
"chars": 98,
"preview": "export const generateId = (label: string, name: string): string => {\n return `${label}:${name}`\n}"
},
{
"path": "gitnexus/src/mcp/compatible-stdio-transport.ts",
"chars": 6768,
"preview": "import process from 'node:process';\nimport type { Transport, TransportSendOptions } from '@modelcontextprotocol/sdk/shar"
},
{
"path": "gitnexus/src/mcp/core/embedder.ts",
"chars": 3576,
"preview": "/**\n * Embedder Module (Read-Only)\n * \n * Singleton factory for transformers.js embedding pipeline.\n * For MCP, we only "
},
{
"path": "gitnexus/src/mcp/core/lbug-adapter.ts",
"chars": 17545,
"preview": "/**\n * LadybugDB Adapter (Connection Pool)\n *\n * Manages a pool of LadybugDB databases keyed by repoId, each with\n * mul"
},
{
"path": "gitnexus/src/mcp/local/local-backend.ts",
"chars": 61194,
"preview": "/**\n * Local Backend (Multi-Repo)\n * \n * Provides tool implementations using local .gitnexus/ indexes.\n * Supports multi"
},
{
"path": "gitnexus/src/mcp/resources.ts",
"chars": 16405,
"preview": "/**\n * MCP Resources (Multi-Repo)\n * \n * Provides structured on-demand data to AI agents.\n * All resources use repo-scop"
},
{
"path": "gitnexus/src/mcp/server.ts",
"chars": 11579,
"preview": "/**\n * MCP Server (Multi-Repo)\n *\n * Model Context Protocol server that runs on stdio.\n * External AI tools (Cursor, Cla"
},
{
"path": "gitnexus/src/mcp/staleness.ts",
"chars": 1187,
"preview": "/**\n * Staleness Check\n * \n * Checks if the GitNexus index is behind the current git HEAD.\n * Returns a hint for the LLM"
},
{
"path": "gitnexus/src/mcp/tools.ts",
"chars": 11866,
"preview": "/**\n * MCP Tool Definitions\n * \n * Defines the tools that GitNexus exposes to external AI agents.\n * All tools support a"
},
{
"path": "gitnexus/src/server/api.ts",
"chars": 12651,
"preview": "/**\n * HTTP API Server\n *\n * REST API for browser-based clients to query the local .gitnexus/ index.\n * Also hosts the M"
},
{
"path": "gitnexus/src/server/mcp-http.ts",
"chars": 3899,
"preview": "/**\n * MCP over HTTP\n *\n * Mounts the GitNexus MCP server on Express using StreamableHTTP transport.\n * Each connecting "
},
{
"path": "gitnexus/src/storage/git.ts",
"chars": 955,
"preview": "import { execSync } from 'child_process';\nimport path from 'path';\n\n// Git utilities for repository detection, commit tr"
},
{
"path": "gitnexus/src/storage/repo-manager.ts",
"chars": 9460,
"preview": "/**\n * Repository Manager\n * \n * Manages GitNexus index storage in .gitnexus/ at repo root.\n * Also maintains a global r"
},
{
"path": "gitnexus/src/types/pipeline.ts",
"chars": 2117,
"preview": "import { GraphNode, GraphRelationship, KnowledgeGraph } from '../core/graph/types.js';\nimport { CommunityDetectionResult"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-ambiguous/handler_a.h",
"chars": 60,
"preview": "#pragma once\n\nclass Handler {\npublic:\n void handle();\n};\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-ambiguous/handler_b.h",
"chars": 61,
"preview": "#pragma once\n\nclass Handler {\npublic:\n void process();\n};\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-ambiguous/processor.h",
"chars": 100,
"preview": "#pragma once\n\n#include \"handler_a.h\"\n\nclass Processor : public Handler {\npublic:\n void run();\n};\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-assignment-chain/models/Repo.h",
"chars": 173,
"preview": "#pragma once\n#include <string>\n\nclass Repo {\npublic:\n Repo(const std::string& name) : name_(name) {}\n bool save() "
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-assignment-chain/models/User.h",
"chars": 172,
"preview": "#pragma once\n#include <string>\n\nclass User {\npublic:\n User(const std::string& name) : name_(name) {}\n bool save() "
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-assignment-chain/services/App.cpp",
"chars": 258,
"preview": "#include \"models/User.h\"\n#include \"models/Repo.h\"\n\n// Tests C++ auto alias = u assignment chain propagation.\nvoid proces"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-brace-init-inference/models/Repo.h",
"chars": 41,
"preview": "class Repo {\npublic:\n void save() {}\n};\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-brace-init-inference/models/User.h",
"chars": 41,
"preview": "class User {\npublic:\n void save() {}\n};\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-brace-init-inference/services/App.cpp",
"chars": 151,
"preview": "#include \"../models/User.h\"\n#include \"../models/Repo.h\"\n\nvoid process() {\n auto user = User{};\n user.save();\n\n auto r"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-call-result-binding/app.cpp",
"chars": 93,
"preview": "#include \"user.h\"\n\nvoid processUser() {\n auto user = getUser(\"alice\");\n user.save();\n}\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-call-result-binding/user.h",
"chars": 232,
"preview": "#pragma once\n#include <string>\n\nclass User {\npublic:\n User(const std::string& n) : name_(n) {}\n bool save() { retu"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-calls/main.cpp",
"chars": 77,
"preview": "#include \"one.h\"\n#include \"zero.h\"\n\nvoid run() {\n write_audit(\"hello\");\n}\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-calls/one.h",
"chars": 76,
"preview": "inline const char* write_audit(const char* message) {\n return message;\n}\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-calls/zero.h",
"chars": 56,
"preview": "inline const char* write_audit() {\n return \"zero\";\n}\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-chain-call/app.cpp",
"chars": 128,
"preview": "#include \"service.h\"\n#include \"user.h\"\n#include \"repo.h\"\n\nvoid processUser() {\n UserService svc;\n svc.getUser().sa"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-chain-call/repo.h",
"chars": 71,
"preview": "#pragma once\n\nclass Repo {\npublic:\n bool save() { return true; }\n};\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-chain-call/service.h",
"chars": 101,
"preview": "#pragma once\n#include \"user.h\"\n\nclass UserService {\npublic:\n User getUser() { return User(); }\n};\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-chain-call/user.h",
"chars": 71,
"preview": "#pragma once\n\nclass User {\npublic:\n bool save() { return true; }\n};\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-constructor-calls/app.cpp",
"chars": 115,
"preview": "#include \"user.h\"\n\nvoid processUser(const std::string& name) {\n auto user = new User(name);\n user->save();\n}\n"
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-constructor-calls/user.h",
"chars": 172,
"preview": "#pragma once\n#include <string>\n\nclass User {\npublic:\n User(const std::string& name) : name_(name) {}\n bool save() "
},
{
"path": "gitnexus/test/fixtures/lang-resolution/cpp-constructor-type-inference/models/Repo.h",
"chars": 181,
"preview": "#pragma once\n#include <string>\n\nclass Repo {\npublic:\n Repo(const std::string& dbName) : dbName_(dbName) {}\n bool s"
}
]
// ... and 1282 more files (download for full content)
About this extraction
This page contains the full source code of the abhigyanpatwari/GitNexus GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1482 files (3.9 MB), approximately 1.1M tokens, and a symbol index with 3199 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.