Skip to content

Releases: raultov/knot

v1.5.6 — Groovy Property Accessors & Parser Hardening

Choose a tag to compare

@github-actions github-actions released this 26 Jul 20:23

Release Notes

  • Fix(groovy): Javadoc block-comment continuation lines no longer produce phantom method entities or corrupt scope tracking. New strip_comments_line helper tracks multi-line /* */ state across lines, and brace counting operates on the code-bearing remainder only.
  • Feat(groovy): Bare property declarations (Path baseDir, boolean cacheable, private final Path ROOT) are now indexed as GroovyProperty entities. Previously only initialized properties (String name = 'test') were detected.
  • Feat(groovy): Compiler-generated property accessors (getX/setX/isX) are synthesised as first-class GroovyMethod entities, enabling OVERRIDES linking between Groovy properties and interface getter declarations. Explicit getters/setters suppress synthetic ones, and final properties emit getters only.
  • Fix(groovy-scm): Fixed queries/groovy.scm to compile against tree-sitter-groovy v0.1.2 by replacing variable_declaration with local_variable_declaration. Added function_definition capture patterns for def-style methods.
  • Test(unit): 30+ new unit tests covering comment stripping, bare property detection, synthetic accessor generation, override linking for property accessors vs interface getters, and the tree-sitter query compilation assertion.
  • Test(e2e): Added Group G in tests/run_groovy_e2e.sh — validates find_callers Overridden-by/Overrides for properties, explore_file lists properties, Javadoc phantom regression guard, and Neo4j dedup/no-override invariants.
  • Docs: Updated README Groovy section with property accessor synthesis details.
  • cargo fmt clean | cargo clippy --all-targets -- -D warnings clean | 969 unit tests passing

Install knot 1.5.6

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.6/knot-installer.sh | sh

Download knot 1.5.6

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.5.5 — JVM Method Override Relationships

Choose a tag to compare

@github-actions github-actions released this 26 Jul 07:53

Release Notes

  • Feat(resolve): Implemented JVM method-level OVERRIDES relationships. The graph now links a method in a subtype directly to the method it overrides/implements in a supertype, enabling reverse-dependency queries to surface implementations and declarations bidirectionally.
  • Feat(query): find_callers now returns two new directed buckets for JVM entities: Overridden by (implementations/descendants of the queried method) and Overrides (declarations/ancestors the queried method overrides).
  • Refactor(query): Extracted duplicate Neo4j row parsing logic in query.rs into a shared parse_reference_row function.
  • Test(e2e): Added Group F in the Groovy E2E suite to verify method overrides bidirectionally. Added cleanup for autolink test artifacts.
  • Docs: Marked the method_override_relationships.md spec as implemented and updated the README with the new override discovery use cases.

Install knot 1.5.5

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.5/knot-installer.sh | sh

Download knot 1.5.5

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.5.4 — Groovy Docstring Extraction

Choose a tag to compare

@github-actions github-actions released this 19 Jul 04:30

