codevira 2.0.0__tar.gz → 2.1.1__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.0.0 → codevira-2.1.1}/CHANGELOG.md +58 -11
- {codevira-2.0.0/codevira.egg-info → codevira-2.1.1}/PKG-INFO +9 -1
- {codevira-2.0.0 → codevira-2.1.1/codevira.egg-info}/PKG-INFO +9 -1
- {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/SOURCES.txt +5 -1
- {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/requires.txt +9 -0
- codevira-2.1.1/docs/foolproof-product-charter.md +197 -0
- codevira-2.1.1/docs/internal/competitive-landscape.md +239 -0
- codevira-2.1.1/docs/release-process.md +335 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/chunker.py +260 -71
- {codevira-2.0.0 → codevira-2.1.1}/indexer/index_codebase.py +661 -101
- {codevira-2.0.0 → codevira-2.1.1}/indexer/sqlite_graph.py +375 -152
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/__init__.py +1 -1
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli.py +746 -154
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_configure.py +151 -29
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_projects.py +62 -14
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/crash_logger.py +119 -11
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/detect.py +264 -66
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/ide_inject.py +161 -33
- codevira-2.1.1/mcp_server/tools/_decision_embeddings.py +314 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/learning.py +16 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/search.py +60 -2
- {codevira-2.0.0 → codevira-2.1.1}/pyproject.toml +13 -1
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_chunker.py +141 -17
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli.py +396 -228
- codevira-2.1.1/tests/test_decision_embeddings.py +218 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_detect.py +141 -15
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_ide_inject.py +369 -119
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_index_codebase.py +851 -165
- codevira-2.0.0/mcp_server/data/__pycache__/__init__.cpython-313.pyc +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/LICENSE +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/MANIFEST.in +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/README.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/builder.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/developer.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/documenter.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/orchestrator.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/planner.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/01-code-review.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/02-adversarial-fix-review.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/03-cross-module-impact.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/06-doc-drift.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/07-security-audit.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/12-llm-redteam.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/13-multi-ide-schema.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/22-competitor-benchmark.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/README.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/tier2-scripts.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/qa/tier3-manual.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/reviewer.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/agents/tester.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/dependency_links.txt +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/entry_points.txt +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/codevira.egg-info/top_level.txt +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/config.example.yaml +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/alpha-tester-invites.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/demo/README.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/00-engine.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/01-decision-lock.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/02-anti-regression.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/03-scope-contract.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/04-blast-radius.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/05-cross-session.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/06-token-budget.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/07-live-style.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/08-decision-replay.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/09-intent-inference.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/10-ai-promotion.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/README.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/heroes/pillar-1-setup.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/hn-launch-day.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/how-i-built-persistent-memory-for-ai-agents.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/linkedin-article-ai-agent-memory.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/linkedin-post-ai-agent-memory.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/local-pypi-https.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/medium-your-ai-coding-agent-has-amnesia.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/qa-playbook.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/roadmap.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/v2-completion-plan.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/v2-execution-log.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/v2-master-plan.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/docs/vs-other-memory-tools.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/graph/_schema.yaml +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/__init__.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/_dedupe_migration.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/_fork_safety.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/_sqlite_util.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/fix_history.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/global_db.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/graph_generator.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/outcome_tracker.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/rule_learner.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/indexer/treesitter_parser.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/__main__.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_ghost_check.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_project_inventory.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_prompts.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_repair_init.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/_safe_crash.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/agents_md.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/auto_init.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_agents.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_budget.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_hooks_admin.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_insights.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/cli_replay.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/__init__.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/builder.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/developer.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/documenter.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/orchestrator.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/planner.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/reviewer.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/agents/tester.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/config.example.yaml +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/post_tool_use.sh +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/pre_tool_use.sh +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/session_start.sh +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/stop.sh +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/hooks/user_prompt_submit.sh +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/coding-standards.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/engineering-excellence.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/git-cicd-governance.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/git_commits.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/incremental-updates.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/master_rule.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/multi-language.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/persistence.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/resilience-observability.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/smoke-testing.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/rules/testing-standards.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/agents_md.tmpl +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/canonical_block.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/claude_md.tmpl +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/copilot_instructions.tmpl +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/cursor_rules.mdc.tmpl +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/gemini_md.tmpl +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/data/templates/windsurfrules.tmpl +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/decision_replay.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/doctor.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/__init__.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/demo_policy.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/events.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/intent_classifier.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/__init__.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/_signature_detect.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/ai_promotion.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/anti_regression.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/blast_radius.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/cross_session.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/decision_lock.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/intent_inference.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/live_style.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/scope_contract.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policies/token_budget.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/policy.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/promotion_score.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/runner.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/scope_contract.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/signals.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/token_meter.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/wiring/__init__.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/wiring/claude_code_hooks.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/engine/wiring/mcp_dispatch.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/gitignore.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/global_sync.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/http_server.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/launchd.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/log_retention.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/migrate.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/paths.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/prompts.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/roadmap_drift.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/server.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/setup_wizard.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/__init__.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/changesets.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/code_reader.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/graph.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/playbook.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/mcp_server/tools/roadmap.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/coding-standards.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/engineering-excellence.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/git-cicd-governance.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/git_commits.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/incremental-updates.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/master_rule.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/persistence.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/resilience-observability.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/smoke-testing.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/rules/testing-standards.md +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/setup.cfg +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test__prompts.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_auto_init.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_call_edge_fk_safety.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_agents.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_configure.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_insights.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_projects.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_replay.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_cli_version.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_crash_logger.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_dedupe_migration.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_doctor.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_fk_safety_extended.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_fork_safety.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_ghost_check.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_gitignore.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_global_db.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_global_sync.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_graph_generator.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_hook_resilience.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_http_server.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_launchd.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_log_retention.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_migrate.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_outcome_tracker.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_paths.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_prompts.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_record_decision.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_repair_init.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_retire_rule.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_roadmap_drift.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_rule_learner.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_server.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_setup_wizard.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_sqlite_graph.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_sqlite_util.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_changesets.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_code_reader.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_graph.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_learning.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_playbook.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_roadmap.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_tools_search.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_treesitter_parser.py +0 -0
- {codevira-2.0.0 → codevira-2.1.1}/tests/test_watcher_circuit.py +0 -0
|
@@ -11,19 +11,66 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [2.1.1] — 2026-05-17 — Hybrid decision search
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **Hybrid search for `search_decisions`** (BM25 + ChromaDB semantic + RRF fusion).
|
|
18
|
+
Closes the UDAP-benchmark gap: queries like `"DDD architecture layer"` or
|
|
19
|
+
`"codevira backfill"` that returned 0 hits in v2.0/v2.1.0 now surface the
|
|
20
|
+
right decisions via semantic recall. Response includes a `retrieval` field
|
|
21
|
+
indicating which path contributed (hybrid / keyword / semantic).
|
|
22
|
+
- **`codevira heal --decisions`** — non-destructive backfill embedding all
|
|
23
|
+
existing decisions into the semantic index. Run once after upgrading from
|
|
24
|
+
v2.0/v2.1.0 to pick up hybrid recall on pre-existing decision history.
|
|
25
|
+
Idempotent (upsert pattern).
|
|
26
|
+
- **`mcp_server/tools/_decision_embeddings.py`** — new helper module:
|
|
27
|
+
embed_decision, semantic_search_decisions, rrf_merge, backfill_all_decisions.
|
|
28
|
+
P9 graceful degradation throughout — chromadb failures never block SQL
|
|
29
|
+
writes or BM25 reads.
|
|
30
|
+
|
|
31
|
+
### Tests
|
|
32
|
+
- `tests/test_decision_embeddings.py` — 15 new regression tests covering
|
|
33
|
+
RRF math, graceful-degradation paths, and the explicit benchmark queries.
|
|
34
|
+
|
|
35
|
+
## [2.1.0] — 2026-05-17 — Reliability hardening + Pillar 3 discipline scaffold
|
|
36
|
+
|
|
37
|
+
### Added — Pillar 3: AI development discipline scaffold (2026-05-16)
|
|
38
|
+
|
|
39
|
+
The codevira repo now ships its own discipline scaffold — the same
|
|
40
|
+
pattern that will be exposed as `codevira discipline install` in
|
|
41
|
+
v2.2. This is the reference implementation, eaten as dog food.
|
|
42
|
+
|
|
43
|
+
- **`.claude/skills/`** — 4 SKILL.md files: `development-discipline`,
|
|
44
|
+
`open-source-quality`, `release-readiness`, `epistemic-honesty`.
|
|
45
|
+
- **`.claude/hooks/pre-release-block.sh`** — PreToolUse hard wall.
|
|
46
|
+
Refuses `twine upload`, `gh release ... --draft=false`,
|
|
47
|
+
`pipx publish`, etc. unless `.release-evidence/<version>.json`
|
|
48
|
+
shows G1–G5 pass. Bypass via `CODEVIRA_RELEASE_OVERRIDE=1`.
|
|
49
|
+
- **`Makefile`** — 12 targets including `release-verify-version`,
|
|
50
|
+
`release-gauntlet`, `release-build`, `release-dry-run`,
|
|
51
|
+
`release-publish`, `release-smoke`, `release-full`.
|
|
52
|
+
- **`.pre-commit-config.yaml`** — ruff lint+format, mypy, hygiene.
|
|
53
|
+
- **`tests/e2e/test_first_contact.py`** + 4 fixtures (docs_only,
|
|
54
|
+
code_only_python, polyglot, monorepo). G2 gate.
|
|
55
|
+
- **`.github/workflows/{ci,release-gate}.yml`** — CI hard wall.
|
|
56
|
+
- **`codevira.discipline.yaml`** — central scaffold config.
|
|
57
|
+
- **`scripts/check_real_ide_smoke.sh`** — G3 stub.
|
|
58
|
+
- **`docs/release-process.md`** — step-by-step foolproof release.
|
|
59
|
+
|
|
14
60
|
### Planned for v2.1
|
|
15
61
|
|
|
16
|
-
See [ROADMAP.md](ROADMAP.md#-v21--
|
|
17
|
-
|
|
18
|
-
- **
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- **
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
62
|
+
See [ROADMAP.md](ROADMAP.md#-v21--new-user-first-contact--reliability-hardening).
|
|
63
|
+
|
|
64
|
+
- **Reliability hardening (23 bugs A–O)** — silent-failure elimination
|
|
65
|
+
surfaced by the discipline-scaffold e2e fixtures.
|
|
66
|
+
- **Hybrid search (BM25 + semantic + rerank)** — natural-language
|
|
67
|
+
decision search.
|
|
68
|
+
- **Decision deduplication** (ADD/UPDATE/NOOP) + audit trail.
|
|
69
|
+
- **Conditional hook injection** — kill the always-on token tax.
|
|
70
|
+
- **Multi-language `get_signature` / `get_code`** — wire tree-sitter.
|
|
71
|
+
- **`record_decisions_batch` API** — compress protocol overhead.
|
|
72
|
+
- **CLI naming clarity** — `init` / `setup` / `register` / `configure`
|
|
73
|
+
canonical hierarchy.
|
|
27
74
|
|
|
28
75
|
---
|
|
29
76
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: codevira
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.1
|
|
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
|
|
@@ -36,6 +36,14 @@ Requires-Dist: chromadb>=0.5.0
|
|
|
36
36
|
Requires-Dist: sentence-transformers>=2.7.0
|
|
37
37
|
Provides-Extra: search
|
|
38
38
|
Provides-Extra: all
|
|
39
|
+
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
|
|
42
|
+
Requires-Dist: pytest-timeout>=2.1; extra == "dev"
|
|
43
|
+
Requires-Dist: ruff>=0.6.0; extra == "dev"
|
|
44
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
45
|
+
Requires-Dist: types-PyYAML; extra == "dev"
|
|
46
|
+
Requires-Dist: pre-commit>=3.5; extra == "dev"
|
|
39
47
|
|
|
40
48
|
# Codevira
|
|
41
49
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: codevira
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.1
|
|
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
|
|
@@ -36,6 +36,14 @@ Requires-Dist: chromadb>=0.5.0
|
|
|
36
36
|
Requires-Dist: sentence-transformers>=2.7.0
|
|
37
37
|
Provides-Extra: search
|
|
38
38
|
Provides-Extra: all
|
|
39
|
+
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
|
|
42
|
+
Requires-Dist: pytest-timeout>=2.1; extra == "dev"
|
|
43
|
+
Requires-Dist: ruff>=0.6.0; extra == "dev"
|
|
44
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
45
|
+
Requires-Dist: types-PyYAML; extra == "dev"
|
|
46
|
+
Requires-Dist: pre-commit>=3.5; extra == "dev"
|
|
39
47
|
|
|
40
48
|
# Codevira
|
|
41
49
|
|
|
@@ -29,6 +29,7 @@ codevira.egg-info/entry_points.txt
|
|
|
29
29
|
codevira.egg-info/requires.txt
|
|
30
30
|
codevira.egg-info/top_level.txt
|
|
31
31
|
docs/alpha-tester-invites.md
|
|
32
|
+
docs/foolproof-product-charter.md
|
|
32
33
|
docs/hn-launch-day.md
|
|
33
34
|
docs/how-i-built-persistent-memory-for-ai-agents.md
|
|
34
35
|
docs/linkedin-article-ai-agent-memory.md
|
|
@@ -36,6 +37,7 @@ docs/linkedin-post-ai-agent-memory.md
|
|
|
36
37
|
docs/local-pypi-https.md
|
|
37
38
|
docs/medium-your-ai-coding-agent-has-amnesia.md
|
|
38
39
|
docs/qa-playbook.md
|
|
40
|
+
docs/release-process.md
|
|
39
41
|
docs/roadmap.md
|
|
40
42
|
docs/v2-completion-plan.md
|
|
41
43
|
docs/v2-execution-log.md
|
|
@@ -55,6 +57,7 @@ docs/heroes/09-intent-inference.md
|
|
|
55
57
|
docs/heroes/10-ai-promotion.md
|
|
56
58
|
docs/heroes/README.md
|
|
57
59
|
docs/heroes/pillar-1-setup.md
|
|
60
|
+
docs/internal/competitive-landscape.md
|
|
58
61
|
graph/_schema.yaml
|
|
59
62
|
indexer/__init__.py
|
|
60
63
|
indexer/_dedupe_migration.py
|
|
@@ -104,7 +107,6 @@ mcp_server/server.py
|
|
|
104
107
|
mcp_server/setup_wizard.py
|
|
105
108
|
mcp_server/data/__init__.py
|
|
106
109
|
mcp_server/data/config.example.yaml
|
|
107
|
-
mcp_server/data/__pycache__/__init__.cpython-313.pyc
|
|
108
110
|
mcp_server/data/agents/builder.md
|
|
109
111
|
mcp_server/data/agents/developer.md
|
|
110
112
|
mcp_server/data/agents/documenter.md
|
|
@@ -160,6 +162,7 @@ mcp_server/engine/wiring/__init__.py
|
|
|
160
162
|
mcp_server/engine/wiring/claude_code_hooks.py
|
|
161
163
|
mcp_server/engine/wiring/mcp_dispatch.py
|
|
162
164
|
mcp_server/tools/__init__.py
|
|
165
|
+
mcp_server/tools/_decision_embeddings.py
|
|
163
166
|
mcp_server/tools/changesets.py
|
|
164
167
|
mcp_server/tools/code_reader.py
|
|
165
168
|
mcp_server/tools/graph.py
|
|
@@ -189,6 +192,7 @@ tests/test_cli_projects.py
|
|
|
189
192
|
tests/test_cli_replay.py
|
|
190
193
|
tests/test_cli_version.py
|
|
191
194
|
tests/test_crash_logger.py
|
|
195
|
+
tests/test_decision_embeddings.py
|
|
192
196
|
tests/test_dedupe_migration.py
|
|
193
197
|
tests/test_detect.py
|
|
194
198
|
tests/test_doctor.py
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Codevira Foolproof Product Charter
|
|
2
|
+
|
|
3
|
+
**The product, not just the release.** v2.0.0 shipped via a process
|
|
4
|
+
that satisfied "all unit tests pass," but the *product* shipped with
|
|
5
|
+
23 silent-failure bugs. This document defines what "foolproof
|
|
6
|
+
product" means for codevira and how every code change must satisfy
|
|
7
|
+
it.
|
|
8
|
+
|
|
9
|
+
The release-discipline scaffold (Makefile + hook + CI + skills) is
|
|
10
|
+
the process. **This charter is the product**. They're complementary;
|
|
11
|
+
both are necessary.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## The 10 product principles (P1–P10)
|
|
16
|
+
|
|
17
|
+
| # | Principle | One-line rule |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| **P1** | No silent failures | Every 0-result code path emits a reason + `fix_command`. |
|
|
20
|
+
| **P2** | Self-diagnose on startup | Every entry point detects + reports known-bad states; never starts in a degraded state silently. |
|
|
21
|
+
| **P3** | Atomic state mutations | All external writes (files, DB, IDE configs) use atomic patterns. No half-written state. |
|
|
22
|
+
| **P4** | Defensive parsing | External input parses with fail-safe defaults; never crashes on malformed input. |
|
|
23
|
+
| **P5** | Bounded resources | No unbounded loops, retries, or log writes. Circuit breakers on every retry boundary. |
|
|
24
|
+
| **P6** | Predictable detection | One source of truth per concept. Two code paths that look at the same thing must agree. |
|
|
25
|
+
| **P7** | Reversible operations | Every install has a documented + tested uninstall. Every write merges, never overwrites user keys. |
|
|
26
|
+
| **P8** | Helpful error messages | WHAT failed + WHY + FIX. The `fix_command` pattern in every MCP tool response. |
|
|
27
|
+
| **P9** | Graceful degradation | Single-subsystem failure must not cascade. Document what still works when X is broken. |
|
|
28
|
+
| **P10** | Observability | Structured logging; `codevira doctor` reads actual state, never infers; logs auto-rotate. |
|
|
29
|
+
|
|
30
|
+
Full SKILL definitions live in
|
|
31
|
+
[`.claude/skills/foolproof-product/SKILL.md`](../.claude/skills/foolproof-product/SKILL.md).
|
|
32
|
+
Machine-checkable tests live in
|
|
33
|
+
[`tests/e2e/test_product_invariants.py`](../tests/e2e/test_product_invariants.py).
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## How the principles map to the v2.0 bugs
|
|
38
|
+
|
|
39
|
+
Every v2.0 bug traces to one or more violated P-principle. The
|
|
40
|
+
post-mortem:
|
|
41
|
+
|
|
42
|
+
| Bug | What broke | Violated principles |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| **A** — discovery vs. indexing matcher mismatch | `configure` finds 8 files; `index` matches 0 | P6 (predictable detection) |
|
|
45
|
+
| **B** — `index` says "up to date" with 0 chunks | Lies about state | P1 (silent failure) |
|
|
46
|
+
| **C** — `status` shows 0/0 with no warning on uninitialized | No actionable state signal | P1, P10 |
|
|
47
|
+
| **D** — config split between in-repo and centralized | Two configs disagree silently | P3 (atomic), P6 |
|
|
48
|
+
| **E** — docs-only repos produce silent 0 chunks | No reason given | P1 |
|
|
49
|
+
| **F** — `init` drops top-level files (`.`) | Single-language filter on dirs | P6 |
|
|
50
|
+
| **G** — project keys are unreadable hashes | UX-hostile state representation | (UX, not a P violation) |
|
|
51
|
+
| **H** — no `--verbose` on `index` | No way to diagnose | P10 |
|
|
52
|
+
| **I** — "Auto-detected" promises detection but shows defaults | Misleading label | P1, P8 |
|
|
53
|
+
| **J/K** — sentence-transformers on critical path | Claude Desktop disconnects | P9 (graceful degradation) |
|
|
54
|
+
| **L** — init lists generic dirs not present | False positives in detection | P1, P6 |
|
|
55
|
+
| **M** — init shows all 80 extensions regardless of project | Same | P1 |
|
|
56
|
+
| **N** — init interactive but should match configure | Inconsistency | P6 |
|
|
57
|
+
| **O** — configure typing "1,3,5" not arrow-keys | UX (not P violation, but quality) |
|
|
58
|
+
| **HNSW writer crash storm** | 41 crashes in one session | P2 (startup detect), P5 (circuit breaker) |
|
|
59
|
+
| **41-crash log spam** | Grows unbounded | P5, P10 |
|
|
60
|
+
| **Claude Desktop config cleared (rare)** | Race in non-atomic write | P3 |
|
|
61
|
+
| **codevira clean leaves orphaned hooks** | Reverse incomplete | P7 |
|
|
62
|
+
|
|
63
|
+
**Lesson:** these aren't isolated bugs. They're a category. The
|
|
64
|
+
category is "we wrote code that satisfies the function signature but
|
|
65
|
+
not the product invariants."
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## The mandatory checklist (every code change to mcp_server/ or indexer/)
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Subsystem touched: <indexer | MCP tool | hook | CLI | watcher>
|
|
73
|
+
Files in target list: <N files>
|
|
74
|
+
|
|
75
|
+
For each affected code path, answer:
|
|
76
|
+
|
|
77
|
+
P1 No silent failures [ ] All 0-result paths emit reason + fix_command
|
|
78
|
+
P2 Self-diagnose [ ] Doctor check added/updated if state added
|
|
79
|
+
P3 Atomic mutations [ ] Writes use tmp→fsync→rename or transactions
|
|
80
|
+
P4 Defensive parsing [ ] External input has try/except + safe default
|
|
81
|
+
P5 Bounded resources [ ] Loops bounded; retries have circuit breaker
|
|
82
|
+
P6 Predictable detection [ ] No parallel matcher; single source of truth
|
|
83
|
+
P7 Reversible [ ] Uninstall counterpart works (tested)
|
|
84
|
+
P8 Helpful errors [ ] Every error: WHAT + WHY + FIX
|
|
85
|
+
P9 Graceful degradation [ ] List what still works when this subsystem fails
|
|
86
|
+
P10 Observability [ ] Structured log; doctor surfaces new state
|
|
87
|
+
|
|
88
|
+
Justifications for any "N/A":
|
|
89
|
+
<e.g. "P3 N/A: no external state written">
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
A code review (human OR AI) that doesn't see this checklist for a
|
|
93
|
+
mcp_server/indexer change is a discipline breach. The
|
|
94
|
+
`foolproof-product` SKILL.md enforces it conversationally; the
|
|
95
|
+
`test_product_invariants.py` suite enforces it mechanically.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Subsystem-specific invariants
|
|
100
|
+
|
|
101
|
+
### Indexer
|
|
102
|
+
- One matcher (`discover_source_files()` is THE matcher)
|
|
103
|
+
- 0-chunk results MUST include reason + fix_command
|
|
104
|
+
- Watcher: circuit-broken after 5 consecutive failures
|
|
105
|
+
- Crash log rate-limited: 1 entry per file per minute MAX
|
|
106
|
+
|
|
107
|
+
### MCP server
|
|
108
|
+
- `tools/list` MUST respond in <1s (no chromadb / sentence-transformers
|
|
109
|
+
import on critical path)
|
|
110
|
+
- Every tool response includes `fix_command` on error
|
|
111
|
+
- Graceful degradation: keyword search works without ChromaDB
|
|
112
|
+
- Startup self-check: Chroma openable, DB tables present, version OK
|
|
113
|
+
|
|
114
|
+
### CLI
|
|
115
|
+
- Every error message: WHAT + WHY + FIX
|
|
116
|
+
- Every command has `--help` + a docstring
|
|
117
|
+
- Status / doctor must reflect actual state, never lie
|
|
118
|
+
|
|
119
|
+
### Hooks
|
|
120
|
+
- Hook scripts MUST be idempotent (re-running is safe)
|
|
121
|
+
- `hooks uninstall` removes everything `hooks install` wrote
|
|
122
|
+
- Hook injection respects user keys in `~/.claude/settings.json`
|
|
123
|
+
|
|
124
|
+
### IDE config writes
|
|
125
|
+
- Atomic: tmp → fsync → rename
|
|
126
|
+
- Merge: never overwrite user keys
|
|
127
|
+
- Verify: read back after write to confirm
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Graceful degradation matrix
|
|
132
|
+
|
|
133
|
+
What still works when each subsystem fails:
|
|
134
|
+
|
|
135
|
+
| Down | Still works |
|
|
136
|
+
|---|---|
|
|
137
|
+
| **ChromaDB corrupt** | Keyword search via SQLite, decisions, graph, roadmap, changesets |
|
|
138
|
+
| **HuggingFace network down** | Cached model continues to work |
|
|
139
|
+
| **`~/.codevira/global.db` corrupt** | Auto-reinit + warn; per-project state preserved |
|
|
140
|
+
| **Watcher crash** | All MCP tools; manual `codevira index --full` available |
|
|
141
|
+
| **One hook script broken** | MCP server alone; other hooks continue |
|
|
142
|
+
| **Disk full** | Operations refuse with clear "disk full" message; never silently truncate |
|
|
143
|
+
| **Permission denied** | Clear error with `chmod` / `chown` remediation |
|
|
144
|
+
|
|
145
|
+
Every new feature: ask "if this fails, what continues to work?"
|
|
146
|
+
Document the answer in the docstring AND in the relevant cell of
|
|
147
|
+
this matrix.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## The continuous-foolproof loop
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
1. Bug found in production
|
|
155
|
+
↓
|
|
156
|
+
2. Identify which P-principle was violated
|
|
157
|
+
↓
|
|
158
|
+
3. Fix the bug
|
|
159
|
+
↓
|
|
160
|
+
4. Add a regression test to test_first_contact.py OR test_product_invariants.py
|
|
161
|
+
↓
|
|
162
|
+
5. If the test exposes a pattern (not just one bug), strengthen the
|
|
163
|
+
relevant P principle in the SKILL.md
|
|
164
|
+
↓
|
|
165
|
+
6. Update this charter's bug table (the post-mortem section above)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Goal: every category of bug we ship gets encoded as a principle.
|
|
169
|
+
The next bug in that category fails the gauntlet before reaching users.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Anti-patterns the charter forbids
|
|
174
|
+
|
|
175
|
+
These are non-negotiable. A PR that introduces any of these is
|
|
176
|
+
blocked at review:
|
|
177
|
+
|
|
178
|
+
1. **Returning 0 results without a reason field.**
|
|
179
|
+
2. **Catching exceptions and silently continuing without logging.**
|
|
180
|
+
3. **Retry loops without a max-iteration limit.**
|
|
181
|
+
4. **Error messages that say "failed" without saying WHY.**
|
|
182
|
+
5. **New subsystems without a `codevira doctor` check.**
|
|
183
|
+
6. **New subsystems without a clean uninstall path.**
|
|
184
|
+
7. **Writes that overwrite user keys in shared config files.**
|
|
185
|
+
8. **DB migrations without a rollback script.**
|
|
186
|
+
9. **"It works in the happy path" without walking the sad paths.**
|
|
187
|
+
10. **Skipping P1-P10 checklist with "looks fine."**
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Reference
|
|
192
|
+
|
|
193
|
+
- Skill enforcement: [`.claude/skills/foolproof-product/SKILL.md`](../.claude/skills/foolproof-product/SKILL.md)
|
|
194
|
+
- Machine tests: [`tests/e2e/test_product_invariants.py`](../tests/e2e/test_product_invariants.py)
|
|
195
|
+
- Bug catalog: [ROADMAP.md § v2.1](../ROADMAP.md#-v21--new-user-first-contact--reliability-hardening)
|
|
196
|
+
- Release process: [`docs/release-process.md`](release-process.md)
|
|
197
|
+
- Contributor guide: [`CONTRIBUTING.md`](../CONTRIBUTING.md)
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# Competitive Landscape — Internal
|
|
2
|
+
|
|
3
|
+
> **NOT PUBLIC.** This file is in `.gitignore`. Never commit, never link
|
|
4
|
+
> from public docs, never reference by name in marketing copy. Used to
|
|
5
|
+
> drive internal v2.x prioritization.
|
|
6
|
+
|
|
7
|
+
**Last updated:** 2026-05-15
|
|
8
|
+
**Refresh cadence:** quarterly, or whenever a major competitor ships
|
|
9
|
+
something significant.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Why this is private
|
|
14
|
+
|
|
15
|
+
The public `ROADMAP.md` is vision-led — capabilities framed by what
|
|
16
|
+
they do for codevira's users. This doc is intelligence-led —
|
|
17
|
+
capabilities framed by what competitors offer. The two should never
|
|
18
|
+
be merged: naming competitors in your own roadmap reads as reactive
|
|
19
|
+
follower-positioning. Keep this conversation internal.
|
|
20
|
+
|
|
21
|
+
Each public roadmap item maps back to one or more competitive gaps
|
|
22
|
+
listed here. Engineering knows the strategic intent without the
|
|
23
|
+
roadmap telegraphing our moves.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## mem0 (https://mem0.ai)
|
|
28
|
+
|
|
29
|
+
**Positioning:** the default conversational-memory layer for
|
|
30
|
+
general-purpose AI agents and chatbots. Optimized for fast
|
|
31
|
+
extraction-and-distillation of natural-language facts at scale across
|
|
32
|
+
20+ vector stores.
|
|
33
|
+
|
|
34
|
+
**Mindshare:** ~55.7K GitHub stars, ~90K developer install base,
|
|
35
|
+
$19–249/mo cloud tiers, 114 open issues.
|
|
36
|
+
|
|
37
|
+
**Recent moves (Feb–May 2026):**
|
|
38
|
+
- May 13 — Memory Decay (recency-aware ranking)
|
|
39
|
+
- May 12 — Temporal Reasoning launch
|
|
40
|
+
- April — new memory algorithm with +20–27pt benchmark gains
|
|
41
|
+
- April 17 — security disclosure (CVSS 8.1)
|
|
42
|
+
- March 24 — official `mem0-mcp` archived; pivoted to hosted
|
|
43
|
+
`mcp.mem0.ai` (Platform-only)
|
|
44
|
+
- Recent — `graph_store` removed from OSS, replaced by in-vector-store
|
|
45
|
+
entity linking
|
|
46
|
+
|
|
47
|
+
### mem0 capability matrix
|
|
48
|
+
|
|
49
|
+
| Capability | mem0 | codevira | Verdict | v2.x slot |
|
|
50
|
+
|---|---|---|---|---|
|
|
51
|
+
| `add` / `search` / `get` / `update` / `delete` | ✅ | ✅ (different naming) | parity | — |
|
|
52
|
+
| Hybrid search (BM25 + semantic) | ✅ | ❌ keyword only | **MUST CLOSE** | v2.1 — "natural-language decision search" |
|
|
53
|
+
| Re-ranking (Cohere, cross-encoder, LLM) | ✅ | ❌ | **MUST CLOSE** | v2.2 — "reranker integration" |
|
|
54
|
+
| ADD/UPDATE/DELETE/NOOP auto-decisioning | ✅ | ❌ append-only | **MUST CLOSE** | v2.1 — "decision deduplication" |
|
|
55
|
+
| Memory history per ID | ✅ | ❌ timestamps only | **MUST CLOSE** | v2.1 — "decision audit trail" |
|
|
56
|
+
| Feedback API (quality signals) | ✅ | ❌ | should close | v2.2 — "memory feedback API" |
|
|
57
|
+
| Batch ops (bulk update/delete) | ✅ | ❌ | should close | v2.2 — "batch ops" |
|
|
58
|
+
| Compound filter V2 (AND/OR on metadata) | ✅ Platform | partial | should close | v2.2 |
|
|
59
|
+
| Memory decay (recency ranking) | ✅ Platform | ❌ | nice to have | v2.2 if time |
|
|
60
|
+
| Temporal reasoning (point-in-time queries) | ✅ Platform | ❌ | nice to have | v2.3+ |
|
|
61
|
+
| Multi-vector-store adapters | ✅ 20+ | ❌ Chroma only | partial | v2.2 — pick top 3 (Pinecone/Qdrant/pgvector) |
|
|
62
|
+
| Memory compression (auto-condense) | ✅ | ❌ | nice to have | v2.3+ |
|
|
63
|
+
| JavaScript/Node SDK | ✅ | ❌ MCP only | **MUST CLOSE** | v2.2 — "Node SDK + Vercel AI SDK" |
|
|
64
|
+
| REST API (publicly addressable) | ✅ | partial (HTTP, not REST-shaped) | should close | v2.2 — "REST API surface" |
|
|
65
|
+
| Webhooks | ✅ | ❌ | nice to have | defer |
|
|
66
|
+
| LangChain / LlamaIndex / CrewAI / AutoGen adapters | ✅ | ❌ | should close | v2.2 — "framework adapters" |
|
|
67
|
+
| Multimodal (PDF, images) | ✅ Platform | ❌ | don't chase | — |
|
|
68
|
+
| Group chat / shared memory | ✅ Platform | ❌ | defer to cloud tier | v2.3 (cloud) |
|
|
69
|
+
| Custom categories / taxonomy | ✅ Platform | partial (decisions/preferences/rules) | don't chase | — |
|
|
70
|
+
| SSO / audit logs / SOC2 | ✅ Pro+ | ❌ | enterprise-only | defer |
|
|
71
|
+
|
|
72
|
+
### Codevira's structural moats vs mem0
|
|
73
|
+
|
|
74
|
+
**These are things mem0 cannot copy without abandoning their core.
|
|
75
|
+
Never give them up chasing parity items.**
|
|
76
|
+
|
|
77
|
+
| Capability | Why it's a moat |
|
|
78
|
+
|---|---|
|
|
79
|
+
| Tree-sitter code graph (file/symbol/call edges) | Code-aware queries impossible in mem0; their model is conversational |
|
|
80
|
+
| Blast-radius / `get_impact` | Refactor safety mem0 cannot touch |
|
|
81
|
+
| `do_not_revert` decision protection | Active behavior shaping vs. passive retrieval |
|
|
82
|
+
| Hero policies (DecisionLock, ScopeContract, BlastRadius, CrossSession, TokenBudget, LiveStyle, IntentInference) | Completely different category — guardian, not RAG |
|
|
83
|
+
| Lifecycle hooks (PreToolUse, PostToolUse) | mem0 only sees what you `add()`; codevira observes the AI's actual behavior |
|
|
84
|
+
| Phase / roadmap tracking with dependencies | Project-state memory mem0 doesn't model |
|
|
85
|
+
| Confidence via outcome tracking (kept/modified/reverted) | Self-improving memory mem0 has no equivalent of |
|
|
86
|
+
| Fix-history auto-extraction from git | Codebase-grounded memory |
|
|
87
|
+
| Drift detection (commits ≠ phase claim) | Active monitoring, not passive storage |
|
|
88
|
+
| Free forever, no cloud, no caps | mem0 OSS works but graph is paywalled now; codevira's marginal cost per dev is zero |
|
|
89
|
+
|
|
90
|
+
### mem0 weaknesses we can exploit
|
|
91
|
+
|
|
92
|
+
1. **Graph dropped from OSS** — opens door for "the open-source memory tool that still has graph"
|
|
93
|
+
2. **Pricing cliff** ($79 → $249 Pro) — cloud-graph is paywalled
|
|
94
|
+
3. **Temporal LongMemEval = 49%** vs Zep 63.8%, Hindsight 91.4%
|
|
95
|
+
4. **No implicit pattern learning** — only explicit facts
|
|
96
|
+
5. **CVSS 8.1 SQL/Cypher injection** (April 2026) on PGVector / Azure MySQL / Neptune backends
|
|
97
|
+
6. **TS SDK trails Python** — only 5 vector stores supported vs 20
|
|
98
|
+
7. **Official MCP repo archived** — community forks fragmenting
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Zep (https://getzep.com)
|
|
103
|
+
|
|
104
|
+
**Positioning:** temporal knowledge graph for AI agents. Strongest at
|
|
105
|
+
"what was true at time T" queries.
|
|
106
|
+
|
|
107
|
+
**Capability differentiators:** Graphiti (temporal graph),
|
|
108
|
+
LongMemEval 63.8% (vs mem0's 49%), point-in-time queries.
|
|
109
|
+
|
|
110
|
+
**Weaknesses:** cloud-first (less compelling for solo devs);
|
|
111
|
+
SDK-first (no native MCP); enterprise positioning makes it expensive
|
|
112
|
+
for individuals.
|
|
113
|
+
|
|
114
|
+
**Threat to codevira:** medium. Different audience (enterprise/teams
|
|
115
|
+
vs solo devs). Watch their pricing if they go down-market.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Letta (formerly MemGPT, https://letta.com)
|
|
120
|
+
|
|
121
|
+
**Positioning:** "stateful agents" — memory is the agent's persistent
|
|
122
|
+
state across reboots. MemGPT paper authors.
|
|
123
|
+
|
|
124
|
+
**Capability differentiators:** OS-style memory hierarchy
|
|
125
|
+
(working / archival), self-editing memory, agent-as-process model.
|
|
126
|
+
|
|
127
|
+
**Weaknesses:** opinionated agent framework lock-in; not just memory.
|
|
128
|
+
Adopting Letta means adopting their agent runtime.
|
|
129
|
+
|
|
130
|
+
**Threat to codevira:** low. Different category — they're an agent
|
|
131
|
+
framework that includes memory. Codevira is memory that any agent
|
|
132
|
+
framework can use.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Cognee (https://cognee.ai)
|
|
137
|
+
|
|
138
|
+
**Positioning:** memory + reasoning over enterprise documents.
|
|
139
|
+
|
|
140
|
+
**Capability differentiators:** ECL (extract-cognify-load) pipeline,
|
|
141
|
+
ontology mapping, knowledge-graph extraction from unstructured docs.
|
|
142
|
+
|
|
143
|
+
**Weaknesses:** doc-centric, not code-centric; complex setup.
|
|
144
|
+
|
|
145
|
+
**Threat to codevira:** low. Different audience (enterprise document
|
|
146
|
+
intelligence vs developer code memory).
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Claude Projects + auto-memory (Anthropic)
|
|
151
|
+
|
|
152
|
+
**Positioning:** built-in memory for Claude Code users.
|
|
153
|
+
|
|
154
|
+
**Capability differentiators:** zero setup (Anthropic ships it),
|
|
155
|
+
deeply integrated into Claude Code UX.
|
|
156
|
+
|
|
157
|
+
**Weaknesses:** Claude-only (no Cursor/Windsurf reach), cloud-only,
|
|
158
|
+
no decision-shape primitives, no code graph.
|
|
159
|
+
|
|
160
|
+
**Threat to codevira:** medium-high. Anthropic could add MCP-tool-call
|
|
161
|
+
hooks to Claude Code that capture/replay memory automatically — would
|
|
162
|
+
neutralize codevira's session continuity story for Claude users
|
|
163
|
+
specifically. Mitigation: cross-tool reach + code-aware primitives
|
|
164
|
+
they can't easily replicate.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## CLAUDE.md / AGENTS.md / .windsurfrules / etc.
|
|
169
|
+
|
|
170
|
+
**Positioning:** static markdown files committed to the repo, loaded
|
|
171
|
+
into context on session start.
|
|
172
|
+
|
|
173
|
+
**Capability differentiators:** zero install, version-controlled,
|
|
174
|
+
team-shareable for free.
|
|
175
|
+
|
|
176
|
+
**Weaknesses:** static — can't track time-varying state; per-tool
|
|
177
|
+
mirrors duplicate content; ~2,500–3,000 token always-loaded cost;
|
|
178
|
+
human has to maintain.
|
|
179
|
+
|
|
180
|
+
**Threat to codevira:** low for time-varying memory; high for
|
|
181
|
+
"how to work in this repo" instructions. Codevira should NOT try to
|
|
182
|
+
replace CLAUDE.md — they coexist (CLAUDE.md = static rules,
|
|
183
|
+
codevira = dynamic memory). The benchmark proved this.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Strategic conclusions (drives v2.x prioritization)
|
|
188
|
+
|
|
189
|
+
**Updated 2026-05-15:** v2.1 renamed to "new-user first contact +
|
|
190
|
+
reliability hardening" after fresh-install testing surfaced 23 silent-
|
|
191
|
+
failure bugs. Public launch (benchmark, demo video, hackathon,
|
|
192
|
+
partnership pitches) moves to v2.2. Hybrid search and the other
|
|
193
|
+
must-close mem0-parity items still ship in v2.1, but framed as
|
|
194
|
+
credibility blockers, not launch-day items.
|
|
195
|
+
|
|
196
|
+
1. **Hybrid search is still the single highest-leverage capability fix.**
|
|
197
|
+
Every competitor has it; codevira doesn't; the benchmark publicly
|
|
198
|
+
fails without it. Ship in v2.1.
|
|
199
|
+
|
|
200
|
+
2. **Don't try to match mem0 feature-by-feature.** Their wedge is
|
|
201
|
+
conversational memory at scale. Ours is code-aware behavior shaping.
|
|
202
|
+
Picking 4 must-close parity items is the right discipline.
|
|
203
|
+
|
|
204
|
+
3. **mem0 dropping graph from OSS is the opening of the year.**
|
|
205
|
+
Marketing line for v2.2: "the open-source memory layer that still
|
|
206
|
+
has the graph." But say it about ourselves; never name them.
|
|
207
|
+
|
|
208
|
+
4. **The benchmark is the moat.** Publishing a neutral, runnable
|
|
209
|
+
benchmark that includes mem0/Zep/Letta means we set the conversation.
|
|
210
|
+
Even when we lose on a dimension, we're the steward of the category.
|
|
211
|
+
|
|
212
|
+
5. **Cross-tool is uncopiable.** mem0/Zep/Letta will not become
|
|
213
|
+
cross-tool because their business model assumes lock-in. Codevira's
|
|
214
|
+
MCP-only architecture makes this structural, not just a feature.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Tracking template (when adding a new competitor)
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
## <name> (<url>)
|
|
222
|
+
|
|
223
|
+
**Positioning:** <one sentence>
|
|
224
|
+
|
|
225
|
+
**Capability differentiators:** <bullets>
|
|
226
|
+
|
|
227
|
+
**Weaknesses:** <bullets>
|
|
228
|
+
|
|
229
|
+
**Threat to codevira:** <low/medium/high>. <why>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Refresh log
|
|
235
|
+
|
|
236
|
+
- 2026-05-15 — initial creation. mem0 deep dive (Sachin + Claude
|
|
237
|
+
research agent, 19 tool calls, ~158k ms). Zep/Letta/Cognee/Claude
|
|
238
|
+
Projects/CLAUDE.md profiled from prior knowledge — refresh by
|
|
239
|
+
research agent next quarter.
|