codevira 1.6.0__tar.gz → 1.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. {codevira-1.6.0 → codevira-1.7.0}/CHANGELOG.md +196 -22
  2. codevira-1.7.0/PKG-INFO +585 -0
  3. codevira-1.7.0/README.md +546 -0
  4. codevira-1.7.0/codevira.egg-info/PKG-INFO +585 -0
  5. {codevira-1.6.0 → codevira-1.7.0}/codevira.egg-info/SOURCES.txt +2 -0
  6. {codevira-1.6.0 → codevira-1.7.0}/codevira.egg-info/requires.txt +2 -4
  7. {codevira-1.6.0/mcp_server/data → codevira-1.7.0}/config.example.yaml +5 -2
  8. {codevira-1.6.0 → codevira-1.7.0}/docs/roadmap.md +20 -13
  9. {codevira-1.6.0 → codevira-1.7.0}/indexer/chunker.py +0 -1
  10. {codevira-1.6.0 → codevira-1.7.0}/indexer/global_db.py +0 -11
  11. {codevira-1.6.0 → codevira-1.7.0}/indexer/graph_generator.py +36 -4
  12. {codevira-1.6.0 → codevira-1.7.0}/indexer/index_codebase.py +195 -67
  13. {codevira-1.6.0 → codevira-1.7.0}/indexer/outcome_tracker.py +0 -13
  14. {codevira-1.6.0 → codevira-1.7.0}/indexer/treesitter_parser.py +1 -4
  15. codevira-1.7.0/mcp_server/__init__.py +17 -0
  16. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/auto_init.py +1 -1
  17. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/cli.py +357 -16
  18. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/crash_logger.py +7 -2
  19. {codevira-1.6.0 → codevira-1.7.0/mcp_server/data}/config.example.yaml +5 -2
  20. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/http_server.py +73 -3
  21. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/ide_inject.py +46 -1
  22. codevira-1.7.0/mcp_server/log_retention.py +171 -0
  23. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/paths.py +2 -2
  24. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/server.py +144 -39
  25. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/tools/changesets.py +4 -2
  26. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/tools/code_reader.py +0 -1
  27. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/tools/graph.py +210 -71
  28. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/tools/learning.py +76 -70
  29. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/tools/playbook.py +1 -1
  30. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/tools/roadmap.py +32 -25
  31. codevira-1.7.0/mcp_server/tools/search.py +255 -0
  32. {codevira-1.6.0 → codevira-1.7.0}/pyproject.toml +11 -9
  33. {codevira-1.6.0 → codevira-1.7.0}/tests/test_cli.py +2 -2
  34. {codevira-1.6.0 → codevira-1.7.0}/tests/test_global_db.py +12 -70
  35. {codevira-1.6.0 → codevira-1.7.0}/tests/test_index_codebase.py +12 -13
  36. codevira-1.7.0/tests/test_log_retention.py +249 -0
  37. {codevira-1.6.0 → codevira-1.7.0}/tests/test_migrate.py +6 -3
  38. {codevira-1.6.0 → codevira-1.7.0}/tests/test_outcome_tracker.py +0 -31
  39. {codevira-1.6.0 → codevira-1.7.0}/tests/test_server.py +8 -8
  40. {codevira-1.6.0 → codevira-1.7.0}/tests/test_tools_changesets.py +2 -2
  41. {codevira-1.6.0 → codevira-1.7.0}/tests/test_tools_graph.py +55 -41
  42. {codevira-1.6.0 → codevira-1.7.0}/tests/test_tools_learning.py +20 -28
  43. {codevira-1.6.0 → codevira-1.7.0}/tests/test_tools_roadmap.py +2 -32
  44. {codevira-1.6.0 → codevira-1.7.0}/tests/test_tools_search.py +27 -36
  45. codevira-1.6.0/PKG-INFO +0 -477
  46. codevira-1.6.0/README.md +0 -436
  47. codevira-1.6.0/codevira.egg-info/PKG-INFO +0 -477
  48. codevira-1.6.0/mcp_server/__init__.py +0 -1
  49. codevira-1.6.0/mcp_server/tools/search.py +0 -145
  50. {codevira-1.6.0 → codevira-1.7.0}/LICENSE +0 -0
  51. {codevira-1.6.0 → codevira-1.7.0}/MANIFEST.in +0 -0
  52. {codevira-1.6.0 → codevira-1.7.0}/agents/builder.md +0 -0
  53. {codevira-1.6.0 → codevira-1.7.0}/agents/developer.md +0 -0
  54. {codevira-1.6.0 → codevira-1.7.0}/agents/documenter.md +0 -0
  55. {codevira-1.6.0 → codevira-1.7.0}/agents/orchestrator.md +0 -0
  56. {codevira-1.6.0 → codevira-1.7.0}/agents/planner.md +0 -0
  57. {codevira-1.6.0 → codevira-1.7.0}/agents/reviewer.md +0 -0
  58. {codevira-1.6.0 → codevira-1.7.0}/agents/tester.md +0 -0
  59. {codevira-1.6.0 → codevira-1.7.0}/codevira.egg-info/dependency_links.txt +0 -0
  60. {codevira-1.6.0 → codevira-1.7.0}/codevira.egg-info/entry_points.txt +0 -0
  61. {codevira-1.6.0 → codevira-1.7.0}/codevira.egg-info/top_level.txt +0 -0
  62. {codevira-1.6.0 → codevira-1.7.0}/docs/how-i-built-persistent-memory-for-ai-agents.md +0 -0
  63. {codevira-1.6.0 → codevira-1.7.0}/docs/linkedin-article-ai-agent-memory.md +0 -0
  64. {codevira-1.6.0 → codevira-1.7.0}/docs/linkedin-post-ai-agent-memory.md +0 -0
  65. {codevira-1.6.0 → codevira-1.7.0}/docs/medium-your-ai-coding-agent-has-amnesia.md +0 -0
  66. {codevira-1.6.0 → codevira-1.7.0}/graph/_schema.yaml +0 -0
  67. {codevira-1.6.0 → codevira-1.7.0}/indexer/__init__.py +0 -0
  68. {codevira-1.6.0 → codevira-1.7.0}/indexer/rule_learner.py +0 -0
  69. {codevira-1.6.0 → codevira-1.7.0}/indexer/sqlite_graph.py +0 -0
  70. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/__main__.py +0 -0
  71. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/__init__.py +0 -0
  72. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/agents/builder.md +0 -0
  73. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/agents/developer.md +0 -0
  74. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/agents/documenter.md +0 -0
  75. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/agents/orchestrator.md +0 -0
  76. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/agents/planner.md +0 -0
  77. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/agents/reviewer.md +0 -0
  78. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/agents/tester.md +0 -0
  79. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/coding-standards.md +0 -0
  80. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/engineering-excellence.md +0 -0
  81. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/git-cicd-governance.md +0 -0
  82. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/git_commits.md +0 -0
  83. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/incremental-updates.md +0 -0
  84. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/master_rule.md +0 -0
  85. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/multi-language.md +0 -0
  86. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/persistence.md +0 -0
  87. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/resilience-observability.md +0 -0
  88. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/smoke-testing.md +0 -0
  89. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/data/rules/testing-standards.md +0 -0
  90. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/detect.py +0 -0
  91. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/gitignore.py +0 -0
  92. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/global_sync.py +0 -0
  93. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/launchd.py +0 -0
  94. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/migrate.py +0 -0
  95. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/prompts.py +0 -0
  96. {codevira-1.6.0 → codevira-1.7.0}/mcp_server/tools/__init__.py +0 -0
  97. {codevira-1.6.0 → codevira-1.7.0}/rules/coding-standards.md +0 -0
  98. {codevira-1.6.0 → codevira-1.7.0}/rules/engineering-excellence.md +0 -0
  99. {codevira-1.6.0 → codevira-1.7.0}/rules/git-cicd-governance.md +0 -0
  100. {codevira-1.6.0 → codevira-1.7.0}/rules/git_commits.md +0 -0
  101. {codevira-1.6.0 → codevira-1.7.0}/rules/incremental-updates.md +0 -0
  102. {codevira-1.6.0 → codevira-1.7.0}/rules/master_rule.md +0 -0
  103. {codevira-1.6.0 → codevira-1.7.0}/rules/persistence.md +0 -0
  104. {codevira-1.6.0 → codevira-1.7.0}/rules/resilience-observability.md +0 -0
  105. {codevira-1.6.0 → codevira-1.7.0}/rules/smoke-testing.md +0 -0
  106. {codevira-1.6.0 → codevira-1.7.0}/rules/testing-standards.md +0 -0
  107. {codevira-1.6.0 → codevira-1.7.0}/setup.cfg +0 -0
  108. {codevira-1.6.0 → codevira-1.7.0}/tests/test_auto_init.py +0 -0
  109. {codevira-1.6.0 → codevira-1.7.0}/tests/test_chunker.py +0 -0
  110. {codevira-1.6.0 → codevira-1.7.0}/tests/test_crash_logger.py +0 -0
  111. {codevira-1.6.0 → codevira-1.7.0}/tests/test_detect.py +0 -0
  112. {codevira-1.6.0 → codevira-1.7.0}/tests/test_gitignore.py +0 -0
  113. {codevira-1.6.0 → codevira-1.7.0}/tests/test_global_sync.py +0 -0
  114. {codevira-1.6.0 → codevira-1.7.0}/tests/test_graph_generator.py +0 -0
  115. {codevira-1.6.0 → codevira-1.7.0}/tests/test_http_server.py +0 -0
  116. {codevira-1.6.0 → codevira-1.7.0}/tests/test_ide_inject.py +0 -0
  117. {codevira-1.6.0 → codevira-1.7.0}/tests/test_launchd.py +0 -0
  118. {codevira-1.6.0 → codevira-1.7.0}/tests/test_paths.py +0 -0
  119. {codevira-1.6.0 → codevira-1.7.0}/tests/test_prompts.py +0 -0
  120. {codevira-1.6.0 → codevira-1.7.0}/tests/test_rule_learner.py +0 -0
  121. {codevira-1.6.0 → codevira-1.7.0}/tests/test_sqlite_graph.py +0 -0
  122. {codevira-1.6.0 → codevira-1.7.0}/tests/test_tools_code_reader.py +0 -0
  123. {codevira-1.6.0 → codevira-1.7.0}/tests/test_tools_playbook.py +0 -0
  124. {codevira-1.6.0 → codevira-1.7.0}/tests/test_treesitter_parser.py +0 -0
