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.
- {topos_node-1.4.3/topos_node.egg-info → topos_node-1.5.0}/PKG-INFO +1 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/pyproject.toml +1 -1
- topos_node-1.5.0/tests/test_app_relay_wiring.py +131 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_owner_database_hermeticity.py +2 -2
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/__version__.py +2 -2
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_ai_chat_capture.py +1 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_capture_receipts.py +1 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_identity.py +1 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_ingestion.py +1 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_native_probe.py +3 -3
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_search_maintenance.py +1 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/permissions_source_installs.py +1 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/signal.py +43 -18
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/source_retention.py +4 -3
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/app.py +21 -14
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/settings.py +1 -8
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/control_plane_client.py +3 -9
- topos_node-1.5.0/topos/core/handlers/__init__.py +667 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/common.py +0 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/database_explorer.py +13 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/messages.py +14 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/permissions_v2.py +37 -21
- topos_node-1.5.0/topos/core/handlers/permissions_v2_bind.py +20 -0
- topos_node-1.5.0/topos/core/handlers/permissions_v2_owner.py +327 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/permissions_v2_release.py +11 -8
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/query.py +10 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/signal_features.py +53 -16
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/registration.py +50 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/net_subject_policy.py +8 -2
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/person_reading.py +2 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/synthesize.py +3 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/affinity.py +4 -2
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/affinity_owner.py +2 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/affinity_quality.py +5 -6
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/consolidation.py +4 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/context_vectors.py +2 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/fact_materializer.py +220 -26
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/graph_enrichers.py +61 -26
- topos_node-1.5.0/topos/features/entities/graph_inputs.py +430 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/graph_refresh.py +250 -27
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/maintenance.py +260 -81
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/resolver.py +10 -5
- topos_node-1.5.0/topos/features/lifecycle/blackhole.py +1257 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/blackhole_guard.py +219 -9
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/blackhole_llm.py +13 -3
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/blackhole_rebuild.py +219 -48
- topos_node-1.5.0/topos/features/lifecycle/carry_diagnosis.py +187 -0
- topos_node-1.5.0/topos/features/lifecycle/contact_excludes.py +822 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/derived_scrub.py +20 -2
- topos_node-1.5.0/topos/features/lifecycle/off_limits_list.py +134 -0
- topos_node-1.5.0/topos/features/lifecycle/off_limits_view.py +142 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/cluster_labels.py +4 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/topic_clustering.py +17 -4
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/jobs.py +16 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parser.py +9 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ai_chat_capture.py +4 -7
- topos_node-1.5.0/topos/permissions_v2/answer_checks.py +234 -0
- topos_node-1.5.0/topos/permissions_v2/answer_generation.py +184 -0
- topos_node-1.5.0/topos/permissions_v2/answer_protocol.py +159 -0
- topos_node-1.5.0/topos/permissions_v2/answer_release.py +348 -0
- topos_node-1.5.0/topos/permissions_v2/answer_transport.py +47 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/automatic_message_review.py +4 -2
- topos_node-1.5.0/topos/permissions_v2/bind_protocol.py +200 -0
- topos_node-1.5.0/topos/permissions_v2/checking_model.py +163 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/entailment_grounding.py +7 -9
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/entity_boundary.py +795 -77
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence.py +35 -4
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence_families.py +4 -4
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence_review_runtime.py +5 -0
- topos_node-1.5.0/topos/permissions_v2/index_rebuilds.py +227 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/inferred_facts.py +4 -5
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/interest_index.py +6 -7
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/interest_relabel.py +7 -7
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/interest_review.py +4 -2
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/journal_goal_field.py +5 -5
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/knowledge_contract.py +17 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/knowledge_projections.py +69 -8
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ledger.py +119 -3
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/node_protocol.py +4 -1
- topos_node-1.5.0/topos/permissions_v2/ownership.py +410 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/permitted_derivation.py +3 -4
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/protection_clock.py +40 -0
- topos_node-1.5.0/topos/permissions_v2/protection_doorbell.py +217 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/reconciliation_facts.py +5 -3
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/refresh_loop.py +242 -38
- topos_node-1.5.0/topos/permissions_v2/release.py +129 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/runtime.py +160 -29
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_contract.py +9 -7
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_index.py +259 -29
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_release.py +81 -5
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_timing.py +33 -19
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_transport.py +11 -13
- topos_node-1.5.0/topos/permissions_v2/self_bind.py +1091 -0
- topos_node-1.5.0/topos/permissions_v2/shadow_labeler_local.py +185 -0
- topos_node-1.5.0/topos/permissions_v2/share_catalog.py +144 -0
- topos_node-1.5.0/topos/permissions_v2/share_counts.py +558 -0
- topos_node-1.5.0/topos/permissions_v2/share_kinds.py +66 -0
- topos_node-1.5.0/topos/permissions_v2/share_week.py +65 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/signing.py +21 -4
- topos_node-1.5.0/topos/permissions_v2/switches.py +418 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/profiles.py +4 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/handled_message_types.json +14 -7
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/aggregate.py +9 -8
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/closeness.py +5 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/disclosure.py +1 -30
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/manifest.py +0 -18
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/manifest_validation.py +0 -90
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/pipeline.py +10 -280
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/retrieval.py +145 -227
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/types.py +0 -9
- topos_node-1.5.0/topos/relay_stamp.py +371 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/install_service.py +1 -1
- topos_node-1.5.0/topos/storage/db/migrations/off_limits_carried_waiting_v1.py +54 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/registry.py +10 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/upgrades/manifests.json +35 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/upgrades/runner.py +158 -6
- {topos_node-1.4.3 → topos_node-1.5.0/topos_node.egg-info}/PKG-INFO +1 -1
- {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/SOURCES.txt +24 -27
- topos_node-1.4.3/topos/api/uma_data.py +0 -249
- topos_node-1.4.3/topos/core/handlers/__init__.py +0 -315
- topos_node-1.4.3/topos/core/handlers/shadow_rescore.py +0 -51
- topos_node-1.4.3/topos/core/handlers/uma.py +0 -752
- topos_node-1.4.3/topos/features/lifecycle/blackhole.py +0 -681
- topos_node-1.4.3/topos/permissions_v2/experiments/__init__.py +0 -1
- topos_node-1.4.3/topos/permissions_v2/experiments/__main__.py +0 -27
- topos_node-1.4.3/topos/permissions_v2/experiments/evaluators.py +0 -201
- topos_node-1.4.3/topos/permissions_v2/experiments/fact_bridge.py +0 -675
- topos_node-1.4.3/topos/permissions_v2/experiments/harness.py +0 -147
- topos_node-1.4.3/topos/permissions_v2/experiments/models.py +0 -192
- topos_node-1.4.3/topos/permissions_v2/experiments/retention.py +0 -106
- topos_node-1.4.3/topos/permissions_v2/experiments/scoring.py +0 -212
- topos_node-1.4.3/topos/permissions_v2/experiments/source_bridge.py +0 -556
- topos_node-1.4.3/topos/permissions_v2/experiments/synthetic.py +0 -53
- topos_node-1.4.3/topos/permissions_v2/fact_release.py +0 -129
- topos_node-1.4.3/topos/permissions_v2/fact_release_transport.py +0 -89
- topos_node-1.4.3/topos/permissions_v2/protection_doorbell.py +0 -128
- topos_node-1.4.3/topos/permissions_v2/release.py +0 -382
- topos_node-1.4.3/topos/permissions_v2/release_transport.py +0 -103
- topos_node-1.4.3/topos/permissions_v2/shadow_index.py +0 -188
- topos_node-1.4.3/topos/permissions_v2/shadow_labeler_local.py +0 -385
- topos_node-1.4.3/topos/permissions_v2/shadow_labelers.py +0 -61
- topos_node-1.4.3/topos/permissions_v2/shadow_rescore.py +0 -320
- topos_node-1.4.3/topos/query/cohort_resolvers.py +0 -294
- topos_node-1.4.3/topos/query/grant_cache.py +0 -159
- topos_node-1.4.3/topos/query/minimizer.py +0 -315
- topos_node-1.4.3/topos/query/negotiation.py +0 -384
- topos_node-1.4.3/topos/relay_stamp.py +0 -178
- topos_node-1.4.3/topos/scope_resolution.py +0 -91
- topos_node-1.4.3/topos/uma_authority.py +0 -171
- topos_node-1.4.3/topos/uma_resource_id.py +0 -24
- topos_node-1.4.3/topos/uma_rpt.py +0 -69
- {topos_node-1.4.3 → topos_node-1.5.0}/LICENSE +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/MANIFEST.in +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/README.md +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/setup.cfg +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/shared/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/shared/filtering.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/shared/schema_registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_active_database_binding.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_active_ingestion_binding.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_extensions.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_gate_leg_hermeticity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_hub_pipeline_offline_first.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_lane_shards.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_llm_integrations_storage.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_local_gate_composition.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_prewarm_first_run.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_profile_hygiene.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_profiles.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_protocol_handled_types.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_query_field_contract.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_sync_dep_pins.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_system_computer_name.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/tests/test_topos_home_hermeticity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/dataset_resolution.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/duckdb_adapter.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/luck_surface.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/messenger_communities.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/messenger_directed.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/messenger_graph.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/messenger_labels.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/person_graph.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/person_overlay.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/profiles.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/query_engine.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/raw_queries.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/analytics/relationship_reads.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/analytics.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/app_registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/backup.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/community_naming_config.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/compute_remote.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/connected_apps.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/conversation_context.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/data_commit.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/data_explorer_table_prefs.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/database_explorer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/db.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/device.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/disk_space_config.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/engine_run.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/enrichment.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/enrichment_lab.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/facts_llm_config.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/filter_lab.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/health.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/home_chat.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/ingestion_api.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/ingestion_compat.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/ingestion_sources.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/intelligence_lifecycle.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/llm.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/local_mcp.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/messenger_analytics.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/nsfw_maintenance.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/privacy_disclose.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/query_api.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/runtime_bootstrap.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/sanitization_ollama_config.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/shell.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/signal_extraction_config.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/source_install.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/source_scrub.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/sources.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/sources_overview.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/sync.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/tool_index.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/ui_config.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/upgrades.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/usage.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/api/user_identity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/auth.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/declared_field_map.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/browser_activity_mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/chatgpt_mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/demo_mappers.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/documents_mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/github_activity_mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/google_calendar_mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/grok_mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/messenger_mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/mappers/transcript_mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/models.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/canonicalization/resolver.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/__main__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/assets/topos_black.png +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/assets/topos_blk_rounded.png +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/assets/topos_white.png +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/commands.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/profile_cmd.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/reprocess_cmd.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/setup_models_cmd.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/cli/tray.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/conversation_context_llm.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/facts_llm.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/local_model_builds.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/model_packs.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/node_function_providers.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/sanitization_ollama.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/signal_extraction.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/config/uvicorn_logging.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/contacts/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/contacts/identity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/api_models.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/connection_resilience.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/db_health.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/device_helpers.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/errors.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/events.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/aggregate.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/complexity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/config.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/contacts_import.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/derivation.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/device.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/enrichment.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/enrichment_lab.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/filter_lab.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/graph_query.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/graph_summary.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/home_chat.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/ingest.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/mcp_client_elevations.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/mcp_clients.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/messenger_analytics.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/permissions_v2_identity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/permissions_v2_ingestion.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/routines.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/sources.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/timeline_daily.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/handlers/tool_index.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/logging.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/metrics.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/routine_access.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/startup_banner.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/state.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/table_layers.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/core/types.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/data_explorer_row_delete.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/data_explorer_table_prefs.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/data_explorer_tables.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/defaults.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/canonical_writer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/content_policy.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/disclosure_sweep.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/field_registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/nsfw_tags.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/privacy_layer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/disclosure/tier.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/generative_prompts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/generative_response.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/huggingface.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/ollama.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/openai.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/openai_compatible.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/redpill.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/backends/stub.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/client.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/disk_space.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/engine.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/hosted_llm_wallet.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/intake.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/memory_utils.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/model_cache.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/model_manager.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/ollama_install.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/ollama_pull.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/ollama_runtime.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/ollama_setup_guidance.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/pipeline_memory.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/queue_manager.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/result_formatter.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/router.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/scoped_token.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/tasks.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/torch_runtime.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/transport.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/usage_guard.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/usage_observation.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/engine/validator.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/catalog.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/derivation_recovery.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/derived_tables.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/job_readiness.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/job_writer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/_batch_limits.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/_engine_runner.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/attention_triage_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/availability_scores_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/brief_fallback.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/complexity_snapshot_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/derivation_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/derived_object_embeddings_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/dimension_summary_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/embeddings_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/emo_27_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/entities_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/fact_extraction_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/goal_extraction_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/pii_redaction_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/relationship_edges_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/sentiment_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/statistics_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/timeline_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/topic_clusters_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/canonical/topics_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/attachments_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/language_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/time_normalization_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/jobs/raw/tool_calls_job.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/model_overrides.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/manager.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/mvp_defaults.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/models/versioning.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/orchestrator.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/pipeline_activity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/processor.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/progress_bar.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/record_progress.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/registry_contract.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/signal_derivation_config.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment/source_overrides.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/bundles.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/model_resolve.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/schema.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/service.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/enrichment_lab/worker.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/evals/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/evals/enrichment_eval.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/extensions.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/canonical.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/engine.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/entropy.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/focus.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/graph_metrics.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/influence.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/projection.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/snapshots.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/topic_merge.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/topics.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/topics_daily.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/complexity/volatility.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/_scales.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/admin.legal.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/aspirations.goals.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/behavior.habits.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/behavior.preferences.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/beliefs.civic.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/beliefs.spiritual.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/communication.style.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/community.membership.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/craft.tooling.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/expertise.knowledge.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/finances.economics.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/health.lifestyle.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/health.mental.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/health.physical.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/household.pets.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/identity.core.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/interests.taste.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/life.events.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/narrative.self.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/net.capability.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/net.character.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/obligations.commitments.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/personality.traits.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/places.mobility.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/possessions.assets.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/relationships.social.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/values.motivation.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/dispositions.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/expertise.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/habits.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/interests.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/preferences.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/stances.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/tools.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/vocab/values.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/bundled_packs/work.career.yaml +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/candidates.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/commitments.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/guard.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/kernels.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/packs.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/person_bridge.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/prefilter.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/report_card.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/router.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/social_bench.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/social_kernels.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/surfaces.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/template.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/verify.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/derivation/writer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/chatgpt_declared.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/community_names.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/community_naming.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/cypher.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/declared_mappings.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/discourse_graph.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/dossier.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/edges.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/graph_search.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/linking.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/mention_lineage.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/mention_lineage_lane.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/owner.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/reads.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/rebuild_subprocess.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/entities/structured_fields.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/evidence_time.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/extract.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/llm_extract.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/reactions.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/reads.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/facts/verdicts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/fit/evaluator.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/fit/opportunity_types.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/exclusions.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/gc.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/lifecycle/record_protection.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/provenance/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/provenance/posture.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/provenance/roles.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/provenance/writer_class.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/brief_canonical_loader.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/brief_ontology.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/brief_renderer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/brief_schemas.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/chunking.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/conversation_context.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/conversation_windows.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/data_health.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/brief_ontologies.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/intentions.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/interests.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/memory.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/places.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/profile.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/relationships.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/resources.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/schema/dimension_definition.schema.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/time.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/wellbeing.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/definitions/work.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/derived_index.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/derived_spec.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/dimension_briefs.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/dimension_definition_loader.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/dimension_profiles.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/dimension_registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/embed_context.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/extraction/artifact_router.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/extraction/artifact_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/extraction/rule_extractors.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/graph_sanitize.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/hybrid_search.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/incremental_clustering.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/model_recommendations.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/query_embed_cache.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/schemas.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/service.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/signal_object_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/source_hydration.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/structured_signal.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/tool_index.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/typed_stores/aggregates.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/typed_stores/commitments.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/typed_stores/rhythm.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/typed_stores/scope_materializer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/vector_codec.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/vector_math.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/signal/vector_settings.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/definitions.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/engine.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/fold.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/stats/insights.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/temporal/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/temporal/points.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/temporal/records.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/timeline_projection.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/timeline_rollup.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/badges.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/daily.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/dashboard.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/instruments.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/intents.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/features/triage/readiness.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/bundles.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/schema.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/service.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/filter_lab/worker.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/home_chat/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/home_chat/schema.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/home_chat/store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/hosted_pool_lease.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/canonical_pipeline.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/chatgpt_owner_snapshot.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/checkpoints/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/checkpoints/checkpoint_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/checkpoints/sqlite_checkpoint_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/imessage_attributed_text.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/inbox_crypto.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/inbox_drain.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/ingest_helpers.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/journal_location_fanout.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/journal_time_log_normalize.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/local_exports.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/local_sync.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/local_sync_jobs.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/local_sync_schedule.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/log_preview.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/manager.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/owner_snapshot.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/browser_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/calendar_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/chatgpt_conversation_flattener.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/chatgpt_export.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/chatgpt_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/demo_file_parsers.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/documents_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/github_activity_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/google_calendar_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/grok_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/messenger_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/transcript_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/parsers/voxterm_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/progress.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/reprocess.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/calendar.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/chatgpt.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/contact_importers.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/grok.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/imessage_reader.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/signal_export_parser.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/sources/signal_reader.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/state_machine.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/triggers/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/triggers/file_trigger.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/triggers/sqlite_trigger.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/usage_inbox_dedupe.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/validation/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/validation/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/validation/schema_registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/ingestion/validation/schema_validator.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/lineage/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/lineage/provenance.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/lineage/tracker.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/llm_integrations_storage.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/mcp_clients.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/mcp_stdio_proxy.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/observability/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/observability/alerts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/observability/metrics.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/observability/tracing.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/openai_client.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/owner_key.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/automatic_review_worker.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/canonical.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/canonical_floor.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/capture_receipts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/chatgpt_coverage.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/contract.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/english_short_words.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence_reviews.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/evidence_time.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/exclusion_floor.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/fact_contract.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/fact_eligibility.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/fact_policy.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/fact_projection.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/forwarding.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/identity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/identity_attestation.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/identity_dispatch.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/identity_protocol.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/imessage_reconciliation.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/imessage_standing.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ingest_dispatch.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ingest_protocol.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ingest_provenance.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ingest_snapshot_facts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/interest_family.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/ledger_retention.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/message_evidence.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/message_review_contract.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/native_claim_grounding.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/native_imessage_probe.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/opaque_ids.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/predicate_classes.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/projection_review_runtime.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/projection_reviews.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/protocol.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/reconciliation_provenance.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/search_lanes.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/shadow_rubric.pinned.md +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/permissions_v2/snapshot_message_facts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/audit.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/envelope.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/job_runner.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/job_secrets.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/job_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/stages.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/pipeline/stub_enqueue.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/principal.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/vector_index/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/vector_index/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/vector_index/builders.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/projections/vector_index/health_checks.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/narrowing_vocabulary.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/query_field_contract.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/protocol/retrieval_text_contract.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/audit.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/collaborators.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/ddr.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/entity_window.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/exclusion.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/facts_direct.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/fingerprint.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/game_layer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/graph_lane.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/inference.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/intent.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/journal_event_lane.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/narrowing.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/overheard.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/packet_resolution.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/planner.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/runtime.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_arbiter.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_classifier.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_head.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_registry.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_registry_loader.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/scope_shadow.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/session.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/session_utils.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/source_generation.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/truth_door.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/truth_facts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/truth_prompts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/turn_classifier.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/verify.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/query/verify_modes.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/rate_limit.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/routines/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/routines/schema.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/routines/store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/runtime_housekeeping.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/runtime_shutdown.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/runtime_update.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/explicit_wording.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/hub_pipeline.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/nsfw_classifier.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/ollama_transforms.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/prewarm.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sanitization/privacy_filter.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/container.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/embeddings/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/embeddings/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/embeddings/local.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/embeddings/remote.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/interfaces.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/llm/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/llm/base.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/llm/openai.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/local.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/services/postgres.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/bundled_canonical_triples.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/canonical_signal_defaults.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/declared_field_map_spec.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/definitions.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/install_authority.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/install_maintenance.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/registry.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/retention.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/runtime_install.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/scrub_attribution.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sources/scrub_service.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/startup_banner.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/factory.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/fakes.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/postgres/stores.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/protocols.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/sqlite/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/sqlite/stores.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/adapters/sqlite/vector_search.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/activity_tables.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/canonicalizer.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/mapper.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/model.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/ai_chat/tables.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/calendar_contacts_tables.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/canonical_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/conversations_tables.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/journal_repair.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/mapping_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/canonical/postgres.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/client.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/connection_tuning.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/activity_events_content_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/activity_writer_columns_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/actor_role_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/affinity_pair_labels_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/attention_triage_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/attention_triage_v2.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/backup.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/backup_custody.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/calendar_events_scheduling_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/canonical_address_book_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/canonical_disclosure_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/canonical_nsfw_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/community_names_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/complexity_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/conflict_provenance_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/conversation_context_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/derivation_factory_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/derivation_ledger_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/derivation_provenance_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/derived_row_identity_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/documents_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/enrichment_record_progress_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/enrichment_spec_version_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_affinity_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_blackhole_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_context_vectors_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_context_vectors_v2.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_edges_validity_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_mentions_authored_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_review_candidate_bar_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_review_dedup_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/entity_review_provenance_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/episodes_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/extraction_artifacts.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/fact_dimension_by_entity_type_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_duration_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_ends_at_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_people_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_place_name_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_entries_starts_at_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/journal_origin_dimension_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/mention_table_stamp_backfill_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/message_emotions_role_backfill_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/message_emotions_role_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/net_subject_policy_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/owner_only_records_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/pack_registry_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/permissions_fact_lineage_keys_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/permissions_message_context_indexes_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/permissions_read_path_indexes_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/pipeline_jobs_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/query_artifacts_duration_ms_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/registry_checksums.json +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/remediation_person_model.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/retire_url_classification_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/scope_source_generation.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_dimension_backfill_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_dimension_harness.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_objects.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_objects_period_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_objects_updated_by_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/signal_summaries_drop_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/stage9_column_renames.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/temporal_fields_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/transcripts_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/vector_storage_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/vector_storage_v2.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/vector_storage_v3.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/vector_storage_v4.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_clusters_v2.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_entities_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_entity_review_v2.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_facts_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_lifecycle_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase0.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase4_messages_cutover.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase5_topic_clusters.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_phase6_dimension_briefs.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_query_quality.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_mvp_topic_clusters_coordination.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_stats_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/migrations/wiki_timeline_v1.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/paths.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/postgres.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/schema.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/schema_probe.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/storage_breakdown.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/db/write_gate.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/derived_row_identity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/enrichment/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/enrichment/canonical_enrichment_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/enrichment/raw_enrichment_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/normalized/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/normalized/normalized_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/oplog/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/oplog/decision.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/oplog/oplog_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/oplog/postgres.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/person/identity_resolver.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/projections/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/projections/index_ops_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/projections/vector_index_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/browser_flat_tables.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/file_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/raw_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/raw_tables_manager.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/raw/sqlite_raw_store.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/security/encryption.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/signal_identity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/source_settings.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/storage/user_identity.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sync/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sync/client.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/sync_handlers.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/testing/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/testing/lifespan.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/uds.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/uma_contact_enrichment.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/uma_filters.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/upgrades/__init__.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/utils/base_object.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos/websocket_client.py +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/dependency_links.txt +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/entry_points.txt +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/requires.txt +0 -0
- {topos_node-1.4.3 → topos_node-1.5.0}/topos_node.egg-info/top_level.txt +0 -0
|
@@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"
|
|
|
9
9
|
|
|
10
10
|
[project]
|
|
11
11
|
name = "topos-node"
|
|
12
|
-
version = "1.
|
|
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
|
-
|
|
393
|
-
|
|
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",
|
|
@@ -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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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
|
|
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
|
|
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/
|
|
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/
|
|
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
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
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
|
-
|
|
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(
|
|
792
|
-
|
|
793
|
-
|
|
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
|
-
|
|
796
|
-
|
|
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
|
|
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/
|
|
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
|
-
|
|
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.
|
|
558
|
-
#
|
|
559
|
-
# CP-side containment, byte-identical to pre-P3 behavior
|
|
560
|
-
#
|
|
561
|
-
#
|
|
562
|
-
#
|
|
563
|
-
#
|
|
564
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
|
595
|
-
|
|
596
|
-
|
|
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"}
|