Skip to content

v0.9.0 — agents can build their own index (indexRepo)

Choose a tag to compare

@phuongddx phuongddx released this 10 Sep 16:33
· 39 commits to main since this release
v0.9.0
8bac804

An AI agent pointed at an unindexed repo can now index it itself: the tenth MCP tool, indexRepo, spawns jarvis index as a detached child and reports progress through getIndexStatus until the poll loop terminates — in every failure mode, not just success.

Install

Claude Code plugin:

/plugin marketplace add jarvis-intelligence/jarvis-index
/plugin install jarvis@jarvis

Standalone (uv / uvx):

uvx --from 'jarvis-mcp>=0.9.0' jarvis-server

What changed

  • indexRepo (new tool). Takes a local git repo path, runs pre-flight checks, writes an on-disk launch record before spawning, then detaches. The child's stdout is DEVNULL — one inherited write would corrupt the live JSON-RPC session. semantic defaults to false so an agent call can never implicitly download a ~2 GB embedding model; pass semantic: true to opt in.
  • getIndexStatus now reports an indexing block (starting / running / failed-at-startup / abandoned) whose derivation reaps exited children for their true exit code, correlates attempts by timestamp (a stale failed row can no longer end a fresh run's poll loop), and ages out vanished launches. Every observation is terminal or progressing — callers' poll loops always exit.
  • Concurrency is now arbitrated. A per-slug flock build lock covers whole index runs and jarvis forget's entire teardown; a second writer (CLI, watch, or MCP) gets a clean "another index is already running" instead of racing registry rows and artifacts. The lock file itself is never unlinked — that is the classic detached-inode flock footgun.
  • Fixed: same-basename overwrite. Two repos named app at different paths both derived slug app; the second index silently overwrote the first's. A collision is now rejected naming both paths; a genuinely moved repo re-paths its row.
  • Fixed: missing-index errors are agent-actionable. IndexNotFoundError payloads carry recoveryTool: "indexRepo" with or without a registry row — the row-less case is exactly what an agent hits first.
  • New --no-semantic CLI flag mirrors the tool default (tri-state, per-run, not persisted).

Upgrade

Nothing required. Existing installs keep working; uv tool upgrade jarvis-mcp picks this up when convenient. The searchCode/navigation tool contracts are unchanged; getIndexStatus responses gain an optional indexing key.

See CHANGELOG.md.