topos-node 0.1.3__tar.gz → 0.1.5__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-0.1.3 → topos_node-0.1.5}/PKG-INFO +1 -1
- {topos_node-0.1.3 → topos_node-0.1.5}/pyproject.toml +1 -1
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/__version__.py +2 -2
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/app.py +16 -3
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/cli/commands.py +26 -1
- topos_node-0.1.5/topos/startup_banner.py +53 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos_node.egg-info/PKG-INFO +1 -1
- {topos_node-0.1.3 → topos_node-0.1.5}/topos_node.egg-info/SOURCES.txt +1 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/LICENSE +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/README.md +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/setup.cfg +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/shared/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/shared/filtering.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/shared/schema_registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/analytics/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/analytics/duckdb_adapter.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/analytics/messenger_communities.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/analytics/messenger_graph.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/analytics/messenger_labels.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/analytics/profiles.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/analytics/query_engine.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/analytics/raw_queries.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/analytics.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/app_registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/backup.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/compute_remote.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/data_commit.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/data_explorer_table_prefs.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/db.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/device.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/enrichment.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/filter_lab.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/health.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/ingestion_api.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/ingestion_compat.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/ingestion_sources.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/llm.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/local_mcp.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/messenger_analytics.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/query_api.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/sanitization_ollama_config.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/source_install.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/sources.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/sync.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/ui_config.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/uma_data.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/usage.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/api/user_identity.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/auth.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/canonicalization/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/canonicalization/mappers/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/canonicalization/mappers/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/canonicalization/mappers/grok_mapper.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/canonicalization/models.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/canonicalization/resolver.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/cli/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/cli/__main__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/config/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/config/sanitization_ollama.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/config/settings.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/contacts/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/contacts/identity.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/control_plane_client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/api_models.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/connection_resilience.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/device_helpers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/errors.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/events.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/handlers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/logging.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/metrics.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/startup_banner.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/state.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/table_layers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/core/types.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/data_explorer_table_prefs.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/backends/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/backends/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/backends/huggingface.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/backends/ollama.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/backends/stub.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/engine.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/intake.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/queue_manager.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/registration.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/result_formatter.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/router.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/scoped_token.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/tasks.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/transport.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/usage_guard.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/usage_observation.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/engine/validator.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/derived_tables.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/canonical/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/raw/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/raw/language_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/models/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/models/manager.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/models/registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/models/versioning.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/orchestrator.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/processor.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/progress_bar.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/enrichment/website_classifier.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/filter_lab/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/filter_lab/bundles.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/filter_lab/schema.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/filter_lab/service.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/filter_lab/store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/filter_lab/worker.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/hosted_pool_lease.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/checkpoints/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/ingest_helpers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/jobs.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/local_sync.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/log_preview.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/manager.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/browser_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/calendar_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/grok_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/messenger_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/progress.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/calendar.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/chatgpt.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/contact_importers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/grok.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/imessage_reader.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/signal_export_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/sources/signal_reader.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/state_machine.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/triggers/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/triggers/file_trigger.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/validation/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/validation/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/validation/schema_registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/validation/schema_validator.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/lineage/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/lineage/provenance.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/lineage/tracker.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/mcp_stdio_proxy.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/observability/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/observability/alerts.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/observability/metrics.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/observability/tracing.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/openai_client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/projections/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/projections/vector_index/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/projections/vector_index/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/projections/vector_index/builders.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/projections/vector_index/health_checks.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/rate_limit.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sanitization/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sanitization/ollama_transforms.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/scope_resolution.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/container.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/embeddings/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/embeddings/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/embeddings/local.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/embeddings/remote.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/interfaces.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/llm/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/llm/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/llm/openai.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/local.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/services/postgres.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sources/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sources/definitions.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sources/install_service.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sources/registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sources/runtime_install.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/ai_chat/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/ai_chat/mapper.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/ai_chat/model.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/ai_chat/tables.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/canonical_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/conversations_tables.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/mapping_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/canonical/postgres.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/db/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/db/client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/db/migrations/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/db/paths.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/db/postgres.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/db/schema.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/enrichment/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/normalized/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/normalized/normalized_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/oplog/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/oplog/decision.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/oplog/oplog_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/oplog/postgres.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/projections/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/projections/index_ops_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/projections/vector_index_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/raw/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/raw/browser_flat_tables.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/raw/file_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/raw/raw_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/raw/raw_tables_manager.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/raw/sqlite_raw_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/security/encryption.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/signal_identity.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/source_settings.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/storage/user_identity.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sync/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sync/client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/sync_handlers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/testing/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/testing/lifespan.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/uma_contact_enrichment.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/uma_filters.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/uma_resource_id.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/uma_rpt.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/utils/base_object.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos/websocket_client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos_node.egg-info/dependency_links.txt +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos_node.egg-info/entry_points.txt +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/topos_node.egg-info/requires.txt +0 -0
- {topos_node-0.1.3 → topos_node-0.1.5}/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 = "0.1.
|
|
7
|
+
version = "0.1.5"
|
|
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"
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import importlib.util
|
|
5
5
|
import logging
|
|
6
|
+
import os
|
|
6
7
|
import sys
|
|
7
8
|
|
|
8
9
|
from fastapi import FastAPI
|
|
@@ -45,6 +46,7 @@ from .control_plane_client import ControlPlaneClient
|
|
|
45
46
|
from .engine.registration import build_engine_heartbeat_message, build_engine_register_message
|
|
46
47
|
from .hosted_pool_lease import HostedPoolLeaseClient
|
|
47
48
|
from .services.container import get_services
|
|
49
|
+
from .startup_banner import emit_startup_banner
|
|
48
50
|
from .sync import SyncClient
|
|
49
51
|
from .sync_handlers import handle_sync_op
|
|
50
52
|
|
|
@@ -57,9 +59,16 @@ app = FastAPI(
|
|
|
57
59
|
version=__version__,
|
|
58
60
|
)
|
|
59
61
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
|
|
63
|
+
def _log_runtime_banner() -> None:
|
|
64
|
+
if os.environ.get("TOPOS_STARTUP_BANNER_EMITTED", "").strip().lower() in {"1", "true", "yes"}:
|
|
65
|
+
return
|
|
66
|
+
emit_startup_banner(
|
|
67
|
+
lambda line: print(line, flush=True),
|
|
68
|
+
version=__version__,
|
|
69
|
+
mode="uvicorn",
|
|
70
|
+
)
|
|
71
|
+
|
|
63
72
|
|
|
64
73
|
app.add_middleware(
|
|
65
74
|
CORSMiddleware,
|
|
@@ -100,6 +109,10 @@ app.include_router(data_commit_routes.router)
|
|
|
100
109
|
|
|
101
110
|
@app.on_event("startup")
|
|
102
111
|
async def startup_event() -> None:
|
|
112
|
+
_log_runtime_banner()
|
|
113
|
+
logger.info("CORS allowed origins: %s", settings.allowed_origins)
|
|
114
|
+
if settings.allowed_origin_regex:
|
|
115
|
+
logger.info("CORS allowed origin regex: %s", settings.allowed_origin_regex)
|
|
103
116
|
logger.info("Runtime Python executable: %s", sys.executable)
|
|
104
117
|
logger.info(
|
|
105
118
|
"Runtime deps available: transformers=%s torch=%s",
|
|
@@ -19,6 +19,7 @@ from packaging.version import InvalidVersion, Version
|
|
|
19
19
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
|
|
20
20
|
|
|
21
21
|
from topos.storage.db.paths import discover_databases
|
|
22
|
+
from topos.startup_banner import emit_startup_banner
|
|
22
23
|
|
|
23
24
|
USER_ENV_PATH = Path.home() / ".topos" / ".env"
|
|
24
25
|
LEGACY_ENV_PATH = Path(__file__).resolve().parent.parent / ".env"
|
|
@@ -113,6 +114,30 @@ def _get_installed_package_version(package_name: str) -> str | None:
|
|
|
113
114
|
return None
|
|
114
115
|
|
|
115
116
|
|
|
117
|
+
def _get_module_version() -> str | None:
|
|
118
|
+
try:
|
|
119
|
+
from topos.__version__ import __version__
|
|
120
|
+
except Exception:
|
|
121
|
+
return None
|
|
122
|
+
return __version__ or None
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _get_runtime_version(package_name: str = "topos-node") -> str:
|
|
126
|
+
return _get_module_version() or _get_installed_package_version(package_name) or "unknown"
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def _emit_startup_banner(host: str, port: int, package_name: str = "topos-node") -> None:
|
|
130
|
+
runtime_version = _get_runtime_version(package_name=package_name)
|
|
131
|
+
emit_startup_banner(
|
|
132
|
+
click.echo,
|
|
133
|
+
version=runtime_version,
|
|
134
|
+
mode="cli",
|
|
135
|
+
bind=f"{host}:{port}",
|
|
136
|
+
)
|
|
137
|
+
# Prevent duplicate banner when app startup runs in same process.
|
|
138
|
+
os.environ["TOPOS_STARTUP_BANNER_EMITTED"] = "1"
|
|
139
|
+
|
|
140
|
+
|
|
116
141
|
def _get_latest_pypi_version(package_name: str, timeout_seconds: float = 2.0) -> str | None:
|
|
117
142
|
url = f"https://pypi.org/pypi/{package_name}/json"
|
|
118
143
|
try:
|
|
@@ -235,7 +260,7 @@ def main(db_path, topos_key, set_topos_key, discover, port, host, skip_update_ch
|
|
|
235
260
|
os.environ["TOPOS_DATABASE_PATH"] = db_path
|
|
236
261
|
click.echo(f"Database path: {db_path}")
|
|
237
262
|
|
|
238
|
-
|
|
263
|
+
_emit_startup_banner(host=host, port=port)
|
|
239
264
|
uvicorn.run(app, host=host, port=port)
|
|
240
265
|
|
|
241
266
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
|
|
5
|
+
PIXEL_TOPOS_ART = [
|
|
6
|
+
"TTTTTTTT OOOOOOO PPPPPPPP OOOOOOO SSSSSSS",
|
|
7
|
+
" TT OOO OOO PPP PPP OOO OOO SSS SSS",
|
|
8
|
+
" TT OOO OOO PPP PPP OOO OOO SSS",
|
|
9
|
+
" TT OOO OOO PPPPPPPP OOO OOO SSSSSS",
|
|
10
|
+
" TT OOO OOO PPP OOO OOO SSS",
|
|
11
|
+
" TT OOO OOO PPP OOO OOO SSS SSS",
|
|
12
|
+
" TT OOOOOOO PPP OOOOOOO SSSSSSS",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
TAGLINE = "Your Personal AI Node"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _frame_lines(lines: list[str], *, min_width: int = 0, align: str = "left") -> list[str]:
|
|
19
|
+
width = max(max((len(line) for line in lines), default=0), min_width)
|
|
20
|
+
border = f"+-{'-' * width}-+"
|
|
21
|
+
framed = [border]
|
|
22
|
+
if align == "center":
|
|
23
|
+
formatter = str.center
|
|
24
|
+
else:
|
|
25
|
+
formatter = str.ljust
|
|
26
|
+
for line in lines:
|
|
27
|
+
framed.append(f"| {formatter(line, width)} |")
|
|
28
|
+
framed.append(border)
|
|
29
|
+
return framed
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def build_startup_banner_lines(version: str, mode: str, bind: str | None = None) -> list[str]:
|
|
33
|
+
lines: list[str] = []
|
|
34
|
+
lines.extend(_frame_lines(PIXEL_TOPOS_ART, min_width=72, align="left"))
|
|
35
|
+
lines.extend(_frame_lines([TAGLINE], min_width=72, align="center"))
|
|
36
|
+
lines.append("")
|
|
37
|
+
lines.extend(_frame_lines(["Topos Node (topos-node)"], min_width=40, align="left"))
|
|
38
|
+
lines.extend(_frame_lines([f"Version : v{version}"], min_width=40, align="left"))
|
|
39
|
+
lines.extend(_frame_lines([f"Mode : {mode}"], min_width=40, align="left"))
|
|
40
|
+
if bind:
|
|
41
|
+
lines.extend(_frame_lines([f"Bind : {bind}"], min_width=40, align="left"))
|
|
42
|
+
return lines
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def emit_startup_banner(
|
|
46
|
+
writer: Callable[[str], None],
|
|
47
|
+
*,
|
|
48
|
+
version: str,
|
|
49
|
+
mode: str,
|
|
50
|
+
bind: str | None = None,
|
|
51
|
+
) -> None:
|
|
52
|
+
for line in build_startup_banner_lines(version=version, mode=mode, bind=bind):
|
|
53
|
+
writer(line)
|
|
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
|
|
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-0.1.3 → topos_node-0.1.5}/topos/ingestion/checkpoints/sqlite_checkpoint_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
|
{topos_node-0.1.3 → topos_node-0.1.5}/topos/ingestion/parsers/chatgpt_conversation_flattener.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
|