Skip to content

Commit a901cc9

Browse files
feat: v0.3.0 — workspaces, auto-sync hooks, graph intelligence (#76)
* feat: proactive context enrichment via Claude Code hooks Add PreToolUse and PostToolUse hooks that fire automatically during agent sessions. PreToolUse enriches every Grep/Glob call with graph context (symbols, importers, dependencies, git signals) at ~24ms latency. PostToolUse detects git commits and notifies the agent when the wiki is stale. - New `repowise augment` CLI command (hook entry point) - `install_claude_code_hooks()` in mcp_config.py (idempotent) - `repowise init` now registers hooks alongside MCP server - README, User Guide, Quickstart, and Changelog updated * feat: symbol-level dependency graph with call extraction and 3-tier resolution - Add symbol nodes (function, class, method, etc.) alongside file nodes in the dependency graph - Extract call sites from tree-sitter AST for all 7 supported languages (Python, TS, JS, Go, Rust, Java, C++) - Implement 3-tier call resolution: same-file (0.95), import-scoped (0.85-0.93), global unique (0.50) - Add CallResolver module for standalone, testable call resolution logic - Add DEFINES, HAS_METHOD, and CALLS edge types with confidence scoring - Isolate file-level metrics (PageRank, betweenness, SCC) to file subgraph to avoid symbol pollution - Update persistence layer: symbol columns on graph_nodes, confidence on graph_edges, typed unique constraint - Add Alembic migration 0015 for schema changes * feat: named binding resolution with alias tracking and barrel re-export following - Add NamedBinding dataclass tracking local_name, exported_name, source_file, is_module_alias per import - Extract aliases for Python, TS/JS, Go, Rust, Java via per-language _extract_import_bindings() - Populate Import.resolved_file during GraphBuilder.build() for per-import file association - Fix CallResolver._build_indices mapping names to wrong files on multi-import files - Add barrel re-export following (one-hop) for __init__.py and index.ts patterns - Upgrade call resolution with alias-aware lookups and dedicated module_aliases tracking - Update architecture docs, changelog, and README * feat: heritage extraction and resolution for class inheritance graphs Add multi-language heritage (extends/implements/trait_impl) extraction from AST class definitions using a dispatch table pattern across 11 languages. Standalone HeritageResolver with 3-tier resolution (same-file, import-scoped, global unique) integrated into the graph build pipeline. * feat: leiden community detection and execution flow tracing Upgrade community detection from Louvain to Leiden (graspologic) with automatic fallback. Add file-level and symbol-level community detection with oversized splitting, cohesion scoring, and heuristic labeling. Add execution flow tracing with 5-signal entry point scoring and BFS call-path discovery with cross-community classification. * feat: graph query MCP tools and read-side persistence layer Add 4 new MCP tools for graph intelligence queries: - get_callers_callees: symbol call graph navigation with heritage support - get_community: architectural community exploration with cohesion scoring - get_graph_metrics: PageRank, betweenness, percentiles for files/symbols - get_execution_flows: entry point scoring with BFS call-path tracing Add 8 read-side CRUD functions for graph queries (previously zero existed). Persist entry point scores in community_meta_json for fast retrieval. Add composite DB indexes for performant graph lookups (migration 0017). Enrich existing tools: community summary in get_overview, community block in get_context, edge-type differentiated arrows in get_architecture_diagram. * feat: graph intelligence REST API, web UI enhancements, and documentation Add 5 REST API endpoints exposing graph intelligence to the web UI: - /communities — list all with labels, cohesion, member counts - /communities/{id} — detail with members, neighbors, cross-edge counts - /metrics — PageRank/betweenness percentiles for any file or symbol - /callers-callees — symbol call graph with heritage support - /execution-flows — entry point scoring with BFS call-path traces Web UI enhancements across 4 pages: - Overview: expandable community list with inline detail, execution flows panel with call trace visualization - Docs: collapsible graph intelligence sidebar with percentile bars, community label, degree counts - Symbols: two-panel drawer with graph metrics, callers/callees, class heritage (extends/implements) - Graph: real community labels in legend, community detail panel on node click, URL param support for colorMode deep-linking - Wiki: graph intelligence section in right sidebar Extract shared BFS trace utility for reuse between MCP tools and REST router. Add Pydantic schemas and TypeScript types for all new endpoints. Update all documentation. * feat: web UI quality improvements, core ingestion hardening, and MCP enhancements Web UI: - Fix symbols page not loading on sidebar navigation (replace useSWR accumulator with useSWRInfinite for reliable client-side nav) - Add importance-based symbol sorting using graph pagerank scores - Graph: node sizing by importance, wider edge strokes with hover tooltips, in-graph fuzzy search, execution flow trace highlighting - Responsive tables: progressive column hiding on mobile for symbols, hotspots, dead-code, and findings tables - Fix graph page height overflow (h-screen → h-full) - New visualizations: risk distribution chart (hotspots page), contributor network graph (ownership page), dependency heatmap (overview page) - Page transition animations via Framer Motion - Improved loading skeletons matching actual content layout - Community panel responsive width (full on mobile, 360px on desktop) Core: - Harden community detection with improved cohesion scoring - Execution flow tracing refinements - Call resolver and heritage resolver robustness improvements - Language data registry extraction for parser - Graph ingestion quality fixes Server: - MCP tool enhancements: richer context, overview, and answer tools - Graph utils improvements for community and metric queries - Chat tools refinements Tests: - Update integration and unit tests for new functionality * fix: MCP tool quality issues — risk summary, test gaps, dead code metadata, context resolution - Fix duplicated "bug-prone, bug-prone" in risk_summary by using distinct label "fix-heavy" for change_pattern when commits are fix-dominated - Exclude test files from test_gaps in both per-file risk and PR blast radius - Enrich zombie package dead code findings with aggregated git metadata (last_commit_at, primary_owner, age_days) instead of hardcoded nulls - Support directory paths in get_context by normalising trailing slashes and improving fuzzy suggestions to list files within the directory - Return explicit null/empty for callers, callees, metrics, community when they can't resolve, instead of silently dropping from response * feat: multi-repo workspace support — detection, config, update, watch Phase 1: Workspace detection and configuration - scan_for_repos() walks directory trees to find git repos - WorkspaceConfig/RepoEntry with YAML persistence - repowise init auto-detects multi-repo directories - Interactive repo selection and primary repo picker - --all flag for non-interactive workspace init Phase 1.5: Workspace-aware update mechanism - Staleness detection via git commit comparison - repowise update --workspace with parallel updates (Semaphore(4)) - repowise update --repo <alias> for single-repo targeting - repowise watch --workspace with per-repo debounce timers - repowise status --workspace shows commit staleness and timestamps - Cross-repo hooks placeholder for Phase 3/4 Single-repo usage is completely unchanged. 73 new tests, 738 total passing. * feat: improved init command UX — pre-scan, grouped advanced config, live insights - Add fast repo pre-scan before mode selection showing file count, languages, and commit count so users can make informed configuration choices - Revamp advanced config (mode 3) into grouped sections (Scope, Exclude, Git Analysis, Generation, Editor Integration) with contextual hints and smart defaults based on repo size - Add missing advanced options: embedder selection, submodule toggle, CLAUDE.md toggle - Support comma-separated exclude patterns with large directory suggestions - Emit richer pipeline insight messages after each sub-phase (symbols, graph stats, hotspots, dead code, decisions) with consistent formatting - Add "Analysis Complete" interstitial panel between analysis and generation - Make completion panel next steps contextual based on findings - Add docs/multi-repo/ to gitignore * feat: workspace-aware MCP server — multi-repo routing, federated queries RepoRegistry with lazy loading and LRU eviction manages per-repo database contexts. All 16 MCP tools route to the correct repo via the repo parameter. Workspace is auto-detected from the repo path on MCP startup. - RepoContext bundles session_factory, FTS, vector stores per repo - repo="all" for get_overview, search_codebase, get_why, get_dead_code - get_overview appends workspace footer with available repo aliases - Single-repo mode completely unchanged (zero regression) - 761 unit tests passing * feat: cross-repo intelligence — co-change detection, manifest scanning, MCP enrichment Phase 3 of multi-repo workspace support. Adds cross-repo signals that run during `repowise update --workspace` and silently enrich MCP tool responses at query time. Core analysis (workspace/cross_repo.py): - Git log mining across repos to detect files committed by the same author within a 24-hour window (temporal decay, same TAU as intra-repo) - Manifest scanning for local path references (package.json, pyproject.toml, Cargo.toml, go.mod) - JSON persistence in .repowise-workspace/cross_repo_edges.json MCP enrichment (_enrichment.py): - CrossRepoEnricher loaded once at MCP lifespan start with O(1) lookups - get_overview: workspace footer shows cross-repo topology - get_context: files show cross-repo co-change partners - get_risk: cross-repo blast radius + boosted dependents count - get_dead_code: confidence reduced for findings with cross-repo consumers No new DB tables or alembic migrations. 32 new tests, 793 total passing. * feat: contract extraction — HTTP routes, gRPC services, message topics, cross-repo matching Add API contract detection to the multi-repo workspace system. Source files are scanned for route handlers, gRPC registrations, and message broker patterns, then providers are matched to consumers across repos. Extractors: Express/FastAPI/Spring/Laravel/Go HTTP routes, proto+language gRPC patterns, Kafka/RabbitMQ/NATS topics. Matching uses exact normalized contract IDs with HTTP method wildcards and gRPC service wildcards. Results persisted as .repowise-workspace/contracts.json and surfaced via CrossRepoEnricher in get_overview, get_context, and get_risk tool responses. WorkspaceConfig extended with ContractConfig for toggling extractors and declaring manual cross-repo links. * feat: workspace web UI — REST endpoints, dashboard, contracts view, co-changes view Server: - Workspace detection in REST server lifespan (mirrors MCP layer) - New /api/workspace endpoint for mode detection and summary stats - New /api/workspace/contracts with type/repo/role filtering - New /api/workspace/co-changes with repo and strength filtering - Shared CrossRepoEnricher between REST and MCP (same JSON files) Web UI: - Workspace nav section in sidebar, mobile nav, and command palette - /workspace dashboard: aggregate stats, repo cards, cross-repo intelligence - /workspace/contracts: filterable contracts and matched links tables - /workspace/co-changes: co-change pairs with strength visualization - Auto-redirect to /workspace when in workspace mode with multiple repos - Single-repo mode unchanged — workspace features hidden entirely 17 new server tests, 886 total unit tests passing. * feat: workspace CLI commands, workspace CLAUDE.md, and multi-repo bugfixes Phase 6 — workspace management CLI: - `repowise workspace list` — show all repos with status, files, symbols - `repowise workspace add <path>` — add repo with optional --index - `repowise workspace remove <alias>` — remove from config (preserves data) - `repowise workspace scan` — discover new repos not yet in config - `repowise workspace set-default <alias>` — change primary repo Phase 6 — workspace-level CLAUDE.md: - WorkspaceClaudeMdGenerator writes to <workspace>/.claude/CLAUDE.md - Includes cross-repo contracts, co-changes, package deps, per-repo summaries - `generate-claude-md --workspace` flag for CLI Bugfixes across Phases 1-5 (23 issues): - Fix path-prefix check using relative_to instead of string startswith - Fix background VS task racing with LRU eviction (task cancellation) - Fix co-change symmetric duplicate edges (canonical key ordering) - Fix same-repo contract filter (simplified equality check) - Fix proto comment braces breaking depth parser (comment-aware counter) - Fix Go HandleFunc wildcard providers never matching (reverse lookup) - Fix UI crash on null data?.co_changes.length - Fix enricher bare key access (try/except + .get fallbacks) - Fix empty repos IndexError in registry - Fix LRU eviction cap bypass (count only evictable contexts) - Fix template literal ${expr} not normalized in HTTP paths - Fix Spring multi-class @RequestMapping prefix per match - Fix NATS patterns too broad (require variable name prefix) - Fix os.listdir PermissionError in service boundary detection - Fix falsy-zero dropping offset=0 in API client - Fix unmatchedCount keyed on file instead of contract_id - Fix workspace redirect gated on repoList.length - Fix broken repo card link when repoId is empty - Fix scanner symlink/resolve errors - Fix config from_dict with missing required fields - Fix private attr access with getattr fallbacks - Fix Windows path name extraction using Path.name - Fix enricher log placement * feat: multi-DB workspace serving, per-repo stats, and init job records Server changes: - Detect workspace before engine creation; use primary repo's DB as main DB instead of global ~/.repowise/wiki.db to avoid stale repo pollution - Create per-repo async engines for all workspace repos at startup - Route get_db_session to correct DB based on repo_id (path or query param) - Aggregate repos from all workspace DBs in list_repos endpoint - Add per-repo stats (file_count, symbol_count, page_count, doc_coverage, hotspot_count, repo_id) to WorkspaceRepoEntry via raw sqlite3 queries - Dispose workspace engines on shutdown Web UI changes: - Workspace dashboard uses embedded per-repo stats directly instead of listRepos() + matching (which only found repos in the main DB) - All workspace repos now show with correct stats and clickable links CLI changes: - Write completed GenerationJob record during init persist so web UI shows "last synced" timestamp instead of "never" - Scanner fix: root with .git walks for sub-repos before deciding mode - MaybeCountColumn for progress bars with unknown totals - Workspace init: mode/provider selection, per-repo generation, cross-repo analysis, debug log suppression Also adds .repowise-workspace/ and .repowise-workspace.yaml to .gitignore * feat: enrich doc generation with graph intelligence, fix decision pipeline, improve frontend docs UX Phase A — Doc generation now feeds symbol call graphs, heritage chains, community metadata, and execution flows into wiki page templates. Fixed git_meta not being passed during initial generation (depth auto-upgrade for hotspots now fires). Module pages receive file summaries instead of bare paths. Repo overview includes architectural communities and primary execution flows. Phase B — Removed decisions from CLAUDE.md (keep it short). Fixed JSON substring filtering bug in list_decisions (tag "api" no longer matches "rapid"). Added cross-source deduplication in bulk_upsert_decisions so the same decision from inline_marker and git_archaeology merges into one record. Phase C — Replaced ChatMarkdown with WikiMarkdown in docs explorer for Mermaid + syntax highlighting support. Added version history browser with LCS-based inline diff view. Decision detail fields now render as markdown. Fixed ToC anchor IDs (headings get slugified id attributes matching ToC links). Added deep-linking to docs tree selection via URL search params. Surface hallucination warnings from LLM validation as amber banners. Fixed Mermaid runtime error (CSS variable in theme config). Reduced hallucination validator false positives (skip CLI commands, paths, constants, decorator names, import bindings). Updated packages/web and packages/server READMEs. * feat: auto-sync hooks, polling scheduler, workspace update, and job executor improvements Add post-commit git hook management via `repowise hook install/status/ uninstall` CLI commands. Init now offers to install the hook automatically. Update command gains --workspace and --repo flags for workspace-aware incremental updates. Server-side: refactored scheduler to use polling fallback (compares git HEAD against state.json, auto-syncs diverged repos). Job executor gains proper sync job handling with incremental page regeneration. Webhook handler launches background sync jobs. Cross-repo enrichment expanded. Dashboard quick-actions updated. AUTO_SYNC and WORKSPACES docs added. * docs: update README, changelog, quickstart, user guide, and add CLI/MCP reference docs - README: add workspaces section, auto-sync section, workspace dashboard entries, multi-repo row in comparison table, docs links footer, split quickstart into single-repo and workspace modes - CHANGELOG: rewrite Unreleased as v0.3.0 with workspace features, auto-sync hooks, graph intelligence, web UI updates, and improved init UX - QUICKSTART: add workspace quickstart, hook install, links to new docs - USER_GUIDE: add workspace/hook CLI commands, workspace web UI pages, auto-sync section, workspace workflow, fix MCP tool count to 7 registered tools - New docs/CLI_REFERENCE.md: standalone CLI reference for all commands - New docs/MCP_TOOLS.md: standalone MCP tools reference with parameters and examples - Fix dead code analysis, decision extractor, contracts, cross-repo, and MCP tool improvements * chore: bump version to 0.3.0 Bump all version strings (pyproject.toml, core, cli, server, web) and set changelog release date to 2026-04-13. Add missing packages to setuptools: workspace, workspace.extractors, ingestion.dynamic_hints.
1 parent baa4a8a commit a901cc9

187 files changed

Lines changed: 26185 additions & 1334 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ next-env.d.ts
8080
# repowise runtime data
8181
.repowise/
8282
!.repowise/mcp.json.example
83+
.repowise-workspace/
84+
.repowise-workspace.yaml
8385

8486
# Database
8587
*.db
@@ -111,3 +113,11 @@ ehthumbs.db
111113

112114
# Claude Code
113115
.claude/
116+
117+
# repowise API keys (local)
118+
.repowise/.env
119+
120+
# Internal docs (not for distribution)
121+
docs/COMPETITIVE_ANALYSIS.md
122+
docs/GRAPH_INTELLIGENCE_UPGRADE.md
123+
docs/multi-repo/

README.md

Lines changed: 165 additions & 30 deletions
Large diffs are not rendered by default.

docs/AUTO_SYNC.md

Lines changed: 62 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,50 +13,47 @@ method that fits your setup.
1313

1414
---
1515

16-
## 1. Post-Commit Git Hook
16+
## 1. Post-Commit Git Hook (Recommended)
1717

1818
Runs `repowise update` in the background after every local commit. Your
19-
terminal is never blocked.
19+
terminal is never blocked. This is the recommended auto-sync method for
20+
local development.
2021

2122
### Setup
2223

24+
`repowise init` will offer to install the hook automatically at the end
25+
of the setup wizard. You can also install or manage it manually:
26+
2327
```bash
24-
cat > .git/hooks/post-commit << 'EOF'
25-
#!/bin/sh
26-
echo "[repowise] Triggering wiki update..."
27-
(
28-
cd "$(git rev-parse --show-toplevel)" || exit 1
29-
repowise update > /tmp/repowise-update.log 2>&1
30-
) &
31-
exit 0
32-
EOF
33-
chmod +x .git/hooks/post-commit
28+
repowise hook install # install for current repo
29+
repowise hook install --workspace # install for all workspace repos
30+
repowise hook status # check if installed
31+
repowise hook uninstall # remove the hook
3432
```
3533

36-
> **Windows (Git Bash):** If `repowise` isn't on your bash PATH (e.g. installed
37-
> via `uv`), replace the `repowise update` line with:
38-
> ```bash
39-
> powershell.exe -Command "uv run repowise update" > /tmp/repowise-update.log 2>&1
40-
> ```
34+
The hook is marker-delimited, so it safely coexists with other tools'
35+
hooks (linters, formatters, etc.) in the same `post-commit` file.
4136

