topos-node 1.3.54__tar.gz → 1.3.55__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.3.55/PKG-INFO +335 -0
- topos_node-1.3.55/README.md +268 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/pyproject.toml +27 -6
- topos_node-1.3.55/tests/test_sync_dep_pins.py +121 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/__version__.py +2 -2
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/ingestion_sources.py +55 -36
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/signal.py +43 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/app.py +10 -16
- topos_node-1.3.55/topos/cli/assets/topos_black.png +0 -0
- topos_node-1.3.55/topos/cli/assets/topos_white.png +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/cli/tray.py +13 -3
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/control_plane_client.py +93 -10
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/db_health.py +14 -5
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/enrichment.py +22 -1
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/signal_features.py +36 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/sources.py +47 -38
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/edges.py +89 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/reads.py +34 -1
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/local_sync.py +55 -1
- topos_node-1.3.55/topos/ingestion/local_sync_jobs.py +139 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/pipeline/job_runner.py +246 -35
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/pipeline/job_store.py +114 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/protocol/handled_message_types.json +1 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/protocol/narrowing_vocabulary.json +6 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/inference.py +16 -4
- topos_node-1.3.55/topos/query/journal_event_lane.py +322 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/narrowing.py +9 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/pipeline.py +124 -27
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/planner.py +65 -1
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/retrieval.py +186 -5
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/upgrades/manifests.json +6 -0
- topos_node-1.3.55/topos_node.egg-info/PKG-INFO +335 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos_node.egg-info/SOURCES.txt +4 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos_node.egg-info/requires.txt +4 -4
- topos_node-1.3.54/PKG-INFO +0 -310
- topos_node-1.3.54/README.md +0 -243
- topos_node-1.3.54/topos/cli/assets/topos_white.png +0 -0
- topos_node-1.3.54/topos_node.egg-info/PKG-INFO +0 -310
- {topos_node-1.3.54 → topos_node-1.3.55}/LICENSE +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/MANIFEST.in +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/setup.cfg +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/shared/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/shared/filtering.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/shared/schema_registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_active_database_binding.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_active_ingestion_binding.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_extensions.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_gate_leg_hermeticity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_llm_integrations_storage.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_local_gate_composition.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_owner_database_hermeticity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_prewarm_first_run.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_profile_hygiene.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_profiles.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_protocol_handled_types.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_query_field_contract.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/tests/test_system_computer_name.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/dataset_resolution.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/duckdb_adapter.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/luck_surface.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/messenger_communities.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/messenger_directed.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/messenger_graph.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/messenger_labels.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/person_graph.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/person_overlay.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/profiles.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/query_engine.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/raw_queries.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/analytics/relationship_reads.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/analytics.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/app_registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/backup.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/community_naming_config.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/compute_remote.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/connected_apps.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/conversation_context.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/data_commit.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/data_explorer_table_prefs.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/database_explorer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/db.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/device.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/disk_space_config.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/engine_run.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/enrichment.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/enrichment_lab.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/facts_llm_config.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/filter_lab.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/health.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/home_chat.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/ingestion_api.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/ingestion_compat.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/intelligence_lifecycle.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/llm.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/local_mcp.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/messenger_analytics.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/privacy_disclose.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/query_api.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/runtime_bootstrap.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/sanitization_ollama_config.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/shell.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/signal_extraction_config.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/source_install.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/source_scrub.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/sources.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/sources_overview.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/sync.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/tool_index.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/ui_config.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/uma_data.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/upgrades.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/usage.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/api/user_identity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/auth.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/declared_field_map.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/browser_activity_mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/demo_mappers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/documents_mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/github_activity_mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/google_calendar_mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/grok_mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/mappers/transcript_mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/models.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/canonicalization/resolver.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/cli/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/cli/__main__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/cli/assets/topos_blk_rounded.png +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/cli/commands.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/cli/profile_cmd.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/cli/reprocess_cmd.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/cli/setup_models_cmd.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/conversation_context_llm.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/facts_llm.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/local_model_builds.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/model_packs.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/node_function_providers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/sanitization_ollama.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/settings.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/signal_extraction.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/config/uvicorn_logging.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/contacts/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/contacts/identity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/api_models.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/connection_resilience.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/device_helpers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/errors.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/events.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/aggregate.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/common.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/complexity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/config.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/contacts_import.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/database_explorer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/derivation.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/device.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/enrichment_lab.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/filter_lab.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/graph_query.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/graph_summary.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/home_chat.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/ingest.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/mcp_client_elevations.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/mcp_clients.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/messages.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/messenger_analytics.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/query.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/routines.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/timeline_daily.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/tool_index.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/handlers/uma.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/logging.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/metrics.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/routine_access.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/startup_banner.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/state.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/table_layers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/core/types.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/data_explorer_row_delete.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/data_explorer_table_prefs.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/data_explorer_tables.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/defaults.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/disclosure/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/disclosure/canonical_writer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/disclosure/content_policy.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/disclosure/field_registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/disclosure/privacy_layer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/disclosure/tier.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/generative_prompts.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/generative_response.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/huggingface.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/ollama.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/openai.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/openai_compatible.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/redpill.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/backends/stub.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/client.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/disk_space.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/engine.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/hosted_llm_wallet.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/intake.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/memory_utils.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/model_cache.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/model_manager.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/ollama_install.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/ollama_pull.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/ollama_runtime.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/ollama_setup_guidance.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/pipeline_memory.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/queue_manager.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/registration.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/result_formatter.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/router.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/scoped_token.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/tasks.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/torch_runtime.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/transport.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/usage_guard.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/usage_observation.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/engine/validator.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/catalog.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/derivation_recovery.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/derived_tables.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/job_readiness.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/job_writer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/_batch_limits.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/_engine_runner.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/attention_triage_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/availability_scores_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/brief_fallback.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/complexity_snapshot_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/derivation_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/derived_object_embeddings_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/dimension_summary_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/fact_extraction_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/goal_extraction_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/pii_redaction_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/relationship_edges_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/statistics_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/timeline_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/topic_clusters_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/raw/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/raw/language_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/model_overrides.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/models/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/models/manager.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/models/mvp_defaults.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/models/registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/models/versioning.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/orchestrator.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/pipeline_activity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/processor.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/progress_bar.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/record_progress.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/registry_contract.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/signal_derivation_config.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment/source_overrides.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment_lab/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment_lab/bundles.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment_lab/model_resolve.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment_lab/schema.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment_lab/service.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment_lab/store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/enrichment_lab/worker.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/evals/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/evals/enrichment_eval.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/extensions.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/canonical.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/engine.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/entropy.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/focus.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/graph_metrics.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/influence.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/projection.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/snapshots.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/topic_merge.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/topics.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/topics_daily.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/complexity/volatility.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/_scales.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/admin.legal.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/aspirations.goals.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/behavior.habits.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/behavior.preferences.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/beliefs.civic.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/beliefs.spiritual.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/communication.style.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/community.membership.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/craft.tooling.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/expertise.knowledge.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/finances.economics.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/health.lifestyle.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/health.mental.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/health.physical.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/household.pets.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/identity.core.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/interests.taste.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/life.events.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/narrative.self.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/net.capability.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/net.character.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/obligations.commitments.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/personality.traits.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/places.mobility.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/possessions.assets.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/relationships.social.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/values.motivation.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/vocab/dispositions.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/vocab/expertise.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/vocab/habits.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/vocab/interests.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/vocab/preferences.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/vocab/stances.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/vocab/tools.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/vocab/values.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/bundled_packs/work.career.yaml +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/candidates.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/commitments.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/guard.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/kernels.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/net_subject_policy.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/packs.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/person_bridge.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/person_reading.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/prefilter.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/report_card.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/router.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/social_bench.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/social_kernels.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/surfaces.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/synthesize.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/template.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/verify.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/derivation/writer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/affinity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/affinity_owner.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/affinity_quality.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/chatgpt_declared.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/community_names.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/community_naming.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/consolidation.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/context_vectors.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/cypher.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/declared_mappings.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/discourse_graph.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/dossier.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/fact_materializer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/graph_enrichers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/graph_refresh.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/graph_search.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/linking.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/maintenance.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/owner.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/rebuild_subprocess.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/resolver.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/entities/structured_fields.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/facts/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/facts/extract.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/facts/llm_extract.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/facts/reads.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/facts/store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/facts/verdicts.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/fit/evaluator.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/fit/opportunity_types.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/lifecycle/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/lifecycle/blackhole.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/lifecycle/blackhole_guard.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/lifecycle/blackhole_llm.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/lifecycle/blackhole_rebuild.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/lifecycle/derived_scrub.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/lifecycle/exclusions.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/lifecycle/gc.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/provenance/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/provenance/posture.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/provenance/roles.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/brief_canonical_loader.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/brief_ontology.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/brief_renderer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/brief_schemas.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/chunking.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/cluster_labels.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/conversation_context.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/conversation_windows.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/data_health.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/brief_ontologies.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/intentions.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/interests.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/memory.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/places.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/profile.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/relationships.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/resources.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/schema/dimension_definition.schema.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/time.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/wellbeing.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/definitions/work.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/derived_index.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/derived_spec.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/dimension_briefs.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/dimension_definition_loader.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/dimension_profiles.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/dimension_registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/embed_context.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/extraction/artifact_router.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/extraction/artifact_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/extraction/rule_extractors.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/graph_sanitize.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/hybrid_search.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/incremental_clustering.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/model_recommendations.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/query_embed_cache.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/schemas.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/service.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/signal_object_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/source_hydration.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/structured_signal.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/tool_index.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/topic_clustering.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/typed_stores/aggregates.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/typed_stores/commitments.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/typed_stores/rhythm.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/typed_stores/scope_materializer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/vector_codec.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/vector_math.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/signal/vector_settings.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/stats/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/stats/definitions.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/stats/engine.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/stats/fold.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/stats/insights.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/timeline_projection.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/timeline_rollup.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/triage/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/triage/badges.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/triage/daily.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/triage/dashboard.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/triage/instruments.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/triage/intents.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/features/triage/readiness.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/filter_lab/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/filter_lab/bundles.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/filter_lab/schema.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/filter_lab/service.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/filter_lab/store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/filter_lab/worker.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/home_chat/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/home_chat/schema.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/home_chat/store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/hosted_pool_lease.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/canonical_pipeline.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/checkpoints/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/inbox_crypto.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/inbox_drain.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/ingest_helpers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/jobs.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/journal_location_fanout.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/journal_time_log_normalize.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/local_exports.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/log_preview.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/manager.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/browser_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/calendar_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/chatgpt_export.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/demo_file_parsers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/documents_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/github_activity_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/google_calendar_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/grok_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/messenger_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/transcript_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/parsers/voxterm_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/progress.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/reprocess.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/calendar.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/chatgpt.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/contact_importers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/grok.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/imessage_reader.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/signal_export_parser.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/sources/signal_reader.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/state_machine.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/triggers/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/triggers/file_trigger.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/usage_inbox_dedupe.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/validation/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/validation/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/validation/schema_registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/ingestion/validation/schema_validator.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/lineage/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/lineage/provenance.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/lineage/tracker.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/llm_integrations_storage.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/mcp_clients.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/mcp_stdio_proxy.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/observability/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/observability/alerts.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/observability/metrics.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/observability/tracing.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/openai_client.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/owner_key.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/pipeline/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/pipeline/audit.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/pipeline/envelope.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/pipeline/stages.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/pipeline/stub_enqueue.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/principal.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/profiles.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/projections/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/projections/vector_index/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/projections/vector_index/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/projections/vector_index/builders.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/projections/vector_index/health_checks.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/protocol/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/protocol/query_field_contract.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/protocol/retrieval_text_contract.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/aggregate.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/audit.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/closeness.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/cohort_resolvers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/collaborators.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/ddr.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/disclosure.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/entity_window.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/exclusion.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/facts_direct.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/fingerprint.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/game_layer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/grant_cache.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/graph_lane.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/intent.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/manifest.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/manifest_validation.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/minimizer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/negotiation.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/overheard.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/packet_resolution.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/runtime.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/scope_arbiter.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/scope_classifier.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/scope_head.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/scope_registry.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/scope_registry_loader.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/scope_shadow.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/session.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/session_utils.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/source_generation.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/truth_facts.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/truth_prompts.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/turn_classifier.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/types.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/verify.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/query/verify_modes.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/rate_limit.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/relay_stamp.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/routines/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/routines/schema.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/routines/store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/runtime_housekeeping.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/runtime_shutdown.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/runtime_update.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sanitization/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sanitization/nsfw_classifier.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sanitization/ollama_transforms.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sanitization/prewarm.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sanitization/privacy_filter.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/scope_resolution.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/container.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/embeddings/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/embeddings/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/embeddings/local.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/embeddings/remote.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/interfaces.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/llm/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/llm/base.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/llm/openai.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/local.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/services/postgres.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/bundled_canonical_triples.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/canonical_signal_defaults.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/declared_field_map_spec.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/definitions.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/install_service.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/runtime_install.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/scrub_attribution.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sources/scrub_service.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/startup_banner.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/adapters/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/adapters/factory.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/adapters/fakes.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/adapters/postgres/stores.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/adapters/protocols.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/adapters/sqlite/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/adapters/sqlite/stores.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/adapters/sqlite/vector_search.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/activity_tables.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/ai_chat/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/ai_chat/mapper.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/ai_chat/model.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/ai_chat/tables.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/calendar_contacts_tables.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/canonical_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/conversations_tables.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/journal_repair.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/mapping_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/canonical/postgres.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/client.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/connection_tuning.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/activity_events_content_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/actor_role_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/affinity_pair_labels_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/attention_triage_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/attention_triage_v2.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/backup.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/backup_custody.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/calendar_events_scheduling_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/canonical_address_book_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/canonical_disclosure_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/canonical_nsfw_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/community_names_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/complexity_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/conflict_provenance_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/conversation_context_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/derivation_factory_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/derivation_ledger_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/derivation_provenance_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/derived_row_identity_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/documents_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/enrichment_record_progress_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/enrichment_spec_version_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_affinity_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_blackhole_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_context_vectors_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_context_vectors_v2.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_edges_validity_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_mentions_authored_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_review_candidate_bar_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_review_dedup_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/entity_review_provenance_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/episodes_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/extraction_artifacts.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/fact_dimension_by_entity_type_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/journal_entries_duration_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/journal_entries_ends_at_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/journal_entries_people_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/journal_entries_place_name_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/journal_entries_starts_at_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/journal_origin_dimension_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/mention_table_stamp_backfill_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/message_emotions_role_backfill_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/message_emotions_role_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/net_subject_policy_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/pack_registry_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/pipeline_jobs_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/query_artifacts_duration_ms_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/registry.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/registry_checksums.json +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/remediation_person_model.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/retire_url_classification_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/scope_source_generation.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/signal_dimension_backfill_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/signal_dimension_harness.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/signal_objects.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/signal_objects_period_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/signal_objects_updated_by_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/signal_summaries_drop_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/transcripts_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/vector_storage_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/vector_storage_v2.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/vector_storage_v3.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/vector_storage_v4.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_clusters_v2.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_entities_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_entity_review_v2.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_facts_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_lifecycle_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_mvp_phase0.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_mvp_phase1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_mvp_phase4_messages_cutover.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_mvp_phase5_topic_clusters.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_mvp_phase6_dimension_briefs.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_mvp_query_quality.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_mvp_topic_clusters_coordination.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_stats_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/migrations/wiki_timeline_v1.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/paths.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/postgres.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/schema.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/schema_probe.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/storage_breakdown.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/db/write_gate.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/derived_row_identity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/enrichment/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/normalized/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/normalized/normalized_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/oplog/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/oplog/decision.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/oplog/oplog_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/oplog/postgres.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/person/identity_resolver.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/projections/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/projections/index_ops_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/projections/vector_index_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/raw/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/raw/browser_flat_tables.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/raw/file_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/raw/raw_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/raw/raw_tables_manager.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/raw/sqlite_raw_store.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/security/encryption.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/signal_identity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/source_settings.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/storage/user_identity.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sync/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sync/client.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/sync_handlers.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/testing/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/testing/lifespan.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/uds.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/uma_contact_enrichment.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/uma_filters.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/uma_resource_id.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/uma_rpt.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/upgrades/__init__.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/upgrades/runner.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/utils/base_object.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos/websocket_client.py +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos_node.egg-info/dependency_links.txt +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos_node.egg-info/entry_points.txt +0 -0
- {topos_node-1.3.54 → topos_node-1.3.55}/topos_node.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: topos-node
|
|
3
|
+
Version: 1.3.55
|
|
4
|
+
Summary: Topos personal AI engine (FastAPI): local data, sync, control plane WebSocket client
|
|
5
|
+
License-Expression: Apache-2.0
|
|
6
|
+
Project-URL: Homepage, https://topos.dialogues.ai
|
|
7
|
+
Project-URL: Source, https://dialogues.ai
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: fastapi~=0.136.0
|
|
12
|
+
Requires-Dist: uvicorn[standard]~=0.44.0
|
|
13
|
+
Requires-Dist: httpx~=0.28.1
|
|
14
|
+
Requires-Dist: pydantic~=2.13.2
|
|
15
|
+
Requires-Dist: pydantic-settings~=2.15.0
|
|
16
|
+
Requires-Dist: websockets<16.1,>=16.0
|
|
17
|
+
Requires-Dist: certifi~=2026.2.25
|
|
18
|
+
Requires-Dist: cryptography~=50.0.1
|
|
19
|
+
Requires-Dist: python-multipart<0.0.33,>=0.0.32
|
|
20
|
+
Requires-Dist: click~=8.4.1
|
|
21
|
+
Requires-Dist: packaging<26.2,>=26.1
|
|
22
|
+
Requires-Dist: mcp~=1.30.0
|
|
23
|
+
Requires-Dist: google-cloud-storage~=3.10.1
|
|
24
|
+
Requires-Dist: google-cloud-run~=0.16.0
|
|
25
|
+
Requires-Dist: asgi-lifespan~=2.1.0
|
|
26
|
+
Requires-Dist: psycopg[binary]~=3.3.3
|
|
27
|
+
Requires-Dist: duckdb~=1.5.2
|
|
28
|
+
Requires-Dist: torch<2.13,>=2.8.0
|
|
29
|
+
Requires-Dist: transformers~=5.10.2
|
|
30
|
+
Requires-Dist: huggingface-hub~=1.18.0
|
|
31
|
+
Requires-Dist: tqdm~=4.67.3
|
|
32
|
+
Requires-Dist: hf-xet~=1.5.1
|
|
33
|
+
Requires-Dist: sentence-transformers~=5.6.0
|
|
34
|
+
Requires-Dist: networkx<3.7,>=3.2.1
|
|
35
|
+
Requires-Dist: python-louvain<0.17,>=0.16
|
|
36
|
+
Requires-Dist: grand-cypher<0.14,>=0.13
|
|
37
|
+
Requires-Dist: numpy<3,>=1.26
|
|
38
|
+
Requires-Dist: scipy<2,>=1.11
|
|
39
|
+
Requires-Dist: scikit-learn<2,>=1.4
|
|
40
|
+
Requires-Dist: sqlite-vec~=0.1.9
|
|
41
|
+
Requires-Dist: pystray~=0.19.5
|
|
42
|
+
Requires-Dist: pillow>=10.0
|
|
43
|
+
Provides-Extra: database
|
|
44
|
+
Requires-Dist: psycopg[binary]~=3.3.3; extra == "database"
|
|
45
|
+
Provides-Extra: engine
|
|
46
|
+
Requires-Dist: duckdb~=1.5.2; extra == "engine"
|
|
47
|
+
Requires-Dist: torch<2.13,>=2.8.0; extra == "engine"
|
|
48
|
+
Requires-Dist: transformers~=5.10.2; extra == "engine"
|
|
49
|
+
Requires-Dist: huggingface-hub~=1.18.0; extra == "engine"
|
|
50
|
+
Requires-Dist: tqdm~=4.67.3; extra == "engine"
|
|
51
|
+
Requires-Dist: hf-xet~=1.5.1; extra == "engine"
|
|
52
|
+
Requires-Dist: sentence-transformers~=5.6.0; extra == "engine"
|
|
53
|
+
Requires-Dist: networkx<3.7,>=3.2.1; extra == "engine"
|
|
54
|
+
Requires-Dist: python-louvain<0.17,>=0.16; extra == "engine"
|
|
55
|
+
Requires-Dist: grand-cypher<0.14,>=0.13; extra == "engine"
|
|
56
|
+
Requires-Dist: numpy<3,>=1.26; extra == "engine"
|
|
57
|
+
Requires-Dist: scipy<2,>=1.11; extra == "engine"
|
|
58
|
+
Requires-Dist: scikit-learn<2,>=1.4; extra == "engine"
|
|
59
|
+
Provides-Extra: local
|
|
60
|
+
Provides-Extra: signal
|
|
61
|
+
Requires-Dist: pysqlcipher3~=1.2.0; extra == "signal"
|
|
62
|
+
Provides-Extra: dev
|
|
63
|
+
Requires-Dist: pytest~=9.0.3; extra == "dev"
|
|
64
|
+
Requires-Dist: pytest-asyncio~=1.3.0; extra == "dev"
|
|
65
|
+
Requires-Dist: httpx~=0.28.1; extra == "dev"
|
|
66
|
+
Dynamic: license-file
|
|
67
|
+
|
|
68
|
+
<div align="center">
|
|
69
|
+
|
|
70
|
+
<picture>
|
|
71
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/dialoguesai/topos/main/docs/assets/topos_mark_white.png">
|
|
72
|
+
<img src="https://raw.githubusercontent.com/dialoguesai/topos/main/docs/assets/topos_mark_black.png" alt="Topos" width="120" />
|
|
73
|
+
</picture>
|
|
74
|
+
|
|
75
|
+
# Topos
|
|
76
|
+
|
|
77
|
+
### A digital twin, built from your own data.
|
|
78
|
+
|
|
79
|
+
**Connect the data you choose, and it takes the shape of you. Keep it private, or give access to your friends, your AIs, or the organizations you belong to — each seeing only what you allow.**
|
|
80
|
+
|
|
81
|
+
[Website](https://topos.dialogues.ai) · [Docs](https://topos.dialogues.ai/docs/welcome) · [Quick start](#quick-start) · [How it works](#how-it-works) · [Discord](https://discord.gg/BSahgm54mD)
|
|
82
|
+
|
|
83
|
+
[](https://pypi.org/project/topos-node/)
|
|
84
|
+
[](https://pypi.org/project/topos-node/)
|
|
85
|
+
[](LICENSE)
|
|
86
|
+
[](https://discord.gg/BSahgm54mD)
|
|
87
|
+
[](https://x.com/dialoguesai)
|
|
88
|
+
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
https://github.com/user-attachments/assets/4b63edf7-feff-4296-b9f9-07b3569e0f58
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## What Topos is
|
|
98
|
+
|
|
99
|
+
Topos is a small program you run on your own computer.
|
|
100
|
+
|
|
101
|
+
You connect the data you already have — messages, mail, calendar, files, notes, browsing history, past AI chats — one source at a time, and only the ones you choose. Whatever you connect lands in one shape, and from that shape Topos builds a working model of you: what you know, who you know, where your attention goes, and how all of it has changed over time. Not a backup of your files — a representation of the person who made them.
|
|
102
|
+
|
|
103
|
+
That model stays on your disk. An engine sits on top of it to answer questions about your life, and a permission layer decides exactly what any app, assistant, or person gets back.
|
|
104
|
+
|
|
105
|
+
So you can ask it the things you would never paste into ChatGPT — and you can carry a slice of yourself to a friend, an AI, or an organization without handing over the rest.
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
YOUR DATA TOPOS DATABASE TOPOS ENGINE THE ANSWER
|
|
109
|
+
───────── ────────────── ──────────── ──────────
|
|
110
|
+
mail · chat one SQLite file reads, reasons, scoped
|
|
111
|
+
calendar · files on your disk, enforces your filtered
|
|
112
|
+
notes · browsing ─▶ yours alone ─▶ permissions ─▶ logged
|
|
113
|
+
AI chat history
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Four things it does
|
|
117
|
+
|
|
118
|
+
| | | |
|
|
119
|
+
| --- | --- | --- |
|
|
120
|
+
| 🔌 | **Connect** | Choose which sources to plug in — mail, chat, calendar, files, notes. Nothing comes in that you didn't connect. |
|
|
121
|
+
| 🧬 | **Shape** | What you connect is formed into a model of you — what you know, who you know, how it has changed. |
|
|
122
|
+
| 💬 | **Ask** | Put the questions to it that you would never send to a cloud assistant. |
|
|
123
|
+
| 🤝 | **Carry** | Bring a slice of yourself to friends, AIs, and the organizations you are part of. Each sees only what you allow. |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Quick start
|
|
128
|
+
|
|
129
|
+
You need a Dialogues account to get a **Topos key** — the credential that pairs the node on your machine with your account. Sign up at **[topos.dialogues.ai](https://topos.dialogues.ai)** and open **Create Topos**; your key is on that screen.
|
|
130
|
+
|
|
131
|
+
### Option A — macOS app (easiest)
|
|
132
|
+
|
|
133
|
+
1. On the **Create Topos** screen, click **Download** to get `Topos.dmg` (signed and notarized).
|
|
134
|
+
2. Mount it, drag **Topos** into Applications, and launch it. A menu-bar icon appears.
|
|
135
|
+
3. Back in the browser, click **Connect this Mac** and allow the prompt. The app takes a one-time pairing code and stores your key.
|
|
136
|
+
4. Leave the page open while it prepares: the node downloads its engine (~900 MB) and language models (~2.9 GB). The menu-bar icon shows progress.
|
|
137
|
+
|
|
138
|
+
### Option B — terminal (macOS, Linux, Windows)
|
|
139
|
+
|
|
140
|
+
Install [uv](https://docs.astral.sh/uv/) if you do not have it:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Then:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
uv tool install topos-node
|
|
150
|
+
topos-node --set-topos-key "<YOUR_TOPOS_KEY>"
|
|
151
|
+
topos-node
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Your key is written to `~/.topos/.env` with restricted permissions. The node starts on port **8676** and connects out to the control plane.
|
|
155
|
+
|
|
156
|
+
Check that it is up:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
curl http://localhost:8676/healthcheck
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Your Topos now shows as **Connected** in the web app, and you can start adding sources.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## What it connects to
|
|
167
|
+
|
|
168
|
+
| Kind | Sources available today |
|
|
169
|
+
| --- | --- |
|
|
170
|
+
| 💬 **Messages** | iMessage, Signal Desktop |
|
|
171
|
+
| 🤖 **AI history** | ChatGPT (export file, and live conversations) |
|
|
172
|
+
| 🗂️ **Work & docs** | GitHub activity, Notion pages, Google Drive |
|
|
173
|
+
| 📅 **Calendar** | Google Calendar |
|
|
174
|
+
| 🌐 **Web** | Browser visits, browser events (highlights, stars) |
|
|
175
|
+
| 🎙️ **Transcripts** | VoxTerm voice transcripts, YouTube transcripts |
|
|
176
|
+
| 👥 **People** | Canonical address book |
|
|
177
|
+
| 🧪 **Demo data** | Ten fixture sets — messenger, email, calendar, journal, resume, finance, browsing, places, contacts — so you can try Topos before connecting anything real |
|
|
178
|
+
| 🔧 **Your own** | Anything not on this list — build a connector for it. Keep it private to your node, or share it to the community catalog for others to install in one click. |
|
|
179
|
+
|
|
180
|
+
Sources are not hardcoded. Connectors are declared at **[sheaf.dialogues.ai](https://sheaf.dialogues.ai)** and installed by your node at runtime — one you build stays private to your node until you choose to share it.
|
|
181
|
+
|
|
182
|
+
### Connect an assistant
|
|
183
|
+
|
|
184
|
+
Your node speaks [MCP](https://modelcontextprotocol.io), so Claude and ChatGPT can query it — through the control plane, which routes the request to your machine rather than holding your data.
|
|
185
|
+
|
|
186
|
+
- **Claude Desktop** — point the MCP adapter at the control plane's `/mcp` endpoint with your Topos key as the bearer token.
|
|
187
|
+
- **ChatGPT** — add the same URL as a connector and sign in with Dialogues.
|
|
188
|
+
|
|
189
|
+
One node, one key, both assistants. See [Docs → Install Topos](https://topos.dialogues.ai/docs/install-topos).
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## How it works
|
|
194
|
+
|
|
195
|
+
From the apps you plug in, to the assistant asking a question:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
├─ WHAT YOU PLUG IN
|
|
199
|
+
│ gmail . imessage . calendar . drive . notion . github
|
|
200
|
+
│ browser history . your old chatgpt conversations
|
|
201
|
+
▼
|
|
202
|
+
├─ EVERYTHING LANDS IN THE SAME SHAPE
|
|
203
|
+
│ imessage . telegram . signal all become one kind of row
|
|
204
|
+
│ ical . google calendar . outlook become another
|
|
205
|
+
│ chatgpt . claude . grok become another
|
|
206
|
+
▼
|
|
207
|
+
├─ TOPOS READS BACK OVER IT
|
|
208
|
+
│ models on your own machine tag it, link it, summarise it
|
|
209
|
+
│ raw records turn into understanding
|
|
210
|
+
▼
|
|
211
|
+
├─ AND BUILDS FOUR THINGS
|
|
212
|
+
└──┬──────────────────┬──────────────────┬──────────────────┐
|
|
213
|
+
│ │ │ │
|
|
214
|
+
timeline search dossiers people
|
|
215
|
+
──────── ────── ──────── ──────
|
|
216
|
+
temporal vector database everything topos social graph
|
|
217
|
+
knowledge graph finds things by knows about a who you know,
|
|
218
|
+
how things what they mean, person, project and how you
|
|
219
|
+
changed over time not exact words or topic relate to them
|
|
220
|
+
│ │ │ │
|
|
221
|
+
└──────────────────┴────────┬─────────┴──────────────────┘
|
|
222
|
+
▼
|
|
223
|
+
═══════════════════════════════╧═════════════════════════════════════════════
|
|
224
|
+
THE COGNITIVE FIREWALL
|
|
225
|
+
nothing leaves without crossing this. it checks who is asking,
|
|
226
|
+
what they may see, hands back only that, and logs what it sent.
|
|
227
|
+
═══════════════════════════════╤═════════════════════════════════════════════
|
|
228
|
+
WHO GETS TO ASK │
|
|
229
|
+
┌───────────────────────────┼───────────────────────────┐
|
|
230
|
+
▼ ▼ ▼
|
|
231
|
+
claude and chatgpt the topos app any other app
|
|
232
|
+
the ai apps you use your own view of it you handed a key
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Underneath, that is two parts kept deliberately separate.
|
|
236
|
+
|
|
237
|
+
| Part | What it is | What it does |
|
|
238
|
+
| --- | --- | --- |
|
|
239
|
+
| 🗂️ **Topos Database** | Your memory, on your disk | Stores your records, keeps your history, makes your context searchable |
|
|
240
|
+
| 🧠 **Topos Engine** | Your decision layer | Understands the request, runs the AI work, and returns only what your permissions allow |
|
|
241
|
+
|
|
242
|
+
Because they are separate, you can change how your Topos thinks — models, pipelines, enrichment — without touching what it remembers.
|
|
243
|
+
|
|
244
|
+
### The Cognitive Firewall
|
|
245
|
+
|
|
246
|
+
The engine does not hand out rows. Every request is evaluated against **scopes** — named lanes over your data that you grant, and can revoke.
|
|
247
|
+
|
|
248
|
+
Grant a scheduling agent `schedule:read` and `availability:read`:
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
✅ granted schedule:read, availability:read → "free Thursday afternoon"
|
|
252
|
+
❌ not granted messages:read → never sees a single message
|
|
253
|
+
🔒 revoked any scope, at any time → the next request comes back empty
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Some lanes are owner-only by design and are not offered for sharing at all.
|
|
257
|
+
|
|
258
|
+
Three rules hold across every path:
|
|
259
|
+
|
|
260
|
+
- **Permission-aware** — the grant is checked before data is read, not after.
|
|
261
|
+
- **Precision over data dumps** — the engine is built to answer the question, not to ship your history.
|
|
262
|
+
- **Transparent** — what was asked, what was disclosed, and what was withheld are all legible to you.
|
|
263
|
+
|
|
264
|
+
### Where your data actually lives
|
|
265
|
+
|
|
266
|
+
- Everything is under **`~/.topos`** — a SQLite database, your key, your logs, your backups.
|
|
267
|
+
- Processing runs on your machine, through **[Ollama](https://ollama.com)** for local models and **[Hugging Face](https://huggingface.co)** for model downloads.
|
|
268
|
+
- Nothing is uploaded to Topos for storage.
|
|
269
|
+
|
|
270
|
+
### Why there is a control plane
|
|
271
|
+
|
|
272
|
+
Your node sits behind your home network with no open ports. The control plane is
|
|
273
|
+
what makes it reachable anyway: leave your Topos running and online, and you can
|
|
274
|
+
use the web app from anywhere — phone, laptop, someone else's machine — and reach
|
|
275
|
+
your own node. It is a router, not a store.
|
|
276
|
+
|
|
277
|
+
The same layer is what lets nodes coordinate with each other, so sharing and
|
|
278
|
+
networked flows work between people rather than only inside one machine.
|
|
279
|
+
|
|
280
|
+
> The control plane is being prepared to run on confidential compute, so that even
|
|
281
|
+
> the routing tier cannot read what passes through it.
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Everyday commands
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
topos-node # start the node
|
|
289
|
+
topos-node --set-topos-key "<KEY>" # save your key and exit
|
|
290
|
+
topos-node --discover # show which database is being served
|
|
291
|
+
topos-node --port 9100 --host 127.0.0.1 # bind somewhere else
|
|
292
|
+
topos-node --app # menu-bar mode; logs to ~/.topos/logs/node.log
|
|
293
|
+
topos-node profile --help # run more than one Topos on this machine
|
|
294
|
+
|
|
295
|
+
uv tool upgrade topos-node # update
|
|
296
|
+
uv tool uninstall topos-node # remove
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Keep your `TOPOS_KEY` private, and never commit a real one. `env.example` lists every setting the node reads.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## For developers
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
uv sync --extra engine
|
|
307
|
+
just run
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Tests:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
pytest tests -q
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
The default lane is hermetic — temporary databases only. Lanes that touch your real `~/.topos` or a running node are opt-in by marker.
|
|
317
|
+
|
|
318
|
+
- **[docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)** — local setup, test lanes, engine memory tuning
|
|
319
|
+
- **[docs/PLUGINS.md](docs/PLUGINS.md)** — write a plugin that registers handlers and connectors
|
|
320
|
+
- **[docs/testing/TEST_LANES.md](docs/testing/TEST_LANES.md)** — which tests run when, and why
|
|
321
|
+
- **[CONTRIBUTING.md](CONTRIBUTING.md)** — scope, hooks, and security expectations
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## Links
|
|
326
|
+
|
|
327
|
+
- **Product** — [topos.dialogues.ai](https://topos.dialogues.ai)
|
|
328
|
+
- **Docs** — [topos.dialogues.ai/docs](https://topos.dialogues.ai/docs/welcome)
|
|
329
|
+
- **Connector creator** — [sheaf.dialogues.ai](https://sheaf.dialogues.ai)
|
|
330
|
+
- **Company** — [dialogues.ai](https://dialogues.ai)
|
|
331
|
+
- **Community** — [Discord](https://discord.gg/BSahgm54mD) · [X](https://x.com/dialoguesai)
|
|
332
|
+
|
|
333
|
+
## License
|
|
334
|
+
|
|
335
|
+
[Apache 2.0](LICENSE)
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/dialoguesai/topos/main/docs/assets/topos_mark_white.png">
|
|
5
|
+
<img src="https://raw.githubusercontent.com/dialoguesai/topos/main/docs/assets/topos_mark_black.png" alt="Topos" width="120" />
|
|
6
|
+
</picture>
|
|
7
|
+
|
|
8
|
+
# Topos
|
|
9
|
+
|
|
10
|
+
### A digital twin, built from your own data.
|
|
11
|
+
|
|
12
|
+
**Connect the data you choose, and it takes the shape of you. Keep it private, or give access to your friends, your AIs, or the organizations you belong to — each seeing only what you allow.**
|
|
13
|
+
|
|
14
|
+
[Website](https://topos.dialogues.ai) · [Docs](https://topos.dialogues.ai/docs/welcome) · [Quick start](#quick-start) · [How it works](#how-it-works) · [Discord](https://discord.gg/BSahgm54mD)
|
|
15
|
+
|
|
16
|
+
[](https://pypi.org/project/topos-node/)
|
|
17
|
+
[](https://pypi.org/project/topos-node/)
|
|
18
|
+
[](LICENSE)
|
|
19
|
+
[](https://discord.gg/BSahgm54mD)
|
|
20
|
+
[](https://x.com/dialoguesai)
|
|
21
|
+
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
https://github.com/user-attachments/assets/4b63edf7-feff-4296-b9f9-07b3569e0f58
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## What Topos is
|
|
31
|
+
|
|
32
|
+
Topos is a small program you run on your own computer.
|
|
33
|
+
|
|
34
|
+
You connect the data you already have — messages, mail, calendar, files, notes, browsing history, past AI chats — one source at a time, and only the ones you choose. Whatever you connect lands in one shape, and from that shape Topos builds a working model of you: what you know, who you know, where your attention goes, and how all of it has changed over time. Not a backup of your files — a representation of the person who made them.
|
|
35
|
+
|
|
36
|
+
That model stays on your disk. An engine sits on top of it to answer questions about your life, and a permission layer decides exactly what any app, assistant, or person gets back.
|
|
37
|
+
|
|
38
|
+
So you can ask it the things you would never paste into ChatGPT — and you can carry a slice of yourself to a friend, an AI, or an organization without handing over the rest.
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
YOUR DATA TOPOS DATABASE TOPOS ENGINE THE ANSWER
|
|
42
|
+
───────── ────────────── ──────────── ──────────
|
|
43
|
+
mail · chat one SQLite file reads, reasons, scoped
|
|
44
|
+
calendar · files on your disk, enforces your filtered
|
|
45
|
+
notes · browsing ─▶ yours alone ─▶ permissions ─▶ logged
|
|
46
|
+
AI chat history
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Four things it does
|
|
50
|
+
|
|
51
|
+
| | | |
|
|
52
|
+
| --- | --- | --- |
|
|
53
|
+
| 🔌 | **Connect** | Choose which sources to plug in — mail, chat, calendar, files, notes. Nothing comes in that you didn't connect. |
|
|
54
|
+
| 🧬 | **Shape** | What you connect is formed into a model of you — what you know, who you know, how it has changed. |
|
|
55
|
+
| 💬 | **Ask** | Put the questions to it that you would never send to a cloud assistant. |
|
|
56
|
+
| 🤝 | **Carry** | Bring a slice of yourself to friends, AIs, and the organizations you are part of. Each sees only what you allow. |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Quick start
|
|
61
|
+
|
|
62
|
+
You need a Dialogues account to get a **Topos key** — the credential that pairs the node on your machine with your account. Sign up at **[topos.dialogues.ai](https://topos.dialogues.ai)** and open **Create Topos**; your key is on that screen.
|
|
63
|
+
|
|
64
|
+
### Option A — macOS app (easiest)
|
|
65
|
+
|
|
66
|
+
1. On the **Create Topos** screen, click **Download** to get `Topos.dmg` (signed and notarized).
|
|
67
|
+
2. Mount it, drag **Topos** into Applications, and launch it. A menu-bar icon appears.
|
|
68
|
+
3. Back in the browser, click **Connect this Mac** and allow the prompt. The app takes a one-time pairing code and stores your key.
|
|
69
|
+
4. Leave the page open while it prepares: the node downloads its engine (~900 MB) and language models (~2.9 GB). The menu-bar icon shows progress.
|
|
70
|
+
|
|
71
|
+
### Option B — terminal (macOS, Linux, Windows)
|
|
72
|
+
|
|
73
|
+
Install [uv](https://docs.astral.sh/uv/) if you do not have it:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Then:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
uv tool install topos-node
|
|
83
|
+
topos-node --set-topos-key "<YOUR_TOPOS_KEY>"
|
|
84
|
+
topos-node
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Your key is written to `~/.topos/.env` with restricted permissions. The node starts on port **8676** and connects out to the control plane.
|
|
88
|
+
|
|
89
|
+
Check that it is up:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
curl http://localhost:8676/healthcheck
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Your Topos now shows as **Connected** in the web app, and you can start adding sources.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## What it connects to
|
|
100
|
+
|
|
101
|
+
| Kind | Sources available today |
|
|
102
|
+
| --- | --- |
|
|
103
|
+
| 💬 **Messages** | iMessage, Signal Desktop |
|
|
104
|
+
| 🤖 **AI history** | ChatGPT (export file, and live conversations) |
|
|
105
|
+
| 🗂️ **Work & docs** | GitHub activity, Notion pages, Google Drive |
|
|
106
|
+
| 📅 **Calendar** | Google Calendar |
|
|
107
|
+
| 🌐 **Web** | Browser visits, browser events (highlights, stars) |
|
|
108
|
+
| 🎙️ **Transcripts** | VoxTerm voice transcripts, YouTube transcripts |
|
|
109
|
+
| 👥 **People** | Canonical address book |
|
|
110
|
+
| 🧪 **Demo data** | Ten fixture sets — messenger, email, calendar, journal, resume, finance, browsing, places, contacts — so you can try Topos before connecting anything real |
|
|
111
|
+
| 🔧 **Your own** | Anything not on this list — build a connector for it. Keep it private to your node, or share it to the community catalog for others to install in one click. |
|
|
112
|
+
|
|
113
|
+
Sources are not hardcoded. Connectors are declared at **[sheaf.dialogues.ai](https://sheaf.dialogues.ai)** and installed by your node at runtime — one you build stays private to your node until you choose to share it.
|
|
114
|
+
|
|
115
|
+
### Connect an assistant
|
|
116
|
+
|
|
117
|
+
Your node speaks [MCP](https://modelcontextprotocol.io), so Claude and ChatGPT can query it — through the control plane, which routes the request to your machine rather than holding your data.
|
|
118
|
+
|
|
119
|
+
- **Claude Desktop** — point the MCP adapter at the control plane's `/mcp` endpoint with your Topos key as the bearer token.
|
|
120
|
+
- **ChatGPT** — add the same URL as a connector and sign in with Dialogues.
|
|
121
|
+
|
|
122
|
+
One node, one key, both assistants. See [Docs → Install Topos](https://topos.dialogues.ai/docs/install-topos).
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## How it works
|
|
127
|
+
|
|
128
|
+
From the apps you plug in, to the assistant asking a question:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
├─ WHAT YOU PLUG IN
|
|
132
|
+
│ gmail . imessage . calendar . drive . notion . github
|
|
133
|
+
│ browser history . your old chatgpt conversations
|
|
134
|
+
▼
|
|
135
|
+
├─ EVERYTHING LANDS IN THE SAME SHAPE
|
|
136
|
+
│ imessage . telegram . signal all become one kind of row
|
|
137
|
+
│ ical . google calendar . outlook become another
|
|
138
|
+
│ chatgpt . claude . grok become another
|
|
139
|
+
▼
|
|
140
|
+
├─ TOPOS READS BACK OVER IT
|
|
141
|
+
│ models on your own machine tag it, link it, summarise it
|
|
142
|
+
│ raw records turn into understanding
|
|
143
|
+
▼
|
|
144
|
+
├─ AND BUILDS FOUR THINGS
|
|
145
|
+
└──┬──────────────────┬──────────────────┬──────────────────┐
|
|
146
|
+
│ │ │ │
|
|
147
|
+
timeline search dossiers people
|
|
148
|
+
──────── ────── ──────── ──────
|
|
149
|
+
temporal vector database everything topos social graph
|
|
150
|
+
knowledge graph finds things by knows about a who you know,
|
|
151
|
+
how things what they mean, person, project and how you
|
|
152
|
+
changed over time not exact words or topic relate to them
|
|
153
|
+
│ │ │ │
|
|
154
|
+
└──────────────────┴────────┬─────────┴──────────────────┘
|
|
155
|
+
▼
|
|
156
|
+
═══════════════════════════════╧═════════════════════════════════════════════
|
|
157
|
+
THE COGNITIVE FIREWALL
|
|
158
|
+
nothing leaves without crossing this. it checks who is asking,
|
|
159
|
+
what they may see, hands back only that, and logs what it sent.
|
|
160
|
+
═══════════════════════════════╤═════════════════════════════════════════════
|
|
161
|
+
WHO GETS TO ASK │
|
|
162
|
+
┌───────────────────────────┼───────────────────────────┐
|
|
163
|
+
▼ ▼ ▼
|
|
164
|
+
claude and chatgpt the topos app any other app
|
|
165
|
+
the ai apps you use your own view of it you handed a key
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Underneath, that is two parts kept deliberately separate.
|
|
169
|
+
|
|
170
|
+
| Part | What it is | What it does |
|
|
171
|
+
| --- | --- | --- |
|
|
172
|
+
| 🗂️ **Topos Database** | Your memory, on your disk | Stores your records, keeps your history, makes your context searchable |
|
|
173
|
+
| 🧠 **Topos Engine** | Your decision layer | Understands the request, runs the AI work, and returns only what your permissions allow |
|
|
174
|
+
|
|
175
|
+
Because they are separate, you can change how your Topos thinks — models, pipelines, enrichment — without touching what it remembers.
|
|
176
|
+
|
|
177
|
+
### The Cognitive Firewall
|
|
178
|
+
|
|
179
|
+
The engine does not hand out rows. Every request is evaluated against **scopes** — named lanes over your data that you grant, and can revoke.
|
|
180
|
+
|
|
181
|
+
Grant a scheduling agent `schedule:read` and `availability:read`:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
✅ granted schedule:read, availability:read → "free Thursday afternoon"
|
|
185
|
+
❌ not granted messages:read → never sees a single message
|
|
186
|
+
🔒 revoked any scope, at any time → the next request comes back empty
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Some lanes are owner-only by design and are not offered for sharing at all.
|
|
190
|
+
|
|
191
|
+
Three rules hold across every path:
|
|
192
|
+
|
|
193
|
+
- **Permission-aware** — the grant is checked before data is read, not after.
|
|
194
|
+
- **Precision over data dumps** — the engine is built to answer the question, not to ship your history.
|
|
195
|
+
- **Transparent** — what was asked, what was disclosed, and what was withheld are all legible to you.
|
|
196
|
+
|
|
197
|
+
### Where your data actually lives
|
|
198
|
+
|
|
199
|
+
- Everything is under **`~/.topos`** — a SQLite database, your key, your logs, your backups.
|
|
200
|
+
- Processing runs on your machine, through **[Ollama](https://ollama.com)** for local models and **[Hugging Face](https://huggingface.co)** for model downloads.
|
|
201
|
+
- Nothing is uploaded to Topos for storage.
|
|
202
|
+
|
|
203
|
+
### Why there is a control plane
|
|
204
|
+
|
|
205
|
+
Your node sits behind your home network with no open ports. The control plane is
|
|
206
|
+
what makes it reachable anyway: leave your Topos running and online, and you can
|
|
207
|
+
use the web app from anywhere — phone, laptop, someone else's machine — and reach
|
|
208
|
+
your own node. It is a router, not a store.
|
|
209
|
+
|
|
210
|
+
The same layer is what lets nodes coordinate with each other, so sharing and
|
|
211
|
+
networked flows work between people rather than only inside one machine.
|
|
212
|
+
|
|
213
|
+
> The control plane is being prepared to run on confidential compute, so that even
|
|
214
|
+
> the routing tier cannot read what passes through it.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Everyday commands
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
topos-node # start the node
|
|
222
|
+
topos-node --set-topos-key "<KEY>" # save your key and exit
|
|
223
|
+
topos-node --discover # show which database is being served
|
|
224
|
+
topos-node --port 9100 --host 127.0.0.1 # bind somewhere else
|
|
225
|
+
topos-node --app # menu-bar mode; logs to ~/.topos/logs/node.log
|
|
226
|
+
topos-node profile --help # run more than one Topos on this machine
|
|
227
|
+
|
|
228
|
+
uv tool upgrade topos-node # update
|
|
229
|
+
uv tool uninstall topos-node # remove
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Keep your `TOPOS_KEY` private, and never commit a real one. `env.example` lists every setting the node reads.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## For developers
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
uv sync --extra engine
|
|
240
|
+
just run
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Tests:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
pytest tests -q
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
The default lane is hermetic — temporary databases only. Lanes that touch your real `~/.topos` or a running node are opt-in by marker.
|
|
250
|
+
|
|
251
|
+
- **[docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)** — local setup, test lanes, engine memory tuning
|
|
252
|
+
- **[docs/PLUGINS.md](docs/PLUGINS.md)** — write a plugin that registers handlers and connectors
|
|
253
|
+
- **[docs/testing/TEST_LANES.md](docs/testing/TEST_LANES.md)** — which tests run when, and why
|
|
254
|
+
- **[CONTRIBUTING.md](CONTRIBUTING.md)** — scope, hooks, and security expectations
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Links
|
|
259
|
+
|
|
260
|
+
- **Product** — [topos.dialogues.ai](https://topos.dialogues.ai)
|
|
261
|
+
- **Docs** — [topos.dialogues.ai/docs](https://topos.dialogues.ai/docs/welcome)
|
|
262
|
+
- **Connector creator** — [sheaf.dialogues.ai](https://sheaf.dialogues.ai)
|
|
263
|
+
- **Company** — [dialogues.ai](https://dialogues.ai)
|
|
264
|
+
- **Community** — [Discord](https://discord.gg/BSahgm54mD) · [X](https://x.com/dialoguesai)
|
|
265
|
+
|
|
266
|
+
## License
|
|
267
|
+
|
|
268
|
+
[Apache 2.0](LICENSE)
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
|
|
2
|
+
# setuptools>=83: CVE-2026-59890 (GHSA-h35f-9h28-mq5c) is an sdist MANIFEST.in
|
|
3
|
+
# exclusion bypass via NFC/NFD Unicode collision on macOS APFS/HFS+ — a build-time
|
|
4
|
+
# flaw, so the floor belongs here, in the isolated build env, not in uv.lock. The
|
|
5
|
+
# lock's setuptools stays at 81.0.0 because torch 2.11.0 requires setuptools<82,
|
|
6
|
+
# and that copy never builds an sdist.
|
|
7
|
+
requires = ["setuptools>=83", "wheel"]
|
|
3
8
|
build-backend = "setuptools.build_meta"
|
|
4
9
|
|
|
5
10
|
[project]
|
|
6
11
|
name = "topos-node"
|
|
7
|
-
version = "1.3.
|
|
12
|
+
version = "1.3.55"
|
|
8
13
|
description = "Topos personal AI engine (FastAPI): local data, sync, control plane WebSocket client"
|
|
9
14
|
readme = "README.md"
|
|
10
15
|
license = "Apache-2.0"
|
|
@@ -14,19 +19,27 @@ dependencies = [
|
|
|
14
19
|
"uvicorn[standard]~=0.44.0",
|
|
15
20
|
"httpx~=0.28.1",
|
|
16
21
|
"pydantic~=2.13.2",
|
|
17
|
-
"pydantic-settings~=2.
|
|
22
|
+
"pydantic-settings~=2.15.0",
|
|
18
23
|
"websockets>=16.0,<16.1",
|
|
19
24
|
"certifi~=2026.2.25",
|
|
20
|
-
"cryptography~=
|
|
21
|
-
"python-multipart>=0.0.
|
|
25
|
+
"cryptography~=50.0.1",
|
|
26
|
+
"python-multipart>=0.0.32,<0.0.33",
|
|
22
27
|
"click~=8.4.1",
|
|
23
28
|
"packaging>=26.1,<26.2",
|
|
24
|
-
"mcp~=1.
|
|
29
|
+
"mcp~=1.30.0",
|
|
25
30
|
"google-cloud-storage~=3.10.1",
|
|
26
31
|
"google-cloud-run~=0.16.0",
|
|
27
32
|
"asgi-lifespan~=2.1.0",
|
|
28
33
|
"psycopg[binary]~=3.3.3",
|
|
29
34
|
"duckdb~=1.5.2",
|
|
35
|
+
# <2.13 is load-bearing, not staleness: torch 2.13.0 SIGSEGVs in
|
|
36
|
+
# `mps copy_cast_kernel` when the embedder, privacy filter and NSFW classifier
|
|
37
|
+
# touch MPS concurrently — every fresh Apple-silicon install died on its first
|
|
38
|
+
# chat message (reproduced A/B: exit 139 on 2.13.0, clean on 2.11.0; Release
|
|
39
|
+
# 1.3.5). Dependabot asks for exactly 2.13.0 for CVE-2025-3000, which needs
|
|
40
|
+
# `torch.jit.script` — nothing here calls torch.jit or torch.compile, so the
|
|
41
|
+
# CVE is unreachable and the crash is not. Do not raise without re-testing
|
|
42
|
+
# concurrent MPS first-query load on Apple silicon.
|
|
30
43
|
"torch>=2.8.0,<2.13",
|
|
31
44
|
"transformers~=5.10.2",
|
|
32
45
|
"huggingface-hub~=1.18.0",
|
|
@@ -66,6 +79,14 @@ database = [
|
|
|
66
79
|
# ML + enrichment runtime (hosted topos-engine Cloud Run image).
|
|
67
80
|
engine = [
|
|
68
81
|
"duckdb~=1.5.2",
|
|
82
|
+
# <2.13 is load-bearing, not staleness: torch 2.13.0 SIGSEGVs in
|
|
83
|
+
# `mps copy_cast_kernel` when the embedder, privacy filter and NSFW classifier
|
|
84
|
+
# touch MPS concurrently — every fresh Apple-silicon install died on its first
|
|
85
|
+
# chat message (reproduced A/B: exit 139 on 2.13.0, clean on 2.11.0; Release
|
|
86
|
+
# 1.3.5). Dependabot asks for exactly 2.13.0 for CVE-2025-3000, which needs
|
|
87
|
+
# `torch.jit.script` — nothing here calls torch.jit or torch.compile, so the
|
|
88
|
+
# CVE is unreachable and the crash is not. Do not raise without re-testing
|
|
89
|
+
# concurrent MPS first-query load on Apple silicon.
|
|
69
90
|
"torch>=2.8.0,<2.13",
|
|
70
91
|
"transformers~=5.10.2",
|
|
71
92
|
"huggingface-hub~=1.18.0",
|