@@ -11,32 +11,206 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
- ### Performance
15
- - **`get_data_dir()` caching**: Result cached per project root in `_data_dir_cache`.
16
- First call runs the full resolution chain (subprocess + metadata scan); all
17
- subsequent calls for the same root are O(1) dict lookups with zero I/O.
18
- - **`set_project_dir()` cache invalidation**: Changing the project root now clears
19
- the data-dir cache so subsequent `get_data_dir()` calls resolve correctly.
14
+ ---
15
+
16
+ ## [1.7.0] 2026-04-18 Token Efficiency & AI-First Tool Design
17
+
18
+ **The biggest release since v1.0.** We realized Codevira was dumping 15k-60k
19
+ tokens per session into AI agent context windows — defeating the entire
20
+ "92% token reduction" value prop. This release redesigns tool responses
21
+ around what agents actually need, not what the database can return.
22
+
23
+ ### Changed — Dependency model
24
+ - **`chromadb` + `sentence-transformers` now required** (was `[search]` extra).
25
+ `pip install codevira` installs all 36 MCP tools out of the box.
26
+ Trade-off: ~500MB install (ML runtime) vs. ~50MB. Eliminates the
27
+ "why doesn't semantic search work?" confusion.
28
+ - **`[search]` extra kept as no-op alias** for backwards compatibility.
29
+
30
+ ### Changed — Token-efficient tool responses (the big one)
31
+
32
+ Every high-traffic tool now returns a **summary by default**, with opt-in
33
+ full data. On a 500-node project, a single agent session went from ~60k
34
+ tokens to ~5k.
35
+
36
+ - **`get_session_context`**: Compacted ~4k → ~800 tokens. Dropped
37
+ `global_intelligence`/`indexing_progress` (admin data, not session data).
38
+ Truncated decision/summary text. Nested `current_phase` at top level.
39
+ - **`get_node(path)`**: Default returns counts (`rules_count`,
40
+ `dependencies_count`) + flags. Pass `full=True` for the full arrays.
41
+ Typical response: ~100 tokens (was 500-3000).
42
+ - **`get_impact(path)`**: Default returns 10 affected files + protected/
43
+ high-stability counts. Pass `summary_only=True` for just counts
44
+ (~80 tokens — perfect for gate checks before modifying).
45
+ - **`search_codebase(query)`**: Default returns file/symbol pointers only.
46
+ Pass `include_content=True` to inline chunk source (500-3000 tokens per
47
+ match). `limit` capped at 20.
48
+ - **`search_decisions(query)`**: Default limit 5 (was 10), context truncated
49
+ to 150 chars. Pass `full=True` for untruncated text. `limit` capped at 20.
50
+ - **`get_history(file)`**: Default limit 5 (was 20), text truncated.
51
+ Pass `full=True` for untruncated. `limit` capped at 50.
52
+ - **`get_full_roadmap`**: Completed phases summarized (number + name + date
53
+ + decision_count) instead of inlining all `key_decisions`. Pass
54
+ `include_decisions=true` for the old behavior.
55
+ - **`list_nodes`**: Paginated (50 per page, max 500) with `offset` support.
56
+ Response includes total count + per-layer distribution.
57
+
58
+ ### Changed — AI-facing MCP tool surface trimmed to 23 tools (was 36)
59
+
60
+ 12 tools moved to admin-only — they still work via `call_tool` dispatch
61
+ but are **hidden from `list_tools()`**. AI agents only see tools they
62
+ should use. The hidden tools are either:
63
+ - Dashboard/reporting (human workflows): `get_full_roadmap`,
64
+ `get_project_maturity`, `find_hotspots`, `analyze_changes`, `get_graph_diff`
65
+ - Bulk discovery (replaced by targeted queries): `list_nodes`, `add_node`
66
+ - Background automation (self-managed): `refresh_graph`, `refresh_index`
67
+ - Redundant with session_context: `get_preferences`, `get_learned_rules`
68
+ - Dumps too many tokens: `export_graph` (can be 50k tokens)
69
+
70
+ Admins can still call these via CLI. Prompts like `architecture_overview`
71
+ still reference them server-side.
72
+
73
+ ### Added
74
+ - **Non-blocking `refresh_index`**: Returns in <100ms with
75
+ `{"status": "Refresh started in background"}`. Heavy work (graph regen +
76
+ semantic embedding) runs in a daemon thread. Previously, this hung AI
77
+ agents for minutes on 500+ file projects.
78
+ - **`codevira clean` command**: One-shot removal of all Codevira data, IDE
79
+ configs, and services. `--all`, `--dry-run`, `-y` supported.
80
+ - **Google Antigravity global mode**: `codevira register` now includes
81
+ Antigravity with a single global entry (was missing + wrong config path).
82
+ - **Browser-friendly landing page**: `GET /` on HTTP server returns helpful
83
+ HTML with setup instructions for browsers. API clients still get JSON.
20
84
 
