virtual-context 0.4.3__tar.gz → 0.4.4__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.
- {virtual_context-0.4.3 → virtual_context-0.4.4}/.gitignore +3 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/PKG-INFO +1 -1
- {virtual_context-0.4.3 → virtual_context-0.4.4}/pyproject.toml +1 -1
- virtual_context-0.4.4/tests/test_admin_backfill_cli.py +171 -0
- virtual_context-0.4.4/tests/test_engine_alias_resolution.py +2232 -0
- virtual_context-0.4.4/tests/test_import_adapters.py +236 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_proxy.py +3 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_proxy_session.py +16 -2
- virtual_context-0.4.4/tests/test_tag_summary_backfill.py +637 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_vcattach.py +420 -2
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/__init__.py +1 -1
- virtual_context-0.4.4/virtual_context/cli/import_cmd.py +75 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/cli/main.py +198 -0
- virtual_context-0.4.4/virtual_context/core/alias_resolution.py +162 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/compaction_pipeline.py +186 -103
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/composite_store.py +93 -15
- virtual_context-0.4.4/virtual_context/core/exceptions.py +180 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/protocols.py +15 -2
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/store.py +37 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/tagging_pipeline.py +2 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/engine.py +518 -4
- virtual_context-0.4.4/virtual_context/import_adapters/__init__.py +32 -0
- virtual_context-0.4.4/virtual_context/import_adapters/base.py +48 -0
- virtual_context-0.4.4/virtual_context/import_adapters/chatgpt.py +63 -0
- virtual_context-0.4.4/virtual_context/import_adapters/claude.py +47 -0
- virtual_context-0.4.4/virtual_context/import_adapters/grok.py +61 -0
- virtual_context-0.4.4/virtual_context/import_adapters/loader.py +65 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/handlers.py +145 -26
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/server.py +104 -16
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/vcattach.py +43 -5
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/storage/filesystem.py +13 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/storage/postgres.py +305 -21
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/storage/sqlite.py +324 -17
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/types.py +70 -1
- virtual_context-0.4.3/virtual_context/core/exceptions.py +0 -101
- {virtual_context-0.4.3 → virtual_context-0.4.4}/LICENSE +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/README.md +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/assets/dashboard.png +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/assets/hero.png +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/models.yaml +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/scripts/install.ps1 +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/scripts/install.sh +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/REGRESSION_MAP.md +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/conftest.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/docker-compose.test.yml +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/haiku/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/haiku/conftest.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/haiku/test_compaction.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/haiku/test_retrieval.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/haiku/test_tagging.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/ollama/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/ollama/conftest.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/ollama/test_compactor.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/ollama/test_pipeline.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/ollama/test_provider.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/ollama/test_tag_generator.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/proxy/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/proxy/test_dashboard_cors.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/proxy/test_metrics.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_active_compaction_op_invariants.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_assembler.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_backend_integration.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_beam_judge.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_budget_enforcement.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_canonical_row_epoch_guards.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_canonical_row_epoch_guards_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_canonical_turn_grouping.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_canonical_turns_schema.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_canonical_turns_schema_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_claim_compaction_lease_signature.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_claim_compaction_lease_signature_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_cleanup_abandoned_compaction.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_cleanup_abandoned_compaction_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_cli_init.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compacting_phase_takeover.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_commit_prune.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_heartbeat_sidecar.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_lease_lost_abort.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_lifecycle.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_lifecycle_contract.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_lifecycle_wiring.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_operation.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_operation_crud.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_operation_crud_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_operation_id_uuid.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_operation_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_ownership_guards.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_progress_event.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_resume_e2e_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_resume_schema_migration.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compaction_resume_schema_migration_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compactor.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_compactor_concurrent.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_composite_store.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_config.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_context_bleed.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_conversation_coverage_report.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_conversation_identity.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_conversation_lifecycle.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_conversation_schema.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_conversation_schema_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_conversation_scoping.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_conversations_tenant_id_backfill_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_conversations_tenant_id_propagation.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_deferred_payload_compaction.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_delete_resurrect_epoch_races.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_embedding_tag_generator.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_empty_turn_skip.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_engine_event_bus.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_engine_integration.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_engine_lifecycle_epoch.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_engine_lookback.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_engine_state.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_engine_sync_turns.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_fact_enrichment.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_fact_graph_integration.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_fact_link_checker.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_fact_link_query.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_fact_link_types.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_fact_links_sqlite.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_fact_redesign.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_filesystem_store_compaction_compat.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_fill_pass.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_find_idle_deletable_conversations.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_find_quote.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_find_stale_lease_helpers.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_format_agnostic.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_handle_prepare_payload.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_headless.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_history_filter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_idf_retrieval.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingest_index_integrity.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingest_reconciler_append_fastpath.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingest_reconciler_epoch.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_compaction_full_cycle.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_db_sweep_catchup.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_episode.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_episode_crud.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_episode_crud_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_episode_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_finalize_self_heal.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_progress_event.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_ingestion_regression_resume.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_legacy_ingestion_lease_ownership.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_lifecycle_epoch.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_lifecycle_epoch_store.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_lifecycle_epoch_store_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_longmemeval_auth.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_mark_canonical_turns_compacted_all_halves.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_mcp_server.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_media.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_message_filter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_metrics_persistence.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_model_catalog.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_model_limits.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_monitor.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_multi_instance.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_multi_worker_sliding_window.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_neo4j_falkordb_compaction_compat.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_noop_fact_link_store.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_openrouter_provider.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_orphan_compacting_repair.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_paging.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_passthrough_filter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_phase_transition_events.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_postgres_store.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_presets.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_prev_context_leak.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_progress_event_bus.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_progress_events.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_progress_snapshot.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_progress_snapshot_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_provider_adapters.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_proxy_dashboard.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_proxy_formats.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_proxy_message_filter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_proxy_streaming.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_raw_content.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_recall_all.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_refresh_compaction_heartbeat.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_registry_lifecycle.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_request_captures_persistence.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_request_metadata.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_request_metadata_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_retriever.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_rrf_scoring.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_segmenter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_semantic_search.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_sender_identity.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_session_cache.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_session_date.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_session_state.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_sqlite_schema_add_column_race.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_storage_protocols.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_store_recovery.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_store_sqlite.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_stub_turn_handling.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_supersession.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_supersession_migration.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tag_canonicalizer.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tag_consolidator.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tag_generator.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tag_splitter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tagger_loop.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_telemetry.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_telemetry_integration.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_temporal_resolver.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tool_loop.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tool_output_interceptor.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tool_result_filter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tool_tags.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_tui.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_turn_grouping.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_turn_tag_index.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_unified_budget.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_upstream_trim.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_vcmerge_body_method.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_vcmerge_body_method_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_vcmerge_composite_forwarders.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_vcmerge_dual_handler_refuse.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_vcmerge_schema.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_vcmerge_schema_postgres.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_vcmerge_storage.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/tests/test_verb_expansion.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual-context.yaml.example +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/cli/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/config.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/conversation_identity.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/assembler.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/canonical_turns.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/compactor.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/conversation_store.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/coverage_report.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/embedding_provider.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/embedding_tag_generator.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/engine_utils.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/event_bus.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/fact_query.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/fts_preprocessor.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/hint_builder.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/ingest_reconciler.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/lifecycle_epoch.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/llm_utils.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/math_utils.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/model_catalog.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/monitor.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/paging_manager.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/progress_events.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/progress_snapshot.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/provider_adapters.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/quote_search.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/retrieval_assembler.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/retrieval_scoring.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/retriever.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/search_engine.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/segmenter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/semantic_search.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/tag_canonicalizer.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/tag_consolidator.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/tag_generator.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/tag_scoring.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/tag_splitter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/telemetry.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/temporal_resolver.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/tool_loop.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/tool_query.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/core/turn_tag_index.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/data/anthropic-tokenizer/tokenizer.json +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/data/models.yaml +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/ingest/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/ingest/curator.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/ingest/date_resolver.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/ingest/parsers.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/ingest/supersession.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/mcp/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/mcp/server.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/model_limits.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/openclaw/virtual-context.mjs +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/patterns.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/presets/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/presets/agentic.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/presets/base.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/presets/coding.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/providers/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/providers/anthropic.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/providers/base.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/providers/generic_openai.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/providers/ollama_native.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/_envelope.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/dashboard.html +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/dashboard.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/formats.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/helpers.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/media.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/message_filter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/metrics.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/multi.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/registry.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/session_cache.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/session_state.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/state.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/static/android-chrome-192x192.png +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/static/android-chrome-512x512.png +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/static/apple-touch-icon.png +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/static/favicon-16x16.png +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/static/favicon-32x32.png +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/static/favicon.ico +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/static/site.webmanifest +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/proxy/tool_output_interceptor.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/storage/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/storage/falkordb.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/storage/helpers.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/storage/neo4j.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/storage/noop_fact_link_store.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/token_counter.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/app.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/chat.tcss +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/chat_provider.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/headless.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/modals/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/modals/turn_inspector.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/state.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/widgets/__init__.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/widgets/budget_bar.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/widgets/chat_view.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/widgets/input_box.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/widgets/tag_panel.py +0 -0
- {virtual_context-0.4.3 → virtual_context-0.4.4}/virtual_context/tui/widgets/turn_list.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: virtual-context
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: OS-style virtual memory for LLM session context management
|
|
5
5
|
Project-URL: Homepage, https://virtual-context.com
|
|
6
6
|
Project-URL: Repository, https://github.com/virtual-context/virtual-context
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"""Tests for the ``admin backfill-tag-summaries`` CLI subcommand.
|
|
2
|
+
|
|
3
|
+
Covers the storage-override flags + ``DATABASE_URL`` env fallback
|
|
4
|
+
introduced so the subcommand runs inside containers that don't have a
|
|
5
|
+
config file mounted at a standard path.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
os.environ.setdefault("KMP_DUPLICATE_LIB_OK", "TRUE")
|
|
13
|
+
|
|
14
|
+
from types import SimpleNamespace
|
|
15
|
+
|
|
16
|
+
import pytest
|
|
17
|
+
|
|
18
|
+
from virtual_context.cli.main import _apply_storage_overrides
|
|
19
|
+
from virtual_context.types import StorageConfig, VirtualContextConfig
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _make_config(*, backend="sqlite", postgres_dsn="", sqlite_path=".db"):
|
|
23
|
+
return VirtualContextConfig(
|
|
24
|
+
storage=StorageConfig(
|
|
25
|
+
backend=backend,
|
|
26
|
+
postgres_dsn=postgres_dsn,
|
|
27
|
+
sqlite_path=sqlite_path,
|
|
28
|
+
),
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_storage_override_explicit_flag_wins(monkeypatch):
|
|
33
|
+
"""Explicit ``--postgres-dsn`` overrides whatever config carried."""
|
|
34
|
+
monkeypatch.delenv("DATABASE_URL", raising=False)
|
|
35
|
+
config = _make_config(backend="sqlite", postgres_dsn="from-config")
|
|
36
|
+
args = SimpleNamespace(
|
|
37
|
+
config=None,
|
|
38
|
+
storage_backend="postgres",
|
|
39
|
+
postgres_dsn="postgresql://override/db",
|
|
40
|
+
sqlite_path=None,
|
|
41
|
+
)
|
|
42
|
+
_apply_storage_overrides(config, args)
|
|
43
|
+
assert config.storage.backend == "postgres"
|
|
44
|
+
assert config.storage.postgres_dsn == "postgresql://override/db"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_storage_override_sqlite_path_flag(monkeypatch):
|
|
48
|
+
"""``--sqlite-path`` overrides ``storage.sqlite_path``."""
|
|
49
|
+
monkeypatch.delenv("DATABASE_URL", raising=False)
|
|
50
|
+
config = _make_config(backend="sqlite", sqlite_path=".db")
|
|
51
|
+
args = SimpleNamespace(
|
|
52
|
+
config=None,
|
|
53
|
+
storage_backend=None,
|
|
54
|
+
postgres_dsn=None,
|
|
55
|
+
sqlite_path="/tmp/override.db",
|
|
56
|
+
)
|
|
57
|
+
_apply_storage_overrides(config, args)
|
|
58
|
+
assert config.storage.sqlite_path == "/tmp/override.db"
|
|
59
|
+
# Backend unchanged because no --storage-backend flag.
|
|
60
|
+
assert config.storage.backend == "sqlite"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def test_storage_override_database_url_env_fallback(monkeypatch):
|
|
64
|
+
"""When no flag and no ``-c`` are given, ``DATABASE_URL`` env
|
|
65
|
+
promotes the engine to Postgres with that DSN. Covers the
|
|
66
|
+
container-based invocation shape where ops just runs the
|
|
67
|
+
subcommand with the env already set by the container runtime."""
|
|
68
|
+
monkeypatch.setenv("DATABASE_URL", "postgresql://from-env/db")
|
|
69
|
+
config = _make_config(backend="sqlite", postgres_dsn="")
|
|
70
|
+
args = SimpleNamespace(
|
|
71
|
+
config=None,
|
|
72
|
+
storage_backend=None,
|
|
73
|
+
postgres_dsn=None,
|
|
74
|
+
sqlite_path=None,
|
|
75
|
+
)
|
|
76
|
+
_apply_storage_overrides(config, args)
|
|
77
|
+
assert config.storage.backend == "postgres"
|
|
78
|
+
assert config.storage.postgres_dsn == "postgresql://from-env/db"
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def test_storage_override_database_url_skipped_when_config_provided(monkeypatch):
|
|
82
|
+
"""When the caller passes ``-c``, the env fallback DOES NOT fire;
|
|
83
|
+
the config file is treated as authoritative."""
|
|
84
|
+
monkeypatch.setenv("DATABASE_URL", "postgresql://from-env/db")
|
|
85
|
+
config = _make_config(backend="sqlite", postgres_dsn="")
|
|
86
|
+
args = SimpleNamespace(
|
|
87
|
+
config="/some/config.yaml",
|
|
88
|
+
storage_backend=None,
|
|
89
|
+
postgres_dsn=None,
|
|
90
|
+
sqlite_path=None,
|
|
91
|
+
)
|
|
92
|
+
_apply_storage_overrides(config, args)
|
|
93
|
+
# Backend + DSN unchanged because ``-c`` was given.
|
|
94
|
+
assert config.storage.backend == "sqlite"
|
|
95
|
+
assert config.storage.postgres_dsn == ""
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def test_storage_override_database_url_skipped_when_any_flag_set(monkeypatch):
|
|
99
|
+
"""When ANY storage flag is set, the env fallback does NOT fire
|
|
100
|
+
(explicit flags are authoritative)."""
|
|
101
|
+
monkeypatch.setenv("DATABASE_URL", "postgresql://from-env/db")
|
|
102
|
+
config = _make_config(backend="sqlite")
|
|
103
|
+
args = SimpleNamespace(
|
|
104
|
+
config=None,
|
|
105
|
+
storage_backend=None,
|
|
106
|
+
postgres_dsn=None,
|
|
107
|
+
sqlite_path="/tmp/explicit.db",
|
|
108
|
+
)
|
|
109
|
+
_apply_storage_overrides(config, args)
|
|
110
|
+
# Only the sqlite_path flag applies; env fallback is skipped.
|
|
111
|
+
assert config.storage.sqlite_path == "/tmp/explicit.db"
|
|
112
|
+
assert config.storage.backend == "sqlite"
|
|
113
|
+
assert config.storage.postgres_dsn == ""
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def test_storage_override_no_change_when_no_flags_and_no_env(monkeypatch):
|
|
117
|
+
"""Defaults intact when neither flags, ``-c``, nor ``DATABASE_URL``
|
|
118
|
+
are present. (``-c`` absent means ``load_config()`` already returned
|
|
119
|
+
defaults; this assertion guards against accidental mutation.)"""
|
|
120
|
+
monkeypatch.delenv("DATABASE_URL", raising=False)
|
|
121
|
+
config = _make_config(backend="sqlite", sqlite_path=".db")
|
|
122
|
+
args = SimpleNamespace(
|
|
123
|
+
config=None,
|
|
124
|
+
storage_backend=None,
|
|
125
|
+
postgres_dsn=None,
|
|
126
|
+
sqlite_path=None,
|
|
127
|
+
)
|
|
128
|
+
_apply_storage_overrides(config, args)
|
|
129
|
+
assert config.storage.backend == "sqlite"
|
|
130
|
+
assert config.storage.postgres_dsn == ""
|
|
131
|
+
assert config.storage.sqlite_path == ".db"
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def test_cli_parser_accepts_new_storage_flags():
|
|
135
|
+
"""End-to-end parser smoke test: the ``admin backfill-tag-summaries``
|
|
136
|
+
subparser accepts the three new flags + ``DATABASE_URL`` precedence
|
|
137
|
+
metadata in the help text."""
|
|
138
|
+
from virtual_context.cli.main import main as _main
|
|
139
|
+
import argparse
|
|
140
|
+
|
|
141
|
+
# Re-build the parser the way ``main()`` does, then parse a sample
|
|
142
|
+
# invocation. (Doing a full ``main()`` call would actually run the
|
|
143
|
+
# backfill; we only need argument parsing here.)
|
|
144
|
+
parser = argparse.ArgumentParser(prog="virtual-context")
|
|
145
|
+
parser.add_argument("--config", "-c")
|
|
146
|
+
subparsers = parser.add_subparsers(dest="command")
|
|
147
|
+
admin_parser = subparsers.add_parser("admin")
|
|
148
|
+
admin_sub = admin_parser.add_subparsers(dest="admin_command")
|
|
149
|
+
backfill_parser = admin_sub.add_parser("backfill-tag-summaries")
|
|
150
|
+
backfill_parser.add_argument("conversation_id")
|
|
151
|
+
backfill_parser.add_argument("--tenant-id", default="")
|
|
152
|
+
backfill_parser.add_argument("--force-rebuild", action="store_true")
|
|
153
|
+
backfill_parser.add_argument(
|
|
154
|
+
"--storage-backend",
|
|
155
|
+
choices=("sqlite", "postgres", "filesystem"),
|
|
156
|
+
)
|
|
157
|
+
backfill_parser.add_argument("--postgres-dsn")
|
|
158
|
+
backfill_parser.add_argument("--sqlite-path")
|
|
159
|
+
|
|
160
|
+
args = parser.parse_args([
|
|
161
|
+
"admin", "backfill-tag-summaries", "conv-xyz",
|
|
162
|
+
"--tenant-id", "t1",
|
|
163
|
+
"--storage-backend", "postgres",
|
|
164
|
+
"--postgres-dsn", "postgresql://h/db",
|
|
165
|
+
])
|
|
166
|
+
assert args.conversation_id == "conv-xyz"
|
|
167
|
+
assert args.tenant_id == "t1"
|
|
168
|
+
assert args.storage_backend == "postgres"
|
|
169
|
+
assert args.postgres_dsn == "postgresql://h/db"
|
|
170
|
+
assert args.sqlite_path is None
|
|
171
|
+
assert args.force_rebuild is False
|