flurryx-code-memory 0.5.0__tar.gz → 0.5.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.
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/PKG-INFO +1 -1
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/pyproject.toml +1 -1
- flurryx_code_memory-0.5.1/src/code_memory/__init__.py +16 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/updater.py +84 -27
- flurryx_code_memory-0.5.0/src/code_memory/__init__.py +0 -8
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/.claude-plugin/marketplace.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/.env.example +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/.gitignore +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/CHANGELOG.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/README.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/docker/docker-compose.yml +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/docs/BENCHMARK.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/docs/BENCHMARK_VS_BASELINE.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/docs/BENCHMARK_VS_BASELINE.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/docs/architecture.png +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/docs/benchmark-raw.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/docs/hero.png +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/install.ps1 +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/install.sh +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/README.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/commands/code-memory.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/hooks/hooks.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/install.sh +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/claim-intent.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/claim-intent.test.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/format.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/intent.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/io.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/memory.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/state.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-post-tool.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-pre-tool.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-retrieve-seen.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-session-start.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-stop.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-user-prompt.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/resolver-debounce.js +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/skills/code-memory/SKILL.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/README.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/install.sh +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/package-lock.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/package.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/scripts/add-mcp.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/scripts/install.mjs +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/scripts/uninstall.mjs +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/skills/code-memory/SKILL.md +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/src/code-memory-lib/claim-intent.test.mts +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/src/code-memory-lib/claim-intent.ts +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/src/code-memory-lib/intent.ts +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/src/code-memory-lib/memory-client.ts +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/src/code-memory.ts +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/tsconfig.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/scripts/benchmark.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/scripts/benchmark_queries.json +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/scripts/benchmark_vs_baseline.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/scripts/benchmark_vs_grep.sh +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/scripts/ingest.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/scripts/install.ps1 +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/scripts/install.sh +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/claims/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/claims/extractor.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/claims/indexer.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/claims/resolver.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/claims/store.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/cli.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/config.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/embed/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/embed/cache.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/embed/m3.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/embed/ollama.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/embed/tei.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/episodic/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/episodic/sqlite_store.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/csproj.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/dll.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/gitignore.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/nuget.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/sanity.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/sln.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/treesitter.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/graph/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/graph/falkor_store.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/mcp_server.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/metrics.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/git_delta.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/ingest_state.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/pipeline.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/reset.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/resolver.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/retrieve.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/resilience.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/base.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/launchd.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/schtasks.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/systemd.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/hooks.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/safety.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/snapshot.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/store.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/sync.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/watcher.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/vector/__init__.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/vector/qdrant_store.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_autostart_adapters.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_chunk_text.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_claim_extractor.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_claim_indexer.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_claim_resolver.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_claim_store.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_config_embed_dim.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_config_sentinel.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_csproj.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_dll_members.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_dll_parser.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_embed_backend.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_embed_cache.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_embed_m3.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_embed_tei.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_episode_dedup.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_episode_head_sha.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_csharp.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_filters.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_php.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_python_imports.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_receiver_type.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_references.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_sanity.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_ts_abstract.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_ts_inject.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_utf8.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_file_containment.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_git_delta.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_graph_queries.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_graph_temporal.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_graph_vacuum_at_sha.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_hooks_installer.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_ingest_state.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_mcp_assert_claim.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_mcp_server_descriptions.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_mcp_strict_project.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_metrics.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_nuget_resolver.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_overload_resolution.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_partial_class.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_pipeline_references.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_pipeline_temporal_wiring.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_qdrant_legacy_guard.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_razor_inject.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_resilience.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_resolver.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_resolver_assembly.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_retrieve_claims_surfacing.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_retrieve_rerank.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_sln.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_smoke.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_snapshot_e2e.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_snapshot_format.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_snapshot_store.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_sync_decision_tree.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_watch_safety.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_watcher_debouncer.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_watcher_exclude.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_watcher_ref_events.py +0 -0
- {flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/uv.lock +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "flurryx-code-memory"
|
|
7
|
-
version = "0.5.
|
|
7
|
+
version = "0.5.1"
|
|
8
8
|
description = "Local lightweight memory layer for coding agents: FalkorDB + Qdrant + Ollama (BGE-M3) + tree-sitter"
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
10
|
dependencies = [
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version as _pkg_version
|
|
4
|
+
|
|
5
|
+
# Two dist names exist in the wild:
|
|
6
|
+
# * "flurryx-code-memory" — current PyPI name (>= 0.4.0)
|
|
7
|
+
# * "code-memory" — legacy name used by uv-tool installs from git+main
|
|
8
|
+
# before the rename. Falls back to keep the older installs reporting
|
|
9
|
+
# a real version until they run `code-memory update --bleeding`.
|
|
10
|
+
__version__ = "0.0.0+local"
|
|
11
|
+
for _name in ("flurryx-code-memory", "code-memory"):
|
|
12
|
+
try:
|
|
13
|
+
__version__ = _pkg_version(_name)
|
|
14
|
+
break
|
|
15
|
+
except PackageNotFoundError:
|
|
16
|
+
continue
|
|
@@ -35,6 +35,8 @@ import httpx
|
|
|
35
35
|
from . import __version__ as _LOCAL_VERSION
|
|
36
36
|
|
|
37
37
|
PYPI_PACKAGE = "flurryx-code-memory"
|
|
38
|
+
LEGACY_PACKAGE = "code-memory" # historical dist name still in older uv-tool venvs
|
|
39
|
+
UV_TOOL_NAME = "code-memory" # entry-point/tool-name; what `uv tool list` shows
|
|
38
40
|
DEFAULT_REPO_URL = os.environ.get(
|
|
39
41
|
"CODEMEMORY_REPO_URL", "https://github.com/fmflurry/code-memory"
|
|
40
42
|
)
|
|
@@ -108,21 +110,29 @@ def detect_install_method() -> InstallMethod:
|
|
|
108
110
|
|
|
109
111
|
|
|
110
112
|
def _is_editable_install() -> bool:
|
|
111
|
-
|
|
112
|
-
from importlib.metadata import distribution
|
|
113
|
+
from importlib.metadata import distribution
|
|
113
114
|
|
|
114
|
-
|
|
115
|
-
|
|
115
|
+
for name in (PYPI_PACKAGE, LEGACY_PACKAGE):
|
|
116
|
+
try:
|
|
117
|
+
d = distribution(name)
|
|
118
|
+
except Exception: # noqa: BLE001
|
|
119
|
+
continue
|
|
120
|
+
try:
|
|
121
|
+
raw = d.read_text("direct_url.json") or ""
|
|
122
|
+
except Exception: # noqa: BLE001
|
|
123
|
+
raw = ""
|
|
116
124
|
if not raw:
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
125
|
+
continue
|
|
126
|
+
if bool(json.loads(raw).get("dir_info", {}).get("editable")):
|
|
127
|
+
return True
|
|
128
|
+
return False
|
|
121
129
|
|
|
122
130
|
|
|
123
131
|
def _pip_shows() -> bool:
|
|
124
|
-
|
|
125
|
-
|
|
132
|
+
for name in (PYPI_PACKAGE, LEGACY_PACKAGE):
|
|
133
|
+
if _run([sys.executable, "-m", "pip", "show", name]).returncode == 0:
|
|
134
|
+
return True
|
|
135
|
+
return False
|
|
126
136
|
|
|
127
137
|
|
|
128
138
|
def _ollama_models() -> list[str]:
|
|
@@ -152,6 +162,30 @@ def _docker_running(service: str) -> bool:
|
|
|
152
162
|
return any(service in name for name in p.stdout.splitlines())
|
|
153
163
|
|
|
154
164
|
|
|
165
|
+
def _running_compose_file() -> Path | None:
|
|
166
|
+
"""Probe live containers for the compose file that owns them.
|
|
167
|
+
|
|
168
|
+
Handles dev installs whose compose file lives in the repo, not under
|
|
169
|
+
``~/.code-memory/docker/``. Returns the first compose path found
|
|
170
|
+
among ``cm-falkordb`` / ``cm-qdrant`` containers, or None.
|
|
171
|
+
"""
|
|
172
|
+
if not _have("docker"):
|
|
173
|
+
return None
|
|
174
|
+
for name in ("cm-falkordb", "cm-qdrant"):
|
|
175
|
+
p = _run([
|
|
176
|
+
"docker",
|
|
177
|
+
"inspect",
|
|
178
|
+
"-f",
|
|
179
|
+
"{{ index .Config.Labels \"com.docker.compose.project.config_files\" }}",
|
|
180
|
+
name,
|
|
181
|
+
])
|
|
182
|
+
if p.returncode == 0:
|
|
183
|
+
path = p.stdout.strip()
|
|
184
|
+
if path and Path(path).exists():
|
|
185
|
+
return Path(path)
|
|
186
|
+
return None
|
|
187
|
+
|
|
188
|
+
|
|
155
189
|
def _claude_plugin_present() -> bool:
|
|
156
190
|
if not _have("claude"):
|
|
157
191
|
return False
|
|
@@ -251,17 +285,28 @@ def build_plan() -> UpdatePlan:
|
|
|
251
285
|
|
|
252
286
|
|
|
253
287
|
def upgrade_cli(method: InstallMethod, *, bleeding: bool = False) -> tuple[bool, str]:
|
|
254
|
-
"""Upgrade the CLI in-place via the same channel it was installed from.
|
|
288
|
+
"""Upgrade the CLI in-place via the same channel it was installed from.
|
|
289
|
+
|
|
290
|
+
For uv-tool we always do a ``--reinstall --from <source>`` so legacy
|
|
291
|
+
installs whose dist is named ``code-memory`` (pre-rename) get cleanly
|
|
292
|
+
migrated to ``flurryx-code-memory`` without the user noticing.
|
|
293
|
+
"""
|
|
255
294
|
source = f"git+{DEFAULT_REPO_URL}" if bleeding else PYPI_PACKAGE
|
|
256
295
|
if method == "uv-tool":
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
"
|
|
296
|
+
cmd = [
|
|
297
|
+
"uv",
|
|
298
|
+
"tool",
|
|
299
|
+
"install",
|
|
300
|
+
"--reinstall",
|
|
301
|
+
"--force",
|
|
302
|
+
"--from",
|
|
303
|
+
source,
|
|
304
|
+
UV_TOOL_NAME,
|
|
264
305
|
]
|
|
306
|
+
elif method == "pipx":
|
|
307
|
+
# pipx-installed users likely registered under either name; force
|
|
308
|
+
# a reinstall from <source> so the package name converges to current.
|
|
309
|
+
cmd = ["pipx", "install", "--force", source]
|
|
265
310
|
elif method == "pip":
|
|
266
311
|
cmd = [sys.executable, "-m", "pip", "install", "--upgrade", source]
|
|
267
312
|
elif method == "editable":
|
|
@@ -273,20 +318,27 @@ def upgrade_cli(method: InstallMethod, *, bleeding: bool = False) -> tuple[bool,
|
|
|
273
318
|
|
|
274
319
|
|
|
275
320
|
def upgrade_docker_images() -> tuple[bool, str]:
|
|
276
|
-
if not
|
|
277
|
-
return False, "
|
|
321
|
+
if not _have("docker"):
|
|
322
|
+
return False, "docker not on PATH"
|
|
278
323
|
compose = CODEMEMORY_HOME / "docker" / "docker-compose.yml"
|
|
324
|
+
project_dir = CODEMEMORY_HOME
|
|
325
|
+
if not compose.exists():
|
|
326
|
+
live = _running_compose_file()
|
|
327
|
+
if live is None:
|
|
328
|
+
return False, "no compose file at ~/.code-memory/ and no running cm-* containers"
|
|
329
|
+
compose = live
|
|
330
|
+
project_dir = live.parent.parent if live.parent.name == "docker" else live.parent
|
|
279
331
|
pull = _run(
|
|
280
|
-
["docker", "compose", "-f", str(compose), "--project-directory", str(
|
|
332
|
+
["docker", "compose", "-f", str(compose), "--project-directory", str(project_dir), "pull"],
|
|
281
333
|
capture=False,
|
|
282
334
|
)
|
|
283
335
|
if pull.returncode != 0:
|
|
284
336
|
return False, "docker compose pull failed"
|
|
285
337
|
up = _run(
|
|
286
|
-
["docker", "compose", "-f", str(compose), "--project-directory", str(
|
|
338
|
+
["docker", "compose", "-f", str(compose), "--project-directory", str(project_dir), "up", "-d"],
|
|
287
339
|
capture=False,
|
|
288
340
|
)
|
|
289
|
-
return up.returncode == 0, "compose pulled + up"
|
|
341
|
+
return up.returncode == 0, f"compose pulled + up ({compose})"
|
|
290
342
|
|
|
291
343
|
|
|
292
344
|
def upgrade_ollama_model(model: str) -> tuple[bool, str]:
|
|
@@ -299,12 +351,17 @@ def upgrade_ollama_model(model: str) -> tuple[bool, str]:
|
|
|
299
351
|
def upgrade_claude_plugin() -> tuple[bool, str]:
|
|
300
352
|
if not _have("claude"):
|
|
301
353
|
return False, "claude CLI not on PATH"
|
|
302
|
-
# `claude plugin
|
|
303
|
-
|
|
304
|
-
|
|
354
|
+
# `claude plugin update <name>` is the canonical refresh path.
|
|
355
|
+
# `--force` was a previous-version flag; current CLI rejects it.
|
|
356
|
+
p = _run(["claude", "plugin", "update", "code-memory@code-memory"], capture=False)
|
|
357
|
+
if p.returncode == 0:
|
|
358
|
+
return True, "claude plugin updated"
|
|
359
|
+
# Fall back to install — handles the never-installed-after-marketplace-add edge.
|
|
360
|
+
p2 = _run(
|
|
361
|
+
["claude", "plugin", "install", "code-memory@code-memory", "--scope", "user"],
|
|
305
362
|
capture=False,
|
|
306
363
|
)
|
|
307
|
-
return
|
|
364
|
+
return p2.returncode == 0, "claude plugin re-installed"
|
|
308
365
|
|
|
309
366
|
|
|
310
367
|
def upgrade_npm_pkg(pkg: str = "code-memory-opencode") -> tuple[bool, str]:
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from importlib.metadata import PackageNotFoundError, version as _pkg_version
|
|
4
|
-
|
|
5
|
-
try:
|
|
6
|
-
__version__ = _pkg_version("flurryx-code-memory")
|
|
7
|
-
except PackageNotFoundError: # editable / source checkout without install
|
|
8
|
-
__version__ = "0.0.0+local"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/commands/code-memory.md
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/hooks/hooks.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/format.js
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/intent.js
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/io.js
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/memory.js
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/lib/state.js
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-post-tool.js
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-pre-tool.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/claude-code/scripts/on-stop.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/scripts/install.mjs
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/scripts/uninstall.mjs
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/plugins/opencode/skills/code-memory/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/episodic/__init__.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/episodic/sqlite_store.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/gitignore.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/extractor/treesitter.py
RENAMED
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/graph/falkor_store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/__init__.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/git_delta.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/ingest_state.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/pipeline.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/reset.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/resolver.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/orchestrator/retrieve.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/__init__.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/base.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/launchd.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/schtasks.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/sync/autostart/systemd.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/src/code_memory/vector/qdrant_store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_python_imports.py
RENAMED
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_extractor_receiver_type.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_mcp_server_descriptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_pipeline_temporal_wiring.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flurryx_code_memory-0.5.0 → flurryx_code_memory-0.5.1}/tests/test_retrieve_claims_surfacing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|