Implements list_files() via workspace file discovery, delete() via
semtools workspace prune, and enriches status() with root_dir and
total_documents from 'semtools workspace status --json'.
retrieve() intentionally left as no-op default — semtools uses
embeddings, not chunked content storage.
All 6 agent tools now route through plugin dispatch for both default
and semtools backends with zero tool-layer changes.
Also fix pyproject.toml merge: include both tui_gateway and workspace
packages.
Adds a workspace indexer plugin backed by @llamaindex/semtools, a Rust
CLI that does semantic search via model2vec. The plugin auto-installs
semtools on first use and delegates indexing to semtools' lazy approach
(embed-on-search). Includes 23 tests covering subclass contract, plugin
discovery, factory integration, CLI invocation, result parsing, filtering,
error handling, and edge cases.
- Remove `from __future__ import annotations` from all new workspace files
- Convert TYPE_CHECKING imports to real imports in base.py (no circular deps)
- Quote self-referential forward ref in config.py model_validator
- Add null checks on spec.loader in plugin discovery to satisfy ty