4237
### What happens
4338

4439
1. You run `git commit`
45-
2. The hook fires in the background
40+
2. The hook fires in the background (non-blocking)
4641
3. `repowise update` diffs the new commit against the last synced commit
4742
4. Only affected pages are regenerated (typically 3-10 for a small commit)
48-
5. Output is logged to `/tmp/repowise-update.log`
43+
5. Graph, git stats, dead code, and decisions are also refreshed
4944

50-
### Check the last run
45+
### Check hook status
5146

5247
```bash
53-
cat /tmp/repowise-update.log
48+
repowise hook status
49+
repowise hook status --workspace # check all repos in workspace
5450
```
5551

5652
### Remove the hook
5753

5854
```bash
59-
rm .git/hooks/post-commit
55+
repowise hook uninstall
56+
repowise hook uninstall --workspace
6057
```
6158

6259
---
@@ -170,20 +167,50 @@ with `repowise serve`.
170167

171168
---
172169

173-
## How Incremental Updates Work
170+
## How Updates Work
171+
172+
There are two update paths, depending on the trigger:
174173

175-
Regardless of which trigger method you use, the update process is the same:
174+
### CLI incremental update (`repowise update`)
176175

177176
1. **Diff** -- compare the new HEAD against the last synced commit
178-
2. **Detect affected pages** -- find directly changed files, then cascade to
179-
files that import them (1-hop), capped at 30 pages per run
180-
3. **Regenerate** -- call the LLM only for affected pages
181-
4. **Persist** -- update the database and search index
182-
5. **Save state** -- record the new HEAD as the last synced commit
177+
2. **Full graph rebuild** -- re-traverse and re-parse all files to rebuild
178+
the dependency graph (needed for cascade analysis)
179+
3. **Incremental git re-index** -- re-index git metadata only for changed files,
180+
then recompute percentiles across the whole repo
181+
4. **Dead code analysis** -- run partial dead code detection on changed files
182+
and their graph neighbors
183+
5. **Decision re-scan** -- re-scan changed files for inline decision markers
184+
6. **Detect affected pages** -- find directly changed files, cascade to 1-hop
185+
importers, capped by an adaptive budget (auto-scaled based on change size)
186+
7. **Regenerate** -- call the LLM only for affected pages
187+
8. **Cross-repo hooks** -- if the repo is part of a workspace, re-run cross-repo
188+
co-change and contract analysis
189+
9. **Persist** -- update the database, search index, and record a GenerationJob
190+
10. **Save state** -- record the new HEAD as the last synced commit
183191

