topos-node 0.1.3__tar.gz → 0.1.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.
- {topos_node-0.1.3 → topos_node-0.1.4}/PKG-INFO +1 -1
- {topos_node-0.1.3 → topos_node-0.1.4}/pyproject.toml +1 -1
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/__version__.py +2 -2
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/app.py +13 -3
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/cli/commands.py +24 -1
- topos_node-0.1.4/topos/startup_banner.py +53 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos_node.egg-info/PKG-INFO +1 -1
- {topos_node-0.1.3 → topos_node-0.1.4}/topos_node.egg-info/SOURCES.txt +1 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/LICENSE +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/README.md +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/setup.cfg +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/shared/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/shared/filtering.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/shared/schema_registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/analytics/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/analytics/duckdb_adapter.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/analytics/messenger_communities.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/analytics/messenger_graph.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/analytics/messenger_labels.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/analytics/profiles.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/analytics/query_engine.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/analytics/raw_queries.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/analytics.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/app_registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/backup.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/compute_remote.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/data_commit.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/data_explorer_table_prefs.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/db.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/device.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/enrichment.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/filter_lab.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/health.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/ingestion_api.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/ingestion_compat.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/ingestion_sources.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/llm.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/local_mcp.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/messenger_analytics.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/query_api.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/sanitization_ollama_config.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/source_install.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/sources.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/sync.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/ui_config.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/uma_data.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/usage.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/api/user_identity.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/auth.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/canonicalization/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/canonicalization/mappers/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/canonicalization/mappers/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/canonicalization/mappers/grok_mapper.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/canonicalization/models.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/canonicalization/resolver.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/cli/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/cli/__main__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/config/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/config/sanitization_ollama.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/config/settings.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/contacts/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/contacts/identity.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/control_plane_client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/api_models.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/connection_resilience.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/device_helpers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/errors.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/events.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/handlers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/logging.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/metrics.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/startup_banner.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/state.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/table_layers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/core/types.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/data_explorer_table_prefs.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/backends/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/backends/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/backends/huggingface.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/backends/ollama.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/backends/stub.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/engine.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/intake.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/queue_manager.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/registration.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/result_formatter.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/router.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/scoped_token.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/tasks.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/transport.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/usage_guard.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/usage_observation.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/engine/validator.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/derived_tables.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/canonical/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/raw/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/raw/language_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/models/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/models/manager.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/models/registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/models/versioning.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/orchestrator.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/processor.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/progress_bar.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/enrichment/website_classifier.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/filter_lab/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/filter_lab/bundles.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/filter_lab/schema.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/filter_lab/service.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/filter_lab/store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/filter_lab/worker.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/hosted_pool_lease.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/checkpoints/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/ingest_helpers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/jobs.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/local_sync.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/log_preview.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/manager.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parsers/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parsers/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parsers/browser_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parsers/calendar_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parsers/grok_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/parsers/messenger_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/progress.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/calendar.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/chatgpt.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/contact_importers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/grok.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/imessage_reader.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/signal_export_parser.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/sources/signal_reader.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/state_machine.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/triggers/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/triggers/file_trigger.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/validation/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/validation/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/validation/schema_registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/ingestion/validation/schema_validator.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/lineage/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/lineage/provenance.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/lineage/tracker.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/mcp_stdio_proxy.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/observability/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/observability/alerts.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/observability/metrics.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/observability/tracing.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/openai_client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/projections/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/projections/vector_index/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/projections/vector_index/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/projections/vector_index/builders.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/projections/vector_index/health_checks.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/rate_limit.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sanitization/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sanitization/ollama_transforms.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/scope_resolution.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/container.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/embeddings/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/embeddings/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/embeddings/local.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/embeddings/remote.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/interfaces.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/llm/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/llm/base.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/llm/openai.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/local.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/services/postgres.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sources/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sources/definitions.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sources/install_service.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sources/registry.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sources/runtime_install.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/ai_chat/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/ai_chat/mapper.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/ai_chat/model.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/ai_chat/tables.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/canonical_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/conversations_tables.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/mapping_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/canonical/postgres.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/db/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/db/client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/db/migrations/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/db/paths.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/db/postgres.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/db/schema.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/enrichment/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/normalized/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/normalized/normalized_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/oplog/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/oplog/decision.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/oplog/oplog_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/oplog/postgres.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/projections/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/projections/index_ops_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/projections/vector_index_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/raw/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/raw/browser_flat_tables.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/raw/file_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/raw/raw_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/raw/raw_tables_manager.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/raw/sqlite_raw_store.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/security/encryption.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/signal_identity.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/source_settings.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/storage/user_identity.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sync/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sync/client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/sync_handlers.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/testing/__init__.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/testing/lifespan.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/uma_contact_enrichment.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/uma_filters.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/uma_resource_id.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/uma_rpt.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/utils/base_object.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos/websocket_client.py +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos_node.egg-info/dependency_links.txt +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos_node.egg-info/entry_points.txt +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/topos_node.egg-info/requires.txt +0 -0
- {topos_node-0.1.3 → topos_node-0.1.4}/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.4"
|
|
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"
|
|
@@ -45,6 +45,7 @@ from .control_plane_client import ControlPlaneClient
|
|
|
45
45
|
from .engine.registration import build_engine_heartbeat_message, build_engine_register_message
|
|
46
46
|
from .hosted_pool_lease import HostedPoolLeaseClient
|
|
47
47
|
from .services.container import get_services
|
|
48
|
+
from .startup_banner import emit_startup_banner
|
|
48
49
|
from .sync import SyncClient
|
|
49
50
|
from .sync_handlers import handle_sync_op
|
|
50
51
|
|
|
@@ -57,9 +58,14 @@ app = FastAPI(
|
|
|
57
58
|
version=__version__,
|
|
58
59
|
)
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
|
|
62
|
+
def _log_runtime_banner() -> None:
|
|
63
|
+
emit_startup_banner(
|
|
64
|
+
lambda line: print(line, flush=True),
|
|
65
|
+
version=__version__,
|
|
66
|
+
mode="uvicorn",
|
|
67
|
+
)
|
|
68
|
+
|
|
63
69
|
|
|
64
70
|
app.add_middleware(
|
|
65
71
|
CORSMiddleware,
|
|
@@ -100,6 +106,10 @@ app.include_router(data_commit_routes.router)
|
|
|
100
106
|
|
|
101
107
|
@app.on_event("startup")
|
|
102
108
|
async def startup_event() -> None:
|
|
109
|
+
_log_runtime_banner()
|
|
110
|
+
logger.info("CORS allowed origins: %s", settings.allowed_origins)
|
|
111
|
+
if settings.allowed_origin_regex:
|
|
112
|
+
logger.info("CORS allowed origin regex: %s", settings.allowed_origin_regex)
|
|
103
113
|
logger.info("Runtime Python executable: %s", sys.executable)
|
|
104
114
|
logger.info(
|
|
105
115
|
"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,28 @@ 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
|
+
|
|
138
|
+
|
|
116
139
|
def _get_latest_pypi_version(package_name: str, timeout_seconds: float = 2.0) -> str | None:
|
|
117
140
|
url = f"https://pypi.org/pypi/{package_name}/json"
|
|
118
141
|
try:
|
|
@@ -235,7 +258,7 @@ def main(db_path, topos_key, set_topos_key, discover, port, host, skip_update_ch
|
|
|
235
258
|
os.environ["TOPOS_DATABASE_PATH"] = db_path
|
|
236
259
|
click.echo(f"Database path: {db_path}")
|
|
237
260
|
|
|
238
|
-
|
|
261
|
+
_emit_startup_banner(host=host, port=port)
|
|
239
262
|
uvicorn.run(app, host=host, port=port)
|
|
240
263
|
|
|
241
264
|
|
|
@@ -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.4}/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.4}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|