codevira 2.1.1__tar.gz → 2.1.2__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.
- {codevira-2.1.1 → codevira-2.1.2}/CHANGELOG.md +206 -0
- {codevira-2.1.1/codevira.egg-info → codevira-2.1.2}/PKG-INFO +56 -12
- {codevira-2.1.1 → codevira-2.1.2}/README.md +55 -11
- {codevira-2.1.1 → codevira-2.1.2/codevira.egg-info}/PKG-INFO +56 -12
- {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/SOURCES.txt +9 -0
- codevira-2.1.2/docs/plans/v2.1.2.md +1342 -0
- codevira-2.1.2/docs/troubleshooting/antigravity.md +131 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/chunker.py +4 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/global_db.py +78 -21
- {codevira-2.1.1 → codevira-2.1.2}/indexer/rule_learner.py +178 -28
- {codevira-2.1.1 → codevira-2.1.2}/indexer/sqlite_graph.py +98 -20
- {codevira-2.1.1 → codevira-2.1.2}/indexer/treesitter_parser.py +118 -65
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/__init__.py +1 -1
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_prompts.py +47 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/agents_md.py +33 -27
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli.py +545 -47
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_agents.py +33 -21
- codevira-2.1.2/mcp_server/cli_calibrate.py +140 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_configure.py +3 -3
- codevira-2.1.2/mcp_server/cli_export.py +318 -0
- codevira-2.1.2/mcp_server/data/rules/coding-standards-generic.md +60 -0
- codevira-2.1.2/mcp_server/data/rules/coding-standards-go.md +63 -0
- codevira-2.1.2/mcp_server/data/rules/coding-standards-typescript.md +56 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/__init__.py +18 -9
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/cross_session.py +280 -52
- codevira-2.1.2/mcp_server/engine/policies/post_edit_refresh.py +91 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/runner.py +17 -10
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/token_meter.py +15 -6
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/prompts.py +12 -3
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/server.py +524 -75
- codevira-2.1.2/mcp_server/tools/_decision_embeddings.py +694 -0
- codevira-2.1.2/mcp_server/tools/check_conflict.py +175 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/code_reader.py +24 -18
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/graph.py +285 -108
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/learning.py +435 -42
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/playbook.py +53 -11
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/roadmap.py +297 -22
- codevira-2.1.2/mcp_server/tools/search.py +897 -0
- {codevira-2.1.1 → codevira-2.1.2}/pyproject.toml +11 -1
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_decision_embeddings.py +51 -16
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_global_db.py +96 -19
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_server.py +533 -286
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_sqlite_graph.py +530 -181
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_graph.py +235 -53
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_learning.py +332 -124
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_roadmap.py +128 -51
- codevira-2.1.1/mcp_server/tools/_decision_embeddings.py +0 -314
- codevira-2.1.1/mcp_server/tools/search.py +0 -507
- {codevira-2.1.1 → codevira-2.1.2}/LICENSE +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/MANIFEST.in +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/builder.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/developer.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/documenter.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/orchestrator.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/planner.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/01-code-review.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/02-adversarial-fix-review.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/03-cross-module-impact.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/06-doc-drift.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/07-security-audit.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/12-llm-redteam.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/13-multi-ide-schema.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/22-competitor-benchmark.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/README.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/tier2-scripts.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/qa/tier3-manual.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/reviewer.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/agents/tester.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/dependency_links.txt +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/entry_points.txt +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/requires.txt +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/codevira.egg-info/top_level.txt +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/config.example.yaml +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/alpha-tester-invites.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/demo/README.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/foolproof-product-charter.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/00-engine.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/01-decision-lock.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/02-anti-regression.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/03-scope-contract.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/04-blast-radius.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/05-cross-session.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/06-token-budget.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/07-live-style.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/08-decision-replay.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/09-intent-inference.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/10-ai-promotion.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/README.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/heroes/pillar-1-setup.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/hn-launch-day.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/how-i-built-persistent-memory-for-ai-agents.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/internal/competitive-landscape.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/linkedin-article-ai-agent-memory.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/linkedin-post-ai-agent-memory.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/local-pypi-https.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/medium-your-ai-coding-agent-has-amnesia.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/qa-playbook.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/release-process.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/roadmap.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/v2-completion-plan.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/v2-execution-log.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/v2-master-plan.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/docs/vs-other-memory-tools.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/graph/_schema.yaml +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/__init__.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/_dedupe_migration.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/_fork_safety.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/_sqlite_util.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/fix_history.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/graph_generator.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/index_codebase.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/indexer/outcome_tracker.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/__main__.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_ghost_check.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_project_inventory.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_repair_init.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/_safe_crash.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/auto_init.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_budget.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_hooks_admin.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_insights.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_projects.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/cli_replay.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/crash_logger.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/__init__.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/builder.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/developer.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/documenter.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/orchestrator.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/planner.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/reviewer.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/agents/tester.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/config.example.yaml +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/post_tool_use.sh +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/pre_tool_use.sh +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/session_start.sh +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/stop.sh +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/hooks/user_prompt_submit.sh +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/coding-standards.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/engineering-excellence.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/git-cicd-governance.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/git_commits.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/incremental-updates.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/master_rule.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/multi-language.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/persistence.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/resilience-observability.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/smoke-testing.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/rules/testing-standards.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/agents_md.tmpl +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/canonical_block.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/claude_md.tmpl +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/copilot_instructions.tmpl +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/cursor_rules.mdc.tmpl +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/gemini_md.tmpl +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/data/templates/windsurfrules.tmpl +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/decision_replay.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/detect.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/doctor.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/demo_policy.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/events.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/intent_classifier.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/__init__.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/_signature_detect.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/ai_promotion.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/anti_regression.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/blast_radius.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/decision_lock.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/intent_inference.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/live_style.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/scope_contract.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policies/token_budget.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/policy.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/promotion_score.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/scope_contract.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/signals.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/wiring/__init__.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/wiring/claude_code_hooks.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/engine/wiring/mcp_dispatch.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/gitignore.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/global_sync.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/http_server.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/ide_inject.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/launchd.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/log_retention.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/migrate.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/paths.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/roadmap_drift.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/setup_wizard.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/__init__.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/mcp_server/tools/changesets.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/coding-standards.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/engineering-excellence.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/git-cicd-governance.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/git_commits.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/incremental-updates.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/master_rule.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/persistence.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/resilience-observability.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/smoke-testing.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/rules/testing-standards.md +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/setup.cfg +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test__prompts.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_auto_init.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_call_edge_fk_safety.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_chunker.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_agents.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_configure.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_insights.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_projects.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_replay.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_cli_version.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_crash_logger.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_dedupe_migration.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_detect.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_doctor.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_fk_safety_extended.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_fork_safety.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_ghost_check.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_gitignore.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_global_sync.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_graph_generator.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_hook_resilience.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_http_server.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_ide_inject.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_index_codebase.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_launchd.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_log_retention.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_migrate.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_outcome_tracker.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_paths.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_prompts.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_record_decision.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_repair_init.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_retire_rule.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_roadmap_drift.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_rule_learner.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_setup_wizard.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_sqlite_util.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_changesets.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_code_reader.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_playbook.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_tools_search.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_treesitter_parser.py +0 -0
- {codevira-2.1.1 → codevira-2.1.2}/tests/test_watcher_circuit.py +0 -0
|
@@ -11,6 +11,212 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [2.1.2] — 2026-05-19 — Trust recovery + QoL
|
|
15
|
+
|
|
16
|
+
Trust-recovery release based on **four independent field-test reports** that
|
|
17
|
+
converged on "trust" as the gap (not capability). Full plan:
|
|
18
|
+
[docs/plans/v2.1.2.md](docs/plans/v2.1.2.md).
|
|
19
|
+
|
|
20
|
+
### Added — Smart similarity threshold (Item 1)
|
|
21
|
+
|
|
22
|
+
- `search_decisions` now applies a per-project, self-calibrating similarity
|
|
23
|
+
threshold before RRF fusion. Gibberish queries (`"zzzzzz xqzv9"`,
|
|
24
|
+
`"how to make a cake"`, `""`) return zero results with
|
|
25
|
+
`retrieval: "semantic-no-results-above-threshold"` instead of the
|
|
26
|
+
v2.1.1 regression where they surfaced the "least bad" matches.
|
|
27
|
+
- New `codevira calibrate` CLI command for manual threshold re-fit.
|
|
28
|
+
Auto-recalibration runs in a daemon thread every ~10 decisions added.
|
|
29
|
+
- Per-project `<data_dir>/calibration.json` (search threshold + hook
|
|
30
|
+
threshold + positive-sample count + ISO timestamp).
|
|
31
|
+
- Cross-session hook injection (`CrossSessionConsistency`) applies the
|
|
32
|
+
stricter `hook` threshold (search − 0.10). Commit-message-shaped
|
|
33
|
+
prompts (`feat(api):` / `fix:` / etc.) skipped entirely.
|
|
34
|
+
|
|
35
|
+
### Added — Honest cleanup (Item 3)
|
|
36
|
+
|
|
37
|
+
- `codevira reset --vectors / --graph / --all` — destructive operations
|
|
38
|
+
split out of `codevira heal` (whose name implied fix-in-place).
|
|
39
|
+
- Auto-export of decisions + outcomes + preferences + learned_rules to
|
|
40
|
+
`<data_dir>/exports/<ts>-pre-<target>.json` BEFORE any wipe of `graph/`.
|
|
41
|
+
Pass `--no-backup` to skip.
|
|
42
|
+
- Typed confirmation: user must type `reset` / `graph` / `vectors` /
|
|
43
|
+
`all` (not just `y`) to proceed. `--yes` skips for scripts.
|
|
44
|
+
- `codevira heal --vectors / --graph / --all` deprecation cycle:
|
|
45
|
+
forwards to `cmd_reset` with a one-time warning. Removal planned v2.2.
|
|
46
|
+
- New `codevira export decisions [--format json|sql] [--out PATH]`
|
|
47
|
+
standalone backup command. Closes Report 1 §7 gap.
|
|
48
|
+
- New `confirm_typed(...)` helper in `_prompts.py`.
|
|
49
|
+
|
|
50
|
+
### Added — Proactive correctness
|
|
51
|
+
|
|
52
|
+
- **Item 20**: `check_conflict(decision_text, file_path?)` MCP tool detects
|
|
53
|
+
duplicates and conflicts vs `do_not_revert=True` decisions. Uses Item 1's
|
|
54
|
+
calibrated threshold. `record_decision` runs it automatically pre-write
|
|
55
|
+
and surfaces `_conflict_warning` in the response (suppressible with
|
|
56
|
+
`force=True`).
|
|
57
|
+
- **Item 26**: `supersede_decision(old_id, new_decision, reason)` retires
|
|
58
|
+
a prior decision with auditable history. Schema auto-migrates with
|
|
59
|
+
`is_superseded INTEGER + superseded_by INTEGER`. `list_decisions` filters
|
|
60
|
+
superseded rows by default; `include_superseded=True` opts back in.
|
|
61
|
+
|
|
62
|
+
### Added — Enumeration + filtering
|
|
63
|
+
|
|
64
|
+
- **Item 11**: `list_decisions(limit, since_date, file_pattern,
|
|
65
|
+
protected_only, session_id, tags, include_superseded, full)` MCP tool.
|
|
66
|
+
Closes Report 3 "remembers but can't list" gap.
|
|
67
|
+
- **Item 27 (partial)**: `tags=[...]` on `record_decision`; `list_tags()`
|
|
68
|
+
MCP tool; tag filter on `list_decisions`. `decision_tags` table
|
|
69
|
+
auto-migrated.
|
|
70
|
+
- **Item 25**: `since="YYYY-MM-DD"` (or ISO 8601) filter on
|
|
71
|
+
`search_decisions`, `get_history`, `get_session_context`. SQL-layer
|
|
72
|
+
for BM25, post-filter for semantic results.
|
|
73
|
+
|
|
74
|
+
### Added — Batch APIs (Items 23 + 24)
|
|
75
|
+
|
|
76
|
+
- `record_decisions([...])` and `write_session_logs([...])` cut
|
|
77
|
+
memory-dump sessions from ~26 separate round trips to 1. Returns
|
|
78
|
+
`{count, recorded:[ids], errors:[{idx, error}]}` with per-item
|
|
79
|
+
partial-failure surfacing.
|
|
80
|
+
|
|
81
|
+
### Added — Trust + correctness fixes
|
|
82
|
+
|
|
83
|
+
- **Item 2**: `get_node` / `get_impact` / `query_graph` / `update_node`
|
|
84
|
+
return `not_indexed: True` + null counts instead of misleading 0 for
|
|
85
|
+
un-indexed paths.
|
|
86
|
+
- **Item 4**: New `PostEditGraphRefresh` policy refreshes graph nodes in
|
|
87
|
+
a daemon thread after Edit/Write/MultiEdit so subsequent
|
|
88
|
+
`get_node` / `get_impact` calls see fresh data.
|
|
89
|
+
- **Item 9**: `global_db.get_rules()` strict-language match by default
|
|
90
|
+
(was `language = ? OR language IS NULL`). Prevents Go-project rules
|
|
91
|
+
with NULL language from leaking into Python projects. Pass
|
|
92
|
+
`strict_language=False` for legacy behavior.
|
|
93
|
+
- **Item 17**: Rule extractor noise filter — stopword filter + minimum
|
|
94
|
+
content-density gate + substring suppression in `_find_common_phrases`.
|
|
95
|
+
Pre-code projects (0 indexed source files) skip
|
|
96
|
+
`_infer_decision_pattern_rules` entirely.
|
|
97
|
+
- **Item 18**: `add_phase()` silently replaces the bootstrap
|
|
98
|
+
"Getting Started" placeholder when called with the SAME number (and
|
|
99
|
+
the placeholder is pristine — status=pending, no changesets, default
|
|
100
|
+
description).
|
|
101
|
+
- **Item 19**: Regression test for `file_path` serialization round-trip
|
|
102
|
+
through `get_session_context`'s `recent_decisions`.
|
|
103
|
+
- **Item 22**: `write_session_log` / `log_session` auto-suffix
|
|
104
|
+
`session_id` on content collision (was: silent `INSERT OR REPLACE`).
|
|
105
|
+
Same id + same summary remains idempotent; different summary returns
|
|
106
|
+
the new suffixed id with `collision_resolved: True`.
|
|
107
|
+
- **Item 33**: Hook commit-message pre-filter suppresses injection on
|
|
108
|
+
prompts matching `^(feat|fix|chore|docs|refactor|test|style|perf|build|ci|revert)(\(.*\))?:`.
|
|
109
|
+
|
|
110
|
+
### Added — Roadmap workflow
|
|
111
|
+
|
|
112
|
+
- **Item 10**: `complete_phase(backfill=True, completed_at='YYYY-MM-DD')`
|
|
113
|
+
for retroactive phase completion (current / upcoming / synthetic
|
|
114
|
+
cases).
|
|
115
|
+
- **Item 12**: `complete_phase(git_ref="...")` links a commit sha or PR
|
|
116
|
+
reference to the completion entry.
|
|
117
|
+
- **Item 29**: `bulk_import_phases([...])` for adopting codevira on a
|
|
118
|
+
project that already shipped N phases in git. Idempotent.
|
|
119
|
+
|
|
120
|
+
### Added — QoL
|
|
121
|
+
|
|
122
|
+
- **Item 5**: `do_not_revert` int→bool coercion at SQLite read boundary
|
|
123
|
+
(`search_decisions`, missing-rows fetch path). API contract now
|
|
124
|
+
matches schema.
|
|
125
|
+
- **Item 6**: Smart truncation in `top_signals.rules` (word-boundary +
|
|
126
|
+
path-aware, 160-char limit).
|
|
127
|
+
- **Item 7**: `summary` derived from first 80 chars of decision text
|
|
128
|
+
instead of `"ad-hoc record_decision"` placeholder.
|
|
129
|
+
- **Item 8**: `get_session_context` returns `confidence_note` instead of
|
|
130
|
+
`confidence=null` on fresh projects.
|
|
131
|
+
- **Item 28**: `summary_only=True` mode on `search_decisions` returns
|
|
132
|
+
id + summary + score + do_not_revert only — ~70% smaller payload for
|
|
133
|
+
AI triage queries.
|
|
134
|
+
- **Item 30**: `record_decision` input-coerced echo — when
|
|
135
|
+
`do_not_revert` is passed as a non-bool (int 1, string "true"),
|
|
136
|
+
response carries `_input_coerced_warning`.
|
|
137
|
+
- **Item 31**: Bundled non-Python playbooks (TypeScript / Go / generic)
|
|
138
|
+
in `mcp_server/data/rules/coding-standards-<lang>.md`. Auto-selected
|
|
139
|
+
by detected project language. Closes Report 1 §3.5.
|
|
140
|
+
- **Items 13 + 14**: `clean --orphans` catches bare global.db rows (no
|
|
141
|
+
data dir + path missing on disk). `clean --ghosts` catches truly-
|
|
142
|
+
empty data dirs (<10 KB, status='stale').
|
|
143
|
+
|
|
144
|
+
### Added — Plan + governance (Item 16)
|
|
145
|
+
|
|
146
|
+
- `docs/plans/v2.1.2.md` mirrors the master plan (33 items + 4 deferred
|
|
147
|
+
v2.2-class items). Establishes release-planning discipline: every
|
|
148
|
+
vX.Y.Z release with 3+ items gets its own `docs/plans/` doc.
|
|
149
|
+
- `ROADMAP.md` v2.1.2 section.
|
|
150
|
+
- `CONTRIBUTING.md` Release planning + Documentation discipline.
|
|
151
|
+
|
|
152
|
+
### Fixed
|
|
153
|
+
|
|
154
|
+
- **Item 21**: Multi-language `get_signature` / `get_code` confirmed
|
|
155
|
+
working in v2.1.1 (15+ languages via tree-sitter-language-pack). No
|
|
156
|
+
new code needed; doc fix only.
|
|
157
|
+
- **Item 32**: All 42 pre-existing mypy errors cleared via real fixes
|
|
158
|
+
(type narrowing, missing imports, `Counter` / `dict[str, Any]`
|
|
159
|
+
annotations, AST isinstance gating) and targeted
|
|
160
|
+
`# type: ignore[code]` for invariant pre-existing patterns. mypy is
|
|
161
|
+
now a hard pre-commit gate.
|
|
162
|
+
|
|
163
|
+
### Late additions (caught by post-tag smoke testing)
|
|
164
|
+
|
|
165
|
+
These three patches landed AFTER the initial v2.1.2 release commit but
|
|
166
|
+
BEFORE shipping the wheel. They're all part of the v2.1.2 line:
|
|
167
|
+
|
|
168
|
+
- **bulk_import_phases placeholder fix**: importing `phase=1` on a
|
|
169
|
+
fresh project was silently SKIPPING phase 1 because the bootstrap
|
|
170
|
+
"Getting Started" placeholder occupies that number. Adopters
|
|
171
|
+
migrating multi-phase git history (Report 3 #5 — the exact use case
|
|
172
|
+
Item 29 exists for) would hit this. Fixed by applying Item 18's
|
|
173
|
+
placeholder-recognition logic to bulk_import too.
|
|
174
|
+
- **calibrate doc range fix**: `codevira calibrate --help` said
|
|
175
|
+
"Clamped to [0.20, 0.55]" but actual code clamps to [0.35, 0.80]
|
|
176
|
+
(the empirically-tuned values from Item 1 after measuring
|
|
177
|
+
all-MiniLM-L6-v2's distance distribution on real query/decision
|
|
178
|
+
pairs). Doc string corrected.
|
|
179
|
+
- **Issue #10 — Antigravity sandbox + torch dlopen**: graceful
|
|
180
|
+
degradation across 3 tiers. (1) Removed `prewarm_embedding_model()`
|
|
181
|
+
from MCP server startup — torch loads lazily on first
|
|
182
|
+
`search_codebase` / `search_decisions` call. MCP `initialize` and
|
|
183
|
+
`tools/list` complete instantly without touching torch. All
|
|
184
|
+
non-search tools work in Antigravity. (2) `_decisions_collection_or_none()`
|
|
185
|
+
traps `OSError` (macOS dlopen errors arrive as OSError, not
|
|
186
|
+
ImportError) and surfaces `_semantic_warning` in `search_decisions`
|
|
187
|
+
responses with a clear explanation + issue link.
|
|
188
|
+
(3) `docs/troubleshooting/antigravity.md` documents the root cause
|
|
189
|
+
and four user-side workarounds. Closes
|
|
190
|
+
[#10](https://github.com/sachinshelke/codevira/issues/10).
|
|
191
|
+
|
|
192
|
+
### Tests
|
|
193
|
+
|
|
194
|
+
- 2401/2401 unit tests pass + 4/4 e2e cross-tool universality.
|
|
195
|
+
- Replaced: `test_log_session_replaces_on_duplicate` → idempotent +
|
|
196
|
+
auto-suffix variants (Item 22).
|
|
197
|
+
- Renamed: `test_8_evaluation_under_5ms_p95` → `_50ms_p95` (semantic
|
|
198
|
+
gate is inherently slower than BM25-only).
|
|
199
|
+
- Updated: all `test_default_heroes_*` / `test_*_default_policies_*`
|
|
200
|
+
acceptance tests to expect `post_edit_graph_refresh` in the default
|
|
201
|
+
set; `test_dispatch_complete_phase` (×2) + `test_dispatch_get_history`
|
|
202
|
+
for new kwarg defaults.
|
|
203
|
+
- New positive tests: `test_get_node_not_indexed`,
|
|
204
|
+
`test_get_impact_not_indexed`,
|
|
205
|
+
`test_gibberish_query_returns_zero_above_threshold`,
|
|
206
|
+
`test_session_context_recent_decisions_preserve_file_path`,
|
|
207
|
+
`test_add_phase_replaces_pristine_placeholder`,
|
|
208
|
+
`test_log_session_idempotent_on_same_content`,
|
|
209
|
+
`test_log_session_auto_suffixes_on_different_content`,
|
|
210
|
+
`test_language_filter_strict_excludes_null_language`,
|
|
211
|
+
`test_language_filter_loose_includes_null_language`.
|
|
212
|
+
|
|
213
|
+
### Deferred to v2.1.3 / v2.2
|
|
214
|
+
|
|
215
|
+
- Full README rewrite with animated 60-second demo GIF (Item 15) — pair
|
|
216
|
+
with v2.2 launch / benchmark publishing once benchmark suite ships.
|
|
217
|
+
- Bundled `coding-standards-<lang>.md` for Rust / Java / etc. — extend
|
|
218
|
+
the per-language playbook system as adopters request.
|
|
219
|
+
|
|
14
220
|
## [2.1.1] — 2026-05-17 — Hybrid decision search
|
|
15
221
|
|
|
16
222
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: codevira
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.2
|
|
4
4
|
Summary: Stop re-explaining your project to AI agents every session. Codevira gives Claude Code, Cursor, Windsurf, and Antigravity shared persistent memory of your codebase — locally, no signup, MIT-licensed. One install configures every AI tool.
|
|
5
5
|
Author-email: Sachin Shelke <sachin.worldnet@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -92,6 +92,35 @@ Your AI agent reads the same 12 files every session before doing any actual work
|
|
|
92
92
|
|
|
93
93
|
---
|
|
94
94
|
|
|
95
|
+
## What's new in v2.1.2 — trust recovery
|
|
96
|
+
|
|
97
|
+
v2.1.1 shipped hybrid search (BM25 + semantic) but without a similarity floor, so off-topic prompts kept surfacing irrelevant decisions. v2.1.2 is a **trust-recovery release** based on four independent field-test reports: every fix restores confidence in something codevira already does.
|
|
98
|
+
|
|
99
|
+
| Area | What changed |
|
|
100
|
+
|---|---|
|
|
101
|
+
| **Smart similarity threshold** | `search_decisions` self-calibrates a per-project distance threshold from your protected decisions. Gibberish queries return zero results, not "least bad" matches. `codevira calibrate` to manually re-fit. |
|
|
102
|
+
| **Honest cleanup** | `codevira reset --vectors / --graph / --all` replaces destructive `heal` flags (which `rm -rf`'d decisions). Decisions auto-exported to `<data_dir>/exports/` before any wipe. Typed confirmation required (`reset` / `graph` / `vectors` / `all`). |
|
|
103
|
+
| **Backup-first by default** | `codevira export decisions [--format json|sql]` — standalone backup any time. |
|
|
104
|
+
| **Proactive conflict detection** | New `check_conflict(decision_text)` MCP tool flags duplicate or contradictory decisions BEFORE you write. `record_decision` runs it automatically and surfaces `_conflict_warning`. |
|
|
105
|
+
| **Enumerate decisions** | New `list_decisions(limit, since_date, file_pattern, protected_only, session_id, tags)` MCP tool. Closes the "remembers but can't list" gap. |
|
|
106
|
+
| **Batch APIs** | `record_decisions([…])` + `write_session_logs([…])` cut memory-dump sessions from ~26 round trips to 1. |
|
|
107
|
+
| **Tags + supersede** | Decisions can carry tags (`record_decision(tags=[…])`); `list_tags()` enumerates. `supersede_decision(old_id, new_decision, reason)` retires a prior decision with auditable history. |
|
|
108
|
+
| **since= filter** | `search_decisions`, `get_history`, `get_session_context` all accept `since="YYYY-MM-DD"` so "what's new since I was last here" is a one-call query. |
|
|
109
|
+
| **Rule extractor noise filter** | `top_signals.rules` no longer emits sliding-window n-grams as fake patterns. Stopwords + density gate + substring suppression. Skipped entirely on pre-code projects. |
|
|
110
|
+
| **Cross-project rules leak fix** | `language IS NULL` rules no longer fan out to every project. A Go-project rule stays in the Go project. |
|
|
111
|
+
| **Post-edit graph refresh** | New PostToolUse policy refreshes graph nodes after Edit/Write/MultiEdit so `get_node` / `get_impact` see current data without `index --full`. |
|
|
112
|
+
| **Auto-clear placeholder phase** | `add_phase(phase=1, …)` on a fresh project silently replaces the bootstrap "Getting Started" stub instead of refusing as duplicate. |
|
|
113
|
+
| **`complete_phase` enhancements** | `backfill=True` + `completed_at` for retroactive completion; `git_ref` to link to a commit/PR. `bulk_import_phases([…])` for migrating multi-phase git history in one call. |
|
|
114
|
+
| **Hook regex precision** | Commit-message-shaped prompts (`feat(api):` / `fix:` / etc.) no longer trigger context injection. |
|
|
115
|
+
| **Bundled non-Python playbooks** | `coding-standards-typescript.md`, `coding-standards-go.md`, `coding-standards-generic.md` auto-selected by detected language. |
|
|
116
|
+
| **session_id collision** | `write_session_log` auto-suffixes on conflict and returns the actual id (vs silent overwrite). |
|
|
117
|
+
| **`do_not_revert` echo** | When passed as a non-bool (int 1, string "true"), the response carries `_input_coerced_warning` so you see what got stored. |
|
|
118
|
+
| **mypy baseline** | All 42 pre-existing type errors cleared; mypy is now a hard gate. |
|
|
119
|
+
|
|
120
|
+
Full plan + design rationale: [docs/plans/v2.1.2.md](docs/plans/v2.1.2.md).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
95
124
|
## What's new in v2.0
|
|
96
125
|
|
|
97
126
|
> 30-second demo: **[docs/demo/codevira-demo.mp4](docs/demo/codevira-demo.mp4)**
|
|
@@ -229,20 +258,35 @@ summary: 14 pass · 0 warn · 0 fail
|
|
|
229
258
|
|
|
230
259
|
### Daily-use commands you'll actually run
|
|
231
260
|
|
|
232
|
-
| Command | What it does |
|
|
233
|
-
|
|
234
|
-
| `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) |
|
|
235
|
-
| `codevira doctor` | Health check |
|
|
236
|
-
| `codevira projects` | List every project codevira knows about on this machine |
|
|
237
|
-
| `codevira projects --ghosts-only` | Find half-initialised project dirs |
|
|
238
|
-
| `codevira clean --ghosts` | Remove ghost dirs (
|
|
239
|
-
| `codevira
|
|
240
|
-
| `codevira
|
|
241
|
-
| `codevira
|
|
242
|
-
| `codevira
|
|
261
|
+
| Command | What it does | Since |
|
|
262
|
+
|---|---|---|
|
|
263
|
+
| `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) | v2.0 |
|
|
264
|
+
| `codevira doctor` | Health check | v2.0 |
|
|
265
|
+
| `codevira projects` | List every project codevira knows about on this machine | v2.0 |
|
|
266
|
+
| `codevira projects --ghosts-only` | Find half-initialised project dirs | v2.0 |
|
|
267
|
+
| `codevira clean --ghosts` | Remove ghost dirs AND truly-empty data dirs | v2.0 (+ v2.1.2 #14) |
|
|
268
|
+
| `codevira clean --orphans` | Remove orphan data dirs AND bare global.db rows | v2.0 (+ v2.1.2 #13) |
|
|
269
|
+
| `codevira insights` | Stable + reverted decisions across past sessions | v2.0 |
|
|
270
|
+
| `codevira replay` | Decisions timeline (terminal / markdown / html output) | v2.0 |
|
|
271
|
+
| `codevira budget` | Per-session token usage | v2.0 |
|
|
272
|
+
| `codevira hooks list` | Show installed Claude Code lifecycle hooks | v2.0 |
|
|
273
|
+
| `codevira heal --decisions` | Backfill semantic embeddings for existing decisions | v2.1.0 |
|
|
274
|
+
| `codevira reset --vectors/--graph/--all` | Destructive cleanup (auto-exports decisions first) | **v2.1.2** |
|
|
275
|
+
| `codevira export decisions [--format json\|sql]` | Standalone backup of decisions / outcomes / preferences | **v2.1.2** |
|
|
276
|
+
| `codevira calibrate` | Re-fit per-project similarity threshold | **v2.1.2** |
|
|
243
277
|
|
|
244
278
|
Run `codevira --help` for the full subcommand list.
|
|
245
279
|
|
|
280
|
+
### What's production-stable vs best-effort
|
|
281
|
+
|
|
282
|
+
| Production-stable | Best-effort / coming soon |
|
|
283
|
+
|---|---|
|
|
284
|
+
| Cross-tool decision memory (search_decisions, get_session_context) | Multi-language code graph for languages OTHER than Python / TypeScript / Go / Rust / Java / C# / Ruby / C++ / Kotlin / Swift / PHP / JS — extend via tree-sitter language pack |
|
|
285
|
+
| do_not_revert guarding via Decision Lock + Anti-Regression hero | Animated demo GIF (coming v2.2 launch) |
|
|
286
|
+
| Hybrid BM25 + semantic search with self-calibrating threshold | Native MCP Apps UI (`ui://` URIs) — when MCP SDK exposes the scheme |
|
|
287
|
+
| Per-project + cross-project preferences via global.db | Real-time multi-machine sync — local-first is by design; if you need it, export/import is the path |
|
|
288
|
+
| All MCP tools (graph, roadmap, changesets, learning, decisions) | Web UI for browsing decisions (use the `codevira://decisions` MCP resource in Claude Desktop today) |
|
|
289
|
+
|
|
246
290
|
### Customizing what's indexed
|
|
247
291
|
|
|
248
292
|
By default codevira indexes every common source / config / docs extension
|
|
@@ -45,6 +45,35 @@ Your AI agent reads the same 12 files every session before doing any actual work
|
|
|
45
45
|
|
|
46
46
|
---
|
|
47
47
|
|
|
48
|
+
## What's new in v2.1.2 — trust recovery
|
|
49
|
+
|
|
50
|
+
v2.1.1 shipped hybrid search (BM25 + semantic) but without a similarity floor, so off-topic prompts kept surfacing irrelevant decisions. v2.1.2 is a **trust-recovery release** based on four independent field-test reports: every fix restores confidence in something codevira already does.
|
|
51
|
+
|
|
52
|
+
| Area | What changed |
|
|
53
|
+
|---|---|
|
|
54
|
+
| **Smart similarity threshold** | `search_decisions` self-calibrates a per-project distance threshold from your protected decisions. Gibberish queries return zero results, not "least bad" matches. `codevira calibrate` to manually re-fit. |
|
|
55
|
+
| **Honest cleanup** | `codevira reset --vectors / --graph / --all` replaces destructive `heal` flags (which `rm -rf`'d decisions). Decisions auto-exported to `<data_dir>/exports/` before any wipe. Typed confirmation required (`reset` / `graph` / `vectors` / `all`). |
|
|
56
|
+
| **Backup-first by default** | `codevira export decisions [--format json|sql]` — standalone backup any time. |
|
|
57
|
+
| **Proactive conflict detection** | New `check_conflict(decision_text)` MCP tool flags duplicate or contradictory decisions BEFORE you write. `record_decision` runs it automatically and surfaces `_conflict_warning`. |
|
|
58
|
+
| **Enumerate decisions** | New `list_decisions(limit, since_date, file_pattern, protected_only, session_id, tags)` MCP tool. Closes the "remembers but can't list" gap. |
|
|
59
|
+
| **Batch APIs** | `record_decisions([…])` + `write_session_logs([…])` cut memory-dump sessions from ~26 round trips to 1. |
|
|
60
|
+
| **Tags + supersede** | Decisions can carry tags (`record_decision(tags=[…])`); `list_tags()` enumerates. `supersede_decision(old_id, new_decision, reason)` retires a prior decision with auditable history. |
|
|
61
|
+
| **since= filter** | `search_decisions`, `get_history`, `get_session_context` all accept `since="YYYY-MM-DD"` so "what's new since I was last here" is a one-call query. |
|
|
62
|
+
| **Rule extractor noise filter** | `top_signals.rules` no longer emits sliding-window n-grams as fake patterns. Stopwords + density gate + substring suppression. Skipped entirely on pre-code projects. |
|
|
63
|
+
| **Cross-project rules leak fix** | `language IS NULL` rules no longer fan out to every project. A Go-project rule stays in the Go project. |
|
|
64
|
+
| **Post-edit graph refresh** | New PostToolUse policy refreshes graph nodes after Edit/Write/MultiEdit so `get_node` / `get_impact` see current data without `index --full`. |
|
|
65
|
+
| **Auto-clear placeholder phase** | `add_phase(phase=1, …)` on a fresh project silently replaces the bootstrap "Getting Started" stub instead of refusing as duplicate. |
|
|
66
|
+
| **`complete_phase` enhancements** | `backfill=True` + `completed_at` for retroactive completion; `git_ref` to link to a commit/PR. `bulk_import_phases([…])` for migrating multi-phase git history in one call. |
|
|
67
|
+
| **Hook regex precision** | Commit-message-shaped prompts (`feat(api):` / `fix:` / etc.) no longer trigger context injection. |
|
|
68
|
+
| **Bundled non-Python playbooks** | `coding-standards-typescript.md`, `coding-standards-go.md`, `coding-standards-generic.md` auto-selected by detected language. |
|
|
69
|
+
| **session_id collision** | `write_session_log` auto-suffixes on conflict and returns the actual id (vs silent overwrite). |
|
|
70
|
+
| **`do_not_revert` echo** | When passed as a non-bool (int 1, string "true"), the response carries `_input_coerced_warning` so you see what got stored. |
|
|
71
|
+
| **mypy baseline** | All 42 pre-existing type errors cleared; mypy is now a hard gate. |
|
|
72
|
+
|
|
73
|
+
Full plan + design rationale: [docs/plans/v2.1.2.md](docs/plans/v2.1.2.md).
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
48
77
|
## What's new in v2.0
|
|
49
78
|
|
|
50
79
|
> 30-second demo: **[docs/demo/codevira-demo.mp4](docs/demo/codevira-demo.mp4)**
|
|
@@ -182,20 +211,35 @@ summary: 14 pass · 0 warn · 0 fail
|
|
|
182
211
|
|
|
183
212
|
### Daily-use commands you'll actually run
|
|
184
213
|
|
|
185
|
-
| Command | What it does |
|
|
186
|
-
|
|
187
|
-
| `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) |
|
|
188
|
-
| `codevira doctor` | Health check |
|
|
189
|
-
| `codevira projects` | List every project codevira knows about on this machine |
|
|
190
|
-
| `codevira projects --ghosts-only` | Find half-initialised project dirs |
|
|
191
|
-
| `codevira clean --ghosts` | Remove ghost dirs (
|
|
192
|
-
| `codevira
|
|
193
|
-
| `codevira
|
|
194
|
-
| `codevira
|
|
195
|
-
| `codevira
|
|
214
|
+
| Command | What it does | Since |
|
|
215
|
+
|---|---|---|
|
|
216
|
+
| `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) | v2.0 |
|
|
217
|
+
| `codevira doctor` | Health check | v2.0 |
|
|
218
|
+
| `codevira projects` | List every project codevira knows about on this machine | v2.0 |
|
|
219
|
+
| `codevira projects --ghosts-only` | Find half-initialised project dirs | v2.0 |
|
|
220
|
+
| `codevira clean --ghosts` | Remove ghost dirs AND truly-empty data dirs | v2.0 (+ v2.1.2 #14) |
|
|
221
|
+
| `codevira clean --orphans` | Remove orphan data dirs AND bare global.db rows | v2.0 (+ v2.1.2 #13) |
|
|
222
|
+
| `codevira insights` | Stable + reverted decisions across past sessions | v2.0 |
|
|
223
|
+
| `codevira replay` | Decisions timeline (terminal / markdown / html output) | v2.0 |
|
|
224
|
+
| `codevira budget` | Per-session token usage | v2.0 |
|
|
225
|
+
| `codevira hooks list` | Show installed Claude Code lifecycle hooks | v2.0 |
|
|
226
|
+
| `codevira heal --decisions` | Backfill semantic embeddings for existing decisions | v2.1.0 |
|
|
227
|
+
| `codevira reset --vectors/--graph/--all` | Destructive cleanup (auto-exports decisions first) | **v2.1.2** |
|
|
228
|
+
| `codevira export decisions [--format json\|sql]` | Standalone backup of decisions / outcomes / preferences | **v2.1.2** |
|
|
229
|
+
| `codevira calibrate` | Re-fit per-project similarity threshold | **v2.1.2** |
|
|
196
230
|
|
|
197
231
|
Run `codevira --help` for the full subcommand list.
|
|
198
232
|
|
|
233
|
+
### What's production-stable vs best-effort
|
|
234
|
+
|
|
235
|
+
| Production-stable | Best-effort / coming soon |
|
|
236
|
+
|---|---|
|
|
237
|
+
| Cross-tool decision memory (search_decisions, get_session_context) | Multi-language code graph for languages OTHER than Python / TypeScript / Go / Rust / Java / C# / Ruby / C++ / Kotlin / Swift / PHP / JS — extend via tree-sitter language pack |
|
|
238
|
+
| do_not_revert guarding via Decision Lock + Anti-Regression hero | Animated demo GIF (coming v2.2 launch) |
|
|
239
|
+
| Hybrid BM25 + semantic search with self-calibrating threshold | Native MCP Apps UI (`ui://` URIs) — when MCP SDK exposes the scheme |
|
|
240
|
+
| Per-project + cross-project preferences via global.db | Real-time multi-machine sync — local-first is by design; if you need it, export/import is the path |
|
|
241
|
+
| All MCP tools (graph, roadmap, changesets, learning, decisions) | Web UI for browsing decisions (use the `codevira://decisions` MCP resource in Claude Desktop today) |
|
|
242
|
+
|
|
199
243
|
### Customizing what's indexed
|
|
200
244
|
|
|
201
245
|
By default codevira indexes every common source / config / docs extension
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: codevira
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.2
|
|
4
4
|
Summary: Stop re-explaining your project to AI agents every session. Codevira gives Claude Code, Cursor, Windsurf, and Antigravity shared persistent memory of your codebase — locally, no signup, MIT-licensed. One install configures every AI tool.
|
|
5
5
|
Author-email: Sachin Shelke <sachin.worldnet@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -92,6 +92,35 @@ Your AI agent reads the same 12 files every session before doing any actual work
|
|
|
92
92
|
|
|
93
93
|
---
|
|
94
94
|
|
|
95
|
+
## What's new in v2.1.2 — trust recovery
|
|
96
|
+
|
|
97
|
+
v2.1.1 shipped hybrid search (BM25 + semantic) but without a similarity floor, so off-topic prompts kept surfacing irrelevant decisions. v2.1.2 is a **trust-recovery release** based on four independent field-test reports: every fix restores confidence in something codevira already does.
|
|
98
|
+
|
|
99
|
+
| Area | What changed |
|
|
100
|
+
|---|---|
|
|
101
|
+
| **Smart similarity threshold** | `search_decisions` self-calibrates a per-project distance threshold from your protected decisions. Gibberish queries return zero results, not "least bad" matches. `codevira calibrate` to manually re-fit. |
|
|
102
|
+
| **Honest cleanup** | `codevira reset --vectors / --graph / --all` replaces destructive `heal` flags (which `rm -rf`'d decisions). Decisions auto-exported to `<data_dir>/exports/` before any wipe. Typed confirmation required (`reset` / `graph` / `vectors` / `all`). |
|
|
103
|
+
| **Backup-first by default** | `codevira export decisions [--format json|sql]` — standalone backup any time. |
|
|
104
|
+
| **Proactive conflict detection** | New `check_conflict(decision_text)` MCP tool flags duplicate or contradictory decisions BEFORE you write. `record_decision` runs it automatically and surfaces `_conflict_warning`. |
|
|
105
|
+
| **Enumerate decisions** | New `list_decisions(limit, since_date, file_pattern, protected_only, session_id, tags)` MCP tool. Closes the "remembers but can't list" gap. |
|
|
106
|
+
| **Batch APIs** | `record_decisions([…])` + `write_session_logs([…])` cut memory-dump sessions from ~26 round trips to 1. |
|
|
107
|
+
| **Tags + supersede** | Decisions can carry tags (`record_decision(tags=[…])`); `list_tags()` enumerates. `supersede_decision(old_id, new_decision, reason)` retires a prior decision with auditable history. |
|
|
108
|
+
| **since= filter** | `search_decisions`, `get_history`, `get_session_context` all accept `since="YYYY-MM-DD"` so "what's new since I was last here" is a one-call query. |
|
|
109
|
+
| **Rule extractor noise filter** | `top_signals.rules` no longer emits sliding-window n-grams as fake patterns. Stopwords + density gate + substring suppression. Skipped entirely on pre-code projects. |
|
|
110
|
+
| **Cross-project rules leak fix** | `language IS NULL` rules no longer fan out to every project. A Go-project rule stays in the Go project. |
|
|
111
|
+
| **Post-edit graph refresh** | New PostToolUse policy refreshes graph nodes after Edit/Write/MultiEdit so `get_node` / `get_impact` see current data without `index --full`. |
|
|
112
|
+
| **Auto-clear placeholder phase** | `add_phase(phase=1, …)` on a fresh project silently replaces the bootstrap "Getting Started" stub instead of refusing as duplicate. |
|
|
113
|
+
| **`complete_phase` enhancements** | `backfill=True` + `completed_at` for retroactive completion; `git_ref` to link to a commit/PR. `bulk_import_phases([…])` for migrating multi-phase git history in one call. |
|
|
114
|
+
| **Hook regex precision** | Commit-message-shaped prompts (`feat(api):` / `fix:` / etc.) no longer trigger context injection. |
|
|
115
|
+
| **Bundled non-Python playbooks** | `coding-standards-typescript.md`, `coding-standards-go.md`, `coding-standards-generic.md` auto-selected by detected language. |
|
|
116
|
+
| **session_id collision** | `write_session_log` auto-suffixes on conflict and returns the actual id (vs silent overwrite). |
|
|
117
|
+
| **`do_not_revert` echo** | When passed as a non-bool (int 1, string "true"), the response carries `_input_coerced_warning` so you see what got stored. |
|
|
118
|
+
| **mypy baseline** | All 42 pre-existing type errors cleared; mypy is now a hard gate. |
|
|
119
|
+
|
|
120
|
+
Full plan + design rationale: [docs/plans/v2.1.2.md](docs/plans/v2.1.2.md).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
95
124
|
## What's new in v2.0
|
|
96
125
|
|
|
97
126
|
> 30-second demo: **[docs/demo/codevira-demo.mp4](docs/demo/codevira-demo.mp4)**
|
|
@@ -229,20 +258,35 @@ summary: 14 pass · 0 warn · 0 fail
|
|
|
229
258
|
|
|
230
259
|
### Daily-use commands you'll actually run
|
|
231
260
|
|
|
232
|
-
| Command | What it does |
|
|
233
|
-
|
|
234
|
-
| `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) |
|
|
235
|
-
| `codevira doctor` | Health check |
|
|
236
|
-
| `codevira projects` | List every project codevira knows about on this machine |
|
|
237
|
-
| `codevira projects --ghosts-only` | Find half-initialised project dirs |
|
|
238
|
-
| `codevira clean --ghosts` | Remove ghost dirs (
|
|
239
|
-
| `codevira
|
|
240
|
-
| `codevira
|
|
241
|
-
| `codevira
|
|
242
|
-
| `codevira
|
|
261
|
+
| Command | What it does | Since |
|
|
262
|
+
|---|---|---|
|
|
263
|
+
| `codevira setup` | Re-sync IDE configs (after installing a new AI tool, etc.) | v2.0 |
|
|
264
|
+
| `codevira doctor` | Health check | v2.0 |
|
|
265
|
+
| `codevira projects` | List every project codevira knows about on this machine | v2.0 |
|
|
266
|
+
| `codevira projects --ghosts-only` | Find half-initialised project dirs | v2.0 |
|
|
267
|
+
| `codevira clean --ghosts` | Remove ghost dirs AND truly-empty data dirs | v2.0 (+ v2.1.2 #14) |
|
|
268
|
+
| `codevira clean --orphans` | Remove orphan data dirs AND bare global.db rows | v2.0 (+ v2.1.2 #13) |
|
|
269
|
+
| `codevira insights` | Stable + reverted decisions across past sessions | v2.0 |
|
|
270
|
+
| `codevira replay` | Decisions timeline (terminal / markdown / html output) | v2.0 |
|
|
271
|
+
| `codevira budget` | Per-session token usage | v2.0 |
|
|
272
|
+
| `codevira hooks list` | Show installed Claude Code lifecycle hooks | v2.0 |
|
|
273
|
+
| `codevira heal --decisions` | Backfill semantic embeddings for existing decisions | v2.1.0 |
|
|
274
|
+
| `codevira reset --vectors/--graph/--all` | Destructive cleanup (auto-exports decisions first) | **v2.1.2** |
|
|
275
|
+
| `codevira export decisions [--format json\|sql]` | Standalone backup of decisions / outcomes / preferences | **v2.1.2** |
|
|
276
|
+
| `codevira calibrate` | Re-fit per-project similarity threshold | **v2.1.2** |
|
|
243
277
|
|
|
244
278
|
Run `codevira --help` for the full subcommand list.
|
|
245
279
|
|
|
280
|
+
### What's production-stable vs best-effort
|
|
281
|
+
|
|
282
|
+
| Production-stable | Best-effort / coming soon |
|
|
283
|
+
|---|---|
|
|
284
|
+
| Cross-tool decision memory (search_decisions, get_session_context) | Multi-language code graph for languages OTHER than Python / TypeScript / Go / Rust / Java / C# / Ruby / C++ / Kotlin / Swift / PHP / JS — extend via tree-sitter language pack |
|
|
285
|
+
| do_not_revert guarding via Decision Lock + Anti-Regression hero | Animated demo GIF (coming v2.2 launch) |
|
|
286
|
+
| Hybrid BM25 + semantic search with self-calibrating threshold | Native MCP Apps UI (`ui://` URIs) — when MCP SDK exposes the scheme |
|
|
287
|
+
| Per-project + cross-project preferences via global.db | Real-time multi-machine sync — local-first is by design; if you need it, export/import is the path |
|
|
288
|
+
| All MCP tools (graph, roadmap, changesets, learning, decisions) | Web UI for browsing decisions (use the `codevira://decisions` MCP resource in Claude Desktop today) |
|
|
289
|
+
|
|
246
290
|
### Customizing what's indexed
|
|
247
291
|
|
|
248
292
|
By default codevira indexes every common source / config / docs extension
|
|
@@ -58,6 +58,8 @@ docs/heroes/10-ai-promotion.md
|
|
|
58
58
|
docs/heroes/README.md
|
|
59
59
|
docs/heroes/pillar-1-setup.md
|
|
60
60
|
docs/internal/competitive-landscape.md
|
|
61
|
+
docs/plans/v2.1.2.md
|
|
62
|
+
docs/troubleshooting/antigravity.md
|
|
61
63
|
graph/_schema.yaml
|
|
62
64
|
indexer/__init__.py
|
|
63
65
|
indexer/_dedupe_migration.py
|
|
@@ -84,7 +86,9 @@ mcp_server/auto_init.py
|
|
|
84
86
|
mcp_server/cli.py
|
|
85
87
|
mcp_server/cli_agents.py
|
|
86
88
|
mcp_server/cli_budget.py
|
|
89
|
+
mcp_server/cli_calibrate.py
|
|
87
90
|
mcp_server/cli_configure.py
|
|
91
|
+
mcp_server/cli_export.py
|
|
88
92
|
mcp_server/cli_hooks_admin.py
|
|
89
93
|
mcp_server/cli_insights.py
|
|
90
94
|
mcp_server/cli_projects.py
|
|
@@ -119,6 +123,9 @@ mcp_server/data/hooks/pre_tool_use.sh
|
|
|
119
123
|
mcp_server/data/hooks/session_start.sh
|
|
120
124
|
mcp_server/data/hooks/stop.sh
|
|
121
125
|
mcp_server/data/hooks/user_prompt_submit.sh
|
|
126
|
+
mcp_server/data/rules/coding-standards-generic.md
|
|
127
|
+
mcp_server/data/rules/coding-standards-go.md
|
|
128
|
+
mcp_server/data/rules/coding-standards-typescript.md
|
|
122
129
|
mcp_server/data/rules/coding-standards.md
|
|
123
130
|
mcp_server/data/rules/engineering-excellence.md
|
|
124
131
|
mcp_server/data/rules/git-cicd-governance.md
|
|
@@ -156,6 +163,7 @@ mcp_server/engine/policies/cross_session.py
|
|
|
156
163
|
mcp_server/engine/policies/decision_lock.py
|
|
157
164
|
mcp_server/engine/policies/intent_inference.py
|
|
158
165
|
mcp_server/engine/policies/live_style.py
|
|
166
|
+
mcp_server/engine/policies/post_edit_refresh.py
|
|
159
167
|
mcp_server/engine/policies/scope_contract.py
|
|
160
168
|
mcp_server/engine/policies/token_budget.py
|
|
161
169
|
mcp_server/engine/wiring/__init__.py
|
|
@@ -164,6 +172,7 @@ mcp_server/engine/wiring/mcp_dispatch.py
|
|
|
164
172
|
mcp_server/tools/__init__.py
|
|
165
173
|
mcp_server/tools/_decision_embeddings.py
|
|
166
174
|
mcp_server/tools/changesets.py
|
|
175
|
+
mcp_server/tools/check_conflict.py
|
|
167
176
|
mcp_server/tools/code_reader.py
|
|
168
177
|
mcp_server/tools/graph.py
|
|
169
178
|
mcp_server/tools/learning.py
|