184192
A typical single-commit update touches 3-10 pages and completes in under a
185193
minute.
186194

195+
### Server sync (`POST /api/repos/{id}/sync`)
196+
197+
1. **Full re-traverse** -- re-parse all files and rebuild the dependency graph
198+
2. **Full git re-index** -- re-index git metadata for all files
199+
3. **Dead code analysis** -- full dead code scan
200+
4. **Decision extraction** -- full decision marker scan
201+
5. **Persist** -- update the database
202+
6. **Save state** -- record the new HEAD
203+
204+
Server sync does **not** regenerate wiki pages (no LLM cost). Use
205+
**Full Re-index** (`POST /api/repos/{id}/full-resync`) to also regenerate
206+
all wiki pages.
207+
208+
### Workspace updates (`repowise update --workspace`)
209+
210+
Updates all stale repos in parallel (up to 4 concurrent), then re-runs
211+
cross-repo analysis (co-changes, package dependencies, API contracts).
212+
Use `--repo <alias>` to target a single repo within the workspace.
213+
187214
### Dry run
188215

189216
To see what would be updated without actually regenerating:
@@ -195,9 +222,12 @@ repowise update --dry-run
195222
### Manual update
196223

197224
```bash
198-
repowise update # diff since last sync
199-
repowise update --since abc123 # diff from a specific commit
200-
repowise update --cascade-budget 50 # allow more cascade pages (default: 30)
225+
repowise update # diff since last sync
226+
repowise update --since abc123 # diff from a specific commit
227+
repowise update --cascade-budget 50 # allow more cascade pages (default: auto)
228+
repowise update --workspace # update all stale workspace repos
229+
repowise update --repo backend # update a specific workspace repo
230+
repowise watch --workspace # auto-update all workspace repos on file change
201231
```
202232

