Skip to main content

What's New

Recent additions to Travsr. For the longer-term plan, see the Roadmap.

travsr ask answers questions about Travsr, and elevated languages stop asking permission

  • travsr ask handles questions the graph cannot answer. "What is this repo written in?" used to match "repo" against symbol names and return a screen of hits that looked like an answer. Questions about Travsr itself, or about the repository as a whole, are now recognised before retrieval and answered in place; a repository-composition question runs lang list and an index question runs status. It is strict in one direction on purpose: anything the catalogue cannot fully account for still goes to retrieval, because a confident wrong answer to a code search is worse than a missed meta question. See travsr ask.
  • travsr ask --examples and --cmds. The first lists the question shapes Travsr can answer, filled in with the most depended-upon real symbols from your own index, so every line runs as printed. The second prints the whole command surface, subcommands included, grouped by what each is for. Both are checked against the CLI definition at test time, so neither can advertise a command that does not exist.
  • Elevated languages no longer ask for approval. Java, Kotlin, Scala, and C# required a per-user approval, an approver handle, a justification, and a host allowlist, before they could be installed. That gate is gone for local use and travsr lang approve is removed with it. The runtime isolation policy is byte-for-byte what it was; only the human approval moment went away. See Installation.
  • travsr connect writes MCP wiring only; the rules file is opt-in. The always-on rules block is re-read on every turn of every conversation, and it had grown to roughly 567 tokens per turn, competing with your own rules for attention. Most of it named which tool answers which kind of question, which the MCP client already sends: tools/list hands the model all 26 tool names and descriptions before the conversation starts. What remains ships behind travsr connect --rules. See travsr connect.
  • travsr lang list shows what you can act on. The PACKAGE column (npm names that no longer install anything) and the SANDBOX column (an internal tier) are replaced by a THIS REPO column that mirrors the per-repo gate exactly, so a language can no longer read "active" while full analysis is off for the repo in front of you. Installing a language inside a repo is itself the consent signal for that repo. See travsr lang.
  • Consent-gated unsandboxed analysis on Windows. Java (Gradle) and Scala (sbt) fork workers that cannot run inside the Windows isolation layer. travsr lang allow-unsandboxed <language> records a one-time, per-language, machine-local permission to run them with your own privileges instead; without it they are skipped honestly rather than producing a silent zero-node run. The child starts from a cleared environment, so GITHUB_TOKEN, AWS_*, SSH_*, and NPM_TOKEN never reach the build tool.
  • Live per-language progress during cross-file analysis. travsr init used to print Finalizing and then block with nothing on screen, so a JVM cold start looked like a hang. Each language now reports as it starts and finishes, with the timeout quoted only when something currently running is actually bounded.
  • Struct and class fields are addressable. Fields are now graph nodes in twelve languages, and a field read surfaces in find_references as a real path:line site on its own ref/field edge kind, so field use sites are visible without polluting the call graph that get_callers and get_blast_radius traverse.
  • travsr embed reindex --rebuild. Re-embeds the whole index from scratch, for use after switching models when older vectors may be inconsistent with newer ones.

Observability tools and a sidecar version contract

  • Three read-only observability MCP tools. The MCP surface could answer questions about your code but not about the index those answers came from, so an agent could not tell "there are no callers" from "the graph cannot see them yet". get_index_status reports freshness, counts, per-language Phase B state and semantic readiness; get_daemon_logs returns recent daemon entries, severity-filtered and redacted; get_graph_health reports ghost paths, orphan edges and lexical parity without ever mutating anything.
  • Sidecar version floors. Travsr spawns external binaries that version independently, and install correctness used to be judged by file presence alone, which never flips false when a better release ships. A cached sidecar three releases behind ran anyway and failed with a cryptic downstream error. There is now a hard, offline compatibility floor: a below-floor sidecar is refused at spawn with the reinstall command named, and travsr status, travsr embed status and travsr lang list all end with a sidecars: block showing what is installed. See Sidecar health.
  • Exact search mode for search_symbol. Narrow a noisy name to its exact matches instead of wading through fuzzy ones.

16-language coverage and get_snippets

  • get_snippets MCP tool. Kind-aware code retrieval that returns the source of matched symbols directly, so an agent can read implementations without a second round trip. This brings the core MCP query surface to 12 tools (21 in single-repo stdio, counting the synonym_* and repos_* management tools).
  • Swift, Objective-C, and Dart. Phase B semantic indexers shipped for Swift (travsr-swift-index-emitter), Objective-C (travsr-lang-objectivec, macOS only), and Dart (travsr-dart-index-emitter), bringing structural coverage to 16 languages.
  • Phase B plugin host. Every non-built-in language now runs through a sandboxed plugin host with a two-transport architecture (in-process native or external sidecar) and a per-language trust model. Install any of them with travsr lang install <lang>.

Dynamic synonyms and new sidebar panels

  • travsr synonym CLI. Add, remove, and list query-time synonym pairs from the terminal. Synonyms expand search terms at query time, searching billing also hits nodes tagged payment and invoice. See travsr synonym.
  • Synonyms panel. Manage synonym pairs visually in VS Code without touching the CLI. See Synonyms Panel.
  • Languages panel. Shows which languages are indexed in the current repo and lets you install language tools with one click. See Languages Panel.
  • Repos panel. Lists all repos in the Travsr registry with live active/stale badges and a one-click prune button. See Repos Panel.
  • Graph Stats panel. Shows node count, edge count, schema version, DB size, and last-indexed time at a glance. See Graph Stats.

Visual graph panel and get_graph_json

  • Visual graph panel. Open the Cytoscape.js graph panel from the command palette with Travsr: Show Graph (Cmd+Shift+G). It renders the live code graph for a symbol and lets you click through dependencies and callers. See VS Code features.
  • get_graph_json MCP tool. Returns a subgraph as raw node and edge JSON rather than token-budget-trimmed prose. It backs the graph panel and is useful for custom integrations and CI tooling. See the tool reference.

Language packages

Semantic analysis is now installable per language via travsr lang install <lang>. It adds call edges, type resolution, and cross-module references on top of the always-on Tree-sitter structural parsing.

  • Rust, TypeScript, JavaScript, and Python are built into the core binary and run automatically.
  • More languages ship as separate packages: Go, Ruby, PHP, C++, C, Java, Kotlin, C#, and Scala.

See Installation for the install steps and trust model, and travsr lang for the CLI reference.