topos-node 1.0.5__tar.gz → 1.0.7__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.
- {topos_node-1.0.5 → topos_node-1.0.7}/PKG-INFO +1 -1
- {topos_node-1.0.5 → topos_node-1.0.7}/pyproject.toml +1 -1
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/__version__.py +2 -2
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/control_plane_client.py +21 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/handlers.py +16 -13
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/logging.py +3 -2
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/dimension_registry.py +1 -1
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/ingest_helpers.py +1 -1
- {topos_node-1.0.5 → topos_node-1.0.7}/topos_node.egg-info/PKG-INFO +1 -1
- {topos_node-1.0.5 → topos_node-1.0.7}/LICENSE +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/README.md +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/setup.cfg +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/shared/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/shared/filtering.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/shared/schema_registry.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/tests/test_llm_integrations_storage.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/analytics/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/analytics/duckdb_adapter.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/analytics/messenger_communities.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/analytics/messenger_graph.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/analytics/messenger_labels.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/analytics/profiles.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/analytics/query_engine.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/analytics/raw_queries.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/analytics.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/app_registry.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/backup.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/compute_remote.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/data_commit.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/data_explorer_table_prefs.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/database_explorer.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/db.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/device.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/engine_run.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/enrichment.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/filter_lab.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/health.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/home_chat.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/ingestion_api.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/ingestion_compat.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/ingestion_sources.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/llm.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/local_mcp.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/messenger_analytics.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/privacy_disclose.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/query_api.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/runtime_bootstrap.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/sanitization_ollama_config.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/signal.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/signal_extraction_config.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/source_install.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/source_scrub.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/sources.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/sources_overview.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/sync.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/ui_config.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/uma_data.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/usage.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/api/user_identity.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/app.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/auth.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/mappers/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/mappers/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/mappers/browser_activity_mapper.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/mappers/demo_mappers.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/mappers/grok_mapper.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/models.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/resolver.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/cli/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/cli/__main__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/cli/commands.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/config/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/config/sanitization_ollama.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/config/settings.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/config/signal_extraction.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/contacts/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/contacts/identity.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/api_models.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/connection_resilience.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/device_helpers.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/errors.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/events.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/metrics.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/routine_access.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/startup_banner.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/state.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/table_layers.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/core/types.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/data_explorer_row_delete.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/data_explorer_table_prefs.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/data_explorer_tables.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/disclosure/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/disclosure/canonical_writer.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/disclosure/content_policy.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/disclosure/field_registry.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/disclosure/privacy_layer.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/disclosure/tier.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/generative_prompts.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/generative_response.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/huggingface.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/ollama.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/openai.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/openai_compatible.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/redpill.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/backends/stub.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/client.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/engine.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/intake.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/memory_utils.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/model_cache.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/pipeline_memory.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/queue_manager.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/registration.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/result_formatter.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/router.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/scoped_token.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/tasks.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/transport.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/usage_guard.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/usage_observation.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/engine/validator.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/derived_tables.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/job_writer.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/_batch_limits.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/_engine_runner.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/availability_scores_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/brief_fallback.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/dimension_summary_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/goal_extraction_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/pii_redaction_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/relationship_edges_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/topic_clusters_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/url_classification_core.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/url_classification_enrichment_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/url_classification_signal_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/raw/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/raw/language_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/models/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/models/manager.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/models/mvp_defaults.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/models/registry.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/models/versioning.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/orchestrator.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/processor.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/progress_bar.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/registry_contract.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/website_classifier.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/fit/evaluator.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/brief_canonical_loader.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/brief_ontology.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/brief_renderer.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/brief_schemas.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/chunking.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/data_health.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/dimension_briefs.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/dimension_definition_loader.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/dimension_profiles.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/extraction/artifact_router.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/extraction/artifact_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/extraction/rule_extractors.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/graph_sanitize.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/hybrid_search.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/query_embed_cache.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/schemas.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/service.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/signal_object_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/source_hydration.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/structured_signal.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/topic_clustering.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/typed_stores/aggregates.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/typed_stores/scope_materializer.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/vector_codec.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/vector_math.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/features/signal/vector_settings.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/filter_lab/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/filter_lab/bundles.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/filter_lab/schema.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/filter_lab/service.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/filter_lab/store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/filter_lab/worker.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/home_chat/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/home_chat/schema.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/home_chat/store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/hosted_pool_lease.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/canonical_pipeline.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/checkpoints/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/inbox_crypto.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/inbox_drain.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/jobs.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/journal_location_fanout.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/journal_time_log_normalize.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/local_sync.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/log_preview.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/manager.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parser.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/browser_parser.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/calendar_parser.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/demo_file_parsers.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/grok_parser.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/messenger_parser.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/parsers/voxterm_parser.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/progress.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/reprocess.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/calendar.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/chatgpt.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/contact_importers.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/grok.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/imessage_reader.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/signal_export_parser.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/sources/signal_reader.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/state_machine.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/triggers/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/triggers/file_trigger.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/usage_inbox_dedupe.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/validation/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/validation/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/validation/schema_registry.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/ingestion/validation/schema_validator.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/lineage/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/lineage/provenance.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/lineage/tracker.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/llm_integrations_storage.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/mcp_stdio_proxy.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/observability/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/observability/alerts.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/observability/metrics.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/observability/tracing.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/openai_client.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/pipeline/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/pipeline/audit.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/pipeline/envelope.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/pipeline/stages.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/pipeline/stub_enqueue.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/projections/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/projections/vector_index/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/projections/vector_index/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/projections/vector_index/builders.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/projections/vector_index/health_checks.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/audit.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/disclosure.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/fingerprint.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/game_layer.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/inference.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/intent.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/manifest.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/manifest_validation.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/pipeline.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/retrieval.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/runtime.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/scope_registry_loader.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/session.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/session_utils.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/source_generation.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/turn_classifier.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/query/types.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/rate_limit.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/routines/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/routines/schema.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/routines/store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/runtime_update.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sanitization/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sanitization/nsfw_classifier.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sanitization/ollama_transforms.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sanitization/privacy_filter.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/scope_resolution.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/container.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/embeddings/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/embeddings/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/embeddings/local.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/embeddings/remote.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/interfaces.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/llm/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/llm/base.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/llm/openai.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/local.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/services/postgres.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/bundled_canonical_triples.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/canonical_signal_defaults.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/definitions.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/install_service.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/registry.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/runtime_install.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/scrub_attribution.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sources/scrub_service.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/startup_banner.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/adapters/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/adapters/factory.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/adapters/fakes.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/adapters/postgres/stores.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/adapters/protocols.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/adapters/sqlite/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/adapters/sqlite/stores.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/adapters/sqlite/vector_search.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/activity_tables.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/ai_chat/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/ai_chat/mapper.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/ai_chat/model.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/ai_chat/tables.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/calendar_contacts_tables.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/canonical_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/conversations_tables.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/mapping_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/canonical/postgres.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/client.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/canonical_disclosure_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/canonical_nsfw_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/extraction_artifacts.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/journal_entries_duration_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/journal_entries_ends_at_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/journal_entries_people_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/journal_entries_place_name_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/journal_entries_starts_at_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/remediation_person_model.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/scope_source_generation.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/signal_dimension_harness.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/signal_objects.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/signal_objects_updated_by_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/vector_storage_v1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/vector_storage_v2.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/vector_storage_v3.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/wiki_mvp_phase0.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/wiki_mvp_phase1.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/wiki_mvp_phase4_messages_cutover.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/wiki_mvp_phase5_topic_clusters.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/wiki_mvp_phase6_dimension_briefs.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/wiki_mvp_query_quality.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/migrations/wiki_mvp_topic_clusters_coordination.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/paths.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/postgres.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/schema.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/db/storage_breakdown.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/enrichment/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/normalized/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/normalized/normalized_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/oplog/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/oplog/decision.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/oplog/oplog_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/oplog/postgres.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/person/identity_resolver.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/projections/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/projections/index_ops_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/projections/vector_index_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/raw/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/raw/browser_flat_tables.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/raw/file_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/raw/raw_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/raw/raw_tables_manager.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/raw/sqlite_raw_store.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/security/encryption.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/signal_identity.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/source_settings.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/storage/user_identity.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sync/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sync/client.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/sync_handlers.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/testing/__init__.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/testing/lifespan.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/uma_contact_enrichment.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/uma_filters.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/uma_resource_id.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/uma_rpt.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/utils/base_object.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos/websocket_client.py +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos_node.egg-info/SOURCES.txt +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos_node.egg-info/dependency_links.txt +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos_node.egg-info/entry_points.txt +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos_node.egg-info/requires.txt +0 -0
- {topos_node-1.0.5 → topos_node-1.0.7}/topos_node.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "topos-node"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.7"
|
|
8
8
|
description = "Topos personal AI engine (FastAPI): local data, sync, control plane WebSocket client"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -26,6 +26,21 @@ from .core.connection_resilience import (
|
|
|
26
26
|
|
|
27
27
|
logger = logging.getLogger("topos.control_plane_client")
|
|
28
28
|
|
|
29
|
+
# Lightweight CP RPCs that must stay responsive while ingest/enrichment runs.
|
|
30
|
+
_FAST_INBOUND_MESSAGE_TYPES = frozenset(
|
|
31
|
+
{
|
|
32
|
+
"healthcheck",
|
|
33
|
+
"connection_info",
|
|
34
|
+
"check_inbox_write",
|
|
35
|
+
"list_waiting_routine_runs",
|
|
36
|
+
"list_due_routines",
|
|
37
|
+
"routine_has_active_run",
|
|
38
|
+
"update_routine_run",
|
|
39
|
+
"get_routine",
|
|
40
|
+
"advance_routine_next_run_at",
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
|
|
29
44
|
|
|
30
45
|
class ControlPlaneClient:
|
|
31
46
|
"""Maintains a WS connection to the control plane and dispatches incoming requests."""
|
|
@@ -242,6 +257,12 @@ class ControlPlaneClient:
|
|
|
242
257
|
return
|
|
243
258
|
|
|
244
259
|
async def _schedule_inbound_message(self, ws, data: Dict[str, Any]) -> None:
|
|
260
|
+
msg_type = str(data.get("type") or "")
|
|
261
|
+
if msg_type in _FAST_INBOUND_MESSAGE_TYPES:
|
|
262
|
+
task = asyncio.create_task(self._handle_message(ws, data))
|
|
263
|
+
self._inbound_tasks.add(task)
|
|
264
|
+
task.add_done_callback(self._on_inbound_task_done)
|
|
265
|
+
return
|
|
245
266
|
async with self._inbound_lock:
|
|
246
267
|
pending_count = len(self._inbound_tasks)
|
|
247
268
|
if pending_count >= self._inbound_max_pending:
|
|
@@ -2482,7 +2482,8 @@ async def handle_control_plane_request(message: Dict[str, Any]) -> Optional[Dict
|
|
|
2482
2482
|
errors = []
|
|
2483
2483
|
records_total = len(records)
|
|
2484
2484
|
enrichment_contexts: list[dict] = []
|
|
2485
|
-
|
|
2485
|
+
# Ack fast: canonicalize + flat write only; enrichment/signals run in background.
|
|
2486
|
+
defer_enrichment = True
|
|
2486
2487
|
for i, rec in enumerate(records):
|
|
2487
2488
|
if not isinstance(rec, dict):
|
|
2488
2489
|
err = "record must be a dict"
|
|
@@ -2500,7 +2501,7 @@ async def handle_control_plane_request(message: Dict[str, Any]) -> Optional[Dict
|
|
|
2500
2501
|
schema_id=schema_id,
|
|
2501
2502
|
payload=rec,
|
|
2502
2503
|
source_id=source_id,
|
|
2503
|
-
defer_enrichment=
|
|
2504
|
+
defer_enrichment=defer_enrichment,
|
|
2504
2505
|
)
|
|
2505
2506
|
if result.get("status") == "ok":
|
|
2506
2507
|
processed += 1
|
|
@@ -2553,15 +2554,7 @@ async def handle_control_plane_request(message: Dict[str, Any]) -> Optional[Dict
|
|
|
2553
2554
|
"records_total": records_total,
|
|
2554
2555
|
"errors": errors,
|
|
2555
2556
|
}
|
|
2556
|
-
if
|
|
2557
|
-
from ..ingestion.usage_inbox_dedupe import record_delivery
|
|
2558
|
-
|
|
2559
|
-
record_delivery(
|
|
2560
|
-
write_id,
|
|
2561
|
-
records_processed=processed,
|
|
2562
|
-
records_total=records_total,
|
|
2563
|
-
)
|
|
2564
|
-
response_payload["write_id"] = write_id
|
|
2557
|
+
if processed > 0 and enrichment_contexts:
|
|
2565
2558
|
|
|
2566
2559
|
def _log_enrichment_task(task: asyncio.Task) -> None:
|
|
2567
2560
|
if task.cancelled():
|
|
@@ -2569,8 +2562,9 @@ async def handle_control_plane_request(message: Dict[str, Any]) -> Optional[Dict
|
|
|
2569
2562
|
exc = task.exception()
|
|
2570
2563
|
if exc is not None:
|
|
2571
2564
|
logger.warning(
|
|
2572
|
-
"[PIPELINE:APP_INGEST] Background enrichment failed write_id=%s: %s",
|
|
2573
|
-
|
|
2565
|
+
"[PIPELINE:APP_INGEST] Background enrichment failed source_id=%s write_id=%s: %s",
|
|
2566
|
+
source_id,
|
|
2567
|
+
write_id or "",
|
|
2574
2568
|
exc,
|
|
2575
2569
|
exc_info=exc,
|
|
2576
2570
|
)
|
|
@@ -2578,6 +2572,15 @@ async def handle_control_plane_request(message: Dict[str, Any]) -> Optional[Dict
|
|
|
2578
2572
|
for ctx in enrichment_contexts:
|
|
2579
2573
|
task = asyncio.create_task(run_inbox_deferred_enrichment(ctx))
|
|
2580
2574
|
task.add_done_callback(_log_enrichment_task)
|
|
2575
|
+
if write_id and processed > 0:
|
|
2576
|
+
from ..ingestion.usage_inbox_dedupe import record_delivery
|
|
2577
|
+
|
|
2578
|
+
record_delivery(
|
|
2579
|
+
write_id,
|
|
2580
|
+
records_processed=processed,
|
|
2581
|
+
records_total=records_total,
|
|
2582
|
+
)
|
|
2583
|
+
response_payload["write_id"] = write_id
|
|
2581
2584
|
elif write_id:
|
|
2582
2585
|
response_payload["write_id"] = write_id
|
|
2583
2586
|
if processed == 0:
|
|
@@ -179,7 +179,7 @@ class ColorFormatter(logging.Formatter):
|
|
|
179
179
|
|
|
180
180
|
_SOURCE_KV_PATTERN = re.compile(
|
|
181
181
|
r"(?<![?&/])" # skip URL query/path fragments like ...&source=editors
|
|
182
|
-
r"\b(?P<key>source_id|source)
|
|
182
|
+
r"\b(?P<key>source_id|source)(?P<sep>=|:)"
|
|
183
183
|
r"(?:"
|
|
184
184
|
r"(?P<q>['\"])(?P<qval>[^'\"]+)(?P=q)|"
|
|
185
185
|
r"(?P<uval>[^\s,;)\]&]+)"
|
|
@@ -196,11 +196,12 @@ class ColorFormatter(logging.Formatter):
|
|
|
196
196
|
if value in self._SOURCE_VALUE_SKIP or value.startswith("excluded."):
|
|
197
197
|
return match.group(0)
|
|
198
198
|
key = match.group("key")
|
|
199
|
+
sep = match.group("sep")
|
|
199
200
|
quote = match.group("q") or ""
|
|
200
201
|
colored_value = (
|
|
201
202
|
f"{self._SOURCE_IDENTITY_VALUE_COLOR}{value}{self._RESET}{self._MESSAGE_COLOR}"
|
|
202
203
|
)
|
|
203
|
-
return f"{key}
|
|
204
|
+
return f"{key}{sep}{quote}{colored_value}{quote}"
|
|
204
205
|
|
|
205
206
|
return self._SOURCE_KV_PATTERN.sub(repl, message)
|
|
206
207
|
|
|
@@ -74,7 +74,7 @@ CANONICAL_GROUP_BRIEF_DIMENSIONS: Dict[str, Tuple[str, ...]] = {
|
|
|
74
74
|
"activity": ("interests", "profile"),
|
|
75
75
|
"schedule": ("time", "places", "relationships", "work"),
|
|
76
76
|
"contacts": ("relationships", "profile"),
|
|
77
|
-
"journal": ("wellbeing", "memory"),
|
|
77
|
+
"journal": ("wellbeing", "memory", "profile"),
|
|
78
78
|
"profile": ("profile", "work", "intentions"),
|
|
79
79
|
"financial": ("resources",),
|
|
80
80
|
"places": ("places", "interests", "relationships"),
|
|
@@ -390,7 +390,7 @@ async def _ingest_ui_payload_direct(
|
|
|
390
390
|
source_type=raw_source_type,
|
|
391
391
|
)
|
|
392
392
|
logger.info(
|
|
393
|
-
"[PIPELINE:RAW]
|
|
393
|
+
"[PIPELINE:RAW] source:%s record_id=%s",
|
|
394
394
|
source_id,
|
|
395
395
|
record_id[:8] if record_id else None,
|
|
396
396
|
)
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{topos_node-1.0.5 → topos_node-1.0.7}/topos/canonicalization/mappers/browser_activity_mapper.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
|
|
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
|
|
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
|
{topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/availability_scores_job.py
RENAMED
|
File without changes
|
|
File without changes
|
{topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/dimension_summary_job.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/goal_extraction_job.py
RENAMED
|
File without changes
|
|
File without changes
|
{topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/relationship_edges_job.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{topos_node-1.0.5 → topos_node-1.0.7}/topos/enrichment/jobs/canonical/url_classification_core.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
|