topos-node 1.4.3__tar.gz → 1.5.0__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 (944) hide show
  1. {topos_node-1.4.3/topos_node.egg-info → topos_node-1.5.0}/PKG-INFO +1 -1
  2. {topos_node-1.4.3 → topos_node-1.5.0}/pyproject.toml +1 -1
  3. topos_node-1.5.0/tests/test_app_relay_wiring.py +131 -0
  4. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_owner_database_hermeticity.py +2 -2
  5. {topos_node-1.4.3 → topos_node-1.5.0}/topos/__version__.py +2 -2
  6. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_ai_chat_capture.py +1 -1
  7. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_capture_receipts.py +1 -1
  8. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_identity.py +1 -1
  9. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_ingestion.py +1 -1
  10. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_native_probe.py +3 -3
  11. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_search_maintenance.py +1 -1
  12. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_source_installs.py +1 -1
  13. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/signal.py +43 -18
  14. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/source_retention.py +4 -3
  15. {topos_node-1.4.3 → topos_node-1.5.0}/topos/app.py +21 -14
  16. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/settings.py +1 -8
  17. {topos_node-1.4.3 → topos_node-1.5.0}/topos/control_plane_client.py +3 -9
  18. topos_node-1.5.0/topos/core/handlers/__init__.py +667 -0
  19. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/common.py +0 -1
  20. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/database_explorer.py +13 -0
  21. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/messages.py +14 -1
  22. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/permissions_v2.py +37 -21
  23. topos_node-1.5.0/topos/core/handlers/permissions_v2_bind.py +20 -0
  24. topos_node-1.5.0/topos/core/handlers/permissions_v2_owner.py +327 -0
  25. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/permissions_v2_release.py +11 -8
  26. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/query.py +10 -1
  27. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/signal_features.py +53 -16
  28. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/registration.py +50 -0
  29. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/net_subject_policy.py +8 -2
  30. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/person_reading.py +2 -1
  31. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/synthesize.py +3 -1
  32. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/affinity.py +4 -2
  33. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/affinity_owner.py +2 -1
  34. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/affinity_quality.py +5 -6
  35. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/consolidation.py +4 -0
  36. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/context_vectors.py +2 -1
  37. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/fact_materializer.py +220 -26
  38. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/graph_enrichers.py +61 -26
  39. topos_node-1.5.0/topos/features/entities/graph_inputs.py +430 -0
  40. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/graph_refresh.py +250 -27
  41. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/maintenance.py +260 -81
  42. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/resolver.py +10 -5
  43. topos_node-1.5.0/topos/features/lifecycle/blackhole.py +1257 -0
  44. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/blackhole_guard.py +219 -9
  45. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/blackhole_llm.py +13 -3
  46. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/blackhole_rebuild.py +219 -48
  47. topos_node-1.5.0/topos/features/lifecycle/carry_diagnosis.py +187 -0
  48. topos_node-1.5.0/topos/features/lifecycle/contact_excludes.py +822 -0
  49. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/derived_scrub.py +20 -2
  50. topos_node-1.5.0/topos/features/lifecycle/off_limits_list.py +134 -0
  51. topos_node-1.5.0/topos/features/lifecycle/off_limits_view.py +142 -0
  52. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/cluster_labels.py +4 -0
  53. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/topic_clustering.py +17 -4
  54. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/jobs.py +16 -1
  55. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parser.py +9 -1
  56. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ai_chat_capture.py +4 -7
  57. topos_node-1.5.0/topos/permissions_v2/answer_checks.py +234 -0
  58. topos_node-1.5.0/topos/permissions_v2/answer_generation.py +184 -0
  59. topos_node-1.5.0/topos/permissions_v2/answer_protocol.py +159 -0
  60. topos_node-1.5.0/topos/permissions_v2/answer_release.py +348 -0
  61. topos_node-1.5.0/topos/permissions_v2/answer_transport.py +47 -0
  62. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/automatic_message_review.py +4 -2
  63. topos_node-1.5.0/topos/permissions_v2/bind_protocol.py +200 -0
  64. topos_node-1.5.0/topos/permissions_v2/checking_model.py +163 -0
  65. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/entailment_grounding.py +7 -9
  66. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/entity_boundary.py +795 -77
  67. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence.py +35 -4
  68. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence_families.py +4 -4
  69. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence_review_runtime.py +5 -0
  70. topos_node-1.5.0/topos/permissions_v2/index_rebuilds.py +227 -0
  71. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/inferred_facts.py +4 -5
  72. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/interest_index.py +6 -7
  73. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/interest_relabel.py +7 -7
  74. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/interest_review.py +4 -2
  75. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/journal_goal_field.py +5 -5
  76. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/knowledge_contract.py +17 -1
  77. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/knowledge_projections.py +69 -8
  78. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ledger.py +119 -3
  79. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/node_protocol.py +4 -1
  80. topos_node-1.5.0/topos/permissions_v2/ownership.py +410 -0
  81. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/permitted_derivation.py +3 -4
  82. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/protection_clock.py +40 -0
  83. topos_node-1.5.0/topos/permissions_v2/protection_doorbell.py +217 -0
  84. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/reconciliation_facts.py +5 -3
  85. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/refresh_loop.py +242 -38
  86. topos_node-1.5.0/topos/permissions_v2/release.py +129 -0
  87. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/runtime.py +160 -29
  88. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_contract.py +9 -7
  89. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_index.py +259 -29
  90. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_release.py +81 -5
  91. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_timing.py +33 -19
  92. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_transport.py +11 -13
  93. topos_node-1.5.0/topos/permissions_v2/self_bind.py +1091 -0
  94. topos_node-1.5.0/topos/permissions_v2/shadow_labeler_local.py +185 -0
  95. topos_node-1.5.0/topos/permissions_v2/share_catalog.py +144 -0
  96. topos_node-1.5.0/topos/permissions_v2/share_counts.py +558 -0
  97. topos_node-1.5.0/topos/permissions_v2/share_kinds.py +66 -0
  98. topos_node-1.5.0/topos/permissions_v2/share_week.py +65 -0
  99. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/signing.py +21 -4
  100. topos_node-1.5.0/topos/permissions_v2/switches.py +418 -0
  101. {topos_node-1.4.3 → topos_node-1.5.0}/topos/profiles.py +4 -0
  102. {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/handled_message_types.json +14 -7
  103. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/aggregate.py +9 -8
  104. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/closeness.py +5 -1
  105. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/disclosure.py +1 -30
  106. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/manifest.py +0 -18
  107. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/manifest_validation.py +0 -90
  108. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/pipeline.py +10 -280
  109. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/retrieval.py +145 -227
  110. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/types.py +0 -9
  111. topos_node-1.5.0/topos/relay_stamp.py +371 -0
  112. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/install_service.py +1 -1
  113. topos_node-1.5.0/topos/storage/db/migrations/off_limits_carried_waiting_v1.py +54 -0
  114. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/registry.py +10 -0
  115. {topos_node-1.4.3 → topos_node-1.5.0}/topos/upgrades/manifests.json +35 -0
  116. {topos_node-1.4.3 → topos_node-1.5.0}/topos/upgrades/runner.py +158 -6
  117. {topos_node-1.4.3 → topos_node-1.5.0/topos_node.egg-info}/PKG-INFO +1 -1
  118. {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/SOURCES.txt +24 -27
  119. topos_node-1.4.3/topos/api/uma_data.py +0 -249
  120. topos_node-1.4.3/topos/core/handlers/__init__.py +0 -315
  121. topos_node-1.4.3/topos/core/handlers/shadow_rescore.py +0 -51
  122. topos_node-1.4.3/topos/core/handlers/uma.py +0 -752
  123. topos_node-1.4.3/topos/features/lifecycle/blackhole.py +0 -681
  124. topos_node-1.4.3/topos/permissions_v2/experiments/__init__.py +0 -1
  125. topos_node-1.4.3/topos/permissions_v2/experiments/__main__.py +0 -27
  126. topos_node-1.4.3/topos/permissions_v2/experiments/evaluators.py +0 -201
  127. topos_node-1.4.3/topos/permissions_v2/experiments/fact_bridge.py +0 -675
  128. topos_node-1.4.3/topos/permissions_v2/experiments/harness.py +0 -147
  129. topos_node-1.4.3/topos/permissions_v2/experiments/models.py +0 -192
  130. topos_node-1.4.3/topos/permissions_v2/experiments/retention.py +0 -106
  131. topos_node-1.4.3/topos/permissions_v2/experiments/scoring.py +0 -212
  132. topos_node-1.4.3/topos/permissions_v2/experiments/source_bridge.py +0 -556
  133. topos_node-1.4.3/topos/permissions_v2/experiments/synthetic.py +0 -53
  134. topos_node-1.4.3/topos/permissions_v2/fact_release.py +0 -129
  135. topos_node-1.4.3/topos/permissions_v2/fact_release_transport.py +0 -89
  136. topos_node-1.4.3/topos/permissions_v2/protection_doorbell.py +0 -128
  137. topos_node-1.4.3/topos/permissions_v2/release.py +0 -382
  138. topos_node-1.4.3/topos/permissions_v2/release_transport.py +0 -103
  139. topos_node-1.4.3/topos/permissions_v2/shadow_index.py +0 -188
  140. topos_node-1.4.3/topos/permissions_v2/shadow_labeler_local.py +0 -385
  141. topos_node-1.4.3/topos/permissions_v2/shadow_labelers.py +0 -61
  142. topos_node-1.4.3/topos/permissions_v2/shadow_rescore.py +0 -320
  143. topos_node-1.4.3/topos/query/cohort_resolvers.py +0 -294
  144. topos_node-1.4.3/topos/query/grant_cache.py +0 -159
  145. topos_node-1.4.3/topos/query/minimizer.py +0 -315
  146. topos_node-1.4.3/topos/query/negotiation.py +0 -384
  147. topos_node-1.4.3/topos/relay_stamp.py +0 -178
  148. topos_node-1.4.3/topos/scope_resolution.py +0 -91
  149. topos_node-1.4.3/topos/uma_authority.py +0 -171
  150. topos_node-1.4.3/topos/uma_resource_id.py +0 -24
  151. topos_node-1.4.3/topos/uma_rpt.py +0 -69
  152. {topos_node-1.4.3 → topos_node-1.5.0}/LICENSE +0 -0
  153. {topos_node-1.4.3 → topos_node-1.5.0}/MANIFEST.in +0 -0
  154. {topos_node-1.4.3 → topos_node-1.5.0}/README.md +0 -0
  155. {topos_node-1.4.3 → topos_node-1.5.0}/setup.cfg +0 -0
  156. {topos_node-1.4.3 → topos_node-1.5.0}/shared/__init__.py +0 -0
  157. {topos_node-1.4.3 → topos_node-1.5.0}/shared/filtering.py +0 -0
  158. {topos_node-1.4.3 → topos_node-1.5.0}/shared/schema_registry.py +0 -0
  159. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_active_database_binding.py +0 -0
  160. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_active_ingestion_binding.py +0 -0
  161. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_extensions.py +0 -0
  162. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_gate_leg_hermeticity.py +0 -0
  163. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_hub_pipeline_offline_first.py +0 -0
  164. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_lane_shards.py +0 -0
  165. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_llm_integrations_storage.py +0 -0
  166. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_local_gate_composition.py +0 -0
  167. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_prewarm_first_run.py +0 -0
  168. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_profile_hygiene.py +0 -0
  169. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_profiles.py +0 -0
  170. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_protocol_handled_types.py +0 -0
  171. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_query_field_contract.py +0 -0
  172. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_sync_dep_pins.py +0 -0
  173. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_system_computer_name.py +0 -0
  174. {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_topos_home_hermeticity.py +0 -0
  175. {topos_node-1.4.3 → topos_node-1.5.0}/topos/__init__.py +0 -0
  176. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/__init__.py +0 -0
  177. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/dataset_resolution.py +0 -0
  178. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/duckdb_adapter.py +0 -0
  179. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/luck_surface.py +0 -0
  180. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/messenger_communities.py +0 -0
  181. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/messenger_directed.py +0 -0
  182. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/messenger_graph.py +0 -0
  183. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/messenger_labels.py +0 -0
  184. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/person_graph.py +0 -0
  185. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/person_overlay.py +0 -0
  186. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/profiles.py +0 -0
  187. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/query_engine.py +0 -0
  188. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/raw_queries.py +0 -0
  189. {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/relationship_reads.py +0 -0
  190. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/__init__.py +0 -0
  191. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/analytics.py +0 -0
  192. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/app_registry.py +0 -0
  193. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/backup.py +0 -0
  194. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/community_naming_config.py +0 -0
  195. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/compute_remote.py +0 -0
  196. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/connected_apps.py +0 -0
  197. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/conversation_context.py +0 -0
  198. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/data_commit.py +0 -0
  199. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/data_explorer_table_prefs.py +0 -0
  200. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/database_explorer.py +0 -0
  201. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/db.py +0 -0
  202. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/device.py +0 -0
  203. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/disk_space_config.py +0 -0
  204. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/engine_run.py +0 -0
  205. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/enrichment.py +0 -0
  206. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/enrichment_lab.py +0 -0
  207. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/facts_llm_config.py +0 -0
  208. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/filter_lab.py +0 -0
  209. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/health.py +0 -0
  210. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/home_chat.py +0 -0
  211. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/ingestion_api.py +0 -0
  212. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/ingestion_compat.py +0 -0
  213. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/ingestion_sources.py +0 -0
  214. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/intelligence_lifecycle.py +0 -0
  215. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/llm.py +0 -0
  216. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/local_mcp.py +0 -0
  217. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/messenger_analytics.py +0 -0
  218. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/nsfw_maintenance.py +0 -0
  219. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/privacy_disclose.py +0 -0
  220. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/query_api.py +0 -0
  221. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/runtime_bootstrap.py +0 -0
  222. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/sanitization_ollama_config.py +0 -0
  223. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/shell.py +0 -0
  224. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/signal_extraction_config.py +0 -0
  225. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/source_install.py +0 -0
  226. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/source_scrub.py +0 -0
  227. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/sources.py +0 -0
  228. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/sources_overview.py +0 -0
  229. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/sync.py +0 -0
  230. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/tool_index.py +0 -0
  231. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/ui_config.py +0 -0
  232. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/upgrades.py +0 -0
  233. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/usage.py +0 -0
  234. {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/user_identity.py +0 -0
  235. {topos_node-1.4.3 → topos_node-1.5.0}/topos/auth.py +0 -0
  236. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/__init__.py +0 -0
  237. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/declared_field_map.py +0 -0
  238. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/__init__.py +0 -0
  239. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/base.py +0 -0
  240. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/browser_activity_mapper.py +0 -0
  241. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
  242. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/demo_mappers.py +0 -0
  243. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/documents_mapper.py +0 -0
  244. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/github_activity_mapper.py +0 -0
  245. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/google_calendar_mapper.py +0 -0
  246. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/grok_mapper.py +0 -0
  247. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
  248. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/transcript_mapper.py +0 -0
  249. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/models.py +0 -0
  250. {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/resolver.py +0 -0
  251. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/__init__.py +0 -0
  252. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/__main__.py +0 -0
  253. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/assets/topos_black.png +0 -0
  254. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/assets/topos_blk_rounded.png +0 -0
  255. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/assets/topos_white.png +0 -0
  256. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/commands.py +0 -0
  257. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/profile_cmd.py +0 -0
  258. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/reprocess_cmd.py +0 -0
  259. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/setup_models_cmd.py +0 -0
  260. {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/tray.py +0 -0
  261. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/__init__.py +0 -0
  262. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/conversation_context_llm.py +0 -0
  263. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/facts_llm.py +0 -0
  264. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/local_model_builds.py +0 -0
  265. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/model_packs.py +0 -0
  266. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/node_function_providers.py +0 -0
  267. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/sanitization_ollama.py +0 -0
  268. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/signal_extraction.py +0 -0
  269. {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/uvicorn_logging.json +0 -0
  270. {topos_node-1.4.3 → topos_node-1.5.0}/topos/contacts/__init__.py +0 -0
  271. {topos_node-1.4.3 → topos_node-1.5.0}/topos/contacts/identity.py +0 -0
  272. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/__init__.py +0 -0
  273. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/api_models.py +0 -0
  274. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/connection_resilience.py +0 -0
  275. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/db_health.py +0 -0
  276. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/device_helpers.py +0 -0
  277. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/errors.py +0 -0
  278. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/events.py +0 -0
  279. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/aggregate.py +0 -0
  280. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/complexity.py +0 -0
  281. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/config.py +0 -0
  282. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/contacts_import.py +0 -0
  283. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/derivation.py +0 -0
  284. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/device.py +0 -0
  285. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/enrichment.py +0 -0
  286. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/enrichment_lab.py +0 -0
  287. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/filter_lab.py +0 -0
  288. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/graph_query.py +0 -0
  289. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/graph_summary.py +0 -0
  290. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/home_chat.py +0 -0
  291. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/ingest.py +0 -0
  292. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/mcp_client_elevations.py +0 -0
  293. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/mcp_clients.py +0 -0
  294. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/messenger_analytics.py +0 -0
  295. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/permissions_v2_identity.py +0 -0
  296. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/permissions_v2_ingestion.py +0 -0
  297. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/registry.py +0 -0
  298. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/routines.py +0 -0
  299. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/sources.py +0 -0
  300. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/timeline_daily.py +0 -0
  301. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/tool_index.py +0 -0
  302. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/logging.py +0 -0
  303. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/metrics.py +0 -0
  304. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/routine_access.py +0 -0
  305. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/startup_banner.py +0 -0
  306. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/state.py +0 -0
  307. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/table_layers.py +0 -0
  308. {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/types.py +0 -0
  309. {topos_node-1.4.3 → topos_node-1.5.0}/topos/data_explorer_row_delete.py +0 -0
  310. {topos_node-1.4.3 → topos_node-1.5.0}/topos/data_explorer_table_prefs.py +0 -0
  311. {topos_node-1.4.3 → topos_node-1.5.0}/topos/data_explorer_tables.py +0 -0
  312. {topos_node-1.4.3 → topos_node-1.5.0}/topos/defaults.py +0 -0
  313. {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/__init__.py +0 -0
  314. {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/canonical_writer.py +0 -0
  315. {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/content_policy.py +0 -0
  316. {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/disclosure_sweep.py +0 -0
  317. {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/field_registry.py +0 -0
  318. {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/nsfw_tags.py +0 -0
  319. {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/privacy_layer.py +0 -0
  320. {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/tier.py +0 -0
  321. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/__init__.py +0 -0
  322. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/__init__.py +0 -0
  323. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/base.py +0 -0
  324. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/generative_prompts.py +0 -0
  325. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/generative_response.py +0 -0
  326. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/huggingface.py +0 -0
  327. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/ollama.py +0 -0
  328. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/openai.py +0 -0
  329. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/openai_compatible.py +0 -0
  330. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/redpill.py +0 -0
  331. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/stub.py +0 -0
  332. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/client.py +0 -0
  333. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/disk_space.py +0 -0
  334. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/engine.py +0 -0
  335. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/hosted_llm_wallet.py +0 -0
  336. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/intake.py +0 -0
  337. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/memory_utils.py +0 -0
  338. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/model_cache.py +0 -0
  339. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/model_manager.py +0 -0
  340. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/ollama_install.py +0 -0
  341. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/ollama_pull.py +0 -0
  342. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/ollama_runtime.py +0 -0
  343. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/ollama_setup_guidance.py +0 -0
  344. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/pipeline_memory.py +0 -0
  345. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/queue_manager.py +0 -0
  346. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/result_formatter.py +0 -0
  347. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/router.py +0 -0
  348. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/scoped_token.py +0 -0
  349. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/tasks.py +0 -0
  350. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/torch_runtime.py +0 -0
  351. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/transport.py +0 -0
  352. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/usage_guard.py +0 -0
  353. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/usage_observation.py +0 -0
  354. {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/validator.py +0 -0
  355. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/__init__.py +0 -0
  356. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/catalog.py +0 -0
  357. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/derivation_recovery.py +0 -0
  358. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/derived_tables.py +0 -0
  359. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/job_readiness.py +0 -0
  360. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/job_writer.py +0 -0
  361. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/__init__.py +0 -0
  362. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/base.py +0 -0
  363. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/__init__.py +0 -0
  364. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/_batch_limits.py +0 -0
  365. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/_engine_runner.py +0 -0
  366. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/attention_triage_job.py +0 -0
  367. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/availability_scores_job.py +0 -0
  368. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/brief_fallback.py +0 -0
  369. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/complexity_snapshot_job.py +0 -0
  370. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/derivation_job.py +0 -0
  371. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/derived_object_embeddings_job.py +0 -0
  372. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/dimension_summary_job.py +0 -0
  373. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
  374. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
  375. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
  376. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/fact_extraction_job.py +0 -0
  377. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/goal_extraction_job.py +0 -0
  378. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/pii_redaction_job.py +0 -0
  379. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/relationship_edges_job.py +0 -0
  380. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
  381. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/statistics_job.py +0 -0
  382. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/timeline_job.py +0 -0
  383. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/topic_clusters_job.py +0 -0
  384. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
  385. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/__init__.py +0 -0
  386. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
  387. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/language_job.py +0 -0
  388. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
  389. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
  390. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/model_overrides.py +0 -0
  391. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/__init__.py +0 -0
  392. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/manager.py +0 -0
  393. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/mvp_defaults.py +0 -0
  394. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/registry.py +0 -0
  395. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/versioning.py +0 -0
  396. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/orchestrator.py +0 -0
  397. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/pipeline_activity.py +0 -0
  398. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/processor.py +0 -0
  399. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/progress_bar.py +0 -0
  400. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/record_progress.py +0 -0
  401. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/registry_contract.py +0 -0
  402. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/signal_derivation_config.json +0 -0
  403. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/source_overrides.py +0 -0
  404. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/__init__.py +0 -0
  405. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/bundles.py +0 -0
  406. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/model_resolve.py +0 -0
  407. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/schema.py +0 -0
  408. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/service.py +0 -0
  409. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/store.py +0 -0
  410. {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/worker.py +0 -0
  411. {topos_node-1.4.3 → topos_node-1.5.0}/topos/evals/__init__.py +0 -0
  412. {topos_node-1.4.3 → topos_node-1.5.0}/topos/evals/enrichment_eval.py +0 -0
  413. {topos_node-1.4.3 → topos_node-1.5.0}/topos/extensions.py +0 -0
  414. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/__init__.py +0 -0
  415. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/canonical.py +0 -0
  416. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/engine.py +0 -0
  417. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/entropy.py +0 -0
  418. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/focus.py +0 -0
  419. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/graph_metrics.py +0 -0
  420. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/influence.py +0 -0
  421. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/projection.py +0 -0
  422. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/snapshots.py +0 -0
  423. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/store.py +0 -0
  424. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/topic_merge.py +0 -0
  425. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/topics.py +0 -0
  426. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/topics_daily.py +0 -0
  427. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/volatility.py +0 -0
  428. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/__init__.py +0 -0
  429. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/_scales.yaml +0 -0
  430. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/admin.legal.yaml +0 -0
  431. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/aspirations.goals.yaml +0 -0
  432. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/behavior.habits.yaml +0 -0
  433. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/behavior.preferences.yaml +0 -0
  434. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/beliefs.civic.yaml +0 -0
  435. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/beliefs.spiritual.yaml +0 -0
  436. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/communication.style.yaml +0 -0
  437. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/community.membership.yaml +0 -0
  438. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/craft.tooling.yaml +0 -0
  439. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/expertise.knowledge.yaml +0 -0
  440. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/finances.economics.yaml +0 -0
  441. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/health.lifestyle.yaml +0 -0
  442. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/health.mental.yaml +0 -0
  443. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/health.physical.yaml +0 -0
  444. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/household.pets.yaml +0 -0
  445. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/identity.core.yaml +0 -0
  446. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/interests.taste.yaml +0 -0
  447. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/life.events.yaml +0 -0
  448. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/narrative.self.yaml +0 -0
  449. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/net.capability.yaml +0 -0
  450. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/net.character.yaml +0 -0
  451. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/obligations.commitments.yaml +0 -0
  452. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/personality.traits.yaml +0 -0
  453. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/places.mobility.yaml +0 -0
  454. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/possessions.assets.yaml +0 -0
  455. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/relationships.social.yaml +0 -0
  456. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/values.motivation.yaml +0 -0
  457. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/dispositions.yaml +0 -0
  458. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/expertise.yaml +0 -0
  459. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/habits.yaml +0 -0
  460. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/interests.yaml +0 -0
  461. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/preferences.yaml +0 -0
  462. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/stances.yaml +0 -0
  463. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/tools.yaml +0 -0
  464. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/values.yaml +0 -0
  465. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/work.career.yaml +0 -0
  466. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/candidates.py +0 -0
  467. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/commitments.py +0 -0
  468. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/guard.py +0 -0
  469. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/kernels.py +0 -0
  470. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/packs.py +0 -0
  471. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/person_bridge.py +0 -0
  472. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/prefilter.py +0 -0
  473. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/registry.py +0 -0
  474. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/report_card.py +0 -0
  475. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/router.py +0 -0
  476. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/social_bench.py +0 -0
  477. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/social_kernels.py +0 -0
  478. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/surfaces.py +0 -0
  479. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/template.py +0 -0
  480. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/verify.py +0 -0
  481. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/writer.py +0 -0
  482. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/__init__.py +0 -0
  483. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/chatgpt_declared.py +0 -0
  484. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/community_names.py +0 -0
  485. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/community_naming.py +0 -0
  486. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/cypher.py +0 -0
  487. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/declared_mappings.py +0 -0
  488. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/discourse_graph.py +0 -0
  489. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/dossier.py +0 -0
  490. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/edges.py +0 -0
  491. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/graph_search.py +0 -0
  492. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/linking.py +0 -0
  493. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/mention_lineage.py +0 -0
  494. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/mention_lineage_lane.py +0 -0
  495. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/owner.py +0 -0
  496. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/reads.py +0 -0
  497. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/rebuild_subprocess.py +0 -0
  498. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/structured_fields.py +0 -0
  499. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/__init__.py +0 -0
  500. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/evidence_time.py +0 -0
  501. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/extract.py +0 -0
  502. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/llm_extract.py +0 -0
  503. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/reactions.py +0 -0
  504. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/reads.py +0 -0
  505. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/store.py +0 -0
  506. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/verdicts.py +0 -0
  507. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/fit/evaluator.py +0 -0
  508. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/fit/opportunity_types.json +0 -0
  509. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/__init__.py +0 -0
  510. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/exclusions.py +0 -0
  511. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/gc.py +0 -0
  512. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/record_protection.py +0 -0
  513. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/provenance/__init__.py +0 -0
  514. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/provenance/posture.py +0 -0
  515. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/provenance/roles.py +0 -0
  516. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/provenance/writer_class.py +0 -0
  517. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/__init__.py +0 -0
  518. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/brief_canonical_loader.py +0 -0
  519. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/brief_ontology.py +0 -0
  520. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/brief_renderer.py +0 -0
  521. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/brief_schemas.py +0 -0
  522. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/chunking.py +0 -0
  523. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/conversation_context.py +0 -0
  524. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/conversation_windows.py +0 -0
  525. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/data_health.py +0 -0
  526. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/brief_ontologies.json +0 -0
  527. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/intentions.json +0 -0
  528. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/interests.json +0 -0
  529. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/memory.json +0 -0
  530. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/places.json +0 -0
  531. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/profile.json +0 -0
  532. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/relationships.json +0 -0
  533. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/resources.json +0 -0
  534. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/schema/dimension_definition.schema.json +0 -0
  535. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/time.json +0 -0
  536. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/wellbeing.json +0 -0
  537. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/work.json +0 -0
  538. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/derived_index.py +0 -0
  539. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/derived_spec.py +0 -0
  540. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/dimension_briefs.py +0 -0
  541. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/dimension_definition_loader.py +0 -0
  542. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/dimension_profiles.py +0 -0
  543. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/dimension_registry.py +0 -0
  544. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/embed_context.py +0 -0
  545. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/extraction/artifact_router.py +0 -0
  546. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/extraction/artifact_store.py +0 -0
  547. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/extraction/rule_extractors.py +0 -0
  548. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/graph_sanitize.py +0 -0
  549. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/hybrid_search.py +0 -0
  550. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/incremental_clustering.py +0 -0
  551. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/model_recommendations.py +0 -0
  552. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/query_embed_cache.py +0 -0
  553. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/schemas.py +0 -0
  554. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/service.py +0 -0
  555. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/signal_object_store.py +0 -0
  556. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/source_hydration.py +0 -0
  557. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/structured_signal.py +0 -0
  558. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/tool_index.py +0 -0
  559. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/typed_stores/aggregates.py +0 -0
  560. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/typed_stores/commitments.py +0 -0
  561. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/typed_stores/rhythm.py +0 -0
  562. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/typed_stores/scope_materializer.py +0 -0
  563. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/vector_codec.py +0 -0
  564. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/vector_math.py +0 -0
  565. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/vector_settings.py +0 -0
  566. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/__init__.py +0 -0
  567. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/definitions.py +0 -0
  568. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/engine.py +0 -0
  569. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/fold.py +0 -0
  570. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/insights.py +0 -0
  571. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/temporal/__init__.py +0 -0
  572. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/temporal/points.py +0 -0
  573. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/temporal/records.py +0 -0
  574. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/timeline_projection.py +0 -0
  575. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/timeline_rollup.py +0 -0
  576. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/__init__.py +0 -0
  577. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/badges.py +0 -0
  578. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/daily.py +0 -0
  579. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/dashboard.py +0 -0
  580. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/instruments.py +0 -0
  581. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/intents.py +0 -0
  582. {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/readiness.py +0 -0
  583. {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/__init__.py +0 -0
  584. {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/bundles.py +0 -0
  585. {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/schema.py +0 -0
  586. {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/service.py +0 -0
  587. {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/store.py +0 -0
  588. {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/worker.py +0 -0
  589. {topos_node-1.4.3 → topos_node-1.5.0}/topos/home_chat/__init__.py +0 -0
  590. {topos_node-1.4.3 → topos_node-1.5.0}/topos/home_chat/schema.py +0 -0
  591. {topos_node-1.4.3 → topos_node-1.5.0}/topos/home_chat/store.py +0 -0
  592. {topos_node-1.4.3 → topos_node-1.5.0}/topos/hosted_pool_lease.py +0 -0
  593. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/__init__.py +0 -0
  594. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/canonical_pipeline.py +0 -0
  595. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/chatgpt_owner_snapshot.py +0 -0
  596. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/checkpoints/__init__.py +0 -0
  597. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
  598. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
  599. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/imessage_attributed_text.py +0 -0
  600. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/inbox_crypto.py +0 -0
  601. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/inbox_drain.py +0 -0
  602. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/ingest_helpers.py +0 -0
  603. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/journal_location_fanout.py +0 -0
  604. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/journal_time_log_normalize.py +0 -0
  605. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/local_exports.py +0 -0
  606. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/local_sync.py +0 -0
  607. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/local_sync_jobs.py +0 -0
  608. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/local_sync_schedule.py +0 -0
  609. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/log_preview.py +0 -0
  610. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/manager.py +0 -0
  611. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/owner_snapshot.py +0 -0
  612. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/__init__.py +0 -0
  613. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/base.py +0 -0
  614. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/browser_parser.py +0 -0
  615. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/calendar_parser.py +0 -0
  616. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
  617. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/chatgpt_export.py +0 -0
  618. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
  619. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/demo_file_parsers.py +0 -0
  620. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/documents_parser.py +0 -0
  621. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/github_activity_parser.py +0 -0
  622. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/google_calendar_parser.py +0 -0
  623. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/grok_parser.py +0 -0
  624. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/messenger_parser.py +0 -0
  625. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/transcript_parser.py +0 -0
  626. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/voxterm_parser.py +0 -0
  627. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/progress.py +0 -0
  628. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/reprocess.py +0 -0
  629. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/__init__.py +0 -0
  630. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/base.py +0 -0
  631. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/calendar.py +0 -0
  632. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/chatgpt.py +0 -0
  633. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/contact_importers.py +0 -0
  634. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/grok.py +0 -0
  635. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/imessage_reader.py +0 -0
  636. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/signal_export_parser.py +0 -0
  637. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/signal_reader.py +0 -0
  638. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/state_machine.py +0 -0
  639. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/triggers/__init__.py +0 -0
  640. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/triggers/file_trigger.py +0 -0
  641. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
  642. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/usage_inbox_dedupe.py +0 -0
  643. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/validation/__init__.py +0 -0
  644. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/validation/base.py +0 -0
  645. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/validation/schema_registry.py +0 -0
  646. {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/validation/schema_validator.py +0 -0
  647. {topos_node-1.4.3 → topos_node-1.5.0}/topos/lineage/__init__.py +0 -0
  648. {topos_node-1.4.3 → topos_node-1.5.0}/topos/lineage/provenance.py +0 -0
  649. {topos_node-1.4.3 → topos_node-1.5.0}/topos/lineage/tracker.py +0 -0
  650. {topos_node-1.4.3 → topos_node-1.5.0}/topos/llm_integrations_storage.py +0 -0
  651. {topos_node-1.4.3 → topos_node-1.5.0}/topos/mcp_clients.py +0 -0
  652. {topos_node-1.4.3 → topos_node-1.5.0}/topos/mcp_stdio_proxy.py +0 -0
  653. {topos_node-1.4.3 → topos_node-1.5.0}/topos/observability/__init__.py +0 -0
  654. {topos_node-1.4.3 → topos_node-1.5.0}/topos/observability/alerts.py +0 -0
  655. {topos_node-1.4.3 → topos_node-1.5.0}/topos/observability/metrics.py +0 -0
  656. {topos_node-1.4.3 → topos_node-1.5.0}/topos/observability/tracing.py +0 -0
  657. {topos_node-1.4.3 → topos_node-1.5.0}/topos/openai_client.py +0 -0
  658. {topos_node-1.4.3 → topos_node-1.5.0}/topos/owner_key.py +0 -0
  659. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/__init__.py +0 -0
  660. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/automatic_review_worker.py +0 -0
  661. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/canonical.py +0 -0
  662. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/canonical_floor.py +0 -0
  663. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/capture_receipts.py +0 -0
  664. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/chatgpt_coverage.py +0 -0
  665. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/contract.py +0 -0
  666. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/english_short_words.py +0 -0
  667. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence_reviews.py +0 -0
  668. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence_time.py +0 -0
  669. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/exclusion_floor.py +0 -0
  670. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/fact_contract.py +0 -0
  671. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/fact_eligibility.py +0 -0
  672. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/fact_policy.py +0 -0
  673. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/fact_projection.py +0 -0
  674. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/forwarding.py +0 -0
  675. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/identity.py +0 -0
  676. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/identity_attestation.py +0 -0
  677. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/identity_dispatch.py +0 -0
  678. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/identity_protocol.py +0 -0
  679. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/imessage_reconciliation.py +0 -0
  680. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/imessage_standing.py +0 -0
  681. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ingest_dispatch.py +0 -0
  682. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ingest_protocol.py +0 -0
  683. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ingest_provenance.py +0 -0
  684. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ingest_snapshot_facts.py +0 -0
  685. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/interest_family.py +0 -0
  686. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ledger_retention.py +0 -0
  687. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/message_evidence.py +0 -0
  688. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/message_review_contract.py +0 -0
  689. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/native_claim_grounding.py +0 -0
  690. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/native_imessage_probe.py +0 -0
  691. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/opaque_ids.py +0 -0
  692. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/predicate_classes.py +0 -0
  693. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/projection_review_runtime.py +0 -0
  694. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/projection_reviews.py +0 -0
  695. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/protocol.py +0 -0
  696. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/reconciliation_provenance.py +0 -0
  697. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/registry.py +0 -0
  698. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_lanes.py +0 -0
  699. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/shadow_rubric.pinned.md +0 -0
  700. {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/snapshot_message_facts.py +0 -0
  701. {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/__init__.py +0 -0
  702. {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/audit.py +0 -0
  703. {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/envelope.py +0 -0
  704. {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/job_runner.py +0 -0
  705. {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/job_secrets.py +0 -0
  706. {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/job_store.py +0 -0
  707. {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/stages.py +0 -0
  708. {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/stub_enqueue.py +0 -0
  709. {topos_node-1.4.3 → topos_node-1.5.0}/topos/principal.py +0 -0
  710. {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/__init__.py +0 -0
  711. {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/vector_index/__init__.py +0 -0
  712. {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/vector_index/base.py +0 -0
  713. {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/vector_index/builders.py +0 -0
  714. {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/vector_index/health_checks.py +0 -0
  715. {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/__init__.py +0 -0
  716. {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/narrowing_vocabulary.json +0 -0
  717. {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/query_field_contract.json +0 -0
  718. {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/retrieval_text_contract.json +0 -0
  719. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/__init__.py +0 -0
  720. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/audit.py +0 -0
  721. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/collaborators.py +0 -0
  722. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/ddr.py +0 -0
  723. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/entity_window.py +0 -0
  724. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/exclusion.py +0 -0
  725. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/facts_direct.py +0 -0
  726. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/fingerprint.py +0 -0
  727. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/game_layer.py +0 -0
  728. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/graph_lane.py +0 -0
  729. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/inference.py +0 -0
  730. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/intent.py +0 -0
  731. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/journal_event_lane.py +0 -0
  732. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/narrowing.py +0 -0
  733. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/overheard.py +0 -0
  734. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/packet_resolution.py +0 -0
  735. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/planner.py +0 -0
  736. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/runtime.py +0 -0
  737. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_arbiter.py +0 -0
  738. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_classifier.py +0 -0
  739. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_head.py +0 -0
  740. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_registry.json +0 -0
  741. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_registry_loader.py +0 -0
  742. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_shadow.py +0 -0
  743. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/session.py +0 -0
  744. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/session_utils.py +0 -0
  745. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/source_generation.py +0 -0
  746. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/truth_door.py +0 -0
  747. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/truth_facts.py +0 -0
  748. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/truth_prompts.py +0 -0
  749. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/turn_classifier.py +0 -0
  750. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/verify.py +0 -0
  751. {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/verify_modes.py +0 -0
  752. {topos_node-1.4.3 → topos_node-1.5.0}/topos/rate_limit.py +0 -0
  753. {topos_node-1.4.3 → topos_node-1.5.0}/topos/routines/__init__.py +0 -0
  754. {topos_node-1.4.3 → topos_node-1.5.0}/topos/routines/schema.py +0 -0
  755. {topos_node-1.4.3 → topos_node-1.5.0}/topos/routines/store.py +0 -0
  756. {topos_node-1.4.3 → topos_node-1.5.0}/topos/runtime_housekeeping.py +0 -0
  757. {topos_node-1.4.3 → topos_node-1.5.0}/topos/runtime_shutdown.py +0 -0
  758. {topos_node-1.4.3 → topos_node-1.5.0}/topos/runtime_update.py +0 -0
  759. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/__init__.py +0 -0
  760. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/explicit_wording.py +0 -0
  761. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/hub_pipeline.py +0 -0
  762. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/nsfw_classifier.py +0 -0
  763. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/ollama_transforms.py +0 -0
  764. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/prewarm.py +0 -0
  765. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/privacy_filter.py +0 -0
  766. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/__init__.py +0 -0
  767. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/container.py +0 -0
  768. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/embeddings/__init__.py +0 -0
  769. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/embeddings/base.py +0 -0
  770. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/embeddings/local.py +0 -0
  771. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/embeddings/remote.py +0 -0
  772. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/interfaces.py +0 -0
  773. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/llm/__init__.py +0 -0
  774. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/llm/base.py +0 -0
  775. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/llm/openai.py +0 -0
  776. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/local.py +0 -0
  777. {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/postgres.py +0 -0
  778. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/__init__.py +0 -0
  779. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/bundled_canonical_triples.py +0 -0
  780. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/canonical_signal_defaults.py +0 -0
  781. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/declared_field_map_spec.py +0 -0
  782. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/definitions.py +0 -0
  783. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/install_authority.py +0 -0
  784. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/install_maintenance.py +0 -0
  785. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/registry.py +0 -0
  786. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/retention.py +0 -0
  787. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/runtime_install.py +0 -0
  788. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/scrub_attribution.py +0 -0
  789. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/scrub_service.py +0 -0
  790. {topos_node-1.4.3 → topos_node-1.5.0}/topos/startup_banner.py +0 -0
  791. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/__init__.py +0 -0
  792. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/__init__.py +0 -0
  793. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/factory.py +0 -0
  794. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/fakes.py +0 -0
  795. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/postgres/stores.py +0 -0
  796. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/protocols.py +0 -0
  797. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/sqlite/__init__.py +0 -0
  798. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/sqlite/stores.py +0 -0
  799. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/sqlite/vector_search.py +0 -0
  800. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/__init__.py +0 -0
  801. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/activity_tables.py +0 -0
  802. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/__init__.py +0 -0
  803. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
  804. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/mapper.py +0 -0
  805. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/model.py +0 -0
  806. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/tables.py +0 -0
  807. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/calendar_contacts_tables.py +0 -0
  808. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/canonical_store.py +0 -0
  809. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/conversations_tables.py +0 -0
  810. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/journal_repair.py +0 -0
  811. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/mapping_store.py +0 -0
  812. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/postgres.py +0 -0
  813. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/__init__.py +0 -0
  814. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/client.py +0 -0
  815. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/connection_tuning.py +0 -0
  816. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/__init__.py +0 -0
  817. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/activity_events_content_v1.py +0 -0
  818. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/activity_writer_columns_v1.py +0 -0
  819. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/actor_role_v1.py +0 -0
  820. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/affinity_pair_labels_v1.py +0 -0
  821. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/attention_triage_v1.py +0 -0
  822. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/attention_triage_v2.py +0 -0
  823. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/backup.py +0 -0
  824. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/backup_custody.py +0 -0
  825. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/calendar_events_scheduling_v1.py +0 -0
  826. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/canonical_address_book_v1.py +0 -0
  827. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/canonical_disclosure_v1.py +0 -0
  828. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/canonical_nsfw_v1.py +0 -0
  829. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/community_names_v1.py +0 -0
  830. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/complexity_v1.py +0 -0
  831. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/conflict_provenance_v1.py +0 -0
  832. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/conversation_context_v1.py +0 -0
  833. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/derivation_factory_v1.py +0 -0
  834. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/derivation_ledger_v1.py +0 -0
  835. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/derivation_provenance_v1.py +0 -0
  836. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/derived_row_identity_v1.py +0 -0
  837. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/documents_v1.py +0 -0
  838. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/enrichment_record_progress_v1.py +0 -0
  839. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/enrichment_spec_version_v1.py +0 -0
  840. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_affinity_v1.py +0 -0
  841. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_blackhole_v1.py +0 -0
  842. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_context_vectors_v1.py +0 -0
  843. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_context_vectors_v2.py +0 -0
  844. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_edges_validity_v1.py +0 -0
  845. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_mentions_authored_v1.py +0 -0
  846. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_review_candidate_bar_v1.py +0 -0
  847. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_review_dedup_v1.py +0 -0
  848. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_review_provenance_v1.py +0 -0
  849. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/episodes_v1.py +0 -0
  850. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/extraction_artifacts.py +0 -0
  851. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/fact_dimension_by_entity_type_v1.py +0 -0
  852. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_duration_v1.py +0 -0
  853. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_ends_at_v1.py +0 -0
  854. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_people_v1.py +0 -0
  855. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_place_name_v1.py +0 -0
  856. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_starts_at_v1.py +0 -0
  857. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_origin_dimension_v1.py +0 -0
  858. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/mention_table_stamp_backfill_v1.py +0 -0
  859. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/message_emotions_role_backfill_v1.py +0 -0
  860. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/message_emotions_role_v1.py +0 -0
  861. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/net_subject_policy_v1.py +0 -0
  862. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/owner_only_records_v1.py +0 -0
  863. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/pack_registry_v1.py +0 -0
  864. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/permissions_fact_lineage_keys_v1.py +0 -0
  865. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/permissions_message_context_indexes_v1.py +0 -0
  866. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/permissions_read_path_indexes_v1.py +0 -0
  867. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/pipeline_jobs_v1.py +0 -0
  868. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/query_artifacts_duration_ms_v1.py +0 -0
  869. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/registry_checksums.json +0 -0
  870. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/remediation_person_model.py +0 -0
  871. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/retire_url_classification_v1.py +0 -0
  872. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/scope_source_generation.py +0 -0
  873. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_dimension_backfill_v1.py +0 -0
  874. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_dimension_harness.py +0 -0
  875. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_objects.py +0 -0
  876. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_objects_period_v1.py +0 -0
  877. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_objects_updated_by_v1.py +0 -0
  878. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_summaries_drop_v1.py +0 -0
  879. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
  880. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/temporal_fields_v1.py +0 -0
  881. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/transcripts_v1.py +0 -0
  882. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/vector_storage_v1.py +0 -0
  883. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/vector_storage_v2.py +0 -0
  884. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/vector_storage_v3.py +0 -0
  885. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/vector_storage_v4.py +0 -0
  886. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_clusters_v2.py +0 -0
  887. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_entities_v1.py +0 -0
  888. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_entity_review_v2.py +0 -0
  889. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_facts_v1.py +0 -0
  890. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_lifecycle_v1.py +0 -0
  891. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase0.py +0 -0
  892. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase1.py +0 -0
  893. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase4_messages_cutover.py +0 -0
  894. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase5_topic_clusters.py +0 -0
  895. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase6_dimension_briefs.py +0 -0
  896. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_query_quality.py +0 -0
  897. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_topic_clusters_coordination.py +0 -0
  898. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_stats_v1.py +0 -0
  899. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_timeline_v1.py +0 -0
  900. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/paths.py +0 -0
  901. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/postgres.py +0 -0
  902. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/schema.py +0 -0
  903. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/schema_probe.py +0 -0
  904. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/storage_breakdown.py +0 -0
  905. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/write_gate.py +0 -0
  906. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/derived_row_identity.py +0 -0
  907. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/enrichment/__init__.py +0 -0
  908. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
  909. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
  910. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/normalized/__init__.py +0 -0
  911. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/normalized/normalized_store.py +0 -0
  912. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/oplog/__init__.py +0 -0
  913. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/oplog/decision.py +0 -0
  914. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/oplog/oplog_store.py +0 -0
  915. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/oplog/postgres.py +0 -0
  916. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/person/identity_resolver.py +0 -0
  917. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/projections/__init__.py +0 -0
  918. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/projections/index_ops_store.py +0 -0
  919. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/projections/vector_index_store.py +0 -0
  920. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/__init__.py +0 -0
  921. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/browser_flat_tables.py +0 -0
  922. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/file_store.py +0 -0
  923. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/raw_store.py +0 -0
  924. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/raw_tables_manager.py +0 -0
  925. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/sqlite_raw_store.py +0 -0
  926. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/security/encryption.py +0 -0
  927. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/signal_identity.py +0 -0
  928. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/source_settings.py +0 -0
  929. {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/user_identity.py +0 -0
  930. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sync/__init__.py +0 -0
  931. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sync/client.py +0 -0
  932. {topos_node-1.4.3 → topos_node-1.5.0}/topos/sync_handlers.py +0 -0
  933. {topos_node-1.4.3 → topos_node-1.5.0}/topos/testing/__init__.py +0 -0
  934. {topos_node-1.4.3 → topos_node-1.5.0}/topos/testing/lifespan.py +0 -0
  935. {topos_node-1.4.3 → topos_node-1.5.0}/topos/uds.py +0 -0
  936. {topos_node-1.4.3 → topos_node-1.5.0}/topos/uma_contact_enrichment.py +0 -0
  937. {topos_node-1.4.3 → topos_node-1.5.0}/topos/uma_filters.py +0 -0
  938. {topos_node-1.4.3 → topos_node-1.5.0}/topos/upgrades/__init__.py +0 -0
  939. {topos_node-1.4.3 → topos_node-1.5.0}/topos/utils/base_object.py +0 -0
  940. {topos_node-1.4.3 → topos_node-1.5.0}/topos/websocket_client.py +0 -0
  941. {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/dependency_links.txt +0 -0
  942. {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/entry_points.txt +0 -0
  943. {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/requires.txt +0 -0
  944. {topos_node-1.4.3 → topos_node-1.5.0}/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.4.3
3
+ Version: 1.5.0
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
@@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"
9
9
 
10
10
  [project]
11
11
  name = "topos-node"
12
- version = "1.4.3"
12
+ version = "1.5.0"
13
13
  description = "Topos personal AI engine (FastAPI): local data, sync, control plane WebSocket client"
14
14
  readme = "README.md"
15
15
  license = "Apache-2.0"
@@ -0,0 +1,131 @@
1
+ """Review R1 (node), R-M8: the app hands relay frames to the dispatcher that applies the rules, and runs the pin thread.
2
+
3
+ protects: both relay rules (a caller who is not the owner reaches only the share doors; a stamp that does not verify
4
+ is refused) live in ``core.handlers.dispatch_relay_message``, and the retry of the first stamp-key pin lives in
5
+ ``relay_stamp.start_first_pin``. Whether a node applies any of it is decided by a few lines of ``topos/app.py``
6
+ that no test ran: with ``_relay_dispatch`` rewritten to call ``handle_control_plane_request`` with the relay
7
+ deferral (the handoff before the rules), or with ``start_first_pin()`` or ``stop_first_pin()`` removed, every nearby
8
+ suite stayed green (the reviewer's mutant: 388 passed each time).
9
+
10
+ This test starts the real app with a control plane address, takes the handler the app really gives its control-plane
11
+ client, and sends it frames. No network: the client is a recorder, and the one request the pin thread makes is
12
+ answered by a recorder that cannot be reached. Keys are made at run time; every id is invented.
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import base64
17
+ import threading
18
+ import time
19
+
20
+ import pytest
21
+ from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
22
+
23
+ from tests.test_topos_home_hermeticity import _fresh_owner_state, scratch_home # noqa: F401 (fixture)
24
+
25
+ KEY = Ed25519PrivateKey.generate()
26
+ ANOTHER_KEY = Ed25519PrivateKey.generate()
27
+ OWNER, SOMEONE_ELSE = "owner-1", "someone-else"
28
+
29
+
30
+ def stamped(message, *, cls, acting, key=KEY):
31
+ from topos.relay_stamp import STAMP_FIELD, canonical_signing_payload
32
+
33
+ now = time.time()
34
+ stamp = {"v": 1, "cls": cls, "client_id": "some-client", "acting_user": acting, "iat": now, "exp": now + 100}
35
+ stamp["sig"] = base64.b64encode(key.sign(canonical_signing_payload(
36
+ stamp, msg_id=message["id"], msg_type=message["type"]))).decode("ascii")
37
+ return {**message, STAMP_FIELD: stamp}
38
+
39
+
40
+ def pin_threads():
41
+ from topos import relay_stamp
42
+
43
+ return [thread for thread in threading.enumerate() if thread.name == relay_stamp.FIRST_PIN_THREAD and thread.is_alive()]
44
+
45
+
46
+ @pytest.mark.asyncio
47
+ async def test_the_app_gives_its_client_the_dispatcher_and_keeps_the_pin_thread(scratch_home, tmp_path, monkeypatch): # noqa: F811
48
+ import httpx
49
+
50
+ from topos import app as app_module
51
+ from topos import relay_stamp
52
+ from topos.config.settings import settings
53
+ from topos.core.handlers.registry import HANDLERS
54
+ from topos.principal import OWNER_APP, THIRD_PARTY
55
+ from topos.testing.lifespan import LifespanManager
56
+
57
+ given, asked, reached = {}, [], []
58
+
59
+ class Client:
60
+ """Stands in for ControlPlaneClient: it keeps what the app hands it and connects to nothing."""
61
+
62
+ def __init__(self, control_plane_url, api_key, handler, verify_ssl=True):
63
+ given["handler"] = handler
64
+
65
+ def start(self) -> None:
66
+ pass
67
+
68
+ async def stop(self) -> None:
69
+ pass
70
+
71
+ async def send_message(self, message) -> None:
72
+ pass
73
+
74
+ def set_device_info_snapshot(self, payload) -> None:
75
+ pass
76
+
77
+ def unreachable(url, **_options):
78
+ asked.append(url)
79
+ raise ConnectionError("the control plane cannot be reached")
80
+
81
+ async def recorder(message):
82
+ reached.append(message["id"])
83
+ return {"id": message["id"], "status": "ok", "payload": {}}
84
+
85
+ _fresh_owner_state()
86
+ monkeypatch.setattr(settings, "control_plane_url", "wss://cp.example/ws/engine", raising=False)
87
+ monkeypatch.setattr(settings, "topos_database_path", str(tmp_path / "engine.db"))
88
+ monkeypatch.setattr(app_module, "ControlPlaneClient", Client)
89
+ monkeypatch.setattr(relay_stamp, "_PINNED_KEY_PATH", str(tmp_path / "pin" / "cp_stamp_key.pub"))
90
+ monkeypatch.delenv("TOPOS_CP_STAMP_PUBKEY", raising=False)
91
+ monkeypatch.setattr(httpx, "get", unreachable) # the pin thread's one kind of request
92
+ monkeypatch.setitem(HANDLERS, "query", recorder)
93
+ refused = {"status": "error", "code": 403, "error": "owner_mode_required"}
94
+ assert pin_threads() == []
95
+
96
+ async with LifespanManager(app_module.app):
97
+ relay = given["handler"] # what the app really gave its client
98
+ # The node holds no key and its control plane cannot be reached: the pin thread is alive and trying.
99
+ for _ in range(100):
100
+ if asked:
101
+ break
102
+ time.sleep(0.02)
103
+ assert asked == ["https://cp.example/v1/relay/stamp-public-key"]
104
+ assert len(pin_threads()) == 1
105
+ # ... and while it holds none, a stamped frame is refused, never read as "no stamp".
106
+ assert await relay(stamped({"id": "f0", "type": "query", "payload": {}}, cls=OWNER_APP, acting=OWNER)) == {
107
+ "id": "f0", **refused}
108
+ # Now it holds the control plane's key.
109
+ monkeypatch.setenv("TOPOS_CP_STAMP_PUBKEY", base64.b64encode(KEY.public_key().public_bytes_raw()).decode())
110
+ frame = {"type": "query", "payload": {}}
111
+ # A verified third party who is not this node's owner: only the share doors.
112
+ assert await relay(stamped({"id": "f1", **frame}, cls=THIRD_PARTY, acting=SOMEONE_ELSE)) == {"id": "f1", **refused}
113
+ # A stamp that does not verify (another key's): refused, not the relay deferral.
114
+ assert await relay(stamped({"id": "f2", **frame}, cls=OWNER_APP, acting=OWNER, key=ANOTHER_KEY)) == {
115
+ "id": "f2", **refused}
116
+ assert reached == []
117
+ # The controls: the owner's own app, and a frame with no stamp, reach the handler through the same door.
118
+ assert (await relay(stamped({"id": "f3", **frame}, cls=OWNER_APP, acting=OWNER)))["status"] == "ok"
119
+ assert (await relay({"id": "f4", **frame}))["status"] == "ok"
120
+ assert reached == ["f3", "f4"]
121
+ # No key again, as at start: from here only shutdown's stop can end the thread (with a key held it would
122
+ # end by itself at its next try, and this test would not notice a shutdown that forgot to stop it).
123
+ monkeypatch.delenv("TOPOS_CP_STAMP_PUBKEY")
124
+ assert len(pin_threads()) == 1
125
+
126
+ # Shutdown ended the tries at once: the thread is gone, not waiting out its next ten minutes.
127
+ for _ in range(250):
128
+ if not pin_threads():
129
+ break
130
+ time.sleep(0.02)
131
+ assert pin_threads() == []
@@ -389,8 +389,8 @@ def test_the_known_owner_database_modules_are_still_marked() -> None:
389
389
  """
390
390
  known = (
391
391
  "tests/gap/qq/engine/test_en_qq_eval_queries.py",
392
- "tests/query/test_d13_grantee_tier_matrix.py",
393
- "tests/query/test_selector_live_entity_grant.py",
392
+ # 1.5.0 (N8) deleted two of the six with the pipeline's grantee branches they drove:
393
+ # tests/query/test_d13_grantee_tier_matrix.py and tests/query/test_selector_live_entity_grant.py.
394
394
  "tests/adversarial/test_scope_break_iteration2_live_engine.py",
395
395
  "tests/adversarial/test_scope_break_iteration3b_handler_grantee.py",
396
396
  "tests/release/iteration4/test_live_engine_pressure.py",
@@ -1,6 +1,6 @@
1
1
  """Topos Control Plane Version Information."""
2
2
 
3
- __version__ = "1.4.3"
4
- __version_info__ = (1, 4, 3)
3
+ __version__ = "1.5.0"
4
+ __version_info__ = (1, 5, 0)
5
5
 
6
6
  __all__ = ["__version__", "__version_info__"]
@@ -19,7 +19,7 @@ from fastapi.responses import JSONResponse
19
19
  from topos.auth import resolve_request_principal
20
20
  from topos.permissions_v2.canonical import PolicyError
21
21
 
22
- router = APIRouter(prefix="/v1/permissions-beta/v2/ai-chat/capture-attestation",
22
+ router = APIRouter(prefix="/v1/sharing/ai-chat/capture-attestation",
23
23
  tags=["permissions-owner-ai-chat-capture"])
24
24
 
25
25
  _NO_STORE = {"Cache-Control": "no-store"}
@@ -28,7 +28,7 @@ from topos.auth import resolve_request_principal
28
28
 
29
29
  from .permissions_ai_chat_capture import _require_owner_socket, _respond
30
30
 
31
- router = APIRouter(prefix="/v1/permissions-beta/v2/capture-attestation", tags=["permissions-owner-capture"])
31
+ router = APIRouter(prefix="/v1/sharing/capture-attestation", tags=["permissions-owner-capture"])
32
32
 
33
33
 
34
34
  def _node_resource_id():
@@ -6,7 +6,7 @@ from topos.auth import resolve_request_principal
6
6
  from topos.permissions_v2.canonical import MAX_BYTES, PolicyError, parse_json
7
7
  from topos.permissions_v2.identity_dispatch import execute_signed_identity_command
8
8
 
9
- router = APIRouter(prefix="/v1/permissions-beta/v2/identity", tags=["permissions-beta-owner-identity"])
9
+ router = APIRouter(prefix="/v1/sharing/identity", tags=["permissions-beta-owner-identity"])
10
10
 
11
11
 
12
12
  @router.post("/command")
@@ -6,7 +6,7 @@ from topos.auth import resolve_request_principal
6
6
  from topos.permissions_v2.canonical import MAX_BYTES, PolicyError, parse_json
7
7
  from topos.permissions_v2.ingest_dispatch import execute_signed_ingest
8
8
 
9
- router = APIRouter(prefix="/v1/permissions-beta/v2/ingestion", tags=["permissions-beta-owner-ingestion"])
9
+ router = APIRouter(prefix="/v1/sharing/ingestion", tags=["permissions-beta-owner-ingestion"])
10
10
 
11
11
 
12
12
  @router.post("/command")
@@ -10,7 +10,7 @@ from topos.auth import resolve_request_principal
10
10
  from topos.permissions_v2.canonical import PolicyError
11
11
  from topos.permissions_v2.contract import Identifier, StrictModel
12
12
 
13
- router = APIRouter(prefix='/v1/permissions-beta/v2/imessage', tags=['permissions-owner-maintenance'])
13
+ router = APIRouter(prefix='/v1/sharing/imessage', tags=['permissions-owner-maintenance'])
14
14
 
15
15
 
16
16
  class NativeProbeRequest(StrictModel):
@@ -283,7 +283,7 @@ def _resync_search(runtime) -> dict:
283
283
  the refresh has already committed.
284
284
  """
285
285
  import logging
286
- import os
286
+ from topos.permissions_v2 import switches
287
287
  from topos.storage.db.write_gate import with_db_write
288
288
  log = logging.getLogger(__name__)
289
289
  out = {'protection_synced': False, 'grants': 0, 'ready': 0}
@@ -295,7 +295,7 @@ def _resync_search(runtime) -> dict:
295
295
  except Exception as exc: # noqa: BLE001 -- class name only
296
296
  log.warning('native refresh protection sync failed (%s)', type(exc).__name__)
297
297
  return out
298
- if os.environ.get('TOPOS_PERMISSIONS_V2_MESSAGE_SEARCH_ENABLED', '').lower() != 'true':
298
+ if not switches.on(switches.MESSAGE_SEARCH):
299
299
  return out
300
300
  try:
301
301
  index = runtime.message_search_index()
@@ -4,7 +4,7 @@ from fastapi import APIRouter, Depends, HTTPException
4
4
  from topos.auth import resolve_request_principal
5
5
  from topos.core.handlers.permissions_v2 import handle_permissions_v2_message_search_rebuild
6
6
 
7
- router = APIRouter(prefix="/v1/permissions-beta/v2/message-search", tags=["permissions-owner-maintenance"])
7
+ router = APIRouter(prefix="/v1/sharing/message-search", tags=["permissions-owner-maintenance"])
8
8
 
9
9
 
10
10
  @router.post("/rebuild")
@@ -22,7 +22,7 @@ from topos.permissions_v2.canonical import PolicyError
22
22
  from .permissions_ai_chat_capture import _NO_STORE, _require_owner_socket
23
23
  from .permissions_capture_receipts import _node_resource_id
24
24
 
25
- router = APIRouter(prefix="/v1/permissions-beta/v2/source-installs", tags=["permissions-owner-maintenance"])
25
+ router = APIRouter(prefix="/v1/sharing/source-installs", tags=["permissions-owner-maintenance"])
26
26
 
27
27
  _INVALID = {"source_id_required", "install_id_required", "install_deactivation_unconfirmed"}
28
28
  _CONFLICT = {"install_not_active", "install_last_active"}
@@ -730,11 +730,20 @@ async def blackhole_entity(
730
730
  (third-party MCP agents, routines, grantees) is denied, and content
731
731
  mentioning it may only be processed by the tier's secure model set.
732
732
  Raises a rebuild-needed notification before the rebuild runs (D4).
733
+
734
+ Marking an entry whose clean-up has not completed runs that clean-up: the
735
+ retry of one that failed. Such a mark never loosens the entry's tier
736
+ (`blackhole.start_waiting_clean_up`; review R1 node, R-B1).
737
+
738
+ For an entry the upgrade carried and the owner has not acted on, this is
739
+ the owner's act (third fix round, ruling P.3): it becomes a full entry and
740
+ its clean-up runs. `entity_id` may be the entry's own id; an id of that
741
+ shape that is no entry answers 404 and makes nothing (review R2-H3).
733
742
  """
734
743
  import asyncio
735
744
 
736
745
  from ..core.state import close_thread_db_connection
737
- from ..features.lifecycle.blackhole import BlackholeStore
746
+ from ..features.lifecycle.blackhole import BlackholeStore, start_waiting_clean_up
738
747
  from ..features.lifecycle.blackhole_rebuild import rebuild_for_blackhole
739
748
 
740
749
  _entities_conn() # fail fast with 503 before spawning the worker
@@ -744,23 +753,34 @@ async def blackhole_entity(
744
753
  def _blackhole():
745
754
  try:
746
755
  conn = _entities_conn()
747
- result = BlackholeStore(conn).blackhole_entity(
748
- entity_ref=entity_id,
749
- processing_tier=processing_tier,
750
- note=note,
751
- )
756
+ store = BlackholeStore(conn)
757
+ result = start_waiting_clean_up(store, entity_id, processing_tier=processing_tier, note=note)
758
+ if result is None:
759
+ result = store.blackhole_entity(
760
+ entity_ref=entity_id,
761
+ processing_tier=processing_tier,
762
+ note=note,
763
+ )
752
764
  # D4: the notification above was raised first, so the owner already
753
765
  # knows the hide is incomplete; now do the rebuild that makes it
754
766
  # true. Same worker / same connection — do not hop back to the loop
755
767
  # with a write-gate hold still possible.
756
- if not result.get("already_blackholed"):
768
+ if not result.get("already_blackholed") or result.get("rebuild_state") != "complete":
757
769
  result["rebuild"] = rebuild_for_blackhole(conn, entity_id).as_dict()
758
- return result
770
+ # The entry as the list shows it now, then what this call itself answers (as the relay handler does).
771
+ from ..features.lifecycle.off_limits_list import describe
772
+
773
+ record = store.get(str(result.get("blackhole_id") or entity_id))
774
+ return {**(describe(conn, record) if record else {}),
775
+ **{key: result[key] for key in ("already_blackholed", "notification_id", "rebuild")
776
+ if key in result}}
759
777
  finally:
760
778
  close_thread_db_connection()
761
779
 
762
780
  try:
763
781
  return await asyncio.to_thread(_blackhole)
782
+ except LookupError as exc:
783
+ raise HTTPException(status_code=404, detail=str(exc))
764
784
  except ValueError as exc:
765
785
  raise HTTPException(status_code=400, detail=str(exc))
766
786
 
@@ -770,7 +790,10 @@ async def unblackhole_entity(
770
790
  entity_id: str,
771
791
  _api_key: str = Depends(require_api_key),
772
792
  ):
773
- """Lift a black hole. Existing grants are not restored — normal permissions resume."""
793
+ """Lift a black hole. Existing grants are not restored — normal permissions resume.
794
+
795
+ `entity_id` may be the entry's own id: an entry with no linked entity, a
796
+ handle only or an id only is removed that way (review R2-H3)."""
774
797
  import asyncio
775
798
 
776
799
  from ..core.state import close_thread_db_connection
@@ -788,17 +811,19 @@ async def unblackhole_entity(
788
811
 
789
812
 
790
813
  @router.get("/blackholes")
791
- async def list_blackholes(_api_key: str = Depends(require_api_key)):
792
- """The owner's off-limits list (mirrors the exclusions list in the drawer)."""
793
- from ..features.lifecycle.blackhole import BlackholeStore
814
+ async def list_blackholes(
815
+ preview: Optional[str] = Query(default=None, max_length=40),
816
+ _api_key: str = Depends(require_api_key),
817
+ ):
818
+ """The owner's off-limits list (mirrors the exclusions list in the drawer).
794
819
 
795
- store = BlackholeStore(_entities_conn())
796
- from ..features.lifecycle.record_protection import RecordProtectionStore
820
+ Each row says whether the entry is carried and waiting, what to show it
821
+ as, and its clean-up's state in true words. `preview=<an entry's own id>`
822
+ adds what that entry's clean-up would withdraw, counted and not written
823
+ (`off_limits_list.listing`)."""
824
+ from ..features.lifecycle.off_limits_list import listing
797
825
 
798
- return {"blackholes": store.list(), "notifications": store.notifications(state="open"),
799
- "record_protection_supported": True,
800
- "record_protection_tables": RecordProtectionStore(_entities_conn()).supported_tables(),
801
- "records": RecordProtectionStore(_entities_conn()).list()}
826
+ return listing(_entities_conn(), preview=preview)
802
827
 
803
828
 
804
829
  class RecordBlackholeBody(BaseModel):
@@ -19,7 +19,6 @@ whether the volume has room (``dry_run`` defaults to true); a real run refuses w
19
19
  from __future__ import annotations
20
20
 
21
21
  import asyncio
22
- import os
23
22
  from typing import Any, Dict, Optional
24
23
 
25
24
  from fastapi import APIRouter, Body, Depends, HTTPException
@@ -62,12 +61,14 @@ def _conn():
62
61
  async def _refresh_grant_indexes(principal) -> Dict[str, Any]:
63
62
  """The owner's own message-search rebuild, after the removal committed.
64
63
 
65
- The same door as ``POST /v1/permissions-beta/v2/message-search/rebuild`` and the same
64
+ The same door as ``POST /v1/sharing/message-search/rebuild`` and the same
66
65
  switch as every owner change that can move what a grant releases. Without it, the
67
66
  index sweeper still drops any index whose member rows changed (fail closed), and a
68
67
  recipient search refuses until the next rebuild.
69
68
  """
70
- if os.environ.get("TOPOS_PERMISSIONS_V2_MESSAGE_SEARCH_ENABLED", "").lower() != "true":
69
+ from topos.permissions_v2 import switches
70
+
71
+ if not switches.on(switches.MESSAGE_SEARCH):
71
72
  return {"status": "skipped", "reason": "message_search_disabled"}
72
73
  from topos.core.handlers.permissions_v2 import handle_permissions_v2_message_search_rebuild
73
74
  from topos.principal import reset_principal, set_principal
@@ -44,7 +44,6 @@ from .api import (
44
44
  source_retention as source_retention_routes,
45
45
  sources as sources_routes,
46
46
  sync as sync_routes,
47
- uma_data as uma_data_routes,
48
47
  user_identity as user_identity_routes,
49
48
  usage as usage_routes,
50
49
  ui_config as ui_config_routes,
@@ -157,7 +156,6 @@ app.include_router(permissions_search_maintenance_routes.router)
157
156
  app.include_router(permissions_native_probe_routes.router)
158
157
  app.include_router(query_routes.router, prefix="/v1")
159
158
  app.include_router(messenger_analytics_routes.router, prefix="/v1")
160
- app.include_router(uma_data_routes.router)
161
159
  app.include_router(usage_routes.router)
162
160
  app.include_router(ui_config_routes.router)
163
161
  app.include_router(data_explorer_table_prefs_routes.router)
@@ -489,6 +487,7 @@ async def startup_event() -> None:
489
487
  try:
490
488
  # Owner decision 2: ring the control plane when the node's protection state moves, so it re-signs
491
489
  # the owner's unchanged grants without the owner's Sync click. Read-only; a no-op without the beta.
490
+ # It starts at once, retrying the sharing runtime's load until it loads (N4 decision 1).
492
491
  from .permissions_v2.protection_doorbell import start_at_startup as _start_protection_doorbell
493
492
 
494
493
  _start_protection_doorbell()
@@ -554,14 +553,16 @@ async def startup_event() -> None:
554
553
  raise
555
554
  # Relay principal (P3): a message carrying a VERIFIED Ed25519 stamp
556
555
  # resolves to the CP's classification — a named third_party client
557
- # (enrollable, elevatable) or the owner's native surface. Anything
558
- # else keeps the CP_RELAY deferral: forwarded-id equality plus the
559
- # CP-side containment, byte-identical to pre-P3 behavior, so a node
560
- # and CP on different sides of this release keep working. Verification
561
- # happens only on THIS channel — a stamp arriving over local HTTP is
562
- # never parsed. The stamp is resolved INSIDE the dispatched coroutine —
563
- # the client thread's contextvars do not cross run_coroutine_threadsafe,
564
- # a wrapper closure does.
556
+ # (enrollable, elevatable) or the owner's native surface. A message
557
+ # with NO stamp keeps the CP_RELAY deferral: forwarded-id equality plus
558
+ # the CP-side containment, byte-identical to pre-P3 behavior. A message
559
+ # whose stamp is there but does not verify is refused (1.5.0, review
560
+ # S4 M1), and a verified third party who is not this node's owner
561
+ # reaches only the share doors (H1): see dispatch_relay_message.
562
+ # Verification happens only on THIS channel — a stamp arriving over
563
+ # local HTTP is never parsed. The stamp is resolved INSIDE the
564
+ # dispatched coroutine — the client thread's contextvars do not cross
565
+ # run_coroutine_threadsafe, a wrapper closure does.
565
566
  async def _relay_dispatch(message):
566
567
  from .core.handlers import dispatch_relay_message
567
568
 
@@ -585,11 +586,13 @@ async def startup_event() -> None:
585
586
 
586
587
  # P5: pin the CP's stamp verification key on first boot (TOFU over the
587
588
  # same TLS channel the relay already trusts). Threaded: a slow or down
588
- # CP must not delay startup; an existing pin is never overwritten.
589
- from .relay_stamp import autopin_stamp_key
589
+ # CP must not delay startup; an existing pin is never overwritten. While
590
+ # the node holds no key the thread tries again, backed off (1.5.0: a
591
+ # stamp this node cannot check is refused, so "no key until the next
592
+ # restart" would refuse every stamped frame until then); shutdown ends it.
593
+ from .relay_stamp import start_first_pin
590
594
 
591
- threading.Thread(target=autopin_stamp_key, name="topos-stamp-autopin",
592
- daemon=True).start()
595
+ start_first_pin()
593
596
 
594
597
  state.control_plane_client = ControlPlaneClient(
595
598
  control_plane_url=settings.topos_control_plane_url,
@@ -737,6 +740,10 @@ async def shutdown_event() -> None:
737
740
  state.engine_presence_task = None
738
741
  if state.control_plane_client:
739
742
  await state.control_plane_client.stop()
743
+ # The first-pin thread waits between tries; tell it the app is gone (never blocks).
744
+ from .relay_stamp import stop_first_pin
745
+
746
+ stop_first_pin()
740
747
  if state.hosted_pool_lease_task:
741
748
  state.hosted_pool_lease_task.cancel()
742
749
  try:
@@ -143,14 +143,7 @@ class Settings(BaseSettings):
143
143
  validation_alias=AliasChoices("TOPOS_FACTS_LLM_MODEL", "FACTS_LLM_MODEL"),
144
144
  )
145
145
  engine_default_provider: str = Field("huggingface")
146
- # §D minimizer runs on EVERY grantee query, so it uses a small/fast local model. The judge
147
- # only runs in nightly privacy evals (F.4/CER semantic scoring), so it can be larger/slower.
148
- disclosure_minimizer_model: str = Field(
149
- "llama3.2:latest",
150
- validation_alias=AliasChoices(
151
- "TOPOS_DISCLOSURE_MINIMIZER_MODEL", "DISCLOSURE_MINIMIZER_MODEL"
152
- ),
153
- )
146
+ # Privacy judge is used by offline evaluation, not recipient reads.
154
147
  privacy_judge_model: str = Field(
155
148
  default_factory=lambda: tag_for_this_machine(DEFAULT_LOCAL_9B_MODEL),
156
149
  validation_alias=AliasChoices("TOPOS_PRIVACY_JUDGE_MODEL", "PRIVACY_JUDGE_MODEL"),
@@ -577,10 +577,6 @@ class ControlPlaneClient:
577
577
 
578
578
  async def _handle_message(self, ws, data: Dict[str, Any]) -> None:
579
579
  msg_type = str(data.get("type") or "").strip().lower()
580
- if msg_type == "permissions_v2_fact_read":
581
- from .permissions_v2.fact_release_transport import dispatch_fact_message
582
- await dispatch_fact_message(ws, data)
583
- return
584
580
  if msg_type == "permissions_v2_message_search":
585
581
  # p2c-v1: checkpoints and signs under the node gates, then sends with them released.
586
582
  from .permissions_v2.search_transport import dispatch_message_search
@@ -591,11 +587,9 @@ class ControlPlaneClient:
591
587
  from .permissions_v2.search_transport import dispatch_message_search_batch
592
588
  await dispatch_message_search_batch(ws, data)
593
589
  return
594
- if msg_type == "permissions_v2_source_read":
595
- # This adapter owns the actual send while final evidence/authority
596
- # gates remain held. Never return its contents into a later outbox.
597
- from .permissions_v2.release_transport import dispatch_source_message
598
- await dispatch_source_message(ws, data)
590
+ if msg_type in ("permissions_v2_answer_submit", "permissions_v2_answer_fetch"):
591
+ from .permissions_v2.answer_transport import dispatch_answer
592
+ await dispatch_answer(ws, data)
599
593
  return
600
594
  if msg_type == "ping":
601
595
  pong: Dict[str, Any] = {"type": "pong"}