203233
---

docs/CHANGELOG.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
---
1111

12+
## [0.3.0] — 2026-04-13
13+
14+
### Added
15+
16+
#### Multi-repo workspaces
17+
- **Workspace support**`repowise init .` from a parent directory scans for git repos (up to 3 levels deep), prompts for selection, and indexes each repo with cross-repo analysis. Config stored in `.repowise-workspace.yaml`.
18+
- **Workspace CLI commands**`repowise workspace list`, `workspace add <path>`, `workspace remove <alias>`, `workspace scan`, `workspace set-default <alias>` for managing repos in a workspace.
19+
- **Workspace-aware MCP server** — a single MCP server instance serves all workspace repos. Tools accept an optional `repo` parameter to target a specific repo or `"all"` to query across the workspace. Lazy-loading with LRU eviction (max 5 repos loaded simultaneously).
20+
- **Cross-repo co-change detection** — analyzes git history across repos to find files that frequently change in the same time window.
21+
- **API contract extraction** — scans for HTTP route handlers (Express, FastAPI, Spring, Go), gRPC service definitions, and message topic publishers/subscribers. Matches providers with consumers across repos.
22+
- **Package dependency scanning** — reads package manifests (`package.json`, `pyproject.toml`, `go.mod`, `pom.xml`) to detect inter-repo package dependencies.
23+
- **Workspace CLAUDE.md** — auto-generated context file at the workspace root covering all repos, their relationships, cross-repo signals, and contract links.
24+
- **Workspace web UI** — workspace dashboard (`/workspace`) with aggregate stats and repo cards, contracts view (`/workspace/contracts`) with provider/consumer matching, and co-changes view (`/workspace/co-changes`) with cross-repo file pairs ranked by strength.
25+
- **Workspace update**`repowise update --workspace` updates all stale repos in parallel (up to 4 concurrent) then re-runs cross-repo analysis. `--repo <alias>` targets a single repo.
26+
- **Workspace watch**`repowise watch --workspace` auto-updates all workspace repos on file change.
27+
28+
#### Auto-sync hooks
29+
- **`repowise hook` CLI**`repowise hook install` installs a marker-delimited post-commit git hook that runs `repowise update` in the background after every commit. `hook install --workspace` installs for all workspace repos. `hook status` and `hook uninstall` for management.
30+
- **Proactive context enrichment via Claude Code hooks**`repowise init` registers PreToolUse and PostToolUse hooks in `~/.claude/settings.json`. PreToolUse enriches every `Grep`/`Glob` call with graph context (importers, dependencies, symbols, git signals) at ~24ms latency. PostToolUse detects git commits and notifies the agent when the wiki is stale.
31+
- **Polling scheduler** — when the server is running, a background job polls registered repositories every 15 minutes and triggers updates for new commits missed by webhooks.
32+
33+
#### Graph intelligence
34+
- **Symbol-level dependency graph** — the dependency graph is now two-tier: file nodes for module-level relationships and symbol nodes (functions, classes, methods) for fine-grained call resolution. Call edges carry confidence scores (0.0–1.0).
35+
- **3-tier call resolution** — Tier 1: same-file targets (confidence 0.95). Tier 2: import-scoped targets via named bindings (0.85–0.93). Tier 3: global unique match (0.50). Extracted by tree-sitter for Python, TypeScript, JavaScript, Go, Rust, Java, and C++.
36+
- **Named binding resolution** — tracks import aliases, barrel re-exports (`__init__.py`, `index.ts`), and namespace imports across all 7 full-tier languages.
37+
- **Heritage extraction** — class inheritance and interface implementation for 11 languages (Python, TypeScript, JavaScript, Java, Go, Rust, C++, Kotlin, Ruby, C#, C) with `extends`/`implements` graph edges.
38+
- **Leiden community detection** — two-level community detection (file communities from import edges, symbol communities from call/heritage edges) with cohesion scoring and heuristic labeling. Falls back to NetworkX Louvain when graspologic is unavailable.
39+
- **Execution flow tracing** — 5-signal entry point scoring (fan-out ratio, in-degree, visibility, name pattern, framework hint) with BFS call-path discovery and cross-community classification.
40+
- **Graph query indexes** (migration `0017`) — composite indexes for sub-millisecond graph queries.
41+
42+
#### Web UI
43+
- **Graph Intelligence on Overview** — expandable community list (labels, cohesion, member counts) and execution flows panel with call-path traces on the overview dashboard.
44+
- **Wiki sidebar** — new collapsible section showing PageRank and betweenness percentile bars, community label, and in/out degree for the current file.
45+
- **Symbols drawer** — right panel with graph metrics, callers/callees (with confidence scores), and heritage (extends/implements) for class nodes.
46+
- **Graph page** — community color mode uses real community labels from Leiden detection. Clicking a node opens a community detail panel. Active color mode preserved as a URL parameter.
47+
- **Contributor network, hotspot, and ownership pages** — new dedicated pages for git intelligence.
48+
- **Docs viewer** — enriched with graph intelligence sidebar, version history, and improved markdown rendering.
49+
- **5 new graph REST API endpoints** — communities list, community detail, node metrics, callers/callees, and execution flows.
50+
51+
#### Other
52+
- **Improved init UX** — pre-scan phase shows repo size and language breakdown before confirming. Advanced config options grouped logically with live insights during indexing.
53+
- **Doc generation enriched with graph intelligence** — wiki page generation prompts now include community context, caller/callee information, and heritage relationships.
54+
55+
### Changed
56+
- **`get_overview`** now includes `community_summary` — top communities by size with labels and cohesion scores.
57+
- **`get_context`** now includes `community` block per file target with community ID and label (when `compact=False`). In workspace mode, enriched with cross-repo co-change and contract data.
58+
- **`get_risk`** enriched with cross-repo signals in workspace mode — co-change partners from other repos and contract dependencies.
59+
- **`search_codebase`** in workspace mode searches across all repos and merges results.
60+
- **Job executor** — improved progress tracking, concurrent run detection (HTTP 409), and crash recovery for stale running jobs on server startup.
61+
62+
---
63+
1264
## [0.2.3] — 2026-04-11
1365

1466
### Added
@@ -234,6 +286,8 @@ See git history for releases prior to 0.2.0.
234286

235287
---
236288

289+
[0.3.0]: https://github.com/repowise-dev/repowise/compare/v0.2.3...HEAD
290+
[0.2.3]: https://github.com/repowise-dev/repowise/compare/v0.2.2...v0.2.3
237291
[0.2.2]: https://github.com/repowise-dev/repowise/compare/v0.2.1...v0.2.2
238292
[0.2.1]: https://github.com/repowise-dev/repowise/compare/v0.2.0...v0.2.1
239293
[0.2.0]: https://github.com/repowise-dev/repowise/compare/v0.1.31...v0.2.0

0 commit comments

Comments
 (0)