21
85
  ### Fixed
22
- - **Test isolation**: Autouse fixture now clears `_data_dir_cache` and resets
23
- `_project_dir_override` between every test, preventing cross-test pollution.
24
- - **`auto_init._init_done` renamed to `_init_started`**: The flag is set when the
25
- background thread *starts*, not when it *finishes* — name now matches semantics.
26
- - **Unbounded `join()` in auto-init**: Background semantic indexing thread now has
27
- a 5-minute timeout; if it hangs, the server continues in graph-only mode.
28
- - **`install_launchd()` missing `project_dir`**: Added optional `project_dir`
29
- parameter. When provided, adds `--project-dir` to ProgramArguments and
30
- `WorkingDirectory` to the launchd plist.
31
- - **CLI `project_dir` not forwarded to launchd**: `cmd_serve()` now passes
32
- `project_dir` through to `install_launchd()`.
33
- - **`run_http_server()` ignoring `project_dir`**: Now calls `set_project_dir()`
34
- when `project_dir` is not None, so direct callers get correct path resolution.
86
+ - **`refresh_graph` ignored its `file_paths` parameter** dead code that
87
+ always regenerated the entire graph. Cleaned up.
88
+ - **`generate_graph_sqlite` crashed on macOS system paths**: Now skips
89
+ `Library`, `System`, `Applications`, `node_modules`, `.venv`, etc.,
90
+ and catches `OSError`/`ValueError` per-entry so one bad symlink doesn't
91
+ abort indexing.
92
+ - **Crash log test isolation**: `crash_logger._get_log_dir()` now uses
93
+ `get_global_home()`. Tests no longer pollute the real user's crash log.
94
+ - **`_get_embedding_fn` ValueError not caught**: When chromadb is installed
95
+ but sentence-transformers isn't, chromadb raises `ValueError`. Now caught.
96
+ - **Playbook `add_route` `add_tool`**: The valid task type was renamed
97
+ in code but the description still said `add_route`. Fixed.
98
+ - **Antigravity config path**: Was wrong (`~/.gemini/settings/`). Now uses
99
+ the correct `~/.gemini/antigravity/mcp_config.json`.
100
+
101
+ ### Added — Post-release enhancements (merged into 1.7.0)
102
+
103
+ - **`codevira status` is now fast** (~200ms for uninitialized projects,
104
+ ~1s for initialized). Was ~5-6s because it was loading the ~90MB
105
+ sentence-transformers embedding model just to count chunks. Now uses
106
+ `collection.count()` which doesn't need the embedding function, and
107
+ short-circuits entirely when there's no graph DB yet.
108
+ - **`codevira status --global`** flag shows launchd service state +
109
+ cross-project memory stats in a dedicated panel. Works on both
110
+ initialized and uninitialized projects.
111
+ - **`codevira status --check-stale`** flag opt-in for the slow SHA256
112
+ file-walk (was always-on, made status take 5s+).
113
+ - **`codevira clean --legacy`** — remove `.codevira.migrated/` backup
114
+ directories accumulating across all initialized projects. Shows size
115
+ and confirms before deletion.
116
+ - **`logs.retention_days` actually works now** (was dead config in earlier
117
+ versions). Opt-in only — default 0 keeps sessions/decisions forever.
118
+ Set > 0 for privacy-driven time-bounded history. Runs at most once
119
+ per 24h at server startup.
120
+ - **HTTP/HTTPS transport marked as PREVIEW** (single-project only). The
121
+ server binds to one project at startup and cannot switch contexts per
122
+ request. Multi-project HTTPS routing via MCP `initialize` `rootUri` is
123
+ the top v1.8 priority. `codevira serve` prints a preview warning on
124
+ startup. README / FAQ / PROTOCOL updated to position stdio as the
125
+ clear recommendation for multi-project work.
126
+ - **Dead-code audit** — removed 4 unused functions (`find_project_by_remote`
127
+ in global_db, `get_file_outcome_summary`, `add_open_changeset`,
128
+ `remove_open_changeset`), renamed `get_changeset` → `_get_changeset`
129
+ (was module-private usage only). Wired up 3 unused-but-useful functions
130
+ (`launchd_status`, `cleanup_legacy_dir`, `get_global_stats`) into the
131
+ CLI where they belong.
132
+ - **Open-source readiness pass** — removed stray test-playground files
133
+ from git, fixed PR template typo (`mcp-server` → `mcp_server`), replaced
134
+ hardcoded author username in docstring examples (`/Users/sachin/...`
135
+ → `/Users/alice/...`), added `__all__` + `__version__` to
136
+ `mcp_server/__init__.py`, removed duplicate `requirements.txt`.
137
+
138
+ ### Tests
139
+ - 1,306 tests passing (added 15 new tests for `log_retention.py`)
140
+
141
+ ---
142
+
143
+ ## [1.6.2] — 2026-04-16 — Crash Log Isolation & Browser UX
144
+
145
+ ### Fixed
146
+ - **Crash log test isolation**: `crash_logger._get_log_dir()` now uses
147
+ `get_global_home()` instead of hardcoding `~/.codevira/logs/`. Tests
148
+ no longer pollute the real user's crash log with pytest mock tracebacks.
149
+ - **`_get_embedding_fn` ValueError not caught**: When chromadb is installed
150
+ but sentence-transformers isn't, chromadb wraps the ImportError as a
151
+ ValueError. `_get_embedding_fn` now catches both and re-raises as
152
+ ImportError for consistent handling by callers.
153
+
154
+ ### Added
155
+ - **Browser-friendly landing page**: `GET /` on the HTTP server now returns
156
+ a helpful HTML page for browsers (with setup instructions) instead of
157
+ just JSON. API clients with `Accept: application/json` still get JSON.
158
+
159
+ ---
160
+
161
+ ## [1.6.1] — 2026-04-16 — Stability, Graceful Degradation & Cleanup
162
+
163
+ ### Added
164
+ - **`codevira clean` command**: One-shot removal of all Codevira data, IDE configs,
165
+ and services. Supports `--all` (per-project artifacts), `--dry-run` (preview),
166
+ and `-y` (skip confirmation).
167
+ - **Google Antigravity global mode**: `codevira register` now includes Antigravity
168
+ with a single global entry — no per-project hardcoded paths.
169
+
170
+ ### Fixed
171
+ - **Graceful degradation when chromadb not installed**: `refresh_index` and
172
+ `cmd_incremental` now work in graph-only mode instead of crashing with
173
+ ImportError. Background file watcher no longer generates noisy exceptions
174
+ on every file save.
175
+ - **`sys.exit()` crashes eliminated**: `server.py` module-level import failure
176
+ now uses stderr + raise instead of corrupting the MCP stdio protocol.
177
+ `cmd_incremental` no longer kills the MCP server process from background
178
+ watcher threads.
179
+ - **Binary resolution in user-facing output**: `codevira init` "For other AI
180
+ tools" section now shows the resolved `codevira` binary path instead of a
181
+ hardcoded Python interpreter path (e.g. `/opt/homebrew/...`).
182
+ - **Antigravity config path**: Fixed from `~/.gemini/settings/mcp_config.json`
183
+ (wrong) to `~/.gemini/antigravity/mcp_config.json` (correct).
184
+ - **Rich markup escaping**: `codevira[search]` install hints now display
185
+ correctly — Rich no longer strips `[search]` as a style tag.
186
+ - **`codevira status` without chromadb**: Shows "Semantic Search: not installed"
187
+ with install tip instead of crashing. Added graph node count to status.
188
+ - **Git hook uses full binary resolution**: Post-commit hook now uses
189
+ `_resolve_command()` instead of simple `shutil.which`.
190
+
191
+ ### Performance
192
+ - **`get_data_dir()` caching**: Result cached per project root. First call runs
193
+ subprocess + metadata scan; subsequent calls are O(1) dict lookups.
194
+ - **`set_project_dir()` cache invalidation**: Changing the project root now
195
+ clears the data-dir cache automatically.
196
+ - **Unbounded join timeout**: Background semantic indexing thread capped at
197
+ 5 minutes; server continues in graph-only mode if it hangs.
35
198
 