Release Notes

  • Fix(groovy): The Groovy lexical parser now extracts GroovyDoc/comment blocks as entity docstring for classes, interfaces, enums, traits, methods (def, typed single-line and multi-line signatures) and properties. Previously all 5 ParsedEntity::new call sites passed None, so semantic search could not match Groovy entities by the concepts described in their GroovyDoc (e.g. nextflow's PluginExtensionPoint.init was invisible to a "channel factory initialization" query despite being indexed).
  • Feat(parser): New extract_preceding_docstring in src/pipeline/parser/languages/groovy.rs walks backwards from each declaration: skips annotations (@PackageScope, @Override) and tolerates one blank line; captures the adjacent /** ... */ / /* ... */ block or a burst of // lines; stops at package/import/code lines so license headers never leak into the first class of a file. Markers are stripped via the shared strip_comment_markers.
  • Test(unit): 18 new tests — 11 for the backwards-walk policy (adjacent block, annotations, // bursts, blank-line tolerance, license-header guard, empty/malformed comments, file start) and 7 for the wiring into extract_entities_groovy, including the literal nextflow PluginExtensionPoint fragment; test_groovy_parse_sample_full_file now asserts extracted docstrings; prepare.rs gains a contract test that the docstring reaches embed_text.
  • Test(e2e): tests/run_groovy_e2e.sh gains Suite E — Docstrings: the synthetic PluginExtensionPoint.groovy fixture now carries the verbatim nextflow GroovyDoc and @PackageScope, with Cypher assertions on the init/checkInit docstrings, a non-empty-docstring entity count, and a Qdrant scroll parity check (3 points for the file) via the REST port.
  • cargo fmt clean | cargo clippy --all-targets -- -D warnings clean | 912 unit tests passing | ./tests/run_groovy_e2e.sh green

Install knot 1.5.4

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.4/knot-installer.sh | sh

Download knot 1.5.4

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.5.3 — Groovy Inheritance & Perf Optimization

Choose a tag to compare

@github-actions github-actions released this 12 Jul 08:34

Release Notes

  • Feat(groovy): The Groovy parser now emits EXTENDS/IMPLEMENTS reference intents from class, interface, trait, and enum declarations, enabling accurate Nextflow-style hierarchy traversal via find_callers.
  • Chore(config): Increased default batch size for Rayon parallel ingestion from 64 to 128.
  • Fix(e2e): Stabilized Neo4j healthchecks and Cypher EXPLAIN plan checks to prevent flapping timeouts in integration tests.
  • cargo fmt clean | cargo clippy clean | 894 unit tests passing

Install knot 1.5.3

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.3/knot-installer.sh | sh

Download knot 1.5.3

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.5.2 — Composite Index for CONTAINS Auto-Link

Choose a tag to compare

@github-actions github-actions released this 11 Jul 16:47

Release Notes

Performance

  • Composite index (repo_name, fqn) on :Entity — the CONTAINS
    auto-link query no longer degrades to O(n²) per-row label scans on
    every entity in the repository. Large repos (~50K entities) no
    longer timeout at the end of indexing. The index is created with
    IF NOT EXISTS so it migrates automatically into existing
    deployments.

Internal

  • Extracted index_statements() from ensure_indexes() for unit
    testing (same pattern already used by build_contains_auto_link_cypher()).
  • Added unit tests covering the new composite index, idempotency of
    IF NOT EXISTS, and preservation of all existing index statements.
  • Added integration test (#[ignore]) that verifies the index appears
    in SHOW INDEXES and that EXPLAIN of the auto-link Cypher succeeds.
  • Added e2e regression script (run_contains_autolink_index_e2e.sh)
    with a synthetic Java fixture of 5,200 entities, verifying index
    presence, plan index-seek, correct CONTAINS edge counts, and a time
    budget canary against O(n²) regression.

Install knot 1.5.2

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.2/knot-installer.sh | sh

Download knot 1.5.2

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.5.1 — Machine-Independent (Repo-Relative) File Paths

Choose a tag to compare

@github-actions github-actions released this 04 Jul 11:22

Release Notes

  • Feat(pipeline): All persisted file_path values are now stored as repo-relative paths with POSIX separators (e.g. src/pipeline/embed.rs). New to_repo_relative choke point in src/pipeline/files.rs (with ParseConfig.repo_root canonicalized once at pipeline start) enforces the format: relative to repo root, POSIX separators, no leading ./, no trailing /, R5 warn-and-passthrough for the degenerate out-of-root case. I/O continues to use absolute paths — only the persisted string changes.
  • Feat(pipeline): Index state version bumps from 3 → 4. Existing v3 state files are rejected by IndexState::load; the existing stale-version mechanism triggers a one-time full re-index on upgrade with no manual steps. file_hashes keys are now the canonical relative path.
  • Feat(pipeline): Entity UUIDs (Uuid::new_v5 over repo_name:file_path:fqn:start_line) become machine-independent: the same repo indexed on two hosts now produces identical UUIDs. Reinforced by the new test_uuid_stable_across_machines unit test in src/models/entity.rs.
  • Feat(cli): explore_file (shared by CLI and MCP) now accepts repo-relative paths (preferred), absolute paths under KNOT_REPO_PATH / CWD (auto-stripped), and falls back to a path-boundary ENDS WITH suffix query. Ambiguous matches across multiple repos surface a ambiguous_path_candidates list instead of a silent miss.
  • Feat(cli): New shared format_file_line renderer annotates every file mention with (repo: <name>) when the owning repo is known, used by both the CLI and MCP answers.
  • Feat(graph): New QueryExt::find_files_by_suffix powers the disambiguation fallback — a single Cypher query returning distinct (file_path, repo_name) pairs bounded by the indexed repo_name when provided.
  • Feat(mcp): explore_file tool description updated to state the preferred relative-path input, the absolute-path fallback, and the disambiguation contract.
  • Feat(parser): Rust crate discovery (CrateDiscovery::crate_for_file, compute_rust_file_kind) still keys on the absolute path — the relative entity path is reconstructed against repo_root only when the parser is invoked with a relative path. FQNs are unaffected (asserted by tests/run_rust_reference_resolution_e2e.sh).
  • Test(unit): 6 new tests on to_repo_relative (nested file, root file, trailing-slash root, backslash normalization, out-of-root R5, leading-dot-slash guard); 3 tests on IndexState for relative keys + v3 rejection; 2 tests on the parser for relative file_path; 5 tests on input normalization and the suffix query; 1 test on format_file_line.
  • Test(e2e): tests/run_rust_reference_resolution_e2e.sh queries updated to expect repo-relative fixture paths and to strip cypher-shell's plain-format quoting.
  • Fix(e2e): tests/docker-compose.e2e.yml and tests/run_all_e2e_fast.sh hardened — Qdrant 1.16+ removed /health so the compose healthcheck never reports healthy; wait_for_port now probes the actual port via nc -z for non-Neo4j services. Pre-flight also frees any foreign container holding the e2e high ports (e.g. a sibling knot-server setup that would silently steal our bind).
  • Chore(docs): Removed two obsolete spec files (docs/specs/indexing_progress_api.md, docs/specs/performance_fix_bfcarena_and_contains.md) — their designs are now covered by the codebase and CHANGELOG.
  • Docs: README upgrade note, .prompt, and .knot-agent.md updated to teach the relative-paths contract to humans and LLMs alike.
  • ⚠️ Breaking change: Upgrading from v1.5.0 triggers an automatic full re-index on first run. .knot/index_state.json carries a version field that the loader rejects when stale, and knot-indexer wipes the repo from both databases before rebuilding. No manual steps required.
  • cargo fmt clean | cargo clippy --all-targets -- -D warnings clean
  • ✅ Unit tests passing.

Install knot 1.5.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.1/knot-installer.sh | sh

Download knot 1.5.1

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.5.0 — File-Based Indexing Progress Tracking

Choose a tag to compare

@github-actions github-actions released this 03 Jul 16:20

Release Notes

  • Feat(pipeline): New ProgressTracker API (src/pipeline/progress.rs) — thread-safe, pollable struct exposing snapshot() as a Serializeable IndexingProgress so knot-server can implement GET /repos/{name}/progress without a mapping layer. Counters use lock-free atomics; stage/error live behind an RwLock.
  • Feat(pipeline): Indexer logs a [Progress] [<repo>] X/Y files (Z%) — batch #N ingested (M entities) line after every ingested batch, and a final 100.0% line before reference resolution. Format pinned by tests/run_rust_e2e.sh grep assertions.
  • Feat(pipeline): run_indexing_pipeline_with_progress() and setup_watch_mode_with_progress() keep the legacy signatures, creating an internal throwaway tracker so CLI (knot-indexer) gets the log lines for free without opting into the API.
  • Feat(parser): New FileParsedCallback parameter on parse_files_stream invoked exactly once per file (success or parse error), keeping the parser decoupled from the tracker.
  • Test(progress): 10 unit tests on ProgressTracker (lifecycle, percent rules, concurrent atomicity, JSON serialization); 3 unit tests on parse_files_stream callback (once-per-file invariant, error-path counting, None regression).
  • Test(e2e): tests/run_rust_e2e.sh now asserts the [Progress] log format and the 100.0% final line.
  • Docs(readme): New "Indexing Progress" subsection with log-format example and library API sample.
  • Docs(specs): New specification docs/specs/indexing_progress_api.md covering the design, thread-safety, and knot-server integration sketch.
  • cargo fmt clean | cargo clippy --all-targets -- -D warnings clean
  • ✅ 854 unit tests passing.

Install knot 1.5.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.0/knot-installer.sh | sh

Download knot 1.5.0

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.4.13 — Python `super()` and Chained Attribute Resolution

Choose a tag to compare

@github-actions github-actions released this 28 Jun 19:27

Release Notes

  • Fix(python): super().__init__() calls inside subclasses now resolve to the parent class's __init__ instead of being misattributed to the enclosing class's own __init__ (or dropped when the parent was unindexed). Reported against LlamaFactory webui/chatter.py::WebChatModel.
  • Fix(python): Chained calls like engine.chatter.method(...) now resolve via a receiver-chain disambiguator that scores each candidate by how many receiver segments appear in its FQN, picking the unique winner and dropping ties (no guessing). Fixes the case where a homonymous module-level function in another file would otherwise swallow the call.
  • Feat(python): Python parser now emits ValueReference for chained attribute access used as a value (e.g. engine.chatter.loaded, load_btn.click(engine.chatter.load_model, ...)). Trailing identifier of every attribute node is captured, except when it is the function of a call (already a Call intent) or the object of a wider attribute chain (avoids duplicate intermediate segments).
  • Test(e2e): Added 6 E2E assertions in tests/run_python_e2e.sh covering super().__init__() parent resolution (CLI + MCP), self-misattribution guard, and the three chained-attribute patterns (chained call, chained property, method-as-value).
  • cargo fmt clean | cargo clippy --all-targets -- -D warnings clean
  • ✅ 827 unit tests passing.

Install knot 1.4.13

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.4.13/knot-installer.sh | sh

Download knot 1.4.13

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.4.12 — Python Constructor Call Resolution & Agent Skills Packaging

Choose a tag to compare

@github-actions github-actions released this 21 Jun 19:19

Release Notes

  • Feat(python): Automatically redirect class instantiation (ClassName(...)) to constructor (ClassName.__init__) in reference resolution, allowing find_callers to accurately list class instantiation sites as callers of __init__.
  • Chore(scripts): Packaged agent skills into .knot-agent-skills.sh installer and .tar.gz archive, replacing the previous python-based generation script.
  • Docs(specs): Added specification for Python constructor call resolution.
  • Docs: Updated knot repos agent skill documentation to include the --filter substring parameter.
  • cargo fmt clean | cargo clippy --all-targets -- -D warnings clean

Install knot 1.4.12

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.4.12/knot-installer.sh | sh

Download knot 1.4.12

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

v1.4.11 — list_repositories MCP Tool & CLI Filter

Choose a tag to compare

@github-actions github-actions released this 21 Jun 15:03

Release Notes

  • Feat(mcp): Added list_repositories MCP tool to list all indexed repositories with optional name filtering (TDQS-optimized description with sibling tool alternatives).
  • Feat(cli): Added --filter flag to knot repos for case-insensitive repository name filtering (substring match).
  • Test(e2e): Added 5 E2E tests for list_repositories covering CLI list, CLI filter, CLI no-match, MCP list, and MCP filter.
  • Docs(readme): Documented --filter flag and MCP tool in README.
  • cargo fmt clean | cargo clippy --all-targets -- -D warnings clean

Install knot 1.4.11

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.4.11/knot-installer.sh | sh

Download knot 1.4.11

File Platform Checksum
knot-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
knot-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum