topos-node 1.3.42__tar.gz → 1.3.43__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.
Files changed (765) hide show
  1. {topos_node-1.3.42/topos_node.egg-info → topos_node-1.3.43}/PKG-INFO +1 -1
  2. {topos_node-1.3.42 → topos_node-1.3.43}/pyproject.toml +1 -1
  3. {topos_node-1.3.42 → topos_node-1.3.43}/topos/__version__.py +2 -2
  4. {topos_node-1.3.42 → topos_node-1.3.43}/topos/protocol/narrowing_vocabulary.json +1 -0
  5. topos_node-1.3.43/topos/query/graph_lane.py +152 -0
  6. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/narrowing.py +1 -0
  7. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/retrieval.py +56 -1
  8. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/scope_registry.json +1 -1
  9. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/install_service.py +51 -2
  10. {topos_node-1.3.42 → topos_node-1.3.43}/topos/upgrades/manifests.json +6 -0
  11. {topos_node-1.3.42 → topos_node-1.3.43/topos_node.egg-info}/PKG-INFO +1 -1
  12. {topos_node-1.3.42 → topos_node-1.3.43}/topos_node.egg-info/SOURCES.txt +1 -0
  13. {topos_node-1.3.42 → topos_node-1.3.43}/LICENSE +0 -0
  14. {topos_node-1.3.42 → topos_node-1.3.43}/MANIFEST.in +0 -0
  15. {topos_node-1.3.42 → topos_node-1.3.43}/README.md +0 -0
  16. {topos_node-1.3.42 → topos_node-1.3.43}/setup.cfg +0 -0
  17. {topos_node-1.3.42 → topos_node-1.3.43}/shared/__init__.py +0 -0
  18. {topos_node-1.3.42 → topos_node-1.3.43}/shared/filtering.py +0 -0
  19. {topos_node-1.3.42 → topos_node-1.3.43}/shared/schema_registry.py +0 -0
  20. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_active_database_binding.py +0 -0
  21. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_active_ingestion_binding.py +0 -0
  22. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_extensions.py +0 -0
  23. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_gate_leg_hermeticity.py +0 -0
  24. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_llm_integrations_storage.py +0 -0
  25. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_local_gate_composition.py +0 -0
  26. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_owner_database_hermeticity.py +0 -0
  27. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_prewarm_first_run.py +0 -0
  28. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_profile_hygiene.py +0 -0
  29. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_profiles.py +0 -0
  30. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_protocol_handled_types.py +0 -0
  31. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_query_field_contract.py +0 -0
  32. {topos_node-1.3.42 → topos_node-1.3.43}/tests/test_system_computer_name.py +0 -0
  33. {topos_node-1.3.42 → topos_node-1.3.43}/topos/__init__.py +0 -0
  34. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/__init__.py +0 -0
  35. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/dataset_resolution.py +0 -0
  36. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/duckdb_adapter.py +0 -0
  37. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/luck_surface.py +0 -0
  38. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/messenger_communities.py +0 -0
  39. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/messenger_directed.py +0 -0
  40. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/messenger_graph.py +0 -0
  41. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/messenger_labels.py +0 -0
  42. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/person_graph.py +0 -0
  43. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/person_overlay.py +0 -0
  44. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/profiles.py +0 -0
  45. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/query_engine.py +0 -0
  46. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/raw_queries.py +0 -0
  47. {topos_node-1.3.42 → topos_node-1.3.43}/topos/analytics/relationship_reads.py +0 -0
  48. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/__init__.py +0 -0
  49. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/analytics.py +0 -0
  50. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/app_registry.py +0 -0
  51. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/backup.py +0 -0
  52. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/community_naming_config.py +0 -0
  53. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/compute_remote.py +0 -0
  54. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/connected_apps.py +0 -0
  55. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/conversation_context.py +0 -0
  56. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/data_commit.py +0 -0
  57. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/data_explorer_table_prefs.py +0 -0
  58. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/database_explorer.py +0 -0
  59. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/db.py +0 -0
  60. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/device.py +0 -0
  61. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/disk_space_config.py +0 -0
  62. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/engine_run.py +0 -0
  63. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/enrichment.py +0 -0
  64. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/enrichment_lab.py +0 -0
  65. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/facts_llm_config.py +0 -0
  66. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/filter_lab.py +0 -0
  67. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/health.py +0 -0
  68. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/home_chat.py +0 -0
  69. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/ingestion_api.py +0 -0
  70. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/ingestion_compat.py +0 -0
  71. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/ingestion_sources.py +0 -0
  72. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/intelligence_lifecycle.py +0 -0
  73. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/llm.py +0 -0
  74. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/local_mcp.py +0 -0
  75. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/messenger_analytics.py +0 -0
  76. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/privacy_disclose.py +0 -0
  77. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/query_api.py +0 -0
  78. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/runtime_bootstrap.py +0 -0
  79. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/sanitization_ollama_config.py +0 -0
  80. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/shell.py +0 -0
  81. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/signal.py +0 -0
  82. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/signal_extraction_config.py +0 -0
  83. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/source_install.py +0 -0
  84. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/source_scrub.py +0 -0
  85. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/sources.py +0 -0
  86. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/sources_overview.py +0 -0
  87. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/sync.py +0 -0
  88. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/tool_index.py +0 -0
  89. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/ui_config.py +0 -0
  90. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/uma_data.py +0 -0
  91. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/upgrades.py +0 -0
  92. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/usage.py +0 -0
  93. {topos_node-1.3.42 → topos_node-1.3.43}/topos/api/user_identity.py +0 -0
  94. {topos_node-1.3.42 → topos_node-1.3.43}/topos/app.py +0 -0
  95. {topos_node-1.3.42 → topos_node-1.3.43}/topos/auth.py +0 -0
  96. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/__init__.py +0 -0
  97. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/declared_field_map.py +0 -0
  98. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/__init__.py +0 -0
  99. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/base.py +0 -0
  100. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/browser_activity_mapper.py +0 -0
  101. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
  102. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/demo_mappers.py +0 -0
  103. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/documents_mapper.py +0 -0
  104. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/github_activity_mapper.py +0 -0
  105. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/google_calendar_mapper.py +0 -0
  106. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/grok_mapper.py +0 -0
  107. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
  108. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/models.py +0 -0
  109. {topos_node-1.3.42 → topos_node-1.3.43}/topos/canonicalization/resolver.py +0 -0
  110. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/__init__.py +0 -0
  111. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/__main__.py +0 -0
  112. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/assets/topos_blk_rounded.png +0 -0
  113. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/assets/topos_white.png +0 -0
  114. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/commands.py +0 -0
  115. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/profile_cmd.py +0 -0
  116. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/reprocess_cmd.py +0 -0
  117. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/setup_models_cmd.py +0 -0
  118. {topos_node-1.3.42 → topos_node-1.3.43}/topos/cli/tray.py +0 -0
  119. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/__init__.py +0 -0
  120. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/conversation_context_llm.py +0 -0
  121. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/facts_llm.py +0 -0
  122. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/local_model_builds.py +0 -0
  123. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/model_packs.py +0 -0
  124. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/node_function_providers.py +0 -0
  125. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/sanitization_ollama.py +0 -0
  126. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/settings.py +0 -0
  127. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/signal_extraction.py +0 -0
  128. {topos_node-1.3.42 → topos_node-1.3.43}/topos/config/uvicorn_logging.json +0 -0
  129. {topos_node-1.3.42 → topos_node-1.3.43}/topos/contacts/__init__.py +0 -0
  130. {topos_node-1.3.42 → topos_node-1.3.43}/topos/contacts/identity.py +0 -0
  131. {topos_node-1.3.42 → topos_node-1.3.43}/topos/control_plane_client.py +0 -0
  132. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/__init__.py +0 -0
  133. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/api_models.py +0 -0
  134. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/connection_resilience.py +0 -0
  135. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/db_health.py +0 -0
  136. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/device_helpers.py +0 -0
  137. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/errors.py +0 -0
  138. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/events.py +0 -0
  139. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/__init__.py +0 -0
  140. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/common.py +0 -0
  141. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/complexity.py +0 -0
  142. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/config.py +0 -0
  143. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/contacts_import.py +0 -0
  144. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/database_explorer.py +0 -0
  145. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/derivation.py +0 -0
  146. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/device.py +0 -0
  147. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/enrichment.py +0 -0
  148. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/enrichment_lab.py +0 -0
  149. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/filter_lab.py +0 -0
  150. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/graph_query.py +0 -0
  151. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/graph_summary.py +0 -0
  152. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/home_chat.py +0 -0
  153. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/ingest.py +0 -0
  154. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/mcp_client_elevations.py +0 -0
  155. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/mcp_clients.py +0 -0
  156. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/messages.py +0 -0
  157. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/messenger_analytics.py +0 -0
  158. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/query.py +0 -0
  159. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/registry.py +0 -0
  160. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/routines.py +0 -0
  161. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/signal_features.py +0 -0
  162. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/sources.py +0 -0
  163. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/timeline_daily.py +0 -0
  164. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/tool_index.py +0 -0
  165. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/handlers/uma.py +0 -0
  166. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/logging.py +0 -0
  167. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/metrics.py +0 -0
  168. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/routine_access.py +0 -0
  169. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/startup_banner.py +0 -0
  170. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/state.py +0 -0
  171. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/table_layers.py +0 -0
  172. {topos_node-1.3.42 → topos_node-1.3.43}/topos/core/types.py +0 -0
  173. {topos_node-1.3.42 → topos_node-1.3.43}/topos/data_explorer_row_delete.py +0 -0
  174. {topos_node-1.3.42 → topos_node-1.3.43}/topos/data_explorer_table_prefs.py +0 -0
  175. {topos_node-1.3.42 → topos_node-1.3.43}/topos/data_explorer_tables.py +0 -0
  176. {topos_node-1.3.42 → topos_node-1.3.43}/topos/defaults.py +0 -0
  177. {topos_node-1.3.42 → topos_node-1.3.43}/topos/disclosure/__init__.py +0 -0
  178. {topos_node-1.3.42 → topos_node-1.3.43}/topos/disclosure/canonical_writer.py +0 -0
  179. {topos_node-1.3.42 → topos_node-1.3.43}/topos/disclosure/content_policy.py +0 -0
  180. {topos_node-1.3.42 → topos_node-1.3.43}/topos/disclosure/field_registry.py +0 -0
  181. {topos_node-1.3.42 → topos_node-1.3.43}/topos/disclosure/privacy_layer.py +0 -0
  182. {topos_node-1.3.42 → topos_node-1.3.43}/topos/disclosure/tier.py +0 -0
  183. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/__init__.py +0 -0
  184. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/__init__.py +0 -0
  185. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/base.py +0 -0
  186. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/generative_prompts.py +0 -0
  187. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/generative_response.py +0 -0
  188. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/huggingface.py +0 -0
  189. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/ollama.py +0 -0
  190. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/openai.py +0 -0
  191. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/openai_compatible.py +0 -0
  192. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/redpill.py +0 -0
  193. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/backends/stub.py +0 -0
  194. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/client.py +0 -0
  195. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/disk_space.py +0 -0
  196. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/engine.py +0 -0
  197. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/hosted_llm_wallet.py +0 -0
  198. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/intake.py +0 -0
  199. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/memory_utils.py +0 -0
  200. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/model_cache.py +0 -0
  201. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/model_manager.py +0 -0
  202. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/ollama_install.py +0 -0
  203. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/ollama_pull.py +0 -0
  204. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/ollama_runtime.py +0 -0
  205. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/ollama_setup_guidance.py +0 -0
  206. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/pipeline_memory.py +0 -0
  207. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/queue_manager.py +0 -0
  208. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/registration.py +0 -0
  209. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/result_formatter.py +0 -0
  210. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/router.py +0 -0
  211. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/scoped_token.py +0 -0
  212. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/tasks.py +0 -0
  213. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/torch_runtime.py +0 -0
  214. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/transport.py +0 -0
  215. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/usage_guard.py +0 -0
  216. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/usage_observation.py +0 -0
  217. {topos_node-1.3.42 → topos_node-1.3.43}/topos/engine/validator.py +0 -0
  218. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/__init__.py +0 -0
  219. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/catalog.py +0 -0
  220. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/derivation_recovery.py +0 -0
  221. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/derived_tables.py +0 -0
  222. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/job_readiness.py +0 -0
  223. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/job_writer.py +0 -0
  224. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/__init__.py +0 -0
  225. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/base.py +0 -0
  226. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/__init__.py +0 -0
  227. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/_batch_limits.py +0 -0
  228. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/_engine_runner.py +0 -0
  229. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/attention_triage_job.py +0 -0
  230. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/availability_scores_job.py +0 -0
  231. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/brief_fallback.py +0 -0
  232. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/complexity_snapshot_job.py +0 -0
  233. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/derivation_job.py +0 -0
  234. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/derived_object_embeddings_job.py +0 -0
  235. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/dimension_summary_job.py +0 -0
  236. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
  237. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
  238. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
  239. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/fact_extraction_job.py +0 -0
  240. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/goal_extraction_job.py +0 -0
  241. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/pii_redaction_job.py +0 -0
  242. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/relationship_edges_job.py +0 -0
  243. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
  244. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/statistics_job.py +0 -0
  245. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/timeline_job.py +0 -0
  246. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/topic_clusters_job.py +0 -0
  247. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
  248. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/raw/__init__.py +0 -0
  249. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
  250. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/raw/language_job.py +0 -0
  251. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
  252. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
  253. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/model_overrides.py +0 -0
  254. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/models/__init__.py +0 -0
  255. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/models/manager.py +0 -0
  256. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/models/mvp_defaults.py +0 -0
  257. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/models/registry.py +0 -0
  258. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/models/versioning.py +0 -0
  259. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/orchestrator.py +0 -0
  260. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/pipeline_activity.py +0 -0
  261. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/processor.py +0 -0
  262. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/progress_bar.py +0 -0
  263. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/record_progress.py +0 -0
  264. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/registry_contract.py +0 -0
  265. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/signal_derivation_config.json +0 -0
  266. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment/source_overrides.py +0 -0
  267. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment_lab/__init__.py +0 -0
  268. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment_lab/bundles.py +0 -0
  269. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment_lab/model_resolve.py +0 -0
  270. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment_lab/schema.py +0 -0
  271. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment_lab/service.py +0 -0
  272. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment_lab/store.py +0 -0
  273. {topos_node-1.3.42 → topos_node-1.3.43}/topos/enrichment_lab/worker.py +0 -0
  274. {topos_node-1.3.42 → topos_node-1.3.43}/topos/evals/__init__.py +0 -0
  275. {topos_node-1.3.42 → topos_node-1.3.43}/topos/evals/enrichment_eval.py +0 -0
  276. {topos_node-1.3.42 → topos_node-1.3.43}/topos/extensions.py +0 -0
  277. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/__init__.py +0 -0
  278. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/canonical.py +0 -0
  279. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/engine.py +0 -0
  280. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/entropy.py +0 -0
  281. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/focus.py +0 -0
  282. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/graph_metrics.py +0 -0
  283. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/influence.py +0 -0
  284. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/projection.py +0 -0
  285. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/snapshots.py +0 -0
  286. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/store.py +0 -0
  287. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/topic_merge.py +0 -0
  288. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/topics.py +0 -0
  289. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/topics_daily.py +0 -0
  290. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/complexity/volatility.py +0 -0
  291. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/__init__.py +0 -0
  292. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/_scales.yaml +0 -0
  293. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/admin.legal.yaml +0 -0
  294. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/aspirations.goals.yaml +0 -0
  295. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/behavior.habits.yaml +0 -0
  296. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/behavior.preferences.yaml +0 -0
  297. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/beliefs.civic.yaml +0 -0
  298. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/beliefs.spiritual.yaml +0 -0
  299. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/communication.style.yaml +0 -0
  300. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/community.membership.yaml +0 -0
  301. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/craft.tooling.yaml +0 -0
  302. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/expertise.knowledge.yaml +0 -0
  303. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/finances.economics.yaml +0 -0
  304. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/health.lifestyle.yaml +0 -0
  305. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/health.mental.yaml +0 -0
  306. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/health.physical.yaml +0 -0
  307. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/household.pets.yaml +0 -0
  308. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/identity.core.yaml +0 -0
  309. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/interests.taste.yaml +0 -0
  310. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/life.events.yaml +0 -0
  311. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/narrative.self.yaml +0 -0
  312. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/net.capability.yaml +0 -0
  313. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/obligations.commitments.yaml +0 -0
  314. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/personality.traits.yaml +0 -0
  315. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/places.mobility.yaml +0 -0
  316. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/possessions.assets.yaml +0 -0
  317. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/relationships.social.yaml +0 -0
  318. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/values.motivation.yaml +0 -0
  319. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/vocab/dispositions.yaml +0 -0
  320. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/vocab/expertise.yaml +0 -0
  321. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/vocab/habits.yaml +0 -0
  322. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/vocab/interests.yaml +0 -0
  323. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/vocab/preferences.yaml +0 -0
  324. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/vocab/stances.yaml +0 -0
  325. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/vocab/tools.yaml +0 -0
  326. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/vocab/values.yaml +0 -0
  327. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/bundled_packs/work.career.yaml +0 -0
  328. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/candidates.py +0 -0
  329. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/guard.py +0 -0
  330. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/kernels.py +0 -0
  331. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/net_subject_policy.py +0 -0
  332. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/packs.py +0 -0
  333. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/person_bridge.py +0 -0
  334. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/prefilter.py +0 -0
  335. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/registry.py +0 -0
  336. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/report_card.py +0 -0
  337. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/router.py +0 -0
  338. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/social_bench.py +0 -0
  339. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/social_kernels.py +0 -0
  340. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/surfaces.py +0 -0
  341. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/synthesize.py +0 -0
  342. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/template.py +0 -0
  343. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/verify.py +0 -0
  344. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/derivation/writer.py +0 -0
  345. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/__init__.py +0 -0
  346. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/affinity.py +0 -0
  347. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/affinity_owner.py +0 -0
  348. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/affinity_quality.py +0 -0
  349. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/chatgpt_declared.py +0 -0
  350. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/community_names.py +0 -0
  351. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/community_naming.py +0 -0
  352. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/consolidation.py +0 -0
  353. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/context_vectors.py +0 -0
  354. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/cypher.py +0 -0
  355. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/declared_mappings.py +0 -0
  356. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/dossier.py +0 -0
  357. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/edges.py +0 -0
  358. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/fact_materializer.py +0 -0
  359. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/graph_enrichers.py +0 -0
  360. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/graph_refresh.py +0 -0
  361. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/graph_search.py +0 -0
  362. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/linking.py +0 -0
  363. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/maintenance.py +0 -0
  364. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/owner.py +0 -0
  365. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/reads.py +0 -0
  366. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/rebuild_subprocess.py +0 -0
  367. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/resolver.py +0 -0
  368. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/entities/structured_fields.py +0 -0
  369. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/facts/__init__.py +0 -0
  370. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/facts/extract.py +0 -0
  371. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/facts/llm_extract.py +0 -0
  372. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/facts/reads.py +0 -0
  373. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/facts/store.py +0 -0
  374. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/facts/verdicts.py +0 -0
  375. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/fit/evaluator.py +0 -0
  376. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/fit/opportunity_types.json +0 -0
  377. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/lifecycle/__init__.py +0 -0
  378. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/lifecycle/blackhole.py +0 -0
  379. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/lifecycle/blackhole_guard.py +0 -0
  380. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/lifecycle/blackhole_llm.py +0 -0
  381. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/lifecycle/blackhole_rebuild.py +0 -0
  382. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/lifecycle/derived_scrub.py +0 -0
  383. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/lifecycle/exclusions.py +0 -0
  384. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/lifecycle/gc.py +0 -0
  385. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/provenance/__init__.py +0 -0
  386. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/provenance/posture.py +0 -0
  387. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/provenance/roles.py +0 -0
  388. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/__init__.py +0 -0
  389. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/brief_canonical_loader.py +0 -0
  390. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/brief_ontology.py +0 -0
  391. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/brief_renderer.py +0 -0
  392. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/brief_schemas.py +0 -0
  393. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/chunking.py +0 -0
  394. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/cluster_labels.py +0 -0
  395. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/conversation_context.py +0 -0
  396. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/conversation_windows.py +0 -0
  397. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/data_health.py +0 -0
  398. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/brief_ontologies.json +0 -0
  399. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/intentions.json +0 -0
  400. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/interests.json +0 -0
  401. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/memory.json +0 -0
  402. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/places.json +0 -0
  403. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/profile.json +0 -0
  404. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/relationships.json +0 -0
  405. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/resources.json +0 -0
  406. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/schema/dimension_definition.schema.json +0 -0
  407. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/time.json +0 -0
  408. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/wellbeing.json +0 -0
  409. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/definitions/work.json +0 -0
  410. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/derived_index.py +0 -0
  411. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/derived_spec.py +0 -0
  412. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/dimension_briefs.py +0 -0
  413. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/dimension_definition_loader.py +0 -0
  414. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/dimension_profiles.py +0 -0
  415. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/dimension_registry.py +0 -0
  416. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/embed_context.py +0 -0
  417. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/extraction/artifact_router.py +0 -0
  418. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/extraction/artifact_store.py +0 -0
  419. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/extraction/rule_extractors.py +0 -0
  420. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/graph_sanitize.py +0 -0
  421. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/hybrid_search.py +0 -0
  422. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/incremental_clustering.py +0 -0
  423. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/model_recommendations.py +0 -0
  424. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/query_embed_cache.py +0 -0
  425. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/schemas.py +0 -0
  426. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/service.py +0 -0
  427. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/signal_object_store.py +0 -0
  428. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/source_hydration.py +0 -0
  429. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/structured_signal.py +0 -0
  430. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/tool_index.py +0 -0
  431. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/topic_clustering.py +0 -0
  432. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/typed_stores/aggregates.py +0 -0
  433. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/typed_stores/commitments.py +0 -0
  434. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/typed_stores/rhythm.py +0 -0
  435. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/typed_stores/scope_materializer.py +0 -0
  436. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/vector_codec.py +0 -0
  437. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/vector_math.py +0 -0
  438. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/signal/vector_settings.py +0 -0
  439. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/stats/__init__.py +0 -0
  440. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/stats/definitions.py +0 -0
  441. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/stats/engine.py +0 -0
  442. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/stats/fold.py +0 -0
  443. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/stats/insights.py +0 -0
  444. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/timeline_projection.py +0 -0
  445. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/timeline_rollup.py +0 -0
  446. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/triage/__init__.py +0 -0
  447. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/triage/badges.py +0 -0
  448. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/triage/daily.py +0 -0
  449. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/triage/dashboard.py +0 -0
  450. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/triage/instruments.py +0 -0
  451. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/triage/intents.py +0 -0
  452. {topos_node-1.3.42 → topos_node-1.3.43}/topos/features/triage/readiness.py +0 -0
  453. {topos_node-1.3.42 → topos_node-1.3.43}/topos/filter_lab/__init__.py +0 -0
  454. {topos_node-1.3.42 → topos_node-1.3.43}/topos/filter_lab/bundles.py +0 -0
  455. {topos_node-1.3.42 → topos_node-1.3.43}/topos/filter_lab/schema.py +0 -0
  456. {topos_node-1.3.42 → topos_node-1.3.43}/topos/filter_lab/service.py +0 -0
  457. {topos_node-1.3.42 → topos_node-1.3.43}/topos/filter_lab/store.py +0 -0
  458. {topos_node-1.3.42 → topos_node-1.3.43}/topos/filter_lab/worker.py +0 -0
  459. {topos_node-1.3.42 → topos_node-1.3.43}/topos/home_chat/__init__.py +0 -0
  460. {topos_node-1.3.42 → topos_node-1.3.43}/topos/home_chat/schema.py +0 -0
  461. {topos_node-1.3.42 → topos_node-1.3.43}/topos/home_chat/store.py +0 -0
  462. {topos_node-1.3.42 → topos_node-1.3.43}/topos/hosted_pool_lease.py +0 -0
  463. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/__init__.py +0 -0
  464. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/canonical_pipeline.py +0 -0
  465. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/checkpoints/__init__.py +0 -0
  466. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
  467. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
  468. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/inbox_crypto.py +0 -0
  469. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/inbox_drain.py +0 -0
  470. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/ingest_helpers.py +0 -0
  471. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/jobs.py +0 -0
  472. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/journal_location_fanout.py +0 -0
  473. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/journal_time_log_normalize.py +0 -0
  474. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/local_exports.py +0 -0
  475. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/local_sync.py +0 -0
  476. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/log_preview.py +0 -0
  477. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/manager.py +0 -0
  478. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parser.py +0 -0
  479. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/__init__.py +0 -0
  480. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/base.py +0 -0
  481. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/browser_parser.py +0 -0
  482. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/calendar_parser.py +0 -0
  483. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
  484. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/chatgpt_export.py +0 -0
  485. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
  486. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/demo_file_parsers.py +0 -0
  487. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/documents_parser.py +0 -0
  488. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/github_activity_parser.py +0 -0
  489. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/google_calendar_parser.py +0 -0
  490. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/grok_parser.py +0 -0
  491. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/messenger_parser.py +0 -0
  492. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/parsers/voxterm_parser.py +0 -0
  493. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/progress.py +0 -0
  494. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/reprocess.py +0 -0
  495. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/__init__.py +0 -0
  496. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/base.py +0 -0
  497. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/calendar.py +0 -0
  498. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/chatgpt.py +0 -0
  499. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/contact_importers.py +0 -0
  500. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/grok.py +0 -0
  501. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/imessage_reader.py +0 -0
  502. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/signal_export_parser.py +0 -0
  503. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/sources/signal_reader.py +0 -0
  504. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/state_machine.py +0 -0
  505. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/triggers/__init__.py +0 -0
  506. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/triggers/file_trigger.py +0 -0
  507. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
  508. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/usage_inbox_dedupe.py +0 -0
  509. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/validation/__init__.py +0 -0
  510. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/validation/base.py +0 -0
  511. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/validation/schema_registry.py +0 -0
  512. {topos_node-1.3.42 → topos_node-1.3.43}/topos/ingestion/validation/schema_validator.py +0 -0
  513. {topos_node-1.3.42 → topos_node-1.3.43}/topos/lineage/__init__.py +0 -0
  514. {topos_node-1.3.42 → topos_node-1.3.43}/topos/lineage/provenance.py +0 -0
  515. {topos_node-1.3.42 → topos_node-1.3.43}/topos/lineage/tracker.py +0 -0
  516. {topos_node-1.3.42 → topos_node-1.3.43}/topos/llm_integrations_storage.py +0 -0
  517. {topos_node-1.3.42 → topos_node-1.3.43}/topos/mcp_clients.py +0 -0
  518. {topos_node-1.3.42 → topos_node-1.3.43}/topos/mcp_stdio_proxy.py +0 -0
  519. {topos_node-1.3.42 → topos_node-1.3.43}/topos/observability/__init__.py +0 -0
  520. {topos_node-1.3.42 → topos_node-1.3.43}/topos/observability/alerts.py +0 -0
  521. {topos_node-1.3.42 → topos_node-1.3.43}/topos/observability/metrics.py +0 -0
  522. {topos_node-1.3.42 → topos_node-1.3.43}/topos/observability/tracing.py +0 -0
  523. {topos_node-1.3.42 → topos_node-1.3.43}/topos/openai_client.py +0 -0
  524. {topos_node-1.3.42 → topos_node-1.3.43}/topos/owner_key.py +0 -0
  525. {topos_node-1.3.42 → topos_node-1.3.43}/topos/pipeline/__init__.py +0 -0
  526. {topos_node-1.3.42 → topos_node-1.3.43}/topos/pipeline/audit.py +0 -0
  527. {topos_node-1.3.42 → topos_node-1.3.43}/topos/pipeline/envelope.py +0 -0
  528. {topos_node-1.3.42 → topos_node-1.3.43}/topos/pipeline/job_runner.py +0 -0
  529. {topos_node-1.3.42 → topos_node-1.3.43}/topos/pipeline/job_store.py +0 -0
  530. {topos_node-1.3.42 → topos_node-1.3.43}/topos/pipeline/stages.py +0 -0
  531. {topos_node-1.3.42 → topos_node-1.3.43}/topos/pipeline/stub_enqueue.py +0 -0
  532. {topos_node-1.3.42 → topos_node-1.3.43}/topos/principal.py +0 -0
  533. {topos_node-1.3.42 → topos_node-1.3.43}/topos/profiles.py +0 -0
  534. {topos_node-1.3.42 → topos_node-1.3.43}/topos/projections/__init__.py +0 -0
  535. {topos_node-1.3.42 → topos_node-1.3.43}/topos/projections/vector_index/__init__.py +0 -0
  536. {topos_node-1.3.42 → topos_node-1.3.43}/topos/projections/vector_index/base.py +0 -0
  537. {topos_node-1.3.42 → topos_node-1.3.43}/topos/projections/vector_index/builders.py +0 -0
  538. {topos_node-1.3.42 → topos_node-1.3.43}/topos/projections/vector_index/health_checks.py +0 -0
  539. {topos_node-1.3.42 → topos_node-1.3.43}/topos/protocol/__init__.py +0 -0
  540. {topos_node-1.3.42 → topos_node-1.3.43}/topos/protocol/handled_message_types.json +0 -0
  541. {topos_node-1.3.42 → topos_node-1.3.43}/topos/protocol/query_field_contract.json +0 -0
  542. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/__init__.py +0 -0
  543. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/audit.py +0 -0
  544. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/closeness.py +0 -0
  545. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/cohort_resolvers.py +0 -0
  546. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/collaborators.py +0 -0
  547. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/ddr.py +0 -0
  548. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/disclosure.py +0 -0
  549. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/entity_window.py +0 -0
  550. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/exclusion.py +0 -0
  551. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/facts_direct.py +0 -0
  552. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/fingerprint.py +0 -0
  553. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/game_layer.py +0 -0
  554. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/grant_cache.py +0 -0
  555. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/inference.py +0 -0
  556. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/intent.py +0 -0
  557. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/manifest.py +0 -0
  558. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/manifest_validation.py +0 -0
  559. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/minimizer.py +0 -0
  560. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/negotiation.py +0 -0
  561. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/packet_resolution.py +0 -0
  562. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/pipeline.py +0 -0
  563. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/planner.py +0 -0
  564. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/runtime.py +0 -0
  565. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/scope_arbiter.py +0 -0
  566. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/scope_classifier.py +0 -0
  567. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/scope_head.py +0 -0
  568. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/scope_registry_loader.py +0 -0
  569. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/scope_shadow.py +0 -0
  570. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/session.py +0 -0
  571. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/session_utils.py +0 -0
  572. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/source_generation.py +0 -0
  573. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/truth_facts.py +0 -0
  574. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/truth_prompts.py +0 -0
  575. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/turn_classifier.py +0 -0
  576. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/types.py +0 -0
  577. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/verify.py +0 -0
  578. {topos_node-1.3.42 → topos_node-1.3.43}/topos/query/verify_modes.py +0 -0
  579. {topos_node-1.3.42 → topos_node-1.3.43}/topos/rate_limit.py +0 -0
  580. {topos_node-1.3.42 → topos_node-1.3.43}/topos/relay_stamp.py +0 -0
  581. {topos_node-1.3.42 → topos_node-1.3.43}/topos/routines/__init__.py +0 -0
  582. {topos_node-1.3.42 → topos_node-1.3.43}/topos/routines/schema.py +0 -0
  583. {topos_node-1.3.42 → topos_node-1.3.43}/topos/routines/store.py +0 -0
  584. {topos_node-1.3.42 → topos_node-1.3.43}/topos/runtime_housekeeping.py +0 -0
  585. {topos_node-1.3.42 → topos_node-1.3.43}/topos/runtime_shutdown.py +0 -0
  586. {topos_node-1.3.42 → topos_node-1.3.43}/topos/runtime_update.py +0 -0
  587. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sanitization/__init__.py +0 -0
  588. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sanitization/nsfw_classifier.py +0 -0
  589. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sanitization/ollama_transforms.py +0 -0
  590. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sanitization/prewarm.py +0 -0
  591. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sanitization/privacy_filter.py +0 -0
  592. {topos_node-1.3.42 → topos_node-1.3.43}/topos/scope_resolution.py +0 -0
  593. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/__init__.py +0 -0
  594. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/container.py +0 -0
  595. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/embeddings/__init__.py +0 -0
  596. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/embeddings/base.py +0 -0
  597. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/embeddings/local.py +0 -0
  598. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/embeddings/remote.py +0 -0
  599. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/interfaces.py +0 -0
  600. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/llm/__init__.py +0 -0
  601. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/llm/base.py +0 -0
  602. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/llm/openai.py +0 -0
  603. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/local.py +0 -0
  604. {topos_node-1.3.42 → topos_node-1.3.43}/topos/services/postgres.py +0 -0
  605. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/__init__.py +0 -0
  606. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/bundled_canonical_triples.py +0 -0
  607. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/canonical_signal_defaults.py +0 -0
  608. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/declared_field_map_spec.py +0 -0
  609. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/definitions.py +0 -0
  610. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/registry.py +0 -0
  611. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/runtime_install.py +0 -0
  612. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/scrub_attribution.py +0 -0
  613. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sources/scrub_service.py +0 -0
  614. {topos_node-1.3.42 → topos_node-1.3.43}/topos/startup_banner.py +0 -0
  615. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/__init__.py +0 -0
  616. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/adapters/__init__.py +0 -0
  617. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/adapters/factory.py +0 -0
  618. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/adapters/fakes.py +0 -0
  619. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/adapters/postgres/stores.py +0 -0
  620. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/adapters/protocols.py +0 -0
  621. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/adapters/sqlite/__init__.py +0 -0
  622. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/adapters/sqlite/stores.py +0 -0
  623. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/adapters/sqlite/vector_search.py +0 -0
  624. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/__init__.py +0 -0
  625. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/activity_tables.py +0 -0
  626. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/ai_chat/__init__.py +0 -0
  627. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
  628. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/ai_chat/mapper.py +0 -0
  629. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/ai_chat/model.py +0 -0
  630. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/ai_chat/tables.py +0 -0
  631. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/calendar_contacts_tables.py +0 -0
  632. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/canonical_store.py +0 -0
  633. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/conversations_tables.py +0 -0
  634. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/journal_repair.py +0 -0
  635. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/mapping_store.py +0 -0
  636. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/canonical/postgres.py +0 -0
  637. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/__init__.py +0 -0
  638. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/client.py +0 -0
  639. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/connection_tuning.py +0 -0
  640. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/__init__.py +0 -0
  641. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/activity_events_content_v1.py +0 -0
  642. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/actor_role_v1.py +0 -0
  643. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/affinity_pair_labels_v1.py +0 -0
  644. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/attention_triage_v1.py +0 -0
  645. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/attention_triage_v2.py +0 -0
  646. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/backup.py +0 -0
  647. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/backup_custody.py +0 -0
  648. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/calendar_events_scheduling_v1.py +0 -0
  649. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/canonical_address_book_v1.py +0 -0
  650. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/canonical_disclosure_v1.py +0 -0
  651. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/canonical_nsfw_v1.py +0 -0
  652. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/community_names_v1.py +0 -0
  653. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/complexity_v1.py +0 -0
  654. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/conflict_provenance_v1.py +0 -0
  655. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/conversation_context_v1.py +0 -0
  656. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/derivation_factory_v1.py +0 -0
  657. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/derivation_ledger_v1.py +0 -0
  658. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/derivation_provenance_v1.py +0 -0
  659. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/derived_row_identity_v1.py +0 -0
  660. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/documents_v1.py +0 -0
  661. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/enrichment_record_progress_v1.py +0 -0
  662. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/enrichment_spec_version_v1.py +0 -0
  663. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_affinity_v1.py +0 -0
  664. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_blackhole_v1.py +0 -0
  665. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_context_vectors_v1.py +0 -0
  666. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_context_vectors_v2.py +0 -0
  667. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_edges_validity_v1.py +0 -0
  668. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_mentions_authored_v1.py +0 -0
  669. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_review_candidate_bar_v1.py +0 -0
  670. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_review_dedup_v1.py +0 -0
  671. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/entity_review_provenance_v1.py +0 -0
  672. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/episodes_v1.py +0 -0
  673. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/extraction_artifacts.py +0 -0
  674. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/fact_dimension_by_entity_type_v1.py +0 -0
  675. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/journal_entries_duration_v1.py +0 -0
  676. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/journal_entries_ends_at_v1.py +0 -0
  677. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/journal_entries_people_v1.py +0 -0
  678. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/journal_entries_place_name_v1.py +0 -0
  679. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/journal_entries_starts_at_v1.py +0 -0
  680. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/journal_origin_dimension_v1.py +0 -0
  681. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/mention_table_stamp_backfill_v1.py +0 -0
  682. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/message_emotions_role_backfill_v1.py +0 -0
  683. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/message_emotions_role_v1.py +0 -0
  684. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/net_subject_policy_v1.py +0 -0
  685. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/pack_registry_v1.py +0 -0
  686. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/pipeline_jobs_v1.py +0 -0
  687. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/query_artifacts_duration_ms_v1.py +0 -0
  688. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/registry.py +0 -0
  689. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/registry_checksums.json +0 -0
  690. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/remediation_person_model.py +0 -0
  691. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/retire_url_classification_v1.py +0 -0
  692. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/scope_source_generation.py +0 -0
  693. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/signal_dimension_backfill_v1.py +0 -0
  694. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/signal_dimension_harness.py +0 -0
  695. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/signal_objects.py +0 -0
  696. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/signal_objects_period_v1.py +0 -0
  697. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/signal_objects_updated_by_v1.py +0 -0
  698. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/signal_summaries_drop_v1.py +0 -0
  699. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
  700. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/vector_storage_v1.py +0 -0
  701. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/vector_storage_v2.py +0 -0
  702. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/vector_storage_v3.py +0 -0
  703. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/vector_storage_v4.py +0 -0
  704. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_clusters_v2.py +0 -0
  705. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_entities_v1.py +0 -0
  706. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_entity_review_v2.py +0 -0
  707. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_facts_v1.py +0 -0
  708. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_lifecycle_v1.py +0 -0
  709. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_mvp_phase0.py +0 -0
  710. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_mvp_phase1.py +0 -0
  711. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_mvp_phase4_messages_cutover.py +0 -0
  712. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_mvp_phase5_topic_clusters.py +0 -0
  713. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_mvp_phase6_dimension_briefs.py +0 -0
  714. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_mvp_query_quality.py +0 -0
  715. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_mvp_topic_clusters_coordination.py +0 -0
  716. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_stats_v1.py +0 -0
  717. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/migrations/wiki_timeline_v1.py +0 -0
  718. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/paths.py +0 -0
  719. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/postgres.py +0 -0
  720. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/schema.py +0 -0
  721. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/schema_probe.py +0 -0
  722. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/storage_breakdown.py +0 -0
  723. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/db/write_gate.py +0 -0
  724. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/derived_row_identity.py +0 -0
  725. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/enrichment/__init__.py +0 -0
  726. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
  727. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
  728. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/normalized/__init__.py +0 -0
  729. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/normalized/normalized_store.py +0 -0
  730. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/oplog/__init__.py +0 -0
  731. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/oplog/decision.py +0 -0
  732. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/oplog/oplog_store.py +0 -0
  733. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/oplog/postgres.py +0 -0
  734. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/person/identity_resolver.py +0 -0
  735. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/projections/__init__.py +0 -0
  736. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/projections/index_ops_store.py +0 -0
  737. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/projections/vector_index_store.py +0 -0
  738. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/raw/__init__.py +0 -0
  739. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/raw/browser_flat_tables.py +0 -0
  740. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/raw/file_store.py +0 -0
  741. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/raw/raw_store.py +0 -0
  742. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/raw/raw_tables_manager.py +0 -0
  743. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/raw/sqlite_raw_store.py +0 -0
  744. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/security/encryption.py +0 -0
  745. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/signal_identity.py +0 -0
  746. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/source_settings.py +0 -0
  747. {topos_node-1.3.42 → topos_node-1.3.43}/topos/storage/user_identity.py +0 -0
  748. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sync/__init__.py +0 -0
  749. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sync/client.py +0 -0
  750. {topos_node-1.3.42 → topos_node-1.3.43}/topos/sync_handlers.py +0 -0
  751. {topos_node-1.3.42 → topos_node-1.3.43}/topos/testing/__init__.py +0 -0
  752. {topos_node-1.3.42 → topos_node-1.3.43}/topos/testing/lifespan.py +0 -0
  753. {topos_node-1.3.42 → topos_node-1.3.43}/topos/uds.py +0 -0
  754. {topos_node-1.3.42 → topos_node-1.3.43}/topos/uma_contact_enrichment.py +0 -0
  755. {topos_node-1.3.42 → topos_node-1.3.43}/topos/uma_filters.py +0 -0
  756. {topos_node-1.3.42 → topos_node-1.3.43}/topos/uma_resource_id.py +0 -0
  757. {topos_node-1.3.42 → topos_node-1.3.43}/topos/uma_rpt.py +0 -0
  758. {topos_node-1.3.42 → topos_node-1.3.43}/topos/upgrades/__init__.py +0 -0
  759. {topos_node-1.3.42 → topos_node-1.3.43}/topos/upgrades/runner.py +0 -0
  760. {topos_node-1.3.42 → topos_node-1.3.43}/topos/utils/base_object.py +0 -0
  761. {topos_node-1.3.42 → topos_node-1.3.43}/topos/websocket_client.py +0 -0
  762. {topos_node-1.3.42 → topos_node-1.3.43}/topos_node.egg-info/dependency_links.txt +0 -0
  763. {topos_node-1.3.42 → topos_node-1.3.43}/topos_node.egg-info/entry_points.txt +0 -0
  764. {topos_node-1.3.42 → topos_node-1.3.43}/topos_node.egg-info/requires.txt +0 -0
  765. {topos_node-1.3.42 → topos_node-1.3.43}/topos_node.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: topos-node
3
- Version: 1.3.42
3
+ Version: 1.3.43
4
4
  Summary: Topos personal AI engine (FastAPI): local data, sync, control plane WebSocket client
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://topos.dialogues.ai
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "topos-node"
7
- version = "1.3.42"
7
+ version = "1.3.43"
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"
@@ -1,6 +1,6 @@
1
1
  """Topos Control Plane Version Information."""
2
2
 
3
- __version__ = "1.3.42"
4
- __version_info__ = (1, 3, 42)
3
+ __version__ = "1.3.43"
4
+ __version_info__ = (1, 3, 43)
5
5
 
6
6
  __all__ = ["__version__", "__version_info__"]
@@ -88,6 +88,7 @@
88
88
  "expand_boundary",
89
89
  "expand_boundary_downgrade",
90
90
  "first_source_ref_only",
91
+ "graph_lane",
91
92
  "gate_vetoed",
92
93
  "grantee_scrub_facts",
93
94
  "grantee_scrub_scores",
@@ -0,0 +1,152 @@
1
+ """The graph retrieval lane (S6, PLAN_QUERY_LOOP.md): edges as evidence.
2
+
3
+ Before this lane, 272 of 38,060 live edges were readable at query time — one
4
+ edge type, one cohort resolver. The relations the derivation layer builds
5
+ (``communicates_with``, ``co_occurrence``, ``pursues``, ``participates_in``,
6
+ ``located_at``, ``semantic_affinity``) had no reader on the answer path: the
7
+ "Who works on this with me?" probe returned topic-cluster fragments while a
8
+ 528-degree project hub sat unread one table away.
9
+
10
+ This lane contributes 1-hop neighborhoods of the query's linked entities as
11
+ ordinary fusion candidates — at canonical weight, never above (a lane reached
12
+ by a different key but carrying ordinary evidence fuses AT the canonical
13
+ weight; see the lane table in retrieval.py).
14
+
15
+ Privacy posture, deliberately minimal for v1:
16
+
17
+ * **Owner-only.** The lane runs only at ``disclosure_tier == "owner_raw"`` —
18
+ the same proxy the blackhole summary policy trusts, sound because
19
+ ``resolve_disclosure_tier`` never elevates a grantee there. For any other
20
+ tier the lane returns nothing and writes NO ledger receipt: a receipt for a
21
+ withheld lane is itself an existence signal.
22
+ * **Blackhole rides the exit wire.** Items carry the neighbor as
23
+ ``entity_id`` and the anchor as ``subject_entity_id`` — both members of
24
+ ``_BLACKHOLE_ENTITY_ID_KEYS`` — so ``_blackhole_policy_for_summary`` can
25
+ match EITHER endpoint: a black-holed entity can neither appear as a
26
+ neighbor nor be reached through as an anchor. (Owner items are stamped
27
+ ``blackhole_protected``, the taint feed Gate C needs; nothing is silently
28
+ dropped from the owner's own view.)
29
+ * **Anchor admission is the thread lane's.** Callers pass anchor ids that
30
+ already went through ``_entity_thread_entities`` — is_self dropped,
31
+ selector policy honored, fail-closed on an unreadable is_self.
32
+ """
33
+
34
+ from __future__ import annotations
35
+
36
+ import logging
37
+ from typing import Any, Dict, List, Optional
38
+
39
+ from ..features.entities.edges import top_edges
40
+ from . import narrowing as _N
41
+
42
+ logger = logging.getLogger(__name__)
43
+
44
+ #: Neighbors fetched per anchor before the global cap ranks by weight.
45
+ GRAPH_LANE_PER_ANCHOR_LIMIT = 10
46
+ #: Total items the lane may contribute to fusion (SUMMARY_ITEM_CAP is 25;
47
+ #: a graph that floods the packet would drown the content lanes).
48
+ GRAPH_LANE_MAX_ITEMS = 8
49
+
50
+ _EDGE_SENTENCES: Dict[str, str] = {
51
+ "communicates_with": "{a} communicates with {b}",
52
+ "co_occurrence": "{a} and {b} appear together",
53
+ "pursues": "{a} pursues {b}",
54
+ "participates_in": "{a} participates in {b}",
55
+ "located_at": "{a} is located at {b}",
56
+ "semantic_affinity": "{a} is closely related to {b}",
57
+ }
58
+
59
+
60
+ def _edge_sentence(anchor_name: str, neighbor_name: str, edge: Dict[str, Any]) -> str:
61
+ template = _EDGE_SENTENCES.get(
62
+ str(edge.get("edge_type") or ""), "{a} is linked to {b}"
63
+ )
64
+ sentence = template.format(a=anchor_name, b=neighbor_name)
65
+ evidence = edge.get("evidence_count")
66
+ if evidence:
67
+ sentence += f" ({evidence}×)"
68
+ return sentence
69
+
70
+
71
+ def graph_neighborhood_items(
72
+ conn: Any,
73
+ *,
74
+ anchor_ids: List[str],
75
+ anchor_names: Dict[str, str],
76
+ scope_id: str,
77
+ manifest: Any,
78
+ disclosure_tier: str,
79
+ ledger: Optional[Any] = None,
80
+ ) -> List[Dict[str, Any]]:
81
+ """1-hop neighborhoods of the anchors, as fusion-ready summary items.
82
+
83
+ Returns [] — with no ledger receipt — unless the tier is owner_raw and
84
+ the scope warrants relationship structure.
85
+ """
86
+ if str(disclosure_tier or "") != "owner_raw":
87
+ return []
88
+ tables = list(getattr(manifest, "canonical_tables", None) or [])
89
+ # relationship_context:read is the deliberate exception: its declared
90
+ # table is conversation_messages, but relationship STRUCTURE is exactly
91
+ # what the scope's own card advertises ("Who works on this with me?") —
92
+ # the same explicit-scope pattern the goals and emotions lanes use.
93
+ if "entity_edges" not in tables and str(scope_id) != "relationship_context:read":
94
+ return []
95
+ if conn is None or not anchor_ids:
96
+ return []
97
+
98
+ seen: set = set()
99
+ collected: List[Dict[str, Any]] = []
100
+ for anchor_id in anchor_ids:
101
+ anchor_name = anchor_names.get(anchor_id) or anchor_id
102
+ try:
103
+ edges = top_edges(conn, anchor_id, limit=GRAPH_LANE_PER_ANCHOR_LIMIT)
104
+ except Exception as exc: # noqa: BLE001 — one bad anchor must not kill the lane
105
+ logger.debug("graph lane: top_edges failed for %s: %s", anchor_id, exc)
106
+ continue
107
+ for edge in edges:
108
+ neighbor_id = str(edge.get("entity_id") or "")
109
+ edge_type = str(edge.get("edge_type") or "")
110
+ if not neighbor_id or not edge_type:
111
+ continue
112
+ key = (anchor_id, neighbor_id, edge_type)
113
+ if key in seen:
114
+ continue
115
+ seen.add(key)
116
+ neighbor_name = str(edge.get("entity_name") or neighbor_id)
117
+ event_at = edge.get("last_event_at") or edge.get("valid_from")
118
+ item: Dict[str, Any] = {
119
+ "topic": neighbor_name[:120],
120
+ "summary_text": _edge_sentence(anchor_name, neighbor_name, edge),
121
+ # Neighbor and anchor: both endpoints must be matchable by the
122
+ # blackhole exit wire (_BLACKHOLE_ENTITY_ID_KEYS).
123
+ "entity_id": neighbor_id,
124
+ "subject_entity_id": anchor_id,
125
+ "entity_type": edge.get("entity_type"),
126
+ "edge_type": edge_type,
127
+ "relevance_score": float(edge.get("weight") or 0.0),
128
+ "retrieval_source": f"graph:{edge_type}",
129
+ }
130
+ if event_at:
131
+ item["event_at"] = event_at
132
+ collected.append(item)
133
+
134
+ collected.sort(key=lambda i: i.get("relevance_score") or 0.0, reverse=True)
135
+ dropped = max(0, len(collected) - GRAPH_LANE_MAX_ITEMS)
136
+ items = collected[:GRAPH_LANE_MAX_ITEMS]
137
+ if items and ledger is not None:
138
+ try:
139
+ ledger.record(
140
+ _N.STAGE_RETRIEVAL,
141
+ "contributed",
142
+ "graph_lane",
143
+ dropped=dropped,
144
+ detail={
145
+ "anchors": len(anchor_ids),
146
+ "contributed": len(items),
147
+ "edge_types": sorted({i["edge_type"] for i in items}),
148
+ },
149
+ )
150
+ except Exception: # noqa: BLE001 — the ledger never breaks a turn
151
+ pass
152
+ return items
@@ -195,6 +195,7 @@ REASONS = frozenset(
195
195
  "embedded_subject_not_instruction",
196
196
  "entity_thread_is_self",
197
197
  "entity_thread_lane",
198
+ "graph_lane",
198
199
  "entity_thread_selector_not_accessible",
199
200
  "entity_thread_self_check_unavailable",
200
201
  "entity_thread_unresolved",
@@ -4716,7 +4716,10 @@ _NO_DECAY_FUSION_SOURCES = frozenset(
4716
4716
  # a RelationshipEdge or a dossier is a statement about how things ARE, not
4717
4717
  # an event that happened at a time. Decaying it would rank the owner's
4718
4718
  # mother below last night's chatter.
4719
- {"stat_insights", "facts_store", "entities", "briefs", "goals", "derived_objects"}
4719
+ # S6 "graph": an edge is a statement about how things stand between two
4720
+ # entities, not an event — decayed by created_at, the owner's closest
4721
+ # collaborator would rank below last night's chatter.
4722
+ {"stat_insights", "facts_store", "entities", "briefs", "goals", "derived_objects", "graph"}
4720
4723
  )
4721
4724
 
4722
4725
 
@@ -5634,6 +5637,7 @@ def _build_summary_items_unfiltered(
5634
5637
  entity_items: List[Dict[str, Any]] = []
5635
5638
  entity_thread_items: List[Dict[str, Any]] = []
5636
5639
  fact_store_items: List[Dict[str, Any]] = []
5640
+ graph_items: List[Dict[str, Any]] = []
5637
5641
  if query_text:
5638
5642
  try:
5639
5643
  from ..core.state import get_db_connection
@@ -5688,6 +5692,32 @@ def _build_summary_items_unfiltered(
5688
5692
  ledger=ledger,
5689
5693
  thread_sink=thread_sink,
5690
5694
  )
5695
+ # S6: the graph lane — the same resolution, one join outward.
5696
+ # `entity_context_items` says what the graph KNOWS about the
5697
+ # entity; the thread lane fetches its RECORDS; this contributes
5698
+ # its RELATIONS — the edges no lane could previously read. Own
5699
+ # try/except: a graph failure must not also kill the thread
5700
+ # lane (this block's outer except swallows everything).
5701
+ try:
5702
+ from .graph_lane import graph_neighborhood_items
5703
+
5704
+ anchor_ids, _skipped = _entity_thread_entities(
5705
+ conn, linked, manifest=manifest
5706
+ )
5707
+ graph_items = graph_neighborhood_items(
5708
+ conn,
5709
+ anchor_ids=anchor_ids,
5710
+ anchor_names={
5711
+ str(e.get("entity_id")): str(e.get("canonical_name") or "")
5712
+ for e in linked
5713
+ },
5714
+ scope_id=str(getattr(manifest, "scope_id", "") or ""),
5715
+ manifest=manifest,
5716
+ disclosure_tier=disclosure_tier,
5717
+ ledger=ledger,
5718
+ )
5719
+ except Exception as graph_exc: # noqa: BLE001
5720
+ logger.debug("graph lane skipped: %s", graph_exc)
5691
5721
  except Exception as exc:
5692
5722
  logger.debug("entity linking skipped: %s", exc)
5693
5723
 
@@ -5803,6 +5833,15 @@ def _build_summary_items_unfiltered(
5803
5833
  if ai_scope and canonical_items:
5804
5834
  min_per = dict(min_per or {})
5805
5835
  min_per["canonical"] = max(int(min_per.get("canonical") or 0), 3)
5836
+ # S6: the graph lane only produces items under the scopes that
5837
+ # advertise relationship STRUCTURE (relationship_context:read,
5838
+ # graph:read) — and on a rich corpus its RRF share at canonical
5839
+ # weight loses the top-25 to sixteen content lanes (measured on the
5840
+ # owner snapshot: 8 lane items, 0 survivors). Structure is the
5841
+ # product there, so it keeps a two-slot spine, same as goals.
5842
+ if graph_items:
5843
+ min_per = dict(min_per or {})
5844
+ min_per["graph"] = max(int(min_per.get("graph") or 0), 2)
5806
5845
  # NOTE: cosine similarity must NOT waive the zero-df gate — a strong hit
5807
5846
  # on the generic half of a query ("compiler rewrite") cannot evidence a
5808
5847
  # name the corpus does not contain ("Threnody-7"). The N-lane found
@@ -5822,6 +5861,11 @@ def _build_summary_items_unfiltered(
5822
5861
  # ordinary canonical evidence that arrived by a different key, so
5823
5862
  # it fuses at the canonical lane's own weight.
5824
5863
  ("entity_thread", 1.0, entity_thread_items),
5864
+ # S6: edges are ordinary evidence that arrived by the entity
5865
+ # key instead of a content key — the same argument as the
5866
+ # thread lane, so the same weight: beside the scope routes,
5867
+ # never above them.
5868
+ ("graph", 1.0, graph_items),
5825
5869
  # Q1. Same argument, same weight: evidence for a stated goal is
5826
5870
  # ordinary canonical evidence that arrived keyed to that goal's ids.
5827
5871
  # It is a joined minority lane beside the scope routes, never above
@@ -5858,6 +5902,7 @@ def _build_summary_items_unfiltered(
5858
5902
  + entity_items
5859
5903
  + derived_items
5860
5904
  + entity_thread_items
5905
+ + graph_items
5861
5906
  + commitment_items
5862
5907
  + goal_items
5863
5908
  + emotion_items
@@ -6638,6 +6683,16 @@ class DefaultSignalRetrievalAdapter:
6638
6683
  )
6639
6684
  if summaries:
6640
6685
  touched.append("signal")
6686
+ # S6: the graph store is declared touched when the graph lane
6687
+ # actually contributed — the Shortfall probe's assertion target
6688
+ # ("Who works on this with me?" must consult the graph, not
6689
+ # topic-cluster noise). Checked on items rather than threaded
6690
+ # through a sink: the lane's provenance prefix IS the signal.
6691
+ if any(
6692
+ str(item.get("retrieval_source") or "").startswith("graph:")
6693
+ for item in summaries
6694
+ ):
6695
+ touched.append("graph")
6641
6696
  # Surface the planner's parsed window so synthesis can state
6642
6697
  # which dates were searched ("nothing from 2026-07-16") instead
6643
6698
  # of inferring it from per-item timestamps. Summary mode only:
@@ -288,7 +288,7 @@
288
288
  "summary_objects": [],
289
289
  "inference_objects": [],
290
290
  "default_mode_ceiling": "raw",
291
- "implementation_status": "stub"
291
+ "implementation_status": "live"
292
292
  },
293
293
  {
294
294
  "scope_id": "health:read",
@@ -929,6 +929,15 @@ def _is_rehydratable_source_definition(source_def: Dict[str, Any]) -> bool:
929
929
  # proves a legacy-scope gdrive_files row is retired, not merely missing.
930
930
  _LEGACY_SOURCE_SUCCESSORS: Dict[str, str] = {"gdrive_files": "drive_files"}
931
931
 
932
+ # Going forward the Drive connector converges back on the bundled id: the CP
933
+ # registry republish (2026-09-02) made gdrive_files the installable card, so a
934
+ # fresh connect leaves a node with BOTH ids active under the same canonical
935
+ # scope. Not a contradiction with _LEGACY_SOURCE_SUCCESSORS: that map proves
936
+ # LEGACY-scope rows dead against the July replacement that was live at the
937
+ # time; this one retires a canonical-scope row once a healthy canonical-scope
938
+ # install of its successor exists for the same user+topos.
939
+ _CANONICAL_SOURCE_SUCCESSORS: Dict[str, str] = {"drive_files": "gdrive_files"}
940
+
932
941
  _LEGACY_DATASET_SEGMENT = "default"
933
942
  _CANONICAL_DATASET_SEGMENT = "topos"
934
943
 
@@ -938,9 +947,16 @@ def _dataset_scope_segment(scope: Dict[str, str]) -> str:
938
947
  return parts[1] if len(parts) == 3 else ""
939
948
 
940
949
 
941
- def _canonical_active_index(records: List[InstallRecord]) -> Set[Tuple[str, str, str]]:
950
+ def _canonical_active_index(
951
+ records: List[InstallRecord], *, healthy_only: bool = False
952
+ ) -> Set[Tuple[str, str, str]]:
942
953
  """(user_id, topos_id, source_id) for active installs under the canonical
943
- {owner}:topos:{topos_id} dataset scope."""
954
+ {owner}:topos:{topos_id} dataset scope.
955
+
956
+ healthy_only drops rows this same pass would retire (lane conflict or
957
+ schema drift): a row being demoted must never count as the proof that
958
+ demotes its predecessor, or one pass could unwire a connector entirely.
959
+ """
944
960
  index: Set[Tuple[str, str, str]] = set()
945
961
  for rec in records:
946
962
  scope = _normalize_scope(rec.scope)
@@ -948,6 +964,10 @@ def _canonical_active_index(records: List[InstallRecord]) -> Set[Tuple[str, str,
948
964
  continue
949
965
  if scope["user_id"] == "*" or scope["topos_id"] == "*":
950
966
  continue
967
+ if healthy_only:
968
+ source_def = rec.source_definition_json if isinstance(rec.source_definition_json, dict) else {}
969
+ if bundled_lane_conflict(source_def) or bundled_schema_drift(source_def):
970
+ continue
951
971
  index.add((scope["user_id"], scope["topos_id"], rec.source_id))
952
972
  return index
953
973
 
@@ -986,6 +1006,28 @@ def _legacy_scope_superseded_reason(
986
1006
  return None
987
1007
 
988
1008
 
1009
+ def _canonical_successor_superseded_reason(
1010
+ rec: InstallRecord, healthy_canonical: Set[Tuple[str, str, str]]
1011
+ ) -> Optional[str]:
1012
+ """Reason to retire a canonical-scope row whose declared successor is live.
1013
+
1014
+ Only fires for source_ids in _CANONICAL_SOURCE_SUCCESSORS, and only when
1015
+ the successor's canonical-scope row is healthy — a successor this pass is
1016
+ itself retiring proves nothing.
1017
+ """
1018
+ successor = _CANONICAL_SOURCE_SUCCESSORS.get(rec.source_id)
1019
+ if not successor:
1020
+ return None
1021
+ scope = _normalize_scope(rec.scope)
1022
+ if _dataset_scope_segment(scope) != _CANONICAL_DATASET_SEGMENT:
1023
+ return None
1024
+ if scope["user_id"] == "*" or scope["topos_id"] == "*":
1025
+ return None
1026
+ if (scope["user_id"], scope["topos_id"], successor) in healthy_canonical:
1027
+ return f"superseded by active canonical-scope install of successor source_id={successor}"
1028
+ return None
1029
+
1030
+
989
1031
  def _supersede_install(*, scope_key: str, source_id: str, reason: str) -> None:
990
1032
  """Retire an active install row that can never install again.
991
1033
 
@@ -1021,6 +1063,7 @@ def rehydrate_active_installs_runtime(*, source_id: Optional[str] = None) -> Dic
1021
1063
  # source_id-filtered listing excludes.
1022
1064
  peers = records if source_id is None else [rec for rec in list_installs() if rec.is_active]
1023
1065
  canonical_active = _canonical_active_index(peers)
1066
+ healthy_canonical = _canonical_active_index(peers, healthy_only=True)
1024
1067
  rehydrated = 0
1025
1068
  failed = 0
1026
1069
  # (scope_key, source_id, reason) for rows retired after the locked pass.
@@ -1033,6 +1076,12 @@ def rehydrate_active_installs_runtime(*, source_id: Optional[str] = None) -> Dic
1033
1076
  if legacy_reason:
1034
1077
  superseded.append((_scope_key(rec.scope), rec.source_id, legacy_reason))
1035
1078
  continue
1079
+ # A canonical-scope duplicate left behind by an id convergence
1080
+ # (drive_files -> gdrive_files) retires once the successor is live.
1081
+ successor_reason = _canonical_successor_superseded_reason(rec, healthy_canonical)
1082
+ if successor_reason:
1083
+ superseded.append((_scope_key(rec.scope), rec.source_id, successor_reason))
1084
+ continue
1036
1085
  source_def = rec.source_definition_json if isinstance(rec.source_definition_json, dict) else {}
1037
1086
  if not source_def:
1038
1087
  continue
@@ -763,6 +763,12 @@
763
763
  "steps": [],
764
764
  "notes": []
765
765
  },
766
+ {
767
+ "version": "1.3.43",
768
+ "summary": "Release 1.3.43.",
769
+ "steps": [],
770
+ "notes": []
771
+ },
766
772
  {
767
773
  "version": "unreleased",
768
774
  "summary": "Staging entry for in-flight PRs. cut_release.py stamps this with the next version at release cut. Never executed by steps_between.",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: topos-node
3
- Version: 1.3.42
3
+ Version: 1.3.43
4
4
  Summary: Topos personal AI engine (FastAPI): local data, sync, control plane WebSocket client
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://topos.dialogues.ai
@@ -556,6 +556,7 @@ topos/query/facts_direct.py
556
556
  topos/query/fingerprint.py
557
557
  topos/query/game_layer.py
558
558
  topos/query/grant_cache.py
559
+ topos/query/graph_lane.py
559
560
  topos/query/inference.py
560
561
  topos/query/intent.py
561
562
  topos/query/manifest.py
File without changes
File without changes
File without changes
File without changes
File without changes