infinity-context 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1053) hide show
  1. infinity_context-0.1.0.dist-info/METADATA +239 -0
  2. infinity_context-0.1.0.dist-info/RECORD +1053 -0
  3. infinity_context-0.1.0.dist-info/WHEEL +5 -0
  4. infinity_context-0.1.0.dist-info/entry_points.txt +9 -0
  5. infinity_context-0.1.0.dist-info/licenses/LICENSE +201 -0
  6. infinity_context-0.1.0.dist-info/top_level.txt +8 -0
  7. infinity_context_adapters/__init__.py +1 -0
  8. infinity_context_adapters/cognee/__init__.py +5 -0
  9. infinity_context_adapters/cognee/adapter.py +364 -0
  10. infinity_context_adapters/embeddings/__init__.py +6 -0
  11. infinity_context_adapters/embeddings/noop_adapter.py +5 -0
  12. infinity_context_adapters/embeddings/openai_adapter.py +104 -0
  13. infinity_context_adapters/extraction/__init__.py +41 -0
  14. infinity_context_adapters/extraction/content.py +828 -0
  15. infinity_context_adapters/extraction/docling_engine.py +255 -0
  16. infinity_context_adapters/extraction/document_normalization.py +434 -0
  17. infinity_context_adapters/extraction/factory.py +69 -0
  18. infinity_context_adapters/extraction/fallback_context.py +137 -0
  19. infinity_context_adapters/extraction/file_detection.py +378 -0
  20. infinity_context_adapters/extraction/image_evidence.py +319 -0
  21. infinity_context_adapters/extraction/media_tools.py +579 -0
  22. infinity_context_adapters/extraction/openai_json.py +356 -0
  23. infinity_context_adapters/extraction/openai_vision.py +722 -0
  24. infinity_context_adapters/extraction/prompts/__init__.py +1 -0
  25. infinity_context_adapters/extraction/prompts/semantic_memory_v1.md +20 -0
  26. infinity_context_adapters/extraction/schemas/__init__.py +1 -0
  27. infinity_context_adapters/extraction/schemas/semantic_memory_v1.json +62 -0
  28. infinity_context_adapters/extraction/transcription/__init__.py +11 -0
  29. infinity_context_adapters/extraction/transcription/openai_adapter.py +400 -0
  30. infinity_context_adapters/extraction/transcription_engine.py +544 -0
  31. infinity_context_adapters/extraction/video_evidence.py +129 -0
  32. infinity_context_adapters/extraction/whisper_engine.py +386 -0
  33. infinity_context_adapters/features/__init__.py +7 -0
  34. infinity_context_adapters/features/context_building/__init__.py +53 -0
  35. infinity_context_adapters/features/context_building/candidate_provider_chain.py +68 -0
  36. infinity_context_adapters/features/context_building/graphiti_candidate_provider.py +44 -0
  37. infinity_context_adapters/features/context_building/in_memory_candidate_provider.py +62 -0
  38. infinity_context_adapters/features/context_building/postgres_candidate_provider.py +44 -0
  39. infinity_context_adapters/features/context_building/qdrant_candidate_provider.py +44 -0
  40. infinity_context_adapters/features/context_building/query_request.py +99 -0
  41. infinity_context_adapters/features/context_building/records.py +113 -0
  42. infinity_context_adapters/features/document_ingestion/__init__.py +74 -0
  43. infinity_context_adapters/features/document_ingestion/composition.py +69 -0
  44. infinity_context_adapters/features/document_ingestion/extraction_adapter.py +114 -0
  45. infinity_context_adapters/features/document_ingestion/in_memory_chunk_index.py +67 -0
  46. infinity_context_adapters/features/document_ingestion/in_memory_document_store.py +176 -0
  47. infinity_context_adapters/features/document_ingestion/postgres_document_store.py +110 -0
  48. infinity_context_adapters/features/document_ingestion/qdrant_chunk_index.py +49 -0
  49. infinity_context_adapters/features/document_ingestion/records.py +88 -0
  50. infinity_context_adapters/features/memory_facts/__init__.py +53 -0
  51. infinity_context_adapters/features/memory_facts/graphiti_fact_projection.py +111 -0
  52. infinity_context_adapters/features/memory_facts/in_memory_fact_store.py +200 -0
  53. infinity_context_adapters/features/memory_facts/postgres_fact_store.py +126 -0
  54. infinity_context_adapters/features/memory_facts/qdrant_fact_projection.py +100 -0
  55. infinity_context_adapters/features/memory_scopes/__init__.py +44 -0
  56. infinity_context_adapters/features/memory_scopes/in_memory_scope_store.py +189 -0
  57. infinity_context_adapters/features/memory_scopes/postgres_scope_store.py +121 -0
  58. infinity_context_adapters/features/memory_scopes/records.py +86 -0
  59. infinity_context_adapters/graphiti/__init__.py +5 -0
  60. infinity_context_adapters/graphiti/adapter.py +613 -0
  61. infinity_context_adapters/graphiti/identity_evidence.py +711 -0
  62. infinity_context_adapters/graphiti/scope_identity.py +31 -0
  63. infinity_context_adapters/local_blob.py +101 -0
  64. infinity_context_adapters/noop/__init__.py +16 -0
  65. infinity_context_adapters/noop/adapters.py +156 -0
  66. infinity_context_adapters/noop/runtime.py +21 -0
  67. infinity_context_adapters/postgres/__init__.py +19 -0
  68. infinity_context_adapters/postgres/asset_mappers.py +348 -0
  69. infinity_context_adapters/postgres/asset_repositories.py +865 -0
  70. infinity_context_adapters/postgres/benchmark_projection_schema.py +241 -0
  71. infinity_context_adapters/postgres/benchmark_run_completion.py +645 -0
  72. infinity_context_adapters/postgres/benchmark_run_repositories.py +908 -0
  73. infinity_context_adapters/postgres/benchmark_writer_fence.py +139 -0
  74. infinity_context_adapters/postgres/canonical_keyword_trigram.py +31 -0
  75. infinity_context_adapters/postgres/canonical_retrieval_batching.py +388 -0
  76. infinity_context_adapters/postgres/fact_repositories.py +766 -0
  77. infinity_context_adapters/postgres/mappers.py +745 -0
  78. infinity_context_adapters/postgres/migrations/0001_core_facts.sql +95 -0
  79. infinity_context_adapters/postgres/migrations/0002_threads_documents_chunks.sql +97 -0
  80. infinity_context_adapters/postgres/migrations/0003_suggestions.sql +24 -0
  81. infinity_context_adapters/postgres/migrations/0004_service_tokens.sql +16 -0
  82. infinity_context_adapters/postgres/migrations/0005_data_classification_lite.sql +8 -0
  83. infinity_context_adapters/postgres/migrations/0006_service_token_usage_metadata.sql +5 -0
  84. infinity_context_adapters/postgres/migrations/0007_service_token_permissions.sql +2 -0
  85. infinity_context_adapters/postgres/migrations/0008_service_token_memory_scope.sql +2 -0
  86. infinity_context_adapters/postgres/migrations/0009_outbox_lifecycle_hardening.sql +15 -0
  87. infinity_context_adapters/postgres/migrations/0010_fact_taxonomy.sql +14 -0
  88. infinity_context_adapters/postgres/migrations/0011_asset_extractions.sql +66 -0
  89. infinity_context_adapters/postgres/migrations/0012_asset_extraction_execution_hardening.sql +20 -0
  90. infinity_context_adapters/postgres/migrations/0012_usage_governance.sql +33 -0
  91. infinity_context_adapters/postgres/migrations/0013_context_link_suggestions.sql +44 -0
  92. infinity_context_adapters/postgres/migrations/0014_memory_anchors.sql +26 -0
  93. infinity_context_adapters/postgres/migrations/0015_users_acl.sql +36 -0
  94. infinity_context_adapters/postgres/migrations/0016_managed_benchmark_runs.sql +27 -0
  95. infinity_context_adapters/postgres/migrations/0017_managed_benchmark_writer_fence.sql +104 -0
  96. infinity_context_adapters/postgres/migrations/0018_benchmark_projection_manifest.sql +51 -0
  97. infinity_context_adapters/postgres/migrations/0019_managed_benchmark_sealed_fence.sql +131 -0
  98. infinity_context_adapters/postgres/migrations/0020_benchmark_cleanup_completion.sql +219 -0
  99. infinity_context_adapters/postgres/migrations/0021_benchmark_unsealed_abort.sql +64 -0
  100. infinity_context_adapters/postgres/migrations/0022_canonical_keyword_trigram.sql +5 -0
  101. infinity_context_adapters/postgres/models.py +878 -0
  102. infinity_context_adapters/postgres/projection_fence.py +80 -0
  103. infinity_context_adapters/postgres/repositories.py +906 -0
  104. infinity_context_adapters/postgres/repository_helpers.py +115 -0
  105. infinity_context_adapters/postgres/scope_repositories.py +540 -0
  106. infinity_context_adapters/postgres/unit_of_work.py +785 -0
  107. infinity_context_adapters/postgres/usage_repositories.py +128 -0
  108. infinity_context_adapters/postgres/user_repositories.py +164 -0
  109. infinity_context_adapters/provider_errors.py +73 -0
  110. infinity_context_adapters/qdrant/__init__.py +5 -0
  111. infinity_context_adapters/qdrant/identity_evidence.py +504 -0
  112. infinity_context_adapters/qdrant/vector_adapter.py +718 -0
  113. infinity_context_adapters/s3_blob.py +242 -0
  114. infinity_context_cli/__init__.py +5 -0
  115. infinity_context_cli/__main__.py +6 -0
  116. infinity_context_cli/cli.py +964 -0
  117. infinity_context_cli/config.py +184 -0
  118. infinity_context_cli/doctor.py +397 -0
  119. infinity_context_cli/local_experience.py +250 -0
  120. infinity_context_cli/mcp_config.py +124 -0
  121. infinity_context_cli/onboarding.py +542 -0
  122. infinity_context_cli/runtime.py +179 -0
  123. infinity_context_contracts/__init__.py +16 -0
  124. infinity_context_contracts/_json.py +32 -0
  125. infinity_context_contracts/capabilities.py +67 -0
  126. infinity_context_contracts/common.py +54 -0
  127. infinity_context_contracts/features/__init__.py +12 -0
  128. infinity_context_contracts/features/context_building.py +248 -0
  129. infinity_context_contracts/features/document_ingestion.py +277 -0
  130. infinity_context_contracts/features/memory_facts.py +236 -0
  131. infinity_context_contracts/features/memory_scopes.py +329 -0
  132. infinity_context_contracts/health.py +23 -0
  133. infinity_context_core/__init__.py +76 -0
  134. infinity_context_core/agent_behavior_contract.py +72 -0
  135. infinity_context_core/application/__init__.py +580 -0
  136. infinity_context_core/application/anchor_creative_work_filters.py +148 -0
  137. infinity_context_core/application/anchor_event_extraction.py +1571 -0
  138. infinity_context_core/application/anchor_extraction.py +1144 -0
  139. infinity_context_core/application/anchor_identity_normalization.py +90 -0
  140. infinity_context_core/application/anchor_relation_projection.py +203 -0
  141. infinity_context_core/application/anchor_temporal_window.py +172 -0
  142. infinity_context_core/application/asset_extraction_mapping.py +236 -0
  143. infinity_context_core/application/asset_upload_policy.py +952 -0
  144. infinity_context_core/application/auto_apply.py +72 -0
  145. infinity_context_core/application/auto_memory.py +527 -0
  146. infinity_context_core/application/capture_policy.py +61 -0
  147. infinity_context_core/application/chunker.py +93 -0
  148. infinity_context_core/application/context_action_role_evidence.py +890 -0
  149. infinity_context_core/application/context_action_role_labels.py +176 -0
  150. infinity_context_core/application/context_action_roles.py +2365 -0
  151. infinity_context_core/application/context_action_subject_policy.py +71 -0
  152. infinity_context_core/application/context_activity_companion.py +120 -0
  153. infinity_context_core/application/context_activity_duration_rerank.py +118 -0
  154. infinity_context_core/application/context_activity_participant_grounding.py +87 -0
  155. infinity_context_core/application/context_aggregation_answer_slots.py +586 -0
  156. infinity_context_core/application/context_aggregation_evidence_text.py +409 -0
  157. infinity_context_core/application/context_aggregation_rerank.py +145 -0
  158. infinity_context_core/application/context_aggregation_subject.py +137 -0
  159. infinity_context_core/application/context_allergy_condition_inference.py +146 -0
  160. infinity_context_core/application/context_anchor_identity.py +157 -0
  161. infinity_context_core/application/context_anchor_intent_ranking.py +84 -0
  162. infinity_context_core/application/context_anchor_relations.py +67 -0
  163. infinity_context_core/application/context_anchors.py +393 -0
  164. infinity_context_core/application/context_answer_evidence_types.py +14 -0
  165. infinity_context_core/application/context_answer_unit_shapes.py +207 -0
  166. infinity_context_core/application/context_artifact_evidence.py +893 -0
  167. infinity_context_core/application/context_attribution_lexicon.py +254 -0
  168. infinity_context_core/application/context_awareness_cause_rerank.py +109 -0
  169. infinity_context_core/application/context_baby_birth_evidence.py +91 -0
  170. infinity_context_core/application/context_birdwatching_schedule_rerank.py +130 -0
  171. infinity_context_core/application/context_bm25_ranking.py +450 -0
  172. infinity_context_core/application/context_book_author_preference_exact_turns.py +110 -0
  173. infinity_context_core/application/context_building_legacy_candidate_adapter.py +530 -0
  174. infinity_context_core/application/context_canonical_fact_retrieval.py +409 -0
  175. infinity_context_core/application/context_causal_reason_rerank.py +145 -0
  176. infinity_context_core/application/context_choice_reason_rerank.py +109 -0
  177. infinity_context_core/application/context_collectors.py +931 -0
  178. infinity_context_core/application/context_commonality_rerank.py +428 -0
  179. infinity_context_core/application/context_community_membership_inference.py +139 -0
  180. infinity_context_core/application/context_competition_count_exact_turns.py +383 -0
  181. infinity_context_core/application/context_conflicting_evidence_rerank.py +282 -0
  182. infinity_context_core/application/context_conversation_counterparty.py +260 -0
  183. infinity_context_core/application/context_count_cardinality.py +164 -0
  184. infinity_context_core/application/context_creative_work_count_exact_turns.py +517 -0
  185. infinity_context_core/application/context_diagnostics.py +55 -0
  186. infinity_context_core/application/context_diagnostics_bundle_keys.py +433 -0
  187. infinity_context_core/application/context_diagnostics_bundle_projection.py +711 -0
  188. infinity_context_core/application/context_diagnostics_item_projection.py +410 -0
  189. infinity_context_core/application/context_diagnostics_primitives.py +131 -0
  190. infinity_context_core/application/context_diagnostics_ranking.py +143 -0
  191. infinity_context_core/application/context_diagnostics_signals.py +209 -0
  192. infinity_context_core/application/context_diagnostics_sources.py +82 -0
  193. infinity_context_core/application/context_dialogue_authority.py +382 -0
  194. infinity_context_core/application/context_distinct_set_evidence.py +994 -0
  195. infinity_context_core/application/context_distinct_set_selection.py +335 -0
  196. infinity_context_core/application/context_domain_rerank_apply.py +310 -0
  197. infinity_context_core/application/context_domain_rerank_signals.py +2391 -0
  198. infinity_context_core/application/context_domain_rerank_types.py +14 -0
  199. infinity_context_core/application/context_english_activity_displacement_answer_support.py +128 -0
  200. infinity_context_core/application/context_english_lifestyle_inference.py +122 -0
  201. infinity_context_core/application/context_english_lifestyle_inference_answer_support.py +291 -0
  202. infinity_context_core/application/context_english_temporal_dates.py +53 -0
  203. infinity_context_core/application/context_evidence_priority.py +262 -0
  204. infinity_context_core/application/context_evidence_reservation_safety.py +208 -0
  205. infinity_context_core/application/context_exercise_performance_rerank.py +71 -0
  206. infinity_context_core/application/context_food_inventory_exact_turns.py +583 -0
  207. infinity_context_core/application/context_frequency_rerank.py +109 -0
  208. infinity_context_core/application/context_future_plan_timing_rerank.py +110 -0
  209. infinity_context_core/application/context_generic_behavior_inference.py +348 -0
  210. infinity_context_core/application/context_geo_residence_aliases.py +149 -0
  211. infinity_context_core/application/context_hydration.py +329 -0
  212. infinity_context_core/application/context_identity_fact_rerank.py +362 -0
  213. infinity_context_core/application/context_identity_rerank.py +76 -0
  214. infinity_context_core/application/context_identity_terms.py +15 -0
  215. infinity_context_core/application/context_inference_evidence.py +484 -0
  216. infinity_context_core/application/context_inference_evidence_terms.py +744 -0
  217. infinity_context_core/application/context_internal_diagnostics.py +61 -0
  218. infinity_context_core/application/context_item_evidence.py +108 -0
  219. infinity_context_core/application/context_item_purchase_evidence.py +49 -0
  220. infinity_context_core/application/context_keyword_aggregation_prefilter.py +63 -0
  221. infinity_context_core/application/context_keyword_ranking.py +178 -0
  222. infinity_context_core/application/context_lexical.py +750 -0
  223. infinity_context_core/application/context_lifecycle_rerank.py +502 -0
  224. infinity_context_core/application/context_link_candidate_policy.py +864 -0
  225. infinity_context_core/application/context_link_expansion.py +727 -0
  226. infinity_context_core/application/context_link_expansion_items.py +441 -0
  227. infinity_context_core/application/context_link_policy.py +451 -0
  228. infinity_context_core/application/context_link_source_enrichment.py +120 -0
  229. infinity_context_core/application/context_media_time.py +368 -0
  230. infinity_context_core/application/context_museum_visit_policy.py +66 -0
  231. infinity_context_core/application/context_named_person_preference.py +313 -0
  232. infinity_context_core/application/context_national_park_inference.py +93 -0
  233. infinity_context_core/application/context_object_attribute_rerank.py +416 -0
  234. infinity_context_core/application/context_object_mismatch.py +63 -0
  235. infinity_context_core/application/context_occupational_role_identity.py +961 -0
  236. infinity_context_core/application/context_ordinal_sequence.py +134 -0
  237. infinity_context_core/application/context_owner_grounding.py +408 -0
  238. infinity_context_core/application/context_packer.py +858 -0
  239. infinity_context_core/application/context_packer_answer_slots.py +733 -0
  240. infinity_context_core/application/context_packer_answer_support.py +3101 -0
  241. infinity_context_core/application/context_packer_answer_support_patterns.py +1267 -0
  242. infinity_context_core/application/context_packer_answer_support_slots.py +1209 -0
  243. infinity_context_core/application/context_packer_answer_support_utils.py +473 -0
  244. infinity_context_core/application/context_packer_diagnostics.py +48 -0
  245. infinity_context_core/application/context_packer_exact_literal_turns.py +697 -0
  246. infinity_context_core/application/context_packer_exact_prepasses.py +758 -0
  247. infinity_context_core/application/context_packer_exact_turn_utils.py +133 -0
  248. infinity_context_core/application/context_packer_identity_policy.py +155 -0
  249. infinity_context_core/application/context_packer_inference_reservation.py +113 -0
  250. infinity_context_core/application/context_packer_inventory_prepasses.py +359 -0
  251. infinity_context_core/application/context_packer_inventory_slots.py +771 -0
  252. infinity_context_core/application/context_packer_marker_coverage.py +409 -0
  253. infinity_context_core/application/context_packer_rendering.py +338 -0
  254. infinity_context_core/application/context_packer_selection.py +487 -0
  255. infinity_context_core/application/context_packer_source_policy.py +123 -0
  256. infinity_context_core/application/context_paired_evidence_requirements.py +78 -0
  257. infinity_context_core/application/context_paired_evidence_roles.py +64 -0
  258. infinity_context_core/application/context_person_activity_exact_turns.py +375 -0
  259. infinity_context_core/application/context_person_aliases.py +49 -0
  260. infinity_context_core/application/context_person_kinship.py +296 -0
  261. infinity_context_core/application/context_person_occupation.py +240 -0
  262. infinity_context_core/application/context_person_relation_inventory.py +755 -0
  263. infinity_context_core/application/context_person_residence.py +398 -0
  264. infinity_context_core/application/context_person_team_membership.py +305 -0
  265. infinity_context_core/application/context_pet_ownership.py +223 -0
  266. infinity_context_core/application/context_polarity_rerank.py +338 -0
  267. infinity_context_core/application/context_policy.py +107 -0
  268. infinity_context_core/application/context_political_inference.py +128 -0
  269. infinity_context_core/application/context_possession_source.py +161 -0
  270. infinity_context_core/application/context_precise_temporal_evidence.py +156 -0
  271. infinity_context_core/application/context_preference_goal_rerank.py +428 -0
  272. infinity_context_core/application/context_preference_inference.py +335 -0
  273. infinity_context_core/application/context_property_interaction_evidence.py +659 -0
  274. infinity_context_core/application/context_provider_retrieval_terms.py +95 -0
  275. infinity_context_core/application/context_quality.py +488 -0
  276. infinity_context_core/application/context_quantity_evidence_patterns.py +254 -0
  277. infinity_context_core/application/context_quantity_evidence_slots.py +750 -0
  278. infinity_context_core/application/context_quantity_pending_clothing.py +200 -0
  279. infinity_context_core/application/context_query_artifact_inventory_expansions.py +76 -0
  280. infinity_context_core/application/context_query_decomposition.py +879 -0
  281. infinity_context_core/application/context_query_decomposition_answer_policy.py +707 -0
  282. infinity_context_core/application/context_query_decomposition_contracts.py +28 -0
  283. infinity_context_core/application/context_query_decomposition_event_policy.py +535 -0
  284. infinity_context_core/application/context_query_decomposition_inventory_policy.py +767 -0
  285. infinity_context_core/application/context_query_decomposition_shared.py +300 -0
  286. infinity_context_core/application/context_query_duration.py +171 -0
  287. infinity_context_core/application/context_query_entity_relation_expansions.py +212 -0
  288. infinity_context_core/application/context_query_event_summary_expansions.py +80 -0
  289. infinity_context_core/application/context_query_expansion.py +200 -0
  290. infinity_context_core/application/context_query_expansion_rule_catalog_part1.py +1279 -0
  291. infinity_context_core/application/context_query_expansion_rule_catalog_part2.py +770 -0
  292. infinity_context_core/application/context_query_expansion_rule_catalog_part3.py +982 -0
  293. infinity_context_core/application/context_query_expansion_rule_catalog_part4.py +1334 -0
  294. infinity_context_core/application/context_query_expansion_rule_catalog_part5.py +517 -0
  295. infinity_context_core/application/context_query_expansion_rule_terms.py +269 -0
  296. infinity_context_core/application/context_query_expansion_rules.py +66 -0
  297. infinity_context_core/application/context_query_expansion_selection.py +892 -0
  298. infinity_context_core/application/context_query_financial_resources_inference.py +92 -0
  299. infinity_context_core/application/context_query_food_expansions.py +89 -0
  300. infinity_context_core/application/context_query_frequency.py +194 -0
  301. infinity_context_core/application/context_query_game_expansions.py +141 -0
  302. infinity_context_core/application/context_query_health_lifestyle_expansions.py +178 -0
  303. infinity_context_core/application/context_query_identity_terms.py +81 -0
  304. infinity_context_core/application/context_query_intent.py +33 -0
  305. infinity_context_core/application/context_query_intent_common.py +29 -0
  306. infinity_context_core/application/context_query_intent_contracts.py +92 -0
  307. infinity_context_core/application/context_query_intent_extraction.py +614 -0
  308. infinity_context_core/application/context_query_intent_keys.py +499 -0
  309. infinity_context_core/application/context_query_intent_matching.py +407 -0
  310. infinity_context_core/application/context_query_organization_summary_expansions.py +75 -0
  311. infinity_context_core/application/context_query_personal_fact_expansions.py +314 -0
  312. infinity_context_core/application/context_query_pet_activity_expansions.py +329 -0
  313. infinity_context_core/application/context_query_preference_expansions.py +97 -0
  314. infinity_context_core/application/context_query_project_summary_expansions.py +60 -0
  315. infinity_context_core/application/context_query_relevance_ranking.py +76 -0
  316. infinity_context_core/application/context_query_sports_expansions.py +48 -0
  317. infinity_context_core/application/context_query_state_transition.py +53 -0
  318. infinity_context_core/application/context_query_support_role.py +165 -0
  319. infinity_context_core/application/context_query_temporal_expansions.py +18 -0
  320. infinity_context_core/application/context_query_travel_expansions.py +134 -0
  321. infinity_context_core/application/context_query_vehicle_expansions.py +79 -0
  322. infinity_context_core/application/context_query_workflow_expansions.py +233 -0
  323. infinity_context_core/application/context_query_workflow_intent.py +65 -0
  324. infinity_context_core/application/context_quote_scanner.py +342 -0
  325. infinity_context_core/application/context_rank_dedupe.py +171 -0
  326. infinity_context_core/application/context_rank_fusion.py +191 -0
  327. infinity_context_core/application/context_ranked_activity_reservation.py +586 -0
  328. infinity_context_core/application/context_ranked_evidence_coverage_reservation.py +427 -0
  329. infinity_context_core/application/context_ranked_evidence_priority_reservation.py +37 -0
  330. infinity_context_core/application/context_ranked_evidence_selection.py +260 -0
  331. infinity_context_core/application/context_ranking.py +3681 -0
  332. infinity_context_core/application/context_ranking_reason_policy.py +31 -0
  333. infinity_context_core/application/context_ranking_reason_priorities.py +859 -0
  334. infinity_context_core/application/context_ranking_reason_scores.py +519 -0
  335. infinity_context_core/application/context_recommendation_answer_support.py +358 -0
  336. infinity_context_core/application/context_recommendation_exact_turns.py +360 -0
  337. infinity_context_core/application/context_relation_requirement.py +498 -0
  338. infinity_context_core/application/context_relationship_status_evidence.py +83 -0
  339. infinity_context_core/application/context_relative_duration_evidence.py +61 -0
  340. infinity_context_core/application/context_relevance.py +430 -0
  341. infinity_context_core/application/context_reported_obligation_attribution.py +416 -0
  342. infinity_context_core/application/context_reporting_frames.py +338 -0
  343. infinity_context_core/application/context_requirement_coverage.py +767 -0
  344. infinity_context_core/application/context_requirement_guard.py +503 -0
  345. infinity_context_core/application/context_requirement_patterns.py +943 -0
  346. infinity_context_core/application/context_requirement_ranking.py +181 -0
  347. infinity_context_core/application/context_requirement_signals.py +101 -0
  348. infinity_context_core/application/context_rerank_domain_heuristics.py +433 -0
  349. infinity_context_core/application/context_rerank_evidence_signals.py +400 -0
  350. infinity_context_core/application/context_rerank_relevance.py +131 -0
  351. infinity_context_core/application/context_retrieval_performance.py +153 -0
  352. infinity_context_core/application/context_review_items.py +338 -0
  353. infinity_context_core/application/context_score_signal_rerank.py +21 -0
  354. infinity_context_core/application/context_short_story_progress_evidence.py +119 -0
  355. infinity_context_core/application/context_snippets.py +545 -0
  356. infinity_context_core/application/context_social_education_inference.py +265 -0
  357. infinity_context_core/application/context_social_inventory_rerank.py +329 -0
  358. infinity_context_core/application/context_source_family.py +100 -0
  359. infinity_context_core/application/context_source_grounding.py +277 -0
  360. infinity_context_core/application/context_source_sibling_answer_evidence_repair.py +1983 -0
  361. infinity_context_core/application/context_source_sibling_contracts.py +35 -0
  362. infinity_context_core/application/context_source_sibling_evidence.py +405 -0
  363. infinity_context_core/application/context_source_sibling_evidence_rules.py +798 -0
  364. infinity_context_core/application/context_source_sibling_evidence_shared.py +449 -0
  365. infinity_context_core/application/context_source_sibling_identity.py +114 -0
  366. infinity_context_core/application/context_source_sibling_inventory_evidence.py +28 -0
  367. infinity_context_core/application/context_source_sibling_patterns.py +946 -0
  368. infinity_context_core/application/context_source_sibling_place_evidence.py +561 -0
  369. infinity_context_core/application/context_source_sibling_policy.py +988 -0
  370. infinity_context_core/application/context_source_sibling_scoring.py +721 -0
  371. infinity_context_core/application/context_source_siblings.py +363 -0
  372. infinity_context_core/application/context_speaker_attribution.py +574 -0
  373. infinity_context_core/application/context_speaker_disambiguation.py +108 -0
  374. infinity_context_core/application/context_stage_diagnostics.py +111 -0
  375. infinity_context_core/application/context_state_evidence.py +196 -0
  376. infinity_context_core/application/context_state_residence_inference.py +163 -0
  377. infinity_context_core/application/context_state_transition_pairing.py +401 -0
  378. infinity_context_core/application/context_temporal_answer_grounding.py +187 -0
  379. infinity_context_core/application/context_temporal_hints.py +485 -0
  380. infinity_context_core/application/context_temporal_intent_policy.py +146 -0
  381. infinity_context_core/application/context_temporal_interval_requirements.py +107 -0
  382. infinity_context_core/application/context_temporal_metadata.py +29 -0
  383. infinity_context_core/application/context_temporal_query.py +1358 -0
  384. infinity_context_core/application/context_temporal_ranges.py +471 -0
  385. infinity_context_core/application/context_temporal_session_order.py +439 -0
  386. infinity_context_core/application/context_temporal_source_identity.py +426 -0
  387. infinity_context_core/application/context_temporal_source_turn.py +1290 -0
  388. infinity_context_core/application/context_temporal_source_turn_labels.py +265 -0
  389. infinity_context_core/application/context_temporal_source_turn_patterns.py +186 -0
  390. infinity_context_core/application/context_temporal_source_turn_types.py +62 -0
  391. infinity_context_core/application/context_travel_hobby_writing_evidence.py +176 -0
  392. infinity_context_core/application/context_travel_place_evidence.py +23 -0
  393. infinity_context_core/application/document_fragments.py +206 -0
  394. infinity_context_core/application/document_text.py +203 -0
  395. infinity_context_core/application/dto.py +311 -0
  396. infinity_context_core/application/dto_anchors.py +143 -0
  397. infinity_context_core/application/dto_assets.py +234 -0
  398. infinity_context_core/application/dto_benchmark_runs.py +114 -0
  399. infinity_context_core/application/dto_context.py +176 -0
  400. infinity_context_core/application/dto_context_links.py +170 -0
  401. infinity_context_core/application/dto_facts.py +275 -0
  402. infinity_context_core/application/dto_suggestions_capture.py +199 -0
  403. infinity_context_core/application/dto_workspace.py +101 -0
  404. infinity_context_core/application/extraction_coordinates.py +56 -0
  405. infinity_context_core/application/extraction_resource_policy.py +796 -0
  406. infinity_context_core/application/extractor.py +147 -0
  407. infinity_context_core/application/memory_digest_renderer.py +215 -0
  408. infinity_context_core/application/multimodal_manifest.py +418 -0
  409. infinity_context_core/application/normalize.py +29 -0
  410. infinity_context_core/application/observed_anchor_resolution.py +243 -0
  411. infinity_context_core/application/related_facts.py +144 -0
  412. infinity_context_core/application/review_payloads.py +104 -0
  413. infinity_context_core/application/safe_payload.py +86 -0
  414. infinity_context_core/application/semantic_dedupe.py +943 -0
  415. infinity_context_core/application/sensitive_text.py +39 -0
  416. infinity_context_core/application/source_refs.py +263 -0
  417. infinity_context_core/application/storage_key_safety.py +13 -0
  418. infinity_context_core/application/temporal_validity.py +31 -0
  419. infinity_context_core/application/use_cases/__init__.py +1 -0
  420. infinity_context_core/application/use_cases/anchors.py +1165 -0
  421. infinity_context_core/application/use_cases/asset_extraction_support.py +273 -0
  422. infinity_context_core/application/use_cases/asset_extractions.py +1454 -0
  423. infinity_context_core/application/use_cases/assets.py +463 -0
  424. infinity_context_core/application/use_cases/benchmark_runs.py +877 -0
  425. infinity_context_core/application/use_cases/benchmark_unsealed_abort.py +147 -0
  426. infinity_context_core/application/use_cases/blob_storage_cleanup.py +289 -0
  427. infinity_context_core/application/use_cases/blob_storage_integrity.py +351 -0
  428. infinity_context_core/application/use_cases/build_context.py +995 -0
  429. infinity_context_core/application/use_cases/build_context_final_packing.py +59 -0
  430. infinity_context_core/application/use_cases/build_context_item_projection.py +839 -0
  431. infinity_context_core/application/use_cases/build_context_keyword_aggregation.py +908 -0
  432. infinity_context_core/application/use_cases/build_context_keyword_aggregation_seeds.py +132 -0
  433. infinity_context_core/application/use_cases/build_context_keyword_aggregation_selection.py +280 -0
  434. infinity_context_core/application/use_cases/build_context_keyword_aggregation_support.py +161 -0
  435. infinity_context_core/application/use_cases/build_context_requirement_guard.py +156 -0
  436. infinity_context_core/application/use_cases/build_context_source_selection.py +935 -0
  437. infinity_context_core/application/use_cases/build_memory_digest.py +203 -0
  438. infinity_context_core/application/use_cases/build_memory_insights.py +979 -0
  439. infinity_context_core/application/use_cases/consolidate_capture.py +806 -0
  440. infinity_context_core/application/use_cases/context_link_crud.py +196 -0
  441. infinity_context_core/application/use_cases/context_link_reviews.py +441 -0
  442. infinity_context_core/application/use_cases/context_link_suggestions.py +1060 -0
  443. infinity_context_core/application/use_cases/context_link_visibility.py +106 -0
  444. infinity_context_core/application/use_cases/context_links.py +33 -0
  445. infinity_context_core/application/use_cases/delete_document.py +71 -0
  446. infinity_context_core/application/use_cases/delete_thread_memory.py +55 -0
  447. infinity_context_core/application/use_cases/duplicate_merge_resolution.py +307 -0
  448. infinity_context_core/application/use_cases/ensure_scope.py +29 -0
  449. infinity_context_core/application/use_cases/expire_suggestions.py +36 -0
  450. infinity_context_core/application/use_cases/export_graph.py +684 -0
  451. infinity_context_core/application/use_cases/fact_relations.py +204 -0
  452. infinity_context_core/application/use_cases/forget_fact.py +43 -0
  453. infinity_context_core/application/use_cases/get_capabilities.py +213 -0
  454. infinity_context_core/application/use_cases/get_capture.py +16 -0
  455. infinity_context_core/application/use_cases/get_session_status.py +23 -0
  456. infinity_context_core/application/use_cases/ingest_document.py +376 -0
  457. infinity_context_core/application/use_cases/ingest_episode.py +263 -0
  458. infinity_context_core/application/use_cases/list_captures.py +25 -0
  459. infinity_context_core/application/use_cases/memory_browser.py +414 -0
  460. infinity_context_core/application/use_cases/operations_console.py +293 -0
  461. infinity_context_core/application/use_cases/process_document.py +83 -0
  462. infinity_context_core/application/use_cases/purge_capture.py +34 -0
  463. infinity_context_core/application/use_cases/query_documents.py +42 -0
  464. infinity_context_core/application/use_cases/query_facts.py +57 -0
  465. infinity_context_core/application/use_cases/receive_capture.py +238 -0
  466. infinity_context_core/application/use_cases/related_facts.py +47 -0
  467. infinity_context_core/application/use_cases/remember_fact.py +145 -0
  468. infinity_context_core/application/use_cases/spaces_memory_scopes.py +134 -0
  469. infinity_context_core/application/use_cases/suggestions.py +804 -0
  470. infinity_context_core/application/use_cases/update_fact.py +43 -0
  471. infinity_context_core/application/use_cases/usage.py +49 -0
  472. infinity_context_core/application/use_cases/users.py +138 -0
  473. infinity_context_core/domain/__init__.py +1 -0
  474. infinity_context_core/domain/aggregation_admission.py +200 -0
  475. infinity_context_core/domain/anchor_entities.py +316 -0
  476. infinity_context_core/domain/assets.py +654 -0
  477. infinity_context_core/domain/capture.py +321 -0
  478. infinity_context_core/domain/distinct_set_membership.py +69 -0
  479. infinity_context_core/domain/entities.py +103 -0
  480. infinity_context_core/domain/entity_policies.py +119 -0
  481. infinity_context_core/domain/entity_types.py +150 -0
  482. infinity_context_core/domain/errors.py +53 -0
  483. infinity_context_core/domain/events.py +14 -0
  484. infinity_context_core/domain/extraction.py +529 -0
  485. infinity_context_core/domain/idempotency.py +12 -0
  486. infinity_context_core/domain/memory_item_entities.py +426 -0
  487. infinity_context_core/domain/source_refs.py +91 -0
  488. infinity_context_core/domain/suggestion_entities.py +236 -0
  489. infinity_context_core/domain/taxonomy.py +121 -0
  490. infinity_context_core/domain/usage.py +221 -0
  491. infinity_context_core/domain/workspace_entities.py +269 -0
  492. infinity_context_core/features/__init__.py +7 -0
  493. infinity_context_core/features/context_building/__init__.py +3 -0
  494. infinity_context_core/features/context_building/application/__init__.py +92 -0
  495. infinity_context_core/features/context_building/application/candidate_fusion.py +136 -0
  496. infinity_context_core/features/context_building/application/coverage_reservation_selector.py +212 -0
  497. infinity_context_core/features/context_building/application/handlers.py +155 -0
  498. infinity_context_core/features/context_building/application/inference_evidence_reservation.py +592 -0
  499. infinity_context_core/features/context_building/application/provider_pipeline.py +61 -0
  500. infinity_context_core/features/context_building/application/queries.py +107 -0
  501. infinity_context_core/features/context_building/application/use_cases.py +78 -0
  502. infinity_context_core/features/context_building/domain/__init__.py +95 -0
  503. infinity_context_core/features/context_building/domain/budget.py +97 -0
  504. infinity_context_core/features/context_building/domain/context.py +157 -0
  505. infinity_context_core/features/context_building/domain/evidence_obligations.py +60 -0
  506. infinity_context_core/features/context_building/domain/feature.py +15 -0
  507. infinity_context_core/features/context_building/domain/prompt_sections.py +150 -0
  508. infinity_context_core/features/context_building/domain/query_pipeline.py +276 -0
  509. infinity_context_core/features/context_building/domain/rendering.py +102 -0
  510. infinity_context_core/features/context_building/ports/__init__.py +8 -0
  511. infinity_context_core/features/context_building/ports/candidates.py +36 -0
  512. infinity_context_core/features/context_building/public.py +165 -0
  513. infinity_context_core/features/context_building/tests/test_application_ports_public_skeleton.py +575 -0
  514. infinity_context_core/features/context_building/tests/test_domain_context_building_skeleton.py +402 -0
  515. infinity_context_core/features/document_ingestion/__init__.py +3 -0
  516. infinity_context_core/features/document_ingestion/application/__init__.py +31 -0
  517. infinity_context_core/features/document_ingestion/application/commands.py +62 -0
  518. infinity_context_core/features/document_ingestion/application/use_cases.py +273 -0
  519. infinity_context_core/features/document_ingestion/domain/__init__.py +61 -0
  520. infinity_context_core/features/document_ingestion/domain/chunking.py +297 -0
  521. infinity_context_core/features/document_ingestion/domain/errors.py +22 -0
  522. infinity_context_core/features/document_ingestion/domain/feature.py +18 -0
  523. infinity_context_core/features/document_ingestion/domain/source_document.py +228 -0
  524. infinity_context_core/features/document_ingestion/ports/__init__.py +21 -0
  525. infinity_context_core/features/document_ingestion/ports/indexing.py +51 -0
  526. infinity_context_core/features/document_ingestion/ports/repositories.py +56 -0
  527. infinity_context_core/features/document_ingestion/public.py +95 -0
  528. infinity_context_core/features/document_ingestion/tests/test_application_handlers.py +226 -0
  529. infinity_context_core/features/document_ingestion/tests/test_application_ports_public_skeleton.py +334 -0
  530. infinity_context_core/features/document_ingestion/tests/test_domain_chunking_skeleton.py +79 -0
  531. infinity_context_core/features/document_ingestion/tests/test_domain_source_document_skeleton.py +101 -0
  532. infinity_context_core/features/memory_facts/__init__.py +3 -0
  533. infinity_context_core/features/memory_facts/application/__init__.py +37 -0
  534. infinity_context_core/features/memory_facts/application/commands.py +89 -0
  535. infinity_context_core/features/memory_facts/application/handlers.py +241 -0
  536. infinity_context_core/features/memory_facts/application/use_cases.py +47 -0
  537. infinity_context_core/features/memory_facts/domain/__init__.py +35 -0
  538. infinity_context_core/features/memory_facts/domain/fact.py +98 -0
  539. infinity_context_core/features/memory_facts/domain/feature.py +15 -0
  540. infinity_context_core/features/memory_facts/ports/__init__.py +31 -0
  541. infinity_context_core/features/memory_facts/ports/clock.py +14 -0
  542. infinity_context_core/features/memory_facts/ports/ids.py +19 -0
  543. infinity_context_core/features/memory_facts/ports/outbox.py +26 -0
  544. infinity_context_core/features/memory_facts/ports/repositories.py +30 -0
  545. infinity_context_core/features/memory_facts/ports/unit_of_work.py +43 -0
  546. infinity_context_core/features/memory_facts/public.py +79 -0
  547. infinity_context_core/features/memory_facts/tests/test_application_handlers.py +332 -0
  548. infinity_context_core/features/memory_facts/tests/test_application_ports_public_skeleton.py +318 -0
  549. infinity_context_core/features/memory_facts/tests/test_domain_fact_skeleton.py +222 -0
  550. infinity_context_core/features/memory_scopes/__init__.py +3 -0
  551. infinity_context_core/features/memory_scopes/application/__init__.py +55 -0
  552. infinity_context_core/features/memory_scopes/application/commands.py +102 -0
  553. infinity_context_core/features/memory_scopes/application/errors.py +27 -0
  554. infinity_context_core/features/memory_scopes/application/handlers.py +226 -0
  555. infinity_context_core/features/memory_scopes/application/use_cases.py +68 -0
  556. infinity_context_core/features/memory_scopes/domain/__init__.py +59 -0
  557. infinity_context_core/features/memory_scopes/domain/errors.py +22 -0
  558. infinity_context_core/features/memory_scopes/domain/feature.py +18 -0
  559. infinity_context_core/features/memory_scopes/domain/policies.py +197 -0
  560. infinity_context_core/features/memory_scopes/domain/scope.py +178 -0
  561. infinity_context_core/features/memory_scopes/ports/__init__.py +25 -0
  562. infinity_context_core/features/memory_scopes/ports/clock.py +14 -0
  563. infinity_context_core/features/memory_scopes/ports/ids.py +13 -0
  564. infinity_context_core/features/memory_scopes/ports/repositories.py +40 -0
  565. infinity_context_core/features/memory_scopes/ports/unit_of_work.py +39 -0
  566. infinity_context_core/features/memory_scopes/public.py +111 -0
  567. infinity_context_core/features/memory_scopes/tests/test_application_ports_public_skeleton.py +824 -0
  568. infinity_context_core/features/memory_scopes/tests/test_domain_scope_skeleton.py +428 -0
  569. infinity_context_core/memory_scope_snapshot_preview.py +863 -0
  570. infinity_context_core/memory_scope_snapshots.py +206 -0
  571. infinity_context_core/ports/__init__.py +164 -0
  572. infinity_context_core/ports/adapters.py +217 -0
  573. infinity_context_core/ports/assets.py +270 -0
  574. infinity_context_core/ports/auth.py +68 -0
  575. infinity_context_core/ports/auto_memory.py +71 -0
  576. infinity_context_core/ports/benchmark_runs.py +205 -0
  577. infinity_context_core/ports/capabilities.py +324 -0
  578. infinity_context_core/ports/captures.py +53 -0
  579. infinity_context_core/ports/clock.py +11 -0
  580. infinity_context_core/ports/derived_projection_policy.py +72 -0
  581. infinity_context_core/ports/extraction.py +201 -0
  582. infinity_context_core/ports/graph_evidence.py +170 -0
  583. infinity_context_core/ports/ids.py +11 -0
  584. infinity_context_core/ports/projection_fence.py +27 -0
  585. infinity_context_core/ports/repositories.py +563 -0
  586. infinity_context_core/ports/transcription.py +63 -0
  587. infinity_context_core/ports/unit_of_work.py +77 -0
  588. infinity_context_core/ports/usage.py +36 -0
  589. infinity_context_core/ports/vector_projection_evidence.py +230 -0
  590. infinity_context_core/ports/vision.py +36 -0
  591. infinity_context_core/processes/__init__.py +3 -0
  592. infinity_context_core/processes/document_memory_pipeline/__init__.py +3 -0
  593. infinity_context_core/processes/document_memory_pipeline/contracts.py +44 -0
  594. infinity_context_core/processes/document_memory_pipeline/process.py +72 -0
  595. infinity_context_core/processes/document_memory_pipeline/public.py +21 -0
  596. infinity_context_core/reporting.py +105 -0
  597. infinity_context_mcp/__init__.py +5 -0
  598. infinity_context_mcp/__main__.py +6 -0
  599. infinity_context_mcp/adapters/__init__.py +1 -0
  600. infinity_context_mcp/adapters/http_gateway.py +940 -0
  601. infinity_context_mcp/agent_behavior_bench.py +1731 -0
  602. infinity_context_mcp/agent_behavior_bench_metrics.py +419 -0
  603. infinity_context_mcp/agent_behavior_bench_redaction.py +149 -0
  604. infinity_context_mcp/agent_behavior_bench_types.py +127 -0
  605. infinity_context_mcp/agent_behavior_scenarios.py +35 -0
  606. infinity_context_mcp/agent_behavior_scenarios_core.py +484 -0
  607. infinity_context_mcp/agent_behavior_scenarios_realistic.py +473 -0
  608. infinity_context_mcp/agent_behavior_scenarios_transcript.py +196 -0
  609. infinity_context_mcp/agent_behavior_transcripts.py +231 -0
  610. infinity_context_mcp/agent_behavior_types.py +66 -0
  611. infinity_context_mcp/agent_behavior_utils.py +29 -0
  612. infinity_context_mcp/application/__init__.py +1 -0
  613. infinity_context_mcp/application/context_link_review.py +109 -0
  614. infinity_context_mcp/application/local_runtime.py +473 -0
  615. infinity_context_mcp/application/normalization.py +36 -0
  616. infinity_context_mcp/application/obsidian.py +568 -0
  617. infinity_context_mcp/application/policy.py +160 -0
  618. infinity_context_mcp/application/ports.py +324 -0
  619. infinity_context_mcp/application/prepare.py +254 -0
  620. infinity_context_mcp/application/readiness.py +71 -0
  621. infinity_context_mcp/application/review_batch.py +62 -0
  622. infinity_context_mcp/application/service.py +701 -0
  623. infinity_context_mcp/application/service_base.py +29 -0
  624. infinity_context_mcp/application/service_constants.py +89 -0
  625. infinity_context_mcp/application/service_context_links.py +224 -0
  626. infinity_context_mcp/application/service_duplicates.py +62 -0
  627. infinity_context_mcp/application/service_facts.py +461 -0
  628. infinity_context_mcp/application/service_helpers.py +179 -0
  629. infinity_context_mcp/application/service_lifecycle.py +348 -0
  630. infinity_context_mcp/application/service_policy.py +74 -0
  631. infinity_context_mcp/application/service_query.py +384 -0
  632. infinity_context_mcp/application/service_resources.py +192 -0
  633. infinity_context_mcp/application/service_response.py +95 -0
  634. infinity_context_mcp/application/service_scope.py +132 -0
  635. infinity_context_mcp/application/service_suggestions.py +820 -0
  636. infinity_context_mcp/application/suggest_batch.py +71 -0
  637. infinity_context_mcp/application/usage_guide.py +74 -0
  638. infinity_context_mcp/bench.py +279 -0
  639. infinity_context_mcp/config.py +213 -0
  640. infinity_context_mcp/domain/__init__.py +1 -0
  641. infinity_context_mcp/domain/context_links.py +117 -0
  642. infinity_context_mcp/domain/local_runtime_models.py +56 -0
  643. infinity_context_mcp/domain/memory_browser.py +35 -0
  644. infinity_context_mcp/domain/models.py +1036 -0
  645. infinity_context_mcp/domain/obsidian_models.py +67 -0
  646. infinity_context_mcp/domain/policy.py +112 -0
  647. infinity_context_mcp/domain/prepare_models.py +24 -0
  648. infinity_context_mcp/plugin_hook.py +873 -0
  649. infinity_context_mcp/plugin_hook_settings.py +253 -0
  650. infinity_context_mcp/server.py +133 -0
  651. infinity_context_mcp/server_context_tools.py +404 -0
  652. infinity_context_mcp/server_fact_tools.py +928 -0
  653. infinity_context_mcp/server_hardening.py +54 -0
  654. infinity_context_mcp/server_local_runtime_tools.py +164 -0
  655. infinity_context_mcp/server_obsidian_tools.py +380 -0
  656. infinity_context_mcp/server_query_tools.py +626 -0
  657. infinity_context_mcp/server_request_mapping.py +73 -0
  658. infinity_context_mcp/server_resources.py +187 -0
  659. infinity_context_mcp/server_response.py +26 -0
  660. infinity_context_obsidian/__init__.py +5 -0
  661. infinity_context_obsidian/cli.py +594 -0
  662. infinity_context_obsidian/conflicts.py +110 -0
  663. infinity_context_obsidian/doctor.py +319 -0
  664. infinity_context_obsidian/domain.py +92 -0
  665. infinity_context_obsidian/frontmatter.py +68 -0
  666. infinity_context_obsidian/gateway.py +66 -0
  667. infinity_context_obsidian/layout.py +179 -0
  668. infinity_context_obsidian/note_format.py +159 -0
  669. infinity_context_obsidian/plugin_bundle/__init__.py +1 -0
  670. infinity_context_obsidian/plugin_bundle/main.js +5 -0
  671. infinity_context_obsidian/plugin_bundle/manifest.json +10 -0
  672. infinity_context_obsidian/plugin_bundle/styles.css +123 -0
  673. infinity_context_obsidian/plugin_install.py +139 -0
  674. infinity_context_obsidian/ports.py +72 -0
  675. infinity_context_obsidian/setup.py +202 -0
  676. infinity_context_obsidian/state.py +85 -0
  677. infinity_context_obsidian/sync.py +741 -0
  678. infinity_context_obsidian/vault.py +61 -0
  679. infinity_context_sdk/__init__.py +1049 -0
  680. infinity_context_sdk/_payloads.py +401 -0
  681. infinity_context_sdk/_redaction.py +31 -0
  682. infinity_context_sdk/anchors.py +249 -0
  683. infinity_context_sdk/assets.py +554 -0
  684. infinity_context_sdk/capabilities.py +199 -0
  685. infinity_context_sdk/context.py +540 -0
  686. infinity_context_sdk/context_bundle_diagnostics.py +905 -0
  687. infinity_context_sdk/context_payload_utils.py +219 -0
  688. infinity_context_sdk/export.py +123 -0
  689. infinity_context_sdk/scopes.py +74 -0
  690. infinity_context_sdk/thread_memory.py +55 -0
  691. infinity_context_server/__init__.py +5 -0
  692. infinity_context_server/__main__.py +19 -0
  693. infinity_context_server/admin.py +832 -0
  694. infinity_context_server/admin_invariants.py +388 -0
  695. infinity_context_server/admin_outbox.py +130 -0
  696. infinity_context_server/admin_projection_repair.py +374 -0
  697. infinity_context_server/api/__init__.py +1 -0
  698. infinity_context_server/api/auth.py +432 -0
  699. infinity_context_server/api/dependencies.py +9 -0
  700. infinity_context_server/api/errors.py +94 -0
  701. infinity_context_server/api/legacy_client.py +356 -0
  702. infinity_context_server/api/policy.py +35 -0
  703. infinity_context_server/api/public_payload.py +27 -0
  704. infinity_context_server/api/v1/__init__.py +54 -0
  705. infinity_context_server/api/v1/anchors.py +469 -0
  706. infinity_context_server/api/v1/assets.py +409 -0
  707. infinity_context_server/api/v1/capabilities.py +144 -0
  708. infinity_context_server/api/v1/captures.py +329 -0
  709. infinity_context_server/api/v1/context.py +362 -0
  710. infinity_context_server/api/v1/context_links.py +611 -0
  711. infinity_context_server/api/v1/diagnostics.py +333 -0
  712. infinity_context_server/api/v1/digest.py +107 -0
  713. infinity_context_server/api/v1/documents.py +164 -0
  714. infinity_context_server/api/v1/episodes.py +146 -0
  715. infinity_context_server/api/v1/export.py +184 -0
  716. infinity_context_server/api/v1/facts.py +265 -0
  717. infinity_context_server/api/v1/health.py +24 -0
  718. infinity_context_server/api/v1/insights.py +100 -0
  719. infinity_context_server/api/v1/internal_memory_comparison_runs.py +406 -0
  720. infinity_context_server/api/v1/memory_browser.py +183 -0
  721. infinity_context_server/api/v1/operations.py +81 -0
  722. infinity_context_server/api/v1/scope_resolution.py +389 -0
  723. infinity_context_server/api/v1/source_refs.py +111 -0
  724. infinity_context_server/api/v1/spaces_memory_scopes.py +141 -0
  725. infinity_context_server/api/v1/suggestions.py +237 -0
  726. infinity_context_server/api/v1/thread_memory.py +74 -0
  727. infinity_context_server/api/v1/usage.py +75 -0
  728. infinity_context_server/api/v1/users.py +164 -0
  729. infinity_context_server/auth_scope.py +492 -0
  730. infinity_context_server/auth_tokens.py +283 -0
  731. infinity_context_server/backpressure.py +47 -0
  732. infinity_context_server/benchmark_projection_absence.py +155 -0
  733. infinity_context_server/benchmark_projection_delete_outbox.py +162 -0
  734. infinity_context_server/composition.py +897 -0
  735. infinity_context_server/config.py +223 -0
  736. infinity_context_server/db.py +39 -0
  737. infinity_context_server/deployment_readiness.py +205 -0
  738. infinity_context_server/derived_identity_evidence.py +987 -0
  739. infinity_context_server/derived_identity_target.py +39 -0
  740. infinity_context_server/derived_projection_policy.py +85 -0
  741. infinity_context_server/diagnostics.py +536 -0
  742. infinity_context_server/doctor.py +71 -0
  743. infinity_context_server/eval.py +3066 -0
  744. infinity_context_server/eval_auto_memory.py +1735 -0
  745. infinity_context_server/eval_auto_memory_metrics.py +224 -0
  746. infinity_context_server/eval_auto_memory_types.py +75 -0
  747. infinity_context_server/eval_case_catalog.py +1590 -0
  748. infinity_context_server/eval_case_runner.py +1100 -0
  749. infinity_context_server/eval_common.py +336 -0
  750. infinity_context_server/eval_constants.py +310 -0
  751. infinity_context_server/eval_fixtures.py +150 -0
  752. infinity_context_server/eval_graph.py +92 -0
  753. infinity_context_server/eval_hybrid.py +99 -0
  754. infinity_context_server/eval_multimodal_offline.py +697 -0
  755. infinity_context_server/eval_prompt_contract.py +402 -0
  756. infinity_context_server/eval_scorecard.py +2627 -0
  757. infinity_context_server/eval_semantic_linking.py +1526 -0
  758. infinity_context_server/eval_semantic_retrieval_api_canary.py +405 -0
  759. infinity_context_server/eval_semantic_retrieval_canary.py +359 -0
  760. infinity_context_server/eval_types.py +88 -0
  761. infinity_context_server/evidence_bundle.py +523 -0
  762. infinity_context_server/extraction_capabilities.py +1234 -0
  763. infinity_context_server/features/__init__.py +3 -0
  764. infinity_context_server/features/context_building/__init__.py +5 -0
  765. infinity_context_server/features/context_building/benchmark_budget.py +29 -0
  766. infinity_context_server/features/context_building/composition.py +49 -0
  767. infinity_context_server/features/context_building/context_requests.py +151 -0
  768. infinity_context_server/features/context_building/contracts.py +96 -0
  769. infinity_context_server/features/context_building/digest_api_responses.py +225 -0
  770. infinity_context_server/features/context_building/digest_requests.py +65 -0
  771. infinity_context_server/features/context_building/insights_api_responses.py +132 -0
  772. infinity_context_server/features/context_building/legacy_api_responses.py +875 -0
  773. infinity_context_server/features/context_building/mappers.py +205 -0
  774. infinity_context_server/features/context_building/public.py +66 -0
  775. infinity_context_server/features/context_building/routes.py +44 -0
  776. infinity_context_server/features/document_ingestion/__init__.py +5 -0
  777. infinity_context_server/features/document_ingestion/asset_requests.py +45 -0
  778. infinity_context_server/features/document_ingestion/asset_responses.py +365 -0
  779. infinity_context_server/features/document_ingestion/composition.py +49 -0
  780. infinity_context_server/features/document_ingestion/contracts.py +104 -0
  781. infinity_context_server/features/document_ingestion/mappers.py +386 -0
  782. infinity_context_server/features/document_ingestion/public.py +58 -0
  783. infinity_context_server/features/document_ingestion/routes.py +44 -0
  784. infinity_context_server/features/memory_facts/__init__.py +7 -0
  785. infinity_context_server/features/memory_facts/compatibility.py +204 -0
  786. infinity_context_server/features/memory_facts/composition.py +72 -0
  787. infinity_context_server/features/memory_facts/contracts.py +187 -0
  788. infinity_context_server/features/memory_facts/mappers.py +620 -0
  789. infinity_context_server/features/memory_facts/public.py +168 -0
  790. infinity_context_server/features/memory_facts/routes.py +118 -0
  791. infinity_context_server/features/memory_facts/suggestion_requests.py +283 -0
  792. infinity_context_server/features/memory_facts/suggestion_responses.py +382 -0
  793. infinity_context_server/features/memory_scopes/__init__.py +5 -0
  794. infinity_context_server/features/memory_scopes/compatibility.py +231 -0
  795. infinity_context_server/features/memory_scopes/composition.py +49 -0
  796. infinity_context_server/features/memory_scopes/contracts.py +103 -0
  797. infinity_context_server/features/memory_scopes/graph_export_responses.py +93 -0
  798. infinity_context_server/features/memory_scopes/mappers.py +290 -0
  799. infinity_context_server/features/memory_scopes/public.py +136 -0
  800. infinity_context_server/features/memory_scopes/routes.py +185 -0
  801. infinity_context_server/features/memory_scopes/snapshot_compatibility.py +146 -0
  802. infinity_context_server/features/memory_scopes/thread_memory_requests.py +127 -0
  803. infinity_context_server/llm_provider_readiness.py +267 -0
  804. infinity_context_server/longmemeval_session_identity.py +167 -0
  805. infinity_context_server/main.py +68 -0
  806. infinity_context_server/mem0_benchmark_auth_challenge.py +160 -0
  807. infinity_context_server/memora_comparison.py +658 -0
  808. infinity_context_server/memory_comparison_answer_context.py +2442 -0
  809. infinity_context_server/memory_comparison_answer_context_backfill.py +1027 -0
  810. infinity_context_server/memory_comparison_answer_context_diagnostics.py +694 -0
  811. infinity_context_server/memory_comparison_answer_context_inspection.py +103 -0
  812. infinity_context_server/memory_comparison_answer_context_retrieval_slice.py +175 -0
  813. infinity_context_server/memory_comparison_answer_context_risks.py +223 -0
  814. infinity_context_server/memory_comparison_backend_target.py +41 -0
  815. infinity_context_server/memory_comparison_benchmark.py +651 -0
  816. infinity_context_server/memory_comparison_benchmark_compact.py +387 -0
  817. infinity_context_server/memory_comparison_benchmark_compact_fast_gate.py +387 -0
  818. infinity_context_server/memory_comparison_benchmark_compact_samples.py +931 -0
  819. infinity_context_server/memory_comparison_benchmark_config.py +105 -0
  820. infinity_context_server/memory_comparison_benchmark_control.py +215 -0
  821. infinity_context_server/memory_comparison_benchmark_execution.py +238 -0
  822. infinity_context_server/memory_comparison_benchmark_identity.py +65 -0
  823. infinity_context_server/memory_comparison_benchmark_metrics.py +686 -0
  824. infinity_context_server/memory_comparison_benchmark_replay.py +400 -0
  825. infinity_context_server/memory_comparison_benchmark_shared.py +284 -0
  826. infinity_context_server/memory_comparison_bounded_provider.py +295 -0
  827. infinity_context_server/memory_comparison_bundle_partial_support.py +107 -0
  828. infinity_context_server/memory_comparison_bundle_planner.py +3521 -0
  829. infinity_context_server/memory_comparison_bundle_source_windows.py +247 -0
  830. infinity_context_server/memory_comparison_candidate_features.py +2014 -0
  831. infinity_context_server/memory_comparison_candidate_fusion.py +893 -0
  832. infinity_context_server/memory_comparison_candidate_risks.py +124 -0
  833. infinity_context_server/memory_comparison_canonical_source_hash.py +109 -0
  834. infinity_context_server/memory_comparison_case_identity.py +100 -0
  835. infinity_context_server/memory_comparison_case_loader.py +123 -0
  836. infinity_context_server/memory_comparison_chat_completions.py +402 -0
  837. infinity_context_server/memory_comparison_clean_state.py +607 -0
  838. infinity_context_server/memory_comparison_clean_state_http.py +120 -0
  839. infinity_context_server/memory_comparison_clean_state_runner.py +103 -0
  840. infinity_context_server/memory_comparison_cli.py +295 -0
  841. infinity_context_server/memory_comparison_codex_canary.py +315 -0
  842. infinity_context_server/memory_comparison_codex_llm.py +345 -0
  843. infinity_context_server/memory_comparison_compact_gap_report.py +289 -0
  844. infinity_context_server/memory_comparison_comparative_preference.py +71 -0
  845. infinity_context_server/memory_comparison_conversation_ingestion.py +198 -0
  846. infinity_context_server/memory_comparison_evidence.py +877 -0
  847. infinity_context_server/memory_comparison_evidence_commitment.py +20 -0
  848. infinity_context_server/memory_comparison_failure_diagnostics.py +809 -0
  849. infinity_context_server/memory_comparison_full_canonical_evidence.py +746 -0
  850. infinity_context_server/memory_comparison_full_canonical_source_evidence_trust.py +450 -0
  851. infinity_context_server/memory_comparison_full_delete_evidence.py +670 -0
  852. infinity_context_server/memory_comparison_full_delete_evidence_trust.py +441 -0
  853. infinity_context_server/memory_comparison_full_delete_evidence_witnesses.py +308 -0
  854. infinity_context_server/memory_comparison_full_execution_validation.py +697 -0
  855. infinity_context_server/memory_comparison_full_execution_validation_slots.py +655 -0
  856. infinity_context_server/memory_comparison_full_methodology.py +556 -0
  857. infinity_context_server/memory_comparison_full_policy_component_validation.py +899 -0
  858. infinity_context_server/memory_comparison_full_profiles.py +398 -0
  859. infinity_context_server/memory_comparison_full_run_component_sets.py +304 -0
  860. infinity_context_server/memory_comparison_full_run_components.py +787 -0
  861. infinity_context_server/memory_comparison_full_run_evidence.py +759 -0
  862. infinity_context_server/memory_comparison_full_scope.py +244 -0
  863. infinity_context_server/memory_comparison_full_source_evidence.py +866 -0
  864. infinity_context_server/memory_comparison_full_verdict.py +252 -0
  865. infinity_context_server/memory_comparison_gold_blind.py +654 -0
  866. infinity_context_server/memory_comparison_gold_blind_answer_contract.py +492 -0
  867. infinity_context_server/memory_comparison_gold_blind_contract.py +760 -0
  868. infinity_context_server/memory_comparison_gold_blind_dispatch_models.py +34 -0
  869. infinity_context_server/memory_comparison_gold_blind_execution_validation.py +170 -0
  870. infinity_context_server/memory_comparison_gold_blind_judge_binding.py +167 -0
  871. infinity_context_server/memory_comparison_gold_blind_judge_capability.py +387 -0
  872. infinity_context_server/memory_comparison_gold_blind_retrieval_contract.py +413 -0
  873. infinity_context_server/memory_comparison_gold_blind_run_proof.py +880 -0
  874. infinity_context_server/memory_comparison_gold_blind_run_validation.py +109 -0
  875. infinity_context_server/memory_comparison_gold_blind_validation.py +319 -0
  876. infinity_context_server/memory_comparison_http.py +921 -0
  877. infinity_context_server/memory_comparison_http_ingest_observation.py +710 -0
  878. infinity_context_server/memory_comparison_http_ingest_request.py +204 -0
  879. infinity_context_server/memory_comparison_intent.py +2925 -0
  880. infinity_context_server/memory_comparison_latency.py +455 -0
  881. infinity_context_server/memory_comparison_llm.py +473 -0
  882. infinity_context_server/memory_comparison_location_roles.py +169 -0
  883. infinity_context_server/memory_comparison_locomo_cases.py +328 -0
  884. infinity_context_server/memory_comparison_locomo_expected_turn.py +297 -0
  885. infinity_context_server/memory_comparison_locomo_transport.py +873 -0
  886. infinity_context_server/memory_comparison_longmemeval_cases.py +339 -0
  887. infinity_context_server/memory_comparison_managed_attestation.py +771 -0
  888. infinity_context_server/memory_comparison_managed_benchmark_registry_abort_http.py +120 -0
  889. infinity_context_server/memory_comparison_managed_benchmark_registry_contracts.py +715 -0
  890. infinity_context_server/memory_comparison_managed_benchmark_registry_http.py +855 -0
  891. infinity_context_server/memory_comparison_managed_benchmark_registry_recovery_http.py +164 -0
  892. infinity_context_server/memory_comparison_managed_benchmark_registry_wire.py +890 -0
  893. infinity_context_server/memory_comparison_managed_composite_assembler.py +524 -0
  894. infinity_context_server/memory_comparison_managed_corpus_projection.py +653 -0
  895. infinity_context_server/memory_comparison_managed_execution_receipts.py +991 -0
  896. infinity_context_server/memory_comparison_managed_http_derived_evidence.py +724 -0
  897. infinity_context_server/memory_comparison_managed_http_exact_cleanup.py +476 -0
  898. infinity_context_server/memory_comparison_managed_http_execution.py +673 -0
  899. infinity_context_server/memory_comparison_managed_http_lifecycle.py +905 -0
  900. infinity_context_server/memory_comparison_managed_http_lifecycle_credentials.py +83 -0
  901. infinity_context_server/memory_comparison_managed_http_lifecycle_evidence.py +366 -0
  902. infinity_context_server/memory_comparison_managed_http_lifecycle_registration.py +106 -0
  903. infinity_context_server/memory_comparison_managed_http_policy_lifecycle.py +894 -0
  904. infinity_context_server/memory_comparison_managed_http_policy_material_projection.py +315 -0
  905. infinity_context_server/memory_comparison_managed_http_policy_receipts.py +219 -0
  906. infinity_context_server/memory_comparison_managed_http_policy_registry_evidence.py +177 -0
  907. infinity_context_server/memory_comparison_managed_http_policy_requirements.py +824 -0
  908. infinity_context_server/memory_comparison_managed_http_policy_support.py +108 -0
  909. infinity_context_server/memory_comparison_managed_http_policy_validation.py +762 -0
  910. infinity_context_server/memory_comparison_managed_ingest_manifest.py +449 -0
  911. infinity_context_server/memory_comparison_managed_live_admission.py +886 -0
  912. infinity_context_server/memory_comparison_managed_live_cli.py +536 -0
  913. infinity_context_server/memory_comparison_managed_live_composition.py +636 -0
  914. infinity_context_server/memory_comparison_managed_llm_execution.py +850 -0
  915. infinity_context_server/memory_comparison_managed_llm_execution_dispatch.py +269 -0
  916. infinity_context_server/memory_comparison_managed_llm_execution_ports.py +225 -0
  917. infinity_context_server/memory_comparison_managed_mem0_auth.py +65 -0
  918. infinity_context_server/memory_comparison_managed_mem0_runtime_authority.py +241 -0
  919. infinity_context_server/memory_comparison_managed_mem0_runtime_http.py +541 -0
  920. infinity_context_server/memory_comparison_managed_plan_builder.py +685 -0
  921. infinity_context_server/memory_comparison_managed_preflight.py +907 -0
  922. infinity_context_server/memory_comparison_managed_preflight_cli.py +431 -0
  923. infinity_context_server/memory_comparison_managed_production_cli.py +325 -0
  924. infinity_context_server/memory_comparison_managed_production_composition.py +140 -0
  925. infinity_context_server/memory_comparison_managed_production_ports.py +194 -0
  926. infinity_context_server/memory_comparison_managed_production_runner.py +450 -0
  927. infinity_context_server/memory_comparison_managed_projection_manifest.py +438 -0
  928. infinity_context_server/memory_comparison_managed_provider_calls.py +450 -0
  929. infinity_context_server/memory_comparison_managed_quality_projection.py +347 -0
  930. infinity_context_server/memory_comparison_managed_registry_policy_lifecycle.py +677 -0
  931. infinity_context_server/memory_comparison_managed_run.py +892 -0
  932. infinity_context_server/memory_comparison_managed_run_contract.py +454 -0
  933. infinity_context_server/memory_comparison_managed_run_ports.py +79 -0
  934. infinity_context_server/memory_comparison_managed_runtime_credentials.py +916 -0
  935. infinity_context_server/memory_comparison_managed_runtime_credentials_capability.py +361 -0
  936. infinity_context_server/memory_comparison_managed_runtime_credentials_context.py +132 -0
  937. infinity_context_server/memory_comparison_managed_runtime_credentials_integrity.py +213 -0
  938. infinity_context_server/memory_comparison_managed_runtime_credentials_models.py +81 -0
  939. infinity_context_server/memory_comparison_managed_runtime_credentials_targets.py +28 -0
  940. infinity_context_server/memory_comparison_mem0_contract.py +491 -0
  941. infinity_context_server/memory_comparison_mem0_http_observation.py +296 -0
  942. infinity_context_server/memory_comparison_mem0_locomo_prompts.py +328 -0
  943. infinity_context_server/memory_comparison_mem0_longmemeval_prompts.py +365 -0
  944. infinity_context_server/memory_comparison_mem0_official_chat.py +504 -0
  945. infinity_context_server/memory_comparison_mem0_official_prompt_renderer.py +307 -0
  946. infinity_context_server/memory_comparison_mem0_oss_contract.py +456 -0
  947. infinity_context_server/memory_comparison_mem0_oss_manifest.py +563 -0
  948. infinity_context_server/memory_comparison_mem0_platform_contract.py +467 -0
  949. infinity_context_server/memory_comparison_mem0_runtime_attestation.py +861 -0
  950. infinity_context_server/memory_comparison_models.py +398 -0
  951. infinity_context_server/memory_comparison_openai_official_transport.py +525 -0
  952. infinity_context_server/memory_comparison_preflight.py +1147 -0
  953. infinity_context_server/memory_comparison_probe_transport.py +154 -0
  954. infinity_context_server/memory_comparison_prompt_policy.py +603 -0
  955. infinity_context_server/memory_comparison_provider_provenance.py +392 -0
  956. infinity_context_server/memory_comparison_quality_accessors.py +339 -0
  957. infinity_context_server/memory_comparison_quality_actionable_gaps.py +2038 -0
  958. infinity_context_server/memory_comparison_quality_answer_context_gaps.py +450 -0
  959. infinity_context_server/memory_comparison_quality_answer_context_risks.py +75 -0
  960. infinity_context_server/memory_comparison_quality_bundle_gaps.py +860 -0
  961. infinity_context_server/memory_comparison_quality_bundle_table.py +805 -0
  962. infinity_context_server/memory_comparison_quality_diagnostics.py +2798 -0
  963. infinity_context_server/memory_comparison_quality_fusion.py +241 -0
  964. infinity_context_server/memory_comparison_quality_query_plan_gaps.py +533 -0
  965. infinity_context_server/memory_comparison_quality_query_role_gaps.py +845 -0
  966. infinity_context_server/memory_comparison_quality_query_roles.py +815 -0
  967. infinity_context_server/memory_comparison_quality_rerank_gaps.py +492 -0
  968. infinity_context_server/memory_comparison_quality_selected_weakness.py +544 -0
  969. infinity_context_server/memory_comparison_quality_support.py +921 -0
  970. infinity_context_server/memory_comparison_query_integrity.py +301 -0
  971. infinity_context_server/memory_comparison_query_plan.py +524 -0
  972. infinity_context_server/memory_comparison_query_terms.py +2055 -0
  973. infinity_context_server/memory_comparison_relation_support.py +2100 -0
  974. infinity_context_server/memory_comparison_rerank.py +3209 -0
  975. infinity_context_server/memory_comparison_rerank_intents.py +405 -0
  976. infinity_context_server/memory_comparison_rerank_policies.py +1726 -0
  977. infinity_context_server/memory_comparison_rerank_policy.py +675 -0
  978. infinity_context_server/memory_comparison_rerank_shapes.py +152 -0
  979. infinity_context_server/memory_comparison_rerank_terms.py +973 -0
  980. infinity_context_server/memory_comparison_rerank_text.py +722 -0
  981. infinity_context_server/memory_comparison_retrieval_policy.py +108 -0
  982. infinity_context_server/memory_comparison_retrieval_width.py +383 -0
  983. infinity_context_server/memory_comparison_service_probe.py +278 -0
  984. infinity_context_server/memory_comparison_service_probes.py +547 -0
  985. infinity_context_server/memory_comparison_session_identity_contract.py +328 -0
  986. infinity_context_server/memory_comparison_source_identity.py +1655 -0
  987. infinity_context_server/memory_comparison_subscription_chat.py +717 -0
  988. infinity_context_server/memory_comparison_subscription_live_probe.py +323 -0
  989. infinity_context_server/memory_comparison_subscription_probe.py +368 -0
  990. infinity_context_server/memory_comparison_target_identity.py +42 -0
  991. infinity_context_server/memory_comparison_temporal_grounding.py +771 -0
  992. infinity_context_server/memory_comparison_token_budget_contract.py +665 -0
  993. infinity_context_server/memory_comparison_token_latency.py +136 -0
  994. infinity_context_server/memory_scope_transfer.py +933 -0
  995. infinity_context_server/memory_scope_transfer_assets.py +181 -0
  996. infinity_context_server/memory_scope_transfer_conflicts.py +565 -0
  997. infinity_context_server/memory_scope_transfer_context.py +295 -0
  998. infinity_context_server/memory_scope_transfer_extractions.py +390 -0
  999. infinity_context_server/memory_scope_transfer_facts.py +65 -0
  1000. infinity_context_server/memory_scope_transfer_records.py +630 -0
  1001. infinity_context_server/memory_scope_transfer_relations.py +84 -0
  1002. infinity_context_server/memory_scope_transfer_remap.py +710 -0
  1003. infinity_context_server/memory_scope_transfer_scope.py +267 -0
  1004. infinity_context_server/memory_scope_transfer_support.py +108 -0
  1005. infinity_context_server/memory_scope_transfer_temporal.py +24 -0
  1006. infinity_context_server/metrics.py +264 -0
  1007. infinity_context_server/official_public_benchmark.py +979 -0
  1008. infinity_context_server/pagination.py +60 -0
  1009. infinity_context_server/processes/__init__.py +38 -0
  1010. infinity_context_server/processes/extractions.py +40 -0
  1011. infinity_context_server/processes/outbox.py +47 -0
  1012. infinity_context_server/processes/projections.py +372 -0
  1013. infinity_context_server/provider_budget.py +59 -0
  1014. infinity_context_server/provider_circuit.py +333 -0
  1015. infinity_context_server/public_benchmark.py +2532 -0
  1016. infinity_context_server/public_benchmark_artifacts.py +91 -0
  1017. infinity_context_server/public_benchmark_case_diagnostics.py +231 -0
  1018. infinity_context_server/public_benchmark_checkpoint.py +751 -0
  1019. infinity_context_server/public_benchmark_environment.py +102 -0
  1020. infinity_context_server/public_benchmark_execution.py +445 -0
  1021. infinity_context_server/public_benchmark_http.py +39 -0
  1022. infinity_context_server/public_benchmark_manifest.py +129 -0
  1023. infinity_context_server/public_benchmark_metrics.py +645 -0
  1024. infinity_context_server/public_benchmark_metrics_policy.py +117 -0
  1025. infinity_context_server/public_benchmark_models.py +112 -0
  1026. infinity_context_server/public_benchmark_progress.py +224 -0
  1027. infinity_context_server/public_benchmark_results.py +76 -0
  1028. infinity_context_server/public_benchmark_run_diagnostics.py +163 -0
  1029. infinity_context_server/public_benchmark_selection.py +379 -0
  1030. infinity_context_server/public_benchmark_transport.py +62 -0
  1031. infinity_context_server/public_benchmark_unsupported.py +228 -0
  1032. infinity_context_server/ranked_evidence_answer_support.py +665 -0
  1033. infinity_context_server/ranked_evidence_document_seed_contract.py +30 -0
  1034. infinity_context_server/ranked_evidence_evaluator_helpers.py +135 -0
  1035. infinity_context_server/ranked_evidence_retrieval_request.py +36 -0
  1036. infinity_context_server/ranked_evidence_seed_case.py +109 -0
  1037. infinity_context_server/ranked_evidence_semantic_gate.py +980 -0
  1038. infinity_context_server/ranked_evidence_semantic_gate_cli.py +137 -0
  1039. infinity_context_server/ranked_evidence_semantic_gate_decision.py +163 -0
  1040. infinity_context_server/ranked_evidence_semantic_metrics.py +375 -0
  1041. infinity_context_server/ranked_evidence_session_identity.py +100 -0
  1042. infinity_context_server/storage_maintenance.py +187 -0
  1043. infinity_context_server/top_evidence_dataset_profile.py +442 -0
  1044. infinity_context_server/top_evidence_policy.py +274 -0
  1045. infinity_context_server/top_evidence_preflight.py +693 -0
  1046. infinity_context_server/web/assets/memory-browser-capture.js +252 -0
  1047. infinity_context_server/web/assets/memory-browser-operations.js +143 -0
  1048. infinity_context_server/web/assets/memory-browser-review.js +687 -0
  1049. infinity_context_server/web/assets/memory-browser.css +854 -0
  1050. infinity_context_server/web/assets/memory-browser.js +3299 -0
  1051. infinity_context_server/web/index.html +261 -0
  1052. infinity_context_server/web_ui.py +29 -0
  1053. infinity_context_server/worker.py +380 -0