36
199
  ### Changed
37
- - **README.md**: Updated for v1.6.0 version badge, Quick Start flow (`register`
38
- instead of `init`), centralized storage diagram, documented `codevira register`,
39
- `--install-service`/`--uninstall-service`, auto-init, and legacy migration.
200
+ - **Package renamed**: `codevira-mcp` `codevira`. Install with `pip install
201
+ codevira`. CLI command is now `codevira` (not `codevira-mcp`).
202
+ - **Removed unused `gitpython` dependency**: CodeVira uses `subprocess` for
203
+ all git operations. Saves ~20MB install weight.
204
+ - **Removed out-of-scope rule files**: REST API standards, SSE/UI events,
205
+ TUI layout/keybinding rules — none apply to an MCP server.
206
+ - **Removed vendor-specific secret patterns from crash logger**: Stripe, AWS,
207
+ GitHub token regexes were irrelevant to CodeVira's scope.
208
+ - **Test isolation hardened**: Autouse fixture clears `_data_dir_cache` and
209
+ resets `_project_dir_override` between every test.
210
+ - **`_init_done` renamed to `_init_started`**: Name matches semantics — the
211
+ flag signals thread launch, not completion.
212
+ - **`install_launchd()` accepts `project_dir`**: Adds `--project-dir` to
213
+ ProgramArguments and `WorkingDirectory` to the plist.
40
214
 
41
215
  ---
42
216