topos-node 1.3.46__tar.gz → 1.3.48__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.46/topos_node.egg-info → topos_node-1.3.48}/PKG-INFO +1 -1
- {topos_node-1.3.46 → topos_node-1.3.48}/pyproject.toml +1 -1
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/__version__.py +2 -2
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/lifecycle/blackhole_rebuild.py +62 -2
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/derived_index.py +71 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/protocol/narrowing_vocabulary.json +1 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/narrowing.py +1 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/pipeline.py +63 -1
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/retrieval.py +11 -1
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/upgrades/manifests.json +26 -0
- {topos_node-1.3.46 → topos_node-1.3.48/topos_node.egg-info}/PKG-INFO +1 -1
- {topos_node-1.3.46 → topos_node-1.3.48}/LICENSE +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/MANIFEST.in +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/README.md +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/setup.cfg +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/shared/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/shared/filtering.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/shared/schema_registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_active_database_binding.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_active_ingestion_binding.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_extensions.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_gate_leg_hermeticity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_llm_integrations_storage.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_local_gate_composition.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_owner_database_hermeticity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_prewarm_first_run.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_profile_hygiene.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_profiles.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_protocol_handled_types.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_query_field_contract.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/tests/test_system_computer_name.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/dataset_resolution.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/duckdb_adapter.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/luck_surface.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/messenger_communities.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/messenger_directed.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/messenger_graph.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/messenger_labels.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/person_graph.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/person_overlay.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/profiles.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/query_engine.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/raw_queries.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/analytics/relationship_reads.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/analytics.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/app_registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/backup.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/community_naming_config.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/compute_remote.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/connected_apps.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/conversation_context.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/data_commit.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/data_explorer_table_prefs.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/database_explorer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/db.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/device.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/disk_space_config.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/engine_run.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/enrichment.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/enrichment_lab.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/facts_llm_config.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/filter_lab.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/health.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/home_chat.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/ingestion_api.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/ingestion_compat.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/ingestion_sources.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/intelligence_lifecycle.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/llm.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/local_mcp.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/messenger_analytics.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/privacy_disclose.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/query_api.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/runtime_bootstrap.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/sanitization_ollama_config.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/shell.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/signal.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/signal_extraction_config.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/source_install.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/source_scrub.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/sources.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/sources_overview.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/sync.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/tool_index.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/ui_config.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/uma_data.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/upgrades.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/usage.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/api/user_identity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/app.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/auth.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/declared_field_map.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/browser_activity_mapper.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/demo_mappers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/documents_mapper.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/github_activity_mapper.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/google_calendar_mapper.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/grok_mapper.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/models.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/resolver.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/__main__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/assets/topos_blk_rounded.png +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/assets/topos_white.png +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/commands.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/profile_cmd.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/reprocess_cmd.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/setup_models_cmd.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/cli/tray.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/conversation_context_llm.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/facts_llm.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/local_model_builds.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/model_packs.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/node_function_providers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/sanitization_ollama.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/settings.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/signal_extraction.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/config/uvicorn_logging.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/contacts/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/contacts/identity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/control_plane_client.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/api_models.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/connection_resilience.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/db_health.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/device_helpers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/errors.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/events.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/aggregate.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/common.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/complexity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/config.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/contacts_import.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/database_explorer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/derivation.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/device.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/enrichment.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/enrichment_lab.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/filter_lab.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/graph_query.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/graph_summary.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/home_chat.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/ingest.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/mcp_client_elevations.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/mcp_clients.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/messages.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/messenger_analytics.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/query.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/routines.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/signal_features.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/sources.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/timeline_daily.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/tool_index.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/handlers/uma.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/logging.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/metrics.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/routine_access.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/startup_banner.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/state.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/table_layers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/core/types.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/data_explorer_row_delete.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/data_explorer_table_prefs.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/data_explorer_tables.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/defaults.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/disclosure/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/disclosure/canonical_writer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/disclosure/content_policy.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/disclosure/field_registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/disclosure/privacy_layer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/disclosure/tier.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/generative_prompts.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/generative_response.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/huggingface.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/ollama.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/openai.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/openai_compatible.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/redpill.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/backends/stub.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/client.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/disk_space.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/engine.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/hosted_llm_wallet.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/intake.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/memory_utils.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/model_cache.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/model_manager.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/ollama_install.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/ollama_pull.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/ollama_runtime.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/ollama_setup_guidance.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/pipeline_memory.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/queue_manager.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/registration.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/result_formatter.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/router.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/scoped_token.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/tasks.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/torch_runtime.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/transport.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/usage_guard.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/usage_observation.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/engine/validator.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/catalog.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/derivation_recovery.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/derived_tables.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/job_readiness.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/job_writer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/_batch_limits.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/_engine_runner.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/attention_triage_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/availability_scores_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/brief_fallback.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/complexity_snapshot_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/derivation_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/derived_object_embeddings_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/dimension_summary_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/fact_extraction_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/goal_extraction_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/pii_redaction_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/relationship_edges_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/statistics_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/timeline_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/topic_clusters_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/raw/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/raw/language_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/model_overrides.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/models/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/models/manager.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/models/mvp_defaults.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/models/registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/models/versioning.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/orchestrator.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/pipeline_activity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/processor.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/progress_bar.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/record_progress.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/registry_contract.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/signal_derivation_config.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment/source_overrides.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment_lab/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment_lab/bundles.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment_lab/model_resolve.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment_lab/schema.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment_lab/service.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment_lab/store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/enrichment_lab/worker.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/evals/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/evals/enrichment_eval.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/extensions.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/canonical.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/engine.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/entropy.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/focus.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/graph_metrics.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/influence.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/projection.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/snapshots.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/topic_merge.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/topics.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/topics_daily.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/complexity/volatility.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/_scales.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/admin.legal.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/aspirations.goals.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/behavior.habits.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/behavior.preferences.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/beliefs.civic.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/beliefs.spiritual.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/communication.style.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/community.membership.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/craft.tooling.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/expertise.knowledge.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/finances.economics.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/health.lifestyle.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/health.mental.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/health.physical.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/household.pets.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/identity.core.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/interests.taste.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/life.events.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/narrative.self.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/net.capability.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/obligations.commitments.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/personality.traits.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/places.mobility.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/possessions.assets.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/relationships.social.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/values.motivation.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/vocab/dispositions.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/vocab/expertise.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/vocab/habits.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/vocab/interests.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/vocab/preferences.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/vocab/stances.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/vocab/tools.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/vocab/values.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/bundled_packs/work.career.yaml +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/candidates.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/guard.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/kernels.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/net_subject_policy.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/packs.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/person_bridge.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/prefilter.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/report_card.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/router.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/social_bench.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/social_kernels.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/surfaces.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/synthesize.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/template.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/verify.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/derivation/writer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/affinity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/affinity_owner.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/affinity_quality.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/chatgpt_declared.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/community_names.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/community_naming.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/consolidation.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/context_vectors.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/cypher.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/declared_mappings.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/dossier.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/edges.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/fact_materializer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/graph_enrichers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/graph_refresh.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/graph_search.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/linking.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/maintenance.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/owner.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/reads.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/rebuild_subprocess.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/resolver.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/entities/structured_fields.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/facts/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/facts/extract.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/facts/llm_extract.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/facts/reads.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/facts/store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/facts/verdicts.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/fit/evaluator.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/fit/opportunity_types.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/lifecycle/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/lifecycle/blackhole.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/lifecycle/blackhole_guard.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/lifecycle/blackhole_llm.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/lifecycle/derived_scrub.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/lifecycle/exclusions.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/lifecycle/gc.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/provenance/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/provenance/posture.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/provenance/roles.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/brief_canonical_loader.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/brief_ontology.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/brief_renderer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/brief_schemas.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/chunking.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/cluster_labels.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/conversation_context.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/conversation_windows.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/data_health.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/brief_ontologies.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/intentions.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/interests.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/memory.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/places.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/profile.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/relationships.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/resources.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/schema/dimension_definition.schema.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/time.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/wellbeing.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/definitions/work.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/derived_spec.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/dimension_briefs.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/dimension_definition_loader.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/dimension_profiles.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/dimension_registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/embed_context.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/extraction/artifact_router.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/extraction/artifact_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/extraction/rule_extractors.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/graph_sanitize.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/hybrid_search.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/incremental_clustering.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/model_recommendations.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/query_embed_cache.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/schemas.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/service.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/signal_object_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/source_hydration.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/structured_signal.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/tool_index.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/topic_clustering.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/typed_stores/aggregates.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/typed_stores/commitments.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/typed_stores/rhythm.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/typed_stores/scope_materializer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/vector_codec.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/vector_math.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/signal/vector_settings.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/stats/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/stats/definitions.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/stats/engine.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/stats/fold.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/stats/insights.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/timeline_projection.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/timeline_rollup.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/triage/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/triage/badges.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/triage/daily.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/triage/dashboard.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/triage/instruments.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/triage/intents.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/features/triage/readiness.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/filter_lab/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/filter_lab/bundles.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/filter_lab/schema.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/filter_lab/service.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/filter_lab/store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/filter_lab/worker.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/home_chat/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/home_chat/schema.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/home_chat/store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/hosted_pool_lease.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/canonical_pipeline.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/checkpoints/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/inbox_crypto.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/inbox_drain.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/ingest_helpers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/jobs.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/journal_location_fanout.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/journal_time_log_normalize.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/local_exports.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/local_sync.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/log_preview.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/manager.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/browser_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/calendar_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/chatgpt_export.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/demo_file_parsers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/documents_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/github_activity_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/google_calendar_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/grok_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/messenger_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/parsers/voxterm_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/progress.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/reprocess.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/calendar.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/chatgpt.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/contact_importers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/grok.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/imessage_reader.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/signal_export_parser.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/sources/signal_reader.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/state_machine.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/triggers/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/triggers/file_trigger.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/usage_inbox_dedupe.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/validation/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/validation/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/validation/schema_registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/ingestion/validation/schema_validator.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/lineage/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/lineage/provenance.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/lineage/tracker.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/llm_integrations_storage.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/mcp_clients.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/mcp_stdio_proxy.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/observability/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/observability/alerts.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/observability/metrics.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/observability/tracing.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/openai_client.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/owner_key.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/pipeline/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/pipeline/audit.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/pipeline/envelope.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/pipeline/job_runner.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/pipeline/job_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/pipeline/stages.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/pipeline/stub_enqueue.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/principal.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/profiles.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/projections/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/projections/vector_index/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/projections/vector_index/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/projections/vector_index/builders.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/projections/vector_index/health_checks.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/protocol/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/protocol/handled_message_types.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/protocol/query_field_contract.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/aggregate.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/audit.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/closeness.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/cohort_resolvers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/collaborators.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/ddr.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/disclosure.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/entity_window.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/exclusion.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/facts_direct.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/fingerprint.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/game_layer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/grant_cache.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/graph_lane.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/inference.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/intent.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/manifest.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/manifest_validation.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/minimizer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/negotiation.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/packet_resolution.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/planner.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/runtime.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/scope_arbiter.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/scope_classifier.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/scope_head.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/scope_registry.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/scope_registry_loader.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/scope_shadow.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/session.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/session_utils.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/source_generation.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/truth_facts.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/truth_prompts.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/turn_classifier.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/types.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/verify.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/query/verify_modes.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/rate_limit.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/relay_stamp.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/routines/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/routines/schema.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/routines/store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/runtime_housekeeping.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/runtime_shutdown.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/runtime_update.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sanitization/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sanitization/nsfw_classifier.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sanitization/ollama_transforms.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sanitization/prewarm.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sanitization/privacy_filter.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/scope_resolution.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/container.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/embeddings/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/embeddings/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/embeddings/local.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/embeddings/remote.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/interfaces.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/llm/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/llm/base.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/llm/openai.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/local.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/services/postgres.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/bundled_canonical_triples.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/canonical_signal_defaults.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/declared_field_map_spec.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/definitions.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/install_service.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/runtime_install.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/scrub_attribution.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sources/scrub_service.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/startup_banner.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/adapters/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/adapters/factory.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/adapters/fakes.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/adapters/postgres/stores.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/adapters/protocols.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/adapters/sqlite/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/adapters/sqlite/stores.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/adapters/sqlite/vector_search.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/activity_tables.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/ai_chat/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/ai_chat/mapper.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/ai_chat/model.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/ai_chat/tables.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/calendar_contacts_tables.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/canonical_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/conversations_tables.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/journal_repair.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/mapping_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/canonical/postgres.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/client.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/connection_tuning.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/activity_events_content_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/actor_role_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/affinity_pair_labels_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/attention_triage_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/attention_triage_v2.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/backup.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/backup_custody.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/calendar_events_scheduling_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/canonical_address_book_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/canonical_disclosure_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/canonical_nsfw_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/community_names_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/complexity_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/conflict_provenance_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/conversation_context_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/derivation_factory_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/derivation_ledger_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/derivation_provenance_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/derived_row_identity_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/documents_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/enrichment_record_progress_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/enrichment_spec_version_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_affinity_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_blackhole_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_context_vectors_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_context_vectors_v2.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_edges_validity_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_mentions_authored_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_review_candidate_bar_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_review_dedup_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/entity_review_provenance_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/episodes_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/extraction_artifacts.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/fact_dimension_by_entity_type_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/journal_entries_duration_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/journal_entries_ends_at_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/journal_entries_people_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/journal_entries_place_name_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/journal_entries_starts_at_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/journal_origin_dimension_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/mention_table_stamp_backfill_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/message_emotions_role_backfill_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/message_emotions_role_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/net_subject_policy_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/pack_registry_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/pipeline_jobs_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/query_artifacts_duration_ms_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/registry.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/registry_checksums.json +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/remediation_person_model.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/retire_url_classification_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/scope_source_generation.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/signal_dimension_backfill_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/signal_dimension_harness.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/signal_objects.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/signal_objects_period_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/signal_objects_updated_by_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/signal_summaries_drop_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/vector_storage_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/vector_storage_v2.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/vector_storage_v3.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/vector_storage_v4.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_clusters_v2.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_entities_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_entity_review_v2.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_facts_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_lifecycle_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_mvp_phase0.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_mvp_phase1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_mvp_phase4_messages_cutover.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_mvp_phase5_topic_clusters.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_mvp_phase6_dimension_briefs.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_mvp_query_quality.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_mvp_topic_clusters_coordination.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_stats_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/migrations/wiki_timeline_v1.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/paths.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/postgres.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/schema.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/schema_probe.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/storage_breakdown.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/db/write_gate.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/derived_row_identity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/enrichment/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/normalized/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/normalized/normalized_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/oplog/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/oplog/decision.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/oplog/oplog_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/oplog/postgres.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/person/identity_resolver.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/projections/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/projections/index_ops_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/projections/vector_index_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/raw/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/raw/browser_flat_tables.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/raw/file_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/raw/raw_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/raw/raw_tables_manager.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/raw/sqlite_raw_store.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/security/encryption.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/signal_identity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/source_settings.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/storage/user_identity.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sync/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sync/client.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/sync_handlers.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/testing/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/testing/lifespan.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/uds.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/uma_contact_enrichment.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/uma_filters.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/uma_resource_id.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/uma_rpt.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/upgrades/__init__.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/upgrades/runner.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/utils/base_object.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos/websocket_client.py +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos_node.egg-info/SOURCES.txt +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos_node.egg-info/dependency_links.txt +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos_node.egg-info/entry_points.txt +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos_node.egg-info/requires.txt +0 -0
- {topos_node-1.3.46 → topos_node-1.3.48}/topos_node.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "topos-node"
|
|
7
|
-
version = "1.3.
|
|
7
|
+
version = "1.3.48"
|
|
8
8
|
description = "Topos personal AI engine (FastAPI): local data, sync, control plane WebSocket client"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -269,11 +269,20 @@ def _withdraw_embeddings(conn: sqlite3.Connection, terms: Set[str]) -> int:
|
|
|
269
269
|
).fetchall()
|
|
270
270
|
except sqlite3.OperationalError:
|
|
271
271
|
return 0
|
|
272
|
-
|
|
272
|
+
doomed_set = {
|
|
273
273
|
str(embedding_id)
|
|
274
274
|
for embedding_id, preview, search_text in rows
|
|
275
275
|
if _mentions(preview, terms) or _mentions(search_text, terms)
|
|
276
|
-
|
|
276
|
+
}
|
|
277
|
+
# The identity leg: a derived row keyed to a protected entity goes whether
|
|
278
|
+
# or not its generated sentence happens to name them.
|
|
279
|
+
try:
|
|
280
|
+
doomed_set |= _derived_embedding_ids_for_entities(
|
|
281
|
+
conn, BlackholeStore(conn).blackholed_entity_ids()
|
|
282
|
+
)
|
|
283
|
+
except Exception as exc: # noqa: BLE001 — never let it cost the term leg
|
|
284
|
+
logger.warning("blackhole: derived identity sweep failed (%s); term leg stands", exc)
|
|
285
|
+
doomed = sorted(doomed_set)
|
|
277
286
|
if not doomed:
|
|
278
287
|
return 0
|
|
279
288
|
|
|
@@ -292,6 +301,57 @@ def _withdraw_embeddings(conn: sqlite3.Connection, terms: Set[str]) -> int:
|
|
|
292
301
|
return len(doomed)
|
|
293
302
|
|
|
294
303
|
|
|
304
|
+
#: Payload keys that name the entity a derived object is ABOUT. The read side
|
|
305
|
+
#: already filters on exactly these (`retrieval._BLACKHOLE_ENTITY_ID_KEYS`);
|
|
306
|
+
#: the withdrawal sweep is the write-side half of the same rule.
|
|
307
|
+
_DERIVED_SUBJECT_KEYS = (
|
|
308
|
+
"entity_id",
|
|
309
|
+
"subject_entity_id",
|
|
310
|
+
"object_entity_id",
|
|
311
|
+
"source_entity_id",
|
|
312
|
+
"target_entity_id",
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def _derived_embedding_ids_for_entities(
|
|
317
|
+
conn: sqlite3.Connection, entity_ids: Set[str]
|
|
318
|
+
) -> Set[str]:
|
|
319
|
+
"""Embedding ids whose derived object is KEYED to a protected entity.
|
|
320
|
+
|
|
321
|
+
The term scan beside this one can only catch a row that says the name, and
|
|
322
|
+
a rendered sentence is generated text: it refers to people by pronoun, by
|
|
323
|
+
role, and by aliases the term set never learned ("my brother", "the founder
|
|
324
|
+
I met"). A derived row is about its subject whether or not it names them,
|
|
325
|
+
and the subject is recorded — so identity, not wording, is what decides
|
|
326
|
+
here. Term matching stays, for rows that name someone without being keyed
|
|
327
|
+
to them.
|
|
328
|
+
"""
|
|
329
|
+
if not entity_ids:
|
|
330
|
+
return set()
|
|
331
|
+
try:
|
|
332
|
+
rows = conn.execute(
|
|
333
|
+
"SELECT e.embedding_id, o.payload_json"
|
|
334
|
+
" FROM signal_embeddings e"
|
|
335
|
+
" JOIN signal_objects o ON o.object_id = e.record_id"
|
|
336
|
+
).fetchall()
|
|
337
|
+
except sqlite3.OperationalError:
|
|
338
|
+
return set()
|
|
339
|
+
doomed: Set[str] = set()
|
|
340
|
+
for embedding_id, payload_json in rows:
|
|
341
|
+
try:
|
|
342
|
+
payload = json.loads(payload_json or "{}") or {}
|
|
343
|
+
except (TypeError, ValueError):
|
|
344
|
+
continue
|
|
345
|
+
if not isinstance(payload, dict):
|
|
346
|
+
continue
|
|
347
|
+
for key in _DERIVED_SUBJECT_KEYS:
|
|
348
|
+
value = str(payload.get(key) or "").strip()
|
|
349
|
+
if value and value in entity_ids:
|
|
350
|
+
doomed.add(str(embedding_id))
|
|
351
|
+
break
|
|
352
|
+
return doomed
|
|
353
|
+
|
|
354
|
+
|
|
295
355
|
def _withdraw_goals(conn: sqlite3.Connection, terms: Set[str]) -> int:
|
|
296
356
|
"""Drop extracted goals whose text names the entity.
|
|
297
357
|
|
|
@@ -64,6 +64,12 @@ DERIVED_RECORD_TYPES: Dict[str, str] = {
|
|
|
64
64
|
"RelationshipEdge": "derived_relationship_edge",
|
|
65
65
|
"entity_dossier": "derived_entity_dossier",
|
|
66
66
|
"fact": "derived_fact",
|
|
67
|
+
# S8: the measured hole. 1,548 user_goals + 68 Goal objects carried the
|
|
68
|
+
# owner's own prose and none were embedded, so a goal question reached
|
|
69
|
+
# dossiers and facts instead of goals. Both types share one renderer —
|
|
70
|
+
# they differ only in producer, not in shape.
|
|
71
|
+
"user_goals": "derived_goal",
|
|
72
|
+
"Goal": "derived_goal",
|
|
67
73
|
}
|
|
68
74
|
|
|
69
75
|
DERIVED_RECORD_TYPE_SET = frozenset(DERIVED_RECORD_TYPES.values())
|
|
@@ -504,10 +510,75 @@ def render_fact(obj: Dict[str, Any], resolver: _NameResolver) -> Optional[Derive
|
|
|
504
510
|
)
|
|
505
511
|
|
|
506
512
|
|
|
513
|
+
#: Goal text over this many characters is a journal entry that happens to be
|
|
514
|
+
#: stored as a goal; embedding the whole thing dilutes the vector toward the
|
|
515
|
+
#: day's narrative and away from the intent. The head is where the intent is.
|
|
516
|
+
_GOAL_TEXT_CAP = 400
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
def render_goal(obj: Dict[str, Any], resolver: _NameResolver) -> Optional[DerivedRendering]:
|
|
520
|
+
"""A stated intention as the sentence someone would ask it back with.
|
|
521
|
+
|
|
522
|
+
Measured on the owner store 2026-09-03: 1,548 ``user_goals`` + 68 ``Goal``
|
|
523
|
+
objects held real prose and NONE were embedded, so "what am I trying to
|
|
524
|
+
achieve commercially?" reached a GitHub dossier and a stray fact while
|
|
525
|
+
"Aim the pitch at the segments that actually convert"
|
|
526
|
+
sat one table away. Dossiers and facts were already at full coverage;
|
|
527
|
+
goals were the whole remaining hole in the derived index.
|
|
528
|
+
|
|
529
|
+
The vocabulary is deliberately thin. ``_TIER_PHRASE``'s lesson applies
|
|
530
|
+
here in the same direction: the topical nouns must come from the owner's
|
|
531
|
+
own goal text, never from this template, or every goal becomes a match for
|
|
532
|
+
every question about whatever noun the template chose. So the frame says
|
|
533
|
+
only that this is something the owner is trying to do, and ``status`` and
|
|
534
|
+
``horizon`` ride along ONLY when the object declares them — they are the
|
|
535
|
+
handles for "what am I working on right now" versus "what did I want to
|
|
536
|
+
get to eventually".
|
|
537
|
+
"""
|
|
538
|
+
payload = obj.get("payload") or {}
|
|
539
|
+
text = str(payload.get("goal_text") or payload.get("text") or "").strip()
|
|
540
|
+
if not text:
|
|
541
|
+
# A goal with no prose is an identity row: a key and a timestamp. There
|
|
542
|
+
# is no question it could answer, and rendering it as its key would put
|
|
543
|
+
# an id in a retrieval preview.
|
|
544
|
+
return None
|
|
545
|
+
if len(text) > _GOAL_TEXT_CAP:
|
|
546
|
+
text = text[:_GOAL_TEXT_CAP].rsplit(" ", 1)[0] + "…"
|
|
547
|
+
|
|
548
|
+
status = str(payload.get("status") or "").strip().replace("_", " ")
|
|
549
|
+
horizon = str(payload.get("horizon") or "").strip().replace("_", " ")
|
|
550
|
+
qualifiers = [q for q in (horizon, status) if q]
|
|
551
|
+
frame = "a goal I set"
|
|
552
|
+
if qualifiers:
|
|
553
|
+
frame = f"a {' '.join(qualifiers[:1])} goal I set"
|
|
554
|
+
if len(qualifiers) > 1:
|
|
555
|
+
frame = f"{frame}, {qualifiers[1]}"
|
|
556
|
+
|
|
557
|
+
body = f"{text.rstrip(' .;')} — {frame}"
|
|
558
|
+
return DerivedRendering(
|
|
559
|
+
object_id=str(obj["object_id"]),
|
|
560
|
+
object_type=str(obj.get("object_type") or "user_goals"),
|
|
561
|
+
object_key=str(obj.get("object_key") or ""),
|
|
562
|
+
record_type=DERIVED_RECORD_TYPES.get(
|
|
563
|
+
str(obj.get("object_type") or ""), "derived_goal"
|
|
564
|
+
),
|
|
565
|
+
signal_dimension=str(obj.get("signal_dimension") or "goals"),
|
|
566
|
+
text=f"{body}.",
|
|
567
|
+
header="goal | something I am trying to do",
|
|
568
|
+
title=text[:80],
|
|
569
|
+
# A goal is the owner's own statement of intent. The index never widens
|
|
570
|
+
# what the producer decided; absent a declaration, owner_only.
|
|
571
|
+
disclosure=str(payload.get("disclosure") or "owner_only"),
|
|
572
|
+
extra={"status": status or None, "horizon": horizon or None},
|
|
573
|
+
)
|
|
574
|
+
|
|
575
|
+
|
|
507
576
|
_RENDERERS = {
|
|
508
577
|
"RelationshipEdge": render_relationship_edge,
|
|
509
578
|
"entity_dossier": render_entity_dossier,
|
|
510
579
|
"fact": render_fact,
|
|
580
|
+
"user_goals": render_goal,
|
|
581
|
+
"Goal": render_goal,
|
|
511
582
|
}
|
|
512
583
|
|
|
513
584
|
|
|
@@ -255,6 +255,7 @@ REASONS = frozenset(
|
|
|
255
255
|
"no_source_connected",
|
|
256
256
|
# --- engine: the grantee content filter, one per scrubbed artifact list
|
|
257
257
|
"grantee_scrub_facts",
|
|
258
|
+
"hosted_binding_text_withheld",
|
|
258
259
|
"grantee_scrub_scores",
|
|
259
260
|
"grantee_scrub_semantic_hits",
|
|
260
261
|
"grantee_scrub_summaries",
|
|
@@ -25,7 +25,7 @@ from .inference import run_query_inference
|
|
|
25
25
|
from .intent import compute_intent_hash
|
|
26
26
|
from .manifest import ScopeResolutionManifest
|
|
27
27
|
from .minimizer import DisclosureMinimizer
|
|
28
|
-
from .narrowing import NarrowingLedger, result_is_empty
|
|
28
|
+
from .narrowing import STAGE_DISCLOSURE, NarrowingLedger, result_is_empty
|
|
29
29
|
from . import narrowing as _N
|
|
30
30
|
from .negotiation import DEFAULT_MAX_ROUNDS, build_narrow_request_response, qualify_intent
|
|
31
31
|
from .retrieval import DefaultSignalRetrievalAdapter, resolve_retrieval_source_ids
|
|
@@ -48,6 +48,57 @@ _NOT_QUERIED_OUTCOMES = frozenset(
|
|
|
48
48
|
)
|
|
49
49
|
|
|
50
50
|
|
|
51
|
+
#: Item containers in `public_result` that carry generated or quoted prose.
|
|
52
|
+
#: Declared rather than recursed, the same choice `disclosure._GRANTEE_DICT_ARTIFACTS`
|
|
53
|
+
#: makes and for the same reason: a new artifact has to be listed here, and the
|
|
54
|
+
#: listing is the review.
|
|
55
|
+
_HOSTED_FLOOR_ITEM_KEYS = ("summaries", "scores", "semantic_hits", "items", "facts")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def withhold_text_for_hosted_binding(
|
|
59
|
+
public_dict: Dict[str, Any], *, ledger: Optional[NarrowingLedger] = None
|
|
60
|
+
) -> int:
|
|
61
|
+
"""Strip prose from a floored turn's payload, keeping its shape.
|
|
62
|
+
|
|
63
|
+
Identity, provenance, rank and dates survive: a caller can still see THAT
|
|
64
|
+
something matched and how strongly, and the turn stays legible. The words
|
|
65
|
+
do not travel. Emptying the lists instead would be worse than useless —
|
|
66
|
+
an empty result is indistinguishable from a corpus that held nothing,
|
|
67
|
+
which is the false-absence failure this whole plan exists to end, so the
|
|
68
|
+
withholding is declared in the ledger rather than performed in silence.
|
|
69
|
+
|
|
70
|
+
Returns the number of text fields removed, so a caller can assert the cap
|
|
71
|
+
actually did something (a severed-wire lever, and the reason this is a
|
|
72
|
+
module-level function rather than an inline loop).
|
|
73
|
+
"""
|
|
74
|
+
from .disclosure import _GRANTEE_TEXT_KEYS
|
|
75
|
+
|
|
76
|
+
removed = 0
|
|
77
|
+
for container in _HOSTED_FLOOR_ITEM_KEYS:
|
|
78
|
+
items = public_dict.get(container)
|
|
79
|
+
if not isinstance(items, list):
|
|
80
|
+
continue
|
|
81
|
+
for item in items:
|
|
82
|
+
if not isinstance(item, dict):
|
|
83
|
+
continue
|
|
84
|
+
for key in _GRANTEE_TEXT_KEYS:
|
|
85
|
+
if item.get(key):
|
|
86
|
+
item[key] = ""
|
|
87
|
+
removed += 1
|
|
88
|
+
# The free-text answer is the same content in one field.
|
|
89
|
+
if public_dict.get("answer") and public_dict.get("answer_type") not in ("band", "yes_no"):
|
|
90
|
+
public_dict["answer"] = ""
|
|
91
|
+
removed += 1
|
|
92
|
+
if removed and ledger is not None:
|
|
93
|
+
ledger.record(
|
|
94
|
+
STAGE_DISCLOSURE,
|
|
95
|
+
"excluded",
|
|
96
|
+
"hosted_binding_text_withheld",
|
|
97
|
+
dropped=removed,
|
|
98
|
+
)
|
|
99
|
+
return removed
|
|
100
|
+
|
|
101
|
+
|
|
51
102
|
def _attach_narrowing(result: Dict[str, Any], ledger: NarrowingLedger) -> Dict[str, Any]:
|
|
52
103
|
"""Put the ledger on the response, and attribute any empty the body did not.
|
|
53
104
|
|
|
@@ -853,6 +904,17 @@ class QueryPipelineOrchestrator:
|
|
|
853
904
|
public.payload = enforce_availability_inference_contract(public.payload)
|
|
854
905
|
|
|
855
906
|
public_dict = public.to_dict()
|
|
907
|
+
# The hosted-binding floor reaches the ANSWER, not only the packet.
|
|
908
|
+
# `effective_packet_resolution` gates what the engine's own model reads;
|
|
909
|
+
# summary prose does not stop there — it rides `public_result` to
|
|
910
|
+
# whatever model writes the reply, and on a hosted pack that model is
|
|
911
|
+
# the hosted one. Measured on an owner snapshot 2026-09-03: a turn
|
|
912
|
+
# reporting `scores_only`/`hosted_binding` still carried 60,151
|
|
913
|
+
# characters of the owner's conversation text, byte-identical to the
|
|
914
|
+
# same query on a local binding. The protection read as active on the
|
|
915
|
+
# turn that carried the content out.
|
|
916
|
+
if _pr["effective"] == "scores_only" and _pr["reason"] == "hosted_binding":
|
|
917
|
+
withhold_text_for_hosted_binding(public_dict, ledger=ledger)
|
|
856
918
|
# Declared, never silent: every turn says what resolution actually applied and
|
|
857
919
|
# why (active / non_owner_floor / hosted_binding). Same post-hoc pattern as
|
|
858
920
|
# `empty_cause` below.
|
|
@@ -4208,6 +4208,13 @@ def _semantic_hits(
|
|
|
4208
4208
|
{
|
|
4209
4209
|
"record_id": item.get("record_id"),
|
|
4210
4210
|
"text_preview": item.get("text_preview"),
|
|
4211
|
+
# The indexed body, which is longer than the 200-char
|
|
4212
|
+
# preview. This rebuild is an explicit allow-list, and
|
|
4213
|
+
# omitting the key silently capped every vector and derived
|
|
4214
|
+
# summary at the preview length — measured 2026-09-03: 45
|
|
4215
|
+
# of 462 derived rows carried up to 850 characters of
|
|
4216
|
+
# rendering that no answer could ever show.
|
|
4217
|
+
"search_text": item.get("search_text"),
|
|
4211
4218
|
"similarity": item.get("similarity"),
|
|
4212
4219
|
"source_id": item.get("source_id"),
|
|
4213
4220
|
"signal_dimension": item.get("signal_dimension"),
|
|
@@ -5527,7 +5534,10 @@ def _build_summary_items_unfiltered(
|
|
|
5527
5534
|
# people that never surfaces a name answers nothing.
|
|
5528
5535
|
derived_items: List[Dict[str, Any]] = []
|
|
5529
5536
|
for hit in derived_hits or []:
|
|
5530
|
-
|
|
5537
|
+
# The full rendering, not its 200-char preview: `index_derived_objects`
|
|
5538
|
+
# writes both, and a rendering cut mid-clause reads as a truncated
|
|
5539
|
+
# thought rather than the sentence the lane exists to hand back.
|
|
5540
|
+
text = str(hit.get("search_text") or hit.get("text_preview") or "").strip()
|
|
5531
5541
|
if not text:
|
|
5532
5542
|
continue
|
|
5533
5543
|
object_type = str(hit.get("object_type") or "")
|
|
@@ -787,6 +787,32 @@
|
|
|
787
787
|
"steps": [],
|
|
788
788
|
"notes": []
|
|
789
789
|
},
|
|
790
|
+
{
|
|
791
|
+
"version": "1.3.47",
|
|
792
|
+
"summary": "Release 1.3.47.",
|
|
793
|
+
"steps": [
|
|
794
|
+
{
|
|
795
|
+
"id": "index-goals-into-derived-index",
|
|
796
|
+
"kind": "derived_rebuild",
|
|
797
|
+
"title": "Embed stated goals into the derived index",
|
|
798
|
+
"why": "Goals were the last uncovered derived type: measured on a live node 2026-09-03, 1,548 user_goals + 68 Goal objects carried the owner's own prose and NONE were embedded, so 'what am I trying to achieve commercially?' reached a GitHub dossier and a stray fact while the goals sat one table away. The index pass is incremental by content hash, so this embeds only the newly-renderable goal objects; dossiers, facts and edges are unchanged.",
|
|
799
|
+
"cost": "seconds",
|
|
800
|
+
"consent": "auto",
|
|
801
|
+
"params": {
|
|
802
|
+
"targets": [
|
|
803
|
+
"derived_object_index"
|
|
804
|
+
]
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
],
|
|
808
|
+
"notes": []
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
"version": "1.3.48",
|
|
812
|
+
"summary": "Release 1.3.48.",
|
|
813
|
+
"steps": [],
|
|
814
|
+
"notes": []
|
|
815
|
+
},
|
|
790
816
|
{
|
|
791
817
|
"version": "unreleased",
|
|
792
818
|
"summary": "Staging entry for in-flight PRs. cut_release.py stamps this with the next version at release cut. Never executed by steps_between.",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/browser_activity_mapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/github_activity_mapper.py
RENAMED
|
File without changes
|
{topos_node-1.3.46 → topos_node-1.3.48}/topos/canonicalization/mappers/google_calendar_mapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|