@@ -0,0 +1,899 @@
1
+ """One-shot aggregate admission for full-run policy evidence.
2
+
3
+ Canonical, source, and terminal-delete reports are telemetry. This module
4
+ accepts only their live nominal capabilities, checks exact manifest coverage,
5
+ and issues one opaque validation after every component has been consumed.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import hashlib
11
+ import hmac
12
+ import json
13
+ import re
14
+ import secrets
15
+ import threading
16
+ import weakref
17
+ from dataclasses import dataclass
18
+ from types import MappingProxyType
19
+ from typing import final
20
+
21
+ from infinity_context_server.memory_comparison_full_canonical_evidence import (
22
+ INFINITY_CANONICAL_BACKEND_ID,
23
+ VerifiedCanonicalEvidence,
24
+ consume_canonical_evidence,
25
+ public_canonical_evidence_report,
26
+ )
27
+ from infinity_context_server.memory_comparison_full_canonical_source_evidence_trust import (
28
+ CanonicalSourceEvidenceTrustPolicy,
29
+ )
30
+ from infinity_context_server.memory_comparison_full_delete_evidence import (
31
+ SealedTerminalDeleteEvidence,
32
+ TerminalDeleteEvidenceSession,
33
+ consume_terminal_delete_evidence,
34
+ terminal_delete_evidence_report,
35
+ )
36
+ from infinity_context_server.memory_comparison_full_delete_evidence_trust import (
37
+ DeleteVerificationTrustPolicy,
38
+ )
39
+ from infinity_context_server.memory_comparison_full_source_evidence import (
40
+ INFINITY_SOURCE_BACKEND_ID,
41
+ MEM0_SOURCE_BACKEND_ID,
42
+ VerifiedSourceEvidence,
43
+ consume_source_evidence,
44
+ public_source_evidence_report,
45
+ )
46
+
47
+ FULL_POLICY_COMPONENT_VALIDATION_SCHEMA_VERSION = (
48
+ "memory-comparison-full-policy-component-validation.v1"
49
+ )
50
+
51
+ _SHA256 = re.compile(r"^[0-9a-f]{64}$")
52
+ _MAX_TEXT = 16_384
53
+ _TOKEN = object()
54
+ _LOCK = threading.RLock()
55
+
56
+
57
+ class FullPolicyComponentValidationError(ValueError):
58
+ """Raised when policy components cannot produce exact aggregate admission."""
59
+
60
+
61
+ @final
62
+ @dataclass(frozen=True, slots=True)
63
+ class FullPolicyManifestItem:
64
+ """One expected canonical/source identity in the selected run manifest."""
65
+
66
+ case_id: str
67
+ source_ref: str
68
+ source_revision: int
69
+ source_sha256: str
70
+
71
+ def __post_init__(self) -> None:
72
+ _manifest_item_snapshot(self)
73
+
74
+ def __init_subclass__(cls, **kwargs: object) -> None:
75
+ del cls, kwargs
76
+ raise TypeError("FullPolicyManifestItem is final")
77
+
78
+
79
+ @final
80
+ @dataclass(frozen=True, slots=True)
81
+ class FullPolicyRunManifest:
82
+ """Exact primitive bindings expected from every policy component."""
83
+
84
+ run_id: str
85
+ profile_id: str
86
+ infinity_backend_id: str
87
+ mem0_backend_id: str
88
+ scope_id: str
89
+ delete_source_id: str
90
+ managed_attestation_commitment_sha256: str
91
+ items: tuple[FullPolicyManifestItem, ...]
92
+
93
+ def __post_init__(self) -> None:
94
+ _manifest_snapshot(self)
95
+
96
+ def __init_subclass__(cls, **kwargs: object) -> None:
97
+ del cls, kwargs
98
+ raise TypeError("FullPolicyRunManifest is final")
99
+
100
+
101
+ @final
102
+ @dataclass(frozen=True, slots=True)
103
+ class FullPolicyEvidencePair:
104
+ """One canonical/source proof pair issued from one exact item policy."""
105
+
106
+ canonical: VerifiedCanonicalEvidence
107
+ source: VerifiedSourceEvidence
108
+ trust_policy: CanonicalSourceEvidenceTrustPolicy
109
+
110
+ def __post_init__(self) -> None:
111
+ if type(self.canonical) is not VerifiedCanonicalEvidence:
112
+ raise FullPolicyComponentValidationError("canonical proof type must be exact")
113
+ if type(self.source) is not VerifiedSourceEvidence:
114
+ raise FullPolicyComponentValidationError("source proof type must be exact")
115
+ if type(self.trust_policy) is not CanonicalSourceEvidenceTrustPolicy:
116
+ raise FullPolicyComponentValidationError("item trust policy type must be exact")
117
+
118
+ def __init_subclass__(cls, **kwargs: object) -> None:
119
+ del cls, kwargs
120
+ raise TypeError("FullPolicyEvidencePair is final")
121
+
122
+
123
+ @final
124
+ @dataclass(frozen=True, slots=True)
125
+ class FullPolicyTerminalDeleteEvidence:
126
+ """The one terminal-delete capability required by the aggregate."""
127
+
128
+ evidence: SealedTerminalDeleteEvidence
129
+ session: TerminalDeleteEvidenceSession
130
+ trust_policy: DeleteVerificationTrustPolicy
131
+
132
+ def __post_init__(self) -> None:
133
+ if type(self.evidence) is not SealedTerminalDeleteEvidence:
134
+ raise FullPolicyComponentValidationError("delete proof type must be exact")
135
+ if type(self.session) is not TerminalDeleteEvidenceSession:
136
+ raise FullPolicyComponentValidationError("delete session type must be exact")
137
+ if type(self.trust_policy) is not DeleteVerificationTrustPolicy:
138
+ raise FullPolicyComponentValidationError("delete trust policy type must be exact")
139
+
140
+ def __init_subclass__(cls, **kwargs: object) -> None:
141
+ del cls, kwargs
142
+ raise TypeError("FullPolicyTerminalDeleteEvidence is final")
143
+
144
+
145
+ class _Opaque:
146
+ __slots__ = ()
147
+
148
+ def __copy__(self) -> object:
149
+ raise TypeError("full policy capabilities are noncopyable")
150
+
151
+ def __deepcopy__(self, memo: object) -> object:
152
+ del memo
153
+ raise TypeError("full policy capabilities are noncopyable")
154
+
155
+ def __reduce__(self) -> object:
156
+ raise TypeError("full policy capabilities are nonserializable")
157
+
158
+ def __reduce_ex__(self, protocol: int) -> object:
159
+ del protocol
160
+ raise TypeError("full policy capabilities are nonserializable")
161
+
162
+ def __getstate__(self) -> object:
163
+ raise TypeError("full policy capabilities are nonserializable")
164
+
165
+
166
+ @final
167
+ class FullPolicyComponentValidationSession(_Opaque):
168
+ """Opaque single-attempt aggregate lifecycle."""
169
+
170
+ __slots__ = ("__nonce", "__weakref__")
171
+
172
+ def __init__(self, *, nonce: str, _token: object) -> None:
173
+ if _token is not _TOKEN:
174
+ raise FullPolicyComponentValidationError("validation sessions must be issued")
175
+ self.__nonce = nonce
176
+
177
+ def __init_subclass__(cls, **kwargs: object) -> None:
178
+ del cls, kwargs
179
+ raise TypeError("FullPolicyComponentValidationSession is final")
180
+
181
+ def __repr__(self) -> str:
182
+ return "FullPolicyComponentValidationSession(<opaque>)"
183
+
184
+
185
+ @final
186
+ class VerifiedFullPolicyComponentValidation(_Opaque):
187
+ """Opaque live aggregate suitable for later composite component adapters."""
188
+
189
+ __slots__ = ("__commitment", "__weakref__")
190
+
191
+ def __init__(self, *, commitment: str, _token: object) -> None:
192
+ if _token is not _TOKEN:
193
+ raise FullPolicyComponentValidationError("validations must be sealed")
194
+ self.__commitment = commitment
195
+
196
+ def __init_subclass__(cls, **kwargs: object) -> None:
197
+ del cls, kwargs
198
+ raise TypeError("VerifiedFullPolicyComponentValidation is final")
199
+
200
+ def __repr__(self) -> str:
201
+ return "VerifiedFullPolicyComponentValidation(<sealed>)"
202
+
203
+
204
+ @dataclass(frozen=True, slots=True)
205
+ class _ItemSnapshot:
206
+ case_id: str
207
+ source_ref: str
208
+ source_revision: int
209
+ source_sha256: str
210
+
211
+
212
+ @dataclass(frozen=True, slots=True)
213
+ class _ManifestSnapshot:
214
+ run_id: str
215
+ profile_id: str
216
+ infinity_backend_id: str
217
+ mem0_backend_id: str
218
+ scope_id: str
219
+ delete_source_id: str
220
+ managed_attestation_commitment_sha256: str
221
+ items: tuple[_ItemSnapshot, ...]
222
+ commitment_sha256: str
223
+
224
+
225
+ @dataclass(slots=True)
226
+ class _SessionState:
227
+ manifest: _ManifestSnapshot
228
+ evidence_pairs: tuple[FullPolicyEvidencePair, ...]
229
+ terminal_delete: FullPolicyTerminalDeleteEvidence
230
+ consumer_id: str
231
+ phase: str
232
+ started_count: int
233
+ completed_count: int
234
+ active_position: str | None
235
+ active_owner: int | None
236
+ validation: VerifiedFullPolicyComponentValidation | None
237
+
238
+
239
+ @dataclass(frozen=True, slots=True)
240
+ class _PreflightSnapshot:
241
+ canonical_reports: tuple[dict[str, object], ...]
242
+ source_reports: tuple[dict[str, object], ...]
243
+ delete_report: dict[str, object]
244
+ item_policy_commitments: tuple[str, ...]
245
+ delete_policy_commitment: str
246
+
247
+
248
+ @dataclass(slots=True)
249
+ class _ValidationState:
250
+ session: FullPolicyComponentValidationSession
251
+ manifest: _ManifestSnapshot
252
+ evidence_pairs: tuple[FullPolicyEvidencePair, ...]
253
+ terminal_delete: FullPolicyTerminalDeleteEvidence
254
+ input_commitments: tuple[str, ...]
255
+ report: MappingProxyType[str, object]
256
+ secret: bytes
257
+ commitment: str
258
+ consume_phase: str = "live"
259
+
260
+
261
+ _SESSIONS: weakref.WeakKeyDictionary[FullPolicyComponentValidationSession, _SessionState] = (
262
+ weakref.WeakKeyDictionary()
263
+ )
264
+ _VALIDATIONS: weakref.WeakKeyDictionary[VerifiedFullPolicyComponentValidation, _ValidationState] = (
265
+ weakref.WeakKeyDictionary()
266
+ )
267
+
268
+
269
+ def create_full_policy_component_validation_session(
270
+ *,
271
+ manifest: FullPolicyRunManifest,
272
+ evidence_pairs: tuple[FullPolicyEvidencePair, ...],
273
+ terminal_delete: FullPolicyTerminalDeleteEvidence,
274
+ consumer_id: str,
275
+ ) -> FullPolicyComponentValidationSession:
276
+ """Register one exact single-attempt aggregate without consuming evidence."""
277
+
278
+ snapshot = _manifest_snapshot(manifest)
279
+ if type(evidence_pairs) is not tuple:
280
+ raise FullPolicyComponentValidationError("evidence_pairs must be an exact tuple")
281
+ if len(evidence_pairs) != len(snapshot.items):
282
+ raise FullPolicyComponentValidationError("policy evidence count differs from manifest")
283
+ if any(type(pair) is not FullPolicyEvidencePair for pair in evidence_pairs):
284
+ raise FullPolicyComponentValidationError("policy evidence pair type must be exact")
285
+ if type(terminal_delete) is not FullPolicyTerminalDeleteEvidence:
286
+ raise FullPolicyComponentValidationError("terminal_delete type must be exact")
287
+ checked_consumer = _text(consumer_id, "consumer_id", maximum=200)
288
+ session = FullPolicyComponentValidationSession(nonce=secrets.token_hex(32), _token=_TOKEN)
289
+ with _LOCK:
290
+ _SESSIONS[session] = _SessionState(
291
+ snapshot,
292
+ evidence_pairs,
293
+ terminal_delete,
294
+ checked_consumer,
295
+ "open",
296
+ 0,
297
+ 0,
298
+ None,
299
+ None,
300
+ None,
301
+ )
302
+ return session
303
+
304
+
305
+ def seal_full_policy_component_validation(
306
+ session: FullPolicyComponentValidationSession,
307
+ ) -> VerifiedFullPolicyComponentValidation:
308
+ """Preflight all proofs, consume deterministically, and delete strictly last.
309
+
310
+ Lower-level proof APIs do not expose a cross-module rollback transaction.
311
+ A failure after any successful consume permanently aborts this session as
312
+ partial_component_consumption and never mints validation.
313
+ Concurrent callers that observe active consumption fail immediately instead
314
+ of joining the owner's lifecycle.
315
+ """
316
+
317
+ state = _session_state(session)
318
+ owner = threading.get_ident()
319
+ validation: VerifiedFullPolicyComponentValidation | None = None
320
+ with _LOCK:
321
+ if state.phase == "consuming":
322
+ raise FullPolicyComponentValidationError("aggregate consumption already active")
323
+ if state.phase != "open":
324
+ raise FullPolicyComponentValidationError(
325
+ f"validation session is terminal or active: {state.phase}"
326
+ )
327
+ state.phase = "preflighting"
328
+ state.active_owner = owner
329
+ try:
330
+ preflight = _preflight(state)
331
+ except BaseException as exc:
332
+ with _LOCK:
333
+ state.phase = "preflight_failed"
334
+ state.active_owner = None
335
+ if isinstance(exc, Exception):
336
+ raise FullPolicyComponentValidationError("policy component preflight failed") from None
337
+ raise
338
+
339
+ with _LOCK:
340
+ if state.phase != "preflighting" or state.active_owner != owner:
341
+ raise FullPolicyComponentValidationError("validation session changed")
342
+ state.phase = "consuming"
343
+ try:
344
+ _consume_components(state)
345
+ secret = secrets.token_bytes(32)
346
+ input_commitments = _input_commitments(preflight)
347
+ report = _aggregate_report(state, preflight)
348
+ commitment = _commitment(secret, report)
349
+ report["commitment"] = commitment
350
+ validation = VerifiedFullPolicyComponentValidation(
351
+ commitment=commitment,
352
+ _token=_TOKEN,
353
+ )
354
+ validation_state = _ValidationState(
355
+ session,
356
+ state.manifest,
357
+ state.evidence_pairs,
358
+ state.terminal_delete,
359
+ input_commitments,
360
+ MappingProxyType(report),
361
+ secret,
362
+ commitment,
363
+ )
364
+ with _LOCK:
365
+ expected_count = len(state.evidence_pairs) * 2 + 1
366
+ if (
367
+ state.phase != "consuming"
368
+ or state.active_owner != owner
369
+ or state.active_position is not None
370
+ or state.started_count != expected_count
371
+ or state.completed_count != expected_count
372
+ ):
373
+ raise FullPolicyComponentValidationError("component consumption progress changed")
374
+ _VALIDATIONS[validation] = validation_state
375
+ state.validation = validation
376
+ state.phase = "sealed"
377
+ state.active_owner = None
378
+ except BaseException as exc:
379
+ with _LOCK:
380
+ if validation is not None:
381
+ _VALIDATIONS.pop(validation, None)
382
+ state.validation = None
383
+ state.phase = "partial_component_consumption"
384
+ state.active_owner = None
385
+ if isinstance(exc, Exception):
386
+ raise FullPolicyComponentValidationError(
387
+ "policy component consumption failed"
388
+ ) from None
389
+ raise
390
+ assert validation is not None
391
+ return validation
392
+
393
+
394
+ def full_policy_component_validation_session_status(
395
+ session: FullPolicyComponentValidationSession,
396
+ ) -> str:
397
+ """Return lifecycle telemetry; the string is never admission evidence."""
398
+
399
+ return _session_state(session).phase
400
+
401
+
402
+ def public_full_policy_component_validation(
403
+ validation: VerifiedFullPolicyComponentValidation,
404
+ ) -> dict[str, object]:
405
+ """Revalidate the live capability and return JSON-safe telemetry."""
406
+
407
+ state = _validation_state(validation)
408
+ current = _preflight_from_validation(state)
409
+ if _input_commitments(current) != state.input_commitments:
410
+ raise FullPolicyComponentValidationError("policy component evidence changed")
411
+ report = dict(state.report)
412
+ commitment = report.pop("commitment", None)
413
+ if (
414
+ type(commitment) is not str
415
+ or not hmac.compare_digest(commitment, state.commitment)
416
+ or not hmac.compare_digest(_commitment(state.secret, report), state.commitment)
417
+ ):
418
+ raise FullPolicyComponentValidationError("policy validation integrity failed")
419
+ report["commitment"] = commitment
420
+ return _thaw(report)
421
+
422
+
423
+ def consume_full_policy_component_validation(
424
+ validation: VerifiedFullPolicyComponentValidation,
425
+ *,
426
+ binding_commitment_sha256: str,
427
+ managed_attestation_commitment_sha256: str,
428
+ ) -> dict[str, object]:
429
+ """Consume one exact aggregate binding while preserving live public reads.
430
+
431
+ The binding commitment is the deterministic policy manifest commitment.
432
+ Failed identity checks or live revalidation restore the capability to live.
433
+ """
434
+
435
+ expected_binding = _digest(
436
+ binding_commitment_sha256,
437
+ "binding_commitment_sha256",
438
+ )
439
+ expected_attestation = _digest(
440
+ managed_attestation_commitment_sha256,
441
+ "managed_attestation_commitment_sha256",
442
+ )
443
+ state = _validation_state(validation)
444
+ with _LOCK:
445
+ if state.consume_phase == "consuming":
446
+ raise FullPolicyComponentValidationError("policy validation consumption already active")
447
+ if state.consume_phase == "consumed":
448
+ raise FullPolicyComponentValidationError("policy validation was already consumed")
449
+ if state.consume_phase != "live":
450
+ raise FullPolicyComponentValidationError(
451
+ "policy validation consumption lifecycle is invalid"
452
+ )
453
+ state.consume_phase = "consuming"
454
+ try:
455
+ report = public_full_policy_component_validation(validation)
456
+ if report.get("manifest_commitment_sha256") != expected_binding:
457
+ raise FullPolicyComponentValidationError(
458
+ "policy validation binding commitment does not match"
459
+ )
460
+ if report.get("managed_attestation_commitment_sha256") != expected_attestation:
461
+ raise FullPolicyComponentValidationError(
462
+ "policy validation managed attestation commitment does not match"
463
+ )
464
+ with _LOCK:
465
+ if state.consume_phase != "consuming":
466
+ raise FullPolicyComponentValidationError(
467
+ "policy validation consumption lifecycle changed"
468
+ )
469
+ state.consume_phase = "consumed"
470
+ except BaseException:
471
+ with _LOCK:
472
+ if state.consume_phase == "consuming":
473
+ state.consume_phase = "live"
474
+ raise
475
+ return report
476
+
477
+
478
+ def full_policy_run_manifest_commitment(manifest: FullPolicyRunManifest) -> str:
479
+ """Return the deterministic primitive manifest commitment."""
480
+
481
+ return _manifest_snapshot(manifest).commitment_sha256
482
+
483
+
484
+ def _preflight(state: _SessionState) -> _PreflightSnapshot:
485
+ return _preflight_inputs(state.manifest, state.evidence_pairs, state.terminal_delete)
486
+
487
+
488
+ def _preflight_from_validation(state: _ValidationState) -> _PreflightSnapshot:
489
+ return _preflight_inputs(state.manifest, state.evidence_pairs, state.terminal_delete)
490
+
491
+
492
+ def _preflight_inputs(
493
+ manifest: _ManifestSnapshot,
494
+ pairs: tuple[FullPolicyEvidencePair, ...],
495
+ terminal: FullPolicyTerminalDeleteEvidence,
496
+ ) -> _PreflightSnapshot:
497
+ canonical_reports: list[dict[str, object]] = []
498
+ source_reports: list[dict[str, object]] = []
499
+ policy_commitments: list[str] = []
500
+ seen_proofs: set[int] = set()
501
+ for index, (item, pair) in enumerate(zip(manifest.items, pairs, strict=True)):
502
+ pair.__post_init__()
503
+ proof_ids = (id(pair.canonical), id(pair.source))
504
+ if any(identity in seen_proofs for identity in proof_ids):
505
+ raise FullPolicyComponentValidationError("policy proof is duplicated")
506
+ seen_proofs.update(proof_ids)
507
+ canonical = public_canonical_evidence_report(
508
+ pair.canonical,
509
+ trust_policy=pair.trust_policy,
510
+ )
511
+ source = public_source_evidence_report(
512
+ pair.source,
513
+ trust_policy=pair.trust_policy,
514
+ )
515
+ policy_commitment = _validate_pair(
516
+ manifest,
517
+ item,
518
+ canonical,
519
+ source,
520
+ index=index,
521
+ )
522
+ if policy_commitment in policy_commitments:
523
+ raise FullPolicyComponentValidationError("item trust policy is reused")
524
+ policy_commitments.append(policy_commitment)
525
+ canonical_reports.append(canonical)
526
+ source_reports.append(source)
527
+
528
+ terminal.__post_init__()
529
+ delete_report = terminal_delete_evidence_report(
530
+ terminal.evidence,
531
+ policy=terminal.trust_policy,
532
+ )
533
+ delete_policy_commitment = _validate_delete(manifest, delete_report)
534
+ return _PreflightSnapshot(
535
+ tuple(canonical_reports),
536
+ tuple(source_reports),
537
+ delete_report,
538
+ tuple(policy_commitments),
539
+ delete_policy_commitment,
540
+ )
541
+
542
+
543
+ def _validate_pair(
544
+ manifest: _ManifestSnapshot,
545
+ item: _ItemSnapshot,
546
+ canonical: dict[str, object],
547
+ source: dict[str, object],
548
+ *,
549
+ index: int,
550
+ ) -> str:
551
+ names = ("run_id", "profile_id", "scope_id", "case_id", "source_ref")
552
+ expected = (
553
+ manifest.run_id,
554
+ manifest.profile_id,
555
+ manifest.scope_id,
556
+ item.case_id,
557
+ item.source_ref,
558
+ )
559
+ if tuple(canonical.get(name) for name in names) != expected:
560
+ raise FullPolicyComponentValidationError(f"manifest item {index} canonical differs")
561
+ if tuple(source.get(name) for name in names) != expected:
562
+ raise FullPolicyComponentValidationError(f"manifest item {index} source differs")
563
+ if canonical.get("backend_id") != manifest.infinity_backend_id:
564
+ raise FullPolicyComponentValidationError("canonical backend differs from manifest")
565
+ if (
566
+ source.get("infinity_backend_id") != manifest.infinity_backend_id
567
+ or source.get("mem0_backend_id") != manifest.mem0_backend_id
568
+ or source.get("source_revision") != item.source_revision
569
+ or source.get("source_sha256") != item.source_sha256
570
+ ):
571
+ raise FullPolicyComponentValidationError("source binding differs from manifest")
572
+ _require_component_only(canonical, name="canonical")
573
+ _require_component_only(source, name="source")
574
+ canonical_policy = _exact_dict(canonical.get("trust_policy"), "canonical trust policy")
575
+ source_policy = _exact_dict(source.get("trust_policy"), "source trust policy")
576
+ if canonical_policy != source_policy:
577
+ raise FullPolicyComponentValidationError("canonical and source policy commitments differ")
578
+ policy_commitment = _digest(canonical_policy.get("policy_commitment"), "policy commitment")
579
+ if (
580
+ canonical_policy.get("runtime_attestation_commitment")
581
+ != manifest.managed_attestation_commitment_sha256
582
+ ):
583
+ raise FullPolicyComponentValidationError("managed attestation commitment differs")
584
+ return policy_commitment
585
+
586
+
587
+ def _validate_delete(manifest: _ManifestSnapshot, report: dict[str, object]) -> str:
588
+ names = (
589
+ "run_id",
590
+ "profile_id",
591
+ "infinity_backend_id",
592
+ "mem0_backend_id",
593
+ "scope_id",
594
+ "source_id",
595
+ )
596
+ expected = (
597
+ manifest.run_id,
598
+ manifest.profile_id,
599
+ manifest.infinity_backend_id,
600
+ manifest.mem0_backend_id,
601
+ manifest.scope_id,
602
+ manifest.delete_source_id,
603
+ )
604
+ if tuple(report.get(name) for name in names) != expected:
605
+ raise FullPolicyComponentValidationError("terminal delete binding differs from manifest")
606
+ _require_component_only(report, name="delete", evidence_role=True)
607
+ policy = _exact_dict(report.get("verification_policy"), "delete verification policy")
608
+ if (
609
+ policy.get("external_attestation_commitment")
610
+ != manifest.managed_attestation_commitment_sha256
611
+ ):
612
+ raise FullPolicyComponentValidationError("delete managed attestation differs")
613
+ return _digest(policy.get("commitment"), "delete policy commitment")
614
+
615
+
616
+ def _consume_components(state: _SessionState) -> None:
617
+ for item, pair in zip(state.manifest.items, state.evidence_pairs, strict=True):
618
+ position = f"canonical:{item.case_id}:{item.source_ref}"
619
+ _start_component_consume(state, position)
620
+ consume_canonical_evidence(
621
+ pair.canonical,
622
+ trust_policy=pair.trust_policy,
623
+ run_id=state.manifest.run_id,
624
+ profile_id=state.manifest.profile_id,
625
+ backend_id=state.manifest.infinity_backend_id,
626
+ scope_id=state.manifest.scope_id,
627
+ case_id=item.case_id,
628
+ source_ref=item.source_ref,
629
+ )
630
+ _complete_component_consume(state, position)
631
+ position = f"source:{item.case_id}:{item.source_ref}"
632
+ _start_component_consume(state, position)
633
+ consume_source_evidence(
634
+ pair.source,
635
+ trust_policy=pair.trust_policy,
636
+ run_id=state.manifest.run_id,
637
+ profile_id=state.manifest.profile_id,
638
+ scope_id=state.manifest.scope_id,
639
+ case_id=item.case_id,
640
+ source_ref=item.source_ref,
641
+ source_revision=item.source_revision,
642
+ source_sha256=item.source_sha256,
643
+ infinity_backend_id=state.manifest.infinity_backend_id,
644
+ mem0_backend_id=state.manifest.mem0_backend_id,
645
+ )
646
+ _complete_component_consume(state, position)
647
+ position = "delete"
648
+ _start_component_consume(state, position)
649
+ consume_terminal_delete_evidence(
650
+ state.terminal_delete.evidence,
651
+ state.terminal_delete.session,
652
+ policy=state.terminal_delete.trust_policy,
653
+ consumer_id=state.consumer_id,
654
+ run_id=state.manifest.run_id,
655
+ profile_id=state.manifest.profile_id,
656
+ infinity_backend_id=state.manifest.infinity_backend_id,
657
+ mem0_backend_id=state.manifest.mem0_backend_id,
658
+ scope_id=state.manifest.scope_id,
659
+ source_id=state.manifest.delete_source_id,
660
+ )
661
+ _complete_component_consume(state, position)
662
+
663
+
664
+ def _start_component_consume(state: _SessionState, position: str) -> None:
665
+ with _LOCK:
666
+ if (
667
+ state.phase != "consuming"
668
+ or state.active_owner != threading.get_ident()
669
+ or state.active_position is not None
670
+ ):
671
+ raise FullPolicyComponentValidationError("component consumption lifecycle changed")
672
+ state.started_count += 1
673
+ state.active_position = position
674
+
675
+
676
+ def _complete_component_consume(state: _SessionState, position: str) -> None:
677
+ with _LOCK:
678
+ if (
679
+ state.phase != "consuming"
680
+ or state.active_owner != threading.get_ident()
681
+ or state.active_position != position
682
+ ):
683
+ raise FullPolicyComponentValidationError("component consumption lifecycle changed")
684
+ state.completed_count += 1
685
+ state.active_position = None
686
+
687
+
688
+ def _aggregate_report(
689
+ state: _SessionState,
690
+ preflight: _PreflightSnapshot,
691
+ ) -> dict[str, object]:
692
+ manifest = state.manifest
693
+ return {
694
+ "schema_version": FULL_POLICY_COMPONENT_VALIDATION_SCHEMA_VERSION,
695
+ "status": "verified",
696
+ "run_id": manifest.run_id,
697
+ "profile_id": manifest.profile_id,
698
+ "infinity_backend_id": manifest.infinity_backend_id,
699
+ "mem0_backend_id": manifest.mem0_backend_id,
700
+ "scope_id": manifest.scope_id,
701
+ "delete_source_id": manifest.delete_source_id,
702
+ "managed_attestation_commitment_sha256": (manifest.managed_attestation_commitment_sha256),
703
+ "manifest_commitment_sha256": manifest.commitment_sha256,
704
+ "manifest_item_count": len(manifest.items),
705
+ "coverage": {
706
+ "canonical": len(preflight.canonical_reports),
707
+ "source": len(preflight.source_reports),
708
+ "delete": 1,
709
+ },
710
+ "item_policy_commitments": list(preflight.item_policy_commitments),
711
+ "delete_policy_commitment": preflight.delete_policy_commitment,
712
+ "delete_consumed_last": True,
713
+ "all_components_consumed": True,
714
+ "admission_from_public_json": False,
715
+ }
716
+
717
+
718
+ def _input_commitments(preflight: _PreflightSnapshot) -> tuple[str, ...]:
719
+ reports = (
720
+ *preflight.canonical_reports,
721
+ *preflight.source_reports,
722
+ preflight.delete_report,
723
+ )
724
+ return tuple(_json_sha256(report) for report in reports)
725
+
726
+
727
+ def _manifest_snapshot(manifest: FullPolicyRunManifest) -> _ManifestSnapshot:
728
+ if type(manifest) is not FullPolicyRunManifest:
729
+ raise FullPolicyComponentValidationError("manifest type must be exact")
730
+ fields = (
731
+ _text(manifest.run_id, "run_id"),
732
+ _text(manifest.profile_id, "profile_id"),
733
+ _text(manifest.infinity_backend_id, "infinity_backend_id"),
734
+ _text(manifest.mem0_backend_id, "mem0_backend_id"),
735
+ _text(manifest.scope_id, "scope_id"),
736
+ _text(manifest.delete_source_id, "delete_source_id"),
737
+ _digest(
738
+ manifest.managed_attestation_commitment_sha256,
739
+ "managed_attestation_commitment_sha256",
740
+ ),
741
+ )
742
+ if fields[2] != INFINITY_CANONICAL_BACKEND_ID or fields[2] != INFINITY_SOURCE_BACKEND_ID:
743
+ raise FullPolicyComponentValidationError("Infinity backend identity is unsupported")
744
+ if fields[3] != MEM0_SOURCE_BACKEND_ID:
745
+ raise FullPolicyComponentValidationError("Mem0 backend identity is unsupported")
746
+ if type(manifest.items) is not tuple or not manifest.items:
747
+ raise FullPolicyComponentValidationError("manifest items must be a nonempty exact tuple")
748
+ items = tuple(_manifest_item_snapshot(item) for item in manifest.items)
749
+ keys = tuple((item.case_id, item.source_ref) for item in items)
750
+ if len(set(keys)) != len(keys):
751
+ raise FullPolicyComponentValidationError("manifest item identity is duplicated")
752
+ payload = {
753
+ "run_id": fields[0],
754
+ "profile_id": fields[1],
755
+ "infinity_backend_id": fields[2],
756
+ "mem0_backend_id": fields[3],
757
+ "scope_id": fields[4],
758
+ "delete_source_id": fields[5],
759
+ "managed_attestation_commitment_sha256": fields[6],
760
+ "items": [_item_payload(item) for item in items],
761
+ }
762
+ return _ManifestSnapshot(*fields, items, _json_sha256(payload))
763
+
764
+
765
+ def _manifest_item_snapshot(item: FullPolicyManifestItem) -> _ItemSnapshot:
766
+ if type(item) is not FullPolicyManifestItem:
767
+ raise FullPolicyComponentValidationError("manifest item type must be exact")
768
+ return _ItemSnapshot(
769
+ _text(item.case_id, "case_id"),
770
+ _text(item.source_ref, "source_ref"),
771
+ _positive_int(item.source_revision, "source_revision"),
772
+ _digest(item.source_sha256, "source_sha256"),
773
+ )
774
+
775
+
776
+ def _item_payload(item: _ItemSnapshot) -> dict[str, object]:
777
+ return {
778
+ "case_id": item.case_id,
779
+ "source_ref": item.source_ref,
780
+ "source_revision": item.source_revision,
781
+ "source_sha256": item.source_sha256,
782
+ }
783
+
784
+
785
+ def _require_component_only(
786
+ report: dict[str, object],
787
+ *,
788
+ name: str,
789
+ evidence_role: bool = False,
790
+ ) -> None:
791
+ component_marker = (
792
+ report.get("evidence_role") == "component_only"
793
+ if evidence_role
794
+ else report.get("component_only") is True
795
+ )
796
+ if (
797
+ not component_marker
798
+ or report.get("externally_authentic") is not False
799
+ or report.get("composite_policy_consume_required") is not True
800
+ ):
801
+ raise FullPolicyComponentValidationError(f"{name} is not component-only evidence")
802
+
803
+
804
+ def _session_state(session: FullPolicyComponentValidationSession) -> _SessionState:
805
+ if type(session) is not FullPolicyComponentValidationSession:
806
+ raise FullPolicyComponentValidationError("validation session type must be exact")
807
+ with _LOCK:
808
+ state = _SESSIONS.get(session)
809
+ if state is None:
810
+ raise FullPolicyComponentValidationError("validation session is unregistered")
811
+ return state
812
+
813
+
814
+ def _validation_state(validation: VerifiedFullPolicyComponentValidation) -> _ValidationState:
815
+ if type(validation) is not VerifiedFullPolicyComponentValidation:
816
+ raise FullPolicyComponentValidationError("validation type must be exact")
817
+ with _LOCK:
818
+ state = _VALIDATIONS.get(validation)
819
+ if state is None:
820
+ raise FullPolicyComponentValidationError("validation is unregistered")
821
+ session = _session_state(state.session)
822
+ try:
823
+ current = validation._VerifiedFullPolicyComponentValidation__commitment
824
+ except Exception:
825
+ raise FullPolicyComponentValidationError("policy validation integrity failed") from None
826
+ if (
827
+ session.phase != "sealed"
828
+ or session.validation is not validation
829
+ or type(current) is not str
830
+ or not hmac.compare_digest(current, state.commitment)
831
+ ):
832
+ raise FullPolicyComponentValidationError("policy validation integrity failed")
833
+ return state
834
+
835
+
836
+ def _exact_dict(value: object, name: str) -> dict[str, object]:
837
+ if type(value) is not dict:
838
+ raise FullPolicyComponentValidationError(f"{name} must be an exact object")
839
+ return value
840
+
841
+
842
+ def _text(value: object, name: str, *, maximum: int = _MAX_TEXT) -> str:
843
+ if type(value) is not str or not value or value != value.strip() or len(value) > maximum:
844
+ raise FullPolicyComponentValidationError(f"{name} must be a bounded nonblank string")
845
+ return value
846
+
847
+
848
+ def _positive_int(value: object, name: str) -> int:
849
+ if type(value) is not int or value < 1:
850
+ raise FullPolicyComponentValidationError(f"{name} must be a positive exact integer")
851
+ return value
852
+
853
+
854
+ def _digest(value: object, name: str) -> str:
855
+ if type(value) is not str or _SHA256.fullmatch(value) is None:
856
+ raise FullPolicyComponentValidationError(f"{name} must be lowercase sha256")
857
+ return value
858
+
859
+
860
+ def _json_sha256(value: object) -> str:
861
+ return hashlib.sha256(_canonical_json(value)).hexdigest()
862
+
863
+
864
+ def _commitment(secret: bytes, report: dict[str, object]) -> str:
865
+ return hmac.new(secret, _canonical_json(report), hashlib.sha256).hexdigest()
866
+
867
+
868
+ def _canonical_json(value: object) -> bytes:
869
+ return json.dumps(value, sort_keys=True, separators=(",", ":")).encode()
870
+
871
+
872
+ def _thaw(value: object) -> object:
873
+ if type(value) is MappingProxyType:
874
+ return {str(key): _thaw(item) for key, item in value.items()}
875
+ if type(value) is dict:
876
+ return {str(key): _thaw(item) for key, item in value.items()}
877
+ if type(value) is tuple:
878
+ return [_thaw(item) for item in value]
879
+ if type(value) is list:
880
+ return [_thaw(item) for item in value]
881
+ return value
882
+
883
+
884
+ __all__ = (
885
+ "FULL_POLICY_COMPONENT_VALIDATION_SCHEMA_VERSION",
886
+ "FullPolicyComponentValidationError",
887
+ "FullPolicyComponentValidationSession",
888
+ "FullPolicyEvidencePair",
889
+ "FullPolicyManifestItem",
890
+ "FullPolicyRunManifest",
891
+ "FullPolicyTerminalDeleteEvidence",
892
+ "VerifiedFullPolicyComponentValidation",
893
+ "consume_full_policy_component_validation",
894
+ "create_full_policy_component_validation_session",
895
+ "full_policy_component_validation_session_status",
896
+ "full_policy_run_manifest_commitment",
897
+ "public_full_policy_component_validation",
898
+ "seal_full_policy_component_validation",
899
+ )