apsimo 1.4.4__tar.gz → 1.4.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1003) hide show
  1. {apsimo-1.4.4 → apsimo-1.4.6}/PKG-INFO +2 -2
  2. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/host.py +7 -7
  3. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/schemas/host.py +1 -1
  4. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/source_projection.py +2 -2
  5. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/channels/phone_gateways.py +1 -1
  6. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cli.py +2 -1
  7. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/importer.py +0 -29
  8. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/store.py +1 -34
  9. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/graph/client.py +3 -3
  10. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/graph/queries.py +10 -0
  11. apsimo-1.4.6/apsimo/memory/__init__.py +1 -0
  12. {apsimo-1.4.4/apsimo/intelligence/graph → apsimo-1.4.6/apsimo/memory}/recall.py +1 -7
  13. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/qualification/memory_cases.py +1 -1
  14. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/server.py +15 -28
  15. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/setup.py +1 -1
  16. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/setup_hermes.py +15 -1
  17. apsimo-1.4.6/apsimo/setup_skills.py +90 -0
  18. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/idempotency.py +5 -0
  19. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/source_annotations.py +5 -3
  20. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/source_attribution.py +3 -1
  21. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/source_read.py +43 -4
  22. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/tool_observations.py +59 -0
  23. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo.egg-info/PKG-INFO +2 -2
  24. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo.egg-info/SOURCES.txt +4 -3
  25. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo.egg-info/requires.txt +1 -1
  26. {apsimo-1.4.4 → apsimo-1.4.6}/pyproject.toml +2 -2
  27. apsimo-1.4.6/tests/test_canonical_source_read.py +249 -0
  28. apsimo-1.4.6/tests/test_contacts_persistence.py +120 -0
  29. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_current_work_recall_selection.py +1 -1
  30. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_media_read_reference_presentation.py +1 -1
  31. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_setup.py +98 -0
  32. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_procedure_source_context.py +1 -1
  33. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_recall_hybrid.py +3 -2
  34. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_recall_request_repetition.py +2 -2
  35. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_recall_source_presentation.py +1 -1
  36. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_recall_unified_context.py +44 -2
  37. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_short_source_context.py +1 -1
  38. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_annotations.py +5 -5
  39. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_audio_claims.py +3 -3
  40. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_claim_projection.py +1 -1
  41. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_event_precision.py +1 -1
  42. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_excerpt_lineage.py +1 -1
  43. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_vectors.py +5 -5
  44. apsimo-1.4.4/apsimo/contacts/world_bridge.py +0 -314
  45. apsimo-1.4.4/tests/test_canonical_source_read.py +0 -123
  46. apsimo-1.4.4/tests/test_contacts_persistence.py +0 -48
  47. {apsimo-1.4.4 → apsimo-1.4.6}/LICENSE +0 -0
  48. {apsimo-1.4.4 → apsimo-1.4.6}/README.md +0 -0
  49. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/__init__.py +0 -0
  50. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/__main__.py +0 -0
  51. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/agent/__init__.py +0 -0
  52. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/agent/client.py +0 -0
  53. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/agent/models.py +0 -0
  54. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/agents/__init__.py +0 -0
  55. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/agents/models.py +0 -0
  56. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/agents/store.py +0 -0
  57. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/agents/websocket.py +0 -0
  58. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/__init__.py +0 -0
  59. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/auth_telemetry.py +0 -0
  60. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/authority.py +0 -0
  61. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/contact_grants.py +0 -0
  62. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/middleware.py +0 -0
  63. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/__init__.py +0 -0
  64. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/commitment_work.py +0 -0
  65. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/context_gate.py +0 -0
  66. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/executions.py +0 -0
  67. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/followup_plans.py +0 -0
  68. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/governed_actions.py +0 -0
  69. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/initiative_work.py +0 -0
  70. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/mining.py +0 -0
  71. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/observations.py +0 -0
  72. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/social_state.py +0 -0
  73. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/task_queue.py +0 -0
  74. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/temporal_followups.py +0 -0
  75. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/transport.py +0 -0
  76. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/routers/transport_ingress_api.py +0 -0
  77. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/api/schemas/__init__.py +0 -0
  78. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/autonomy/cli.py +0 -0
  79. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/autonomy/condition_worker.py +0 -0
  80. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/autonomy/config.py +0 -0
  81. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/autonomy/loop.py +0 -0
  82. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/autonomy/registry.py +0 -0
  83. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/autonomy/scheduler.py +0 -0
  84. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/autonomy/synthesis.py +0 -0
  85. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/backup.py +0 -0
  86. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/__init__.py +0 -0
  87. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/contradictions.py +0 -0
  88. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/decay.py +0 -0
  89. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/engine.py +0 -0
  90. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/models.py +0 -0
  91. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/promotion.py +0 -0
  92. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/resolve.py +0 -0
  93. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/source_claims.py +0 -0
  94. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/source_time.py +0 -0
  95. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/beliefs/store.py +0 -0
  96. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/aggregators.py +0 -0
  97. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/composer.py +0 -0
  98. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/config.py +0 -0
  99. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/delivery.py +0 -0
  100. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/engagement.py +0 -0
  101. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/engine.py +0 -0
  102. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/enhancer.py +0 -0
  103. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/models.py +0 -0
  104. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/scheduler.py +0 -0
  105. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/briefings/store.py +0 -0
  106. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/__init__.py +0 -0
  107. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/block.py +0 -0
  108. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/cli.py +0 -0
  109. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/genesis.py +0 -0
  110. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/identity.py +0 -0
  111. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/keys.py +0 -0
  112. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/local_keys.py +0 -0
  113. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/manager.py +0 -0
  114. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/node.py +0 -0
  115. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/plugin_transactions.py +0 -0
  116. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/protocol.py +0 -0
  117. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/state_machine.py +0 -0
  118. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/storage.py +0 -0
  119. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/transactions.py +0 -0
  120. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/chain/validation.py +0 -0
  121. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/channels/__init__.py +0 -0
  122. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/channels/manifest.py +0 -0
  123. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/channels/migrations/001_channels_schema.sql +0 -0
  124. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/channels/presence.py +0 -0
  125. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/channels/router.py +0 -0
  126. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/channels/store.py +0 -0
  127. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/__init__.py +0 -0
  128. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/charter.py +0 -0
  129. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/drive_governance.py +0 -0
  130. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/evidence_pipeline.py +0 -0
  131. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/external_events.py +0 -0
  132. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/goal_spine.py +0 -0
  133. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/introspection.py +0 -0
  134. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/prompt.py +0 -0
  135. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/runtime.py +0 -0
  136. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/cognition/trigger.py +0 -0
  137. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/commitments/__init__.py +0 -0
  138. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/commitments/local_work.py +0 -0
  139. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/commitments/store.py +0 -0
  140. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/commitments/work.py +0 -0
  141. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/compression/__init__.py +0 -0
  142. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/connectors/__init__.py +0 -0
  143. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/connectors/base.py +0 -0
  144. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/connectors/caldav_calendar.py +0 -0
  145. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/connectors/fs_documents.py +0 -0
  146. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/connectors/imap_email.py +0 -0
  147. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/connectors/manager.py +0 -0
  148. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/connectors/webhook_pull.py +0 -0
  149. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/__init__.py +0 -0
  150. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/comms.py +0 -0
  151. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/config.py +0 -0
  152. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/exporters/__init__.py +0 -0
  153. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/exporters/vcard.py +0 -0
  154. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/identity_links.py +0 -0
  155. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/importers/__init__.py +0 -0
  156. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/importers/batch.py +0 -0
  157. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/importers/macos_contacts.py +0 -0
  158. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/migrations/001_contacts_schema.sql +0 -0
  159. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/migrations/002_trust_scopes.sql +0 -0
  160. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/migrations/003_open_gateway_enum.sql +0 -0
  161. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/migrations/004_contact_provision_operations.sql +0 -0
  162. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/migrations/005_identity_links.sql +0 -0
  163. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/models.py +0 -0
  164. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/scoring.py +0 -0
  165. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contacts/transport_ingress.py +0 -0
  166. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contextgate/__init__.py +0 -0
  167. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contextgate/chunker.py +0 -0
  168. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contextgate/estimate.py +0 -0
  169. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contextgate/gate.py +0 -0
  170. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/contextgate/retrieve.py +0 -0
  171. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/delivery/__init__.py +0 -0
  172. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/delivery/bridge.py +0 -0
  173. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/delivery/channels.py +0 -0
  174. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/delivery/classification.py +0 -0
  175. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/delivery/rate_limiter.py +0 -0
  176. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/delivery/reachout_policy.py +0 -0
  177. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directed/__init__.py +0 -0
  178. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directed/audit.py +0 -0
  179. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directed/intake.py +0 -0
  180. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directed/models.py +0 -0
  181. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directed/service.py +0 -0
  182. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directives/__init__.py +0 -0
  183. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directives/evidence.py +0 -0
  184. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directives/extractor.py +0 -0
  185. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directives/guard.py +0 -0
  186. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directives/models.py +0 -0
  187. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directives/service.py +0 -0
  188. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/directives/store.py +0 -0
  189. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/doctor.py +0 -0
  190. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/environment.py +0 -0
  191. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/events/__init__.py +0 -0
  192. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/events/broadcaster.py +0 -0
  193. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/events/bus.py +0 -0
  194. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/events/journal.py +0 -0
  195. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/events/stream.py +0 -0
  196. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/events/types.py +0 -0
  197. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/execution_results.py +0 -0
  198. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feedback/__init__.py +0 -0
  199. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feedback/store.py +0 -0
  200. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feeds/__init__.py +0 -0
  201. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feeds/cli.py +0 -0
  202. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feeds/engine.py +0 -0
  203. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feeds/example-feed.yaml +0 -0
  204. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feeds/hermes_cron.py +0 -0
  205. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feeds/manager.py +0 -0
  206. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feeds/spec.py +0 -0
  207. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/feeds/template.py +0 -0
  208. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/__init__.py +0 -0
  209. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/audit.py +0 -0
  210. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/communication_policy.py +0 -0
  211. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/config.py +0 -0
  212. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/context_provenance.py +0 -0
  213. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/env_risk.py +0 -0
  214. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/guard_audit.py +0 -0
  215. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/__init__.py +0 -0
  216. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/base.py +0 -0
  217. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/l1_recipient.py +0 -0
  218. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/l2_pii.py +0 -0
  219. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/l3_cross_context.py +0 -0
  220. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/l4_trust_tier.py +0 -0
  221. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/l5_injection.py +0 -0
  222. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/l6_review.py +0 -0
  223. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/l7_delay.py +0 -0
  224. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/layers/tom2_epistemic.py +0 -0
  225. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/models.py +0 -0
  226. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/pending_dispatch.py +0 -0
  227. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/pipeline.py +0 -0
  228. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/rejection.py +0 -0
  229. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/response_guard.py +0 -0
  230. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/rulesets/injection_v1.yaml +0 -0
  231. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/surface_policy.py +0 -0
  232. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/gate/taint.py +0 -0
  233. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/genesis.json +0 -0
  234. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/__init__.py +0 -0
  235. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/config.py +0 -0
  236. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/decomposer.py +0 -0
  237. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/engine.py +0 -0
  238. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/inference.py +0 -0
  239. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/models.py +0 -0
  240. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/priority.py +0 -0
  241. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/queue_bridge.py +0 -0
  242. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/replan.py +0 -0
  243. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/schema.sql +0 -0
  244. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/goals/store.py +0 -0
  245. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/governed_actions.py +0 -0
  246. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/harness_integration/__init__.py +0 -0
  247. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/harness_integration/context.py +0 -0
  248. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/harness_integration/skills.py +0 -0
  249. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity/__init__.py +0 -0
  250. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity/participants.py +0 -0
  251. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity/resolver.py +0 -0
  252. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/__init__.py +0 -0
  253. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/builder.py +0 -0
  254. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/corpus.py +0 -0
  255. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/models.py +0 -0
  256. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/runner.py +0 -0
  257. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/__init__.py +0 -0
  258. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/briefings.py +0 -0
  259. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/chain.py +0 -0
  260. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/goals.py +0 -0
  261. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/memory.py +0 -0
  262. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/neo4j_cognition.py +0 -0
  263. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/relationship.py +0 -0
  264. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/sessions.py +0 -0
  265. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/skills.py +0 -0
  266. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/task_queue.py +0 -0
  267. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/seeders/world_model.py +0 -0
  268. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/self_query.py +0 -0
  269. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/self_reflection.py +0 -0
  270. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/skill.py +0 -0
  271. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/identity_bootstrap/verifier.py +0 -0
  272. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/__init__.py +0 -0
  273. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/action_registry.py +0 -0
  274. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/approval_authority.py +0 -0
  275. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/approval_policy.py +0 -0
  276. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/assignment.py +0 -0
  277. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/backup_evidence.py +0 -0
  278. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/context_freshness.py +0 -0
  279. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/models.py +0 -0
  280. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/native_work.py +0 -0
  281. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/standing_approvals.py +0 -0
  282. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/store.py +0 -0
  283. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/initiatives/temporal_followup.py +0 -0
  284. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/__init__.py +0 -0
  285. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/cognition/__init__.py +0 -0
  286. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/cognition/gap_detector.py +0 -0
  287. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/cognition/metalearner.py +0 -0
  288. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/cognition/metrics_collector.py +0 -0
  289. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/cognition/performance_index.py +0 -0
  290. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/cognition/registry.py +0 -0
  291. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/cognition/strategy_adjuster.py +0 -0
  292. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/cognition/types.py +0 -0
  293. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/__init__.py +0 -0
  294. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/anomaly_detector.py +0 -0
  295. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/initiative_engine.py +0 -0
  296. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/preference_learner.py +0 -0
  297. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/research_orchestrator.py +0 -0
  298. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/self_directed_thinker.py +0 -0
  299. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/self_reflector.py +0 -0
  300. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/session_continuity.py +0 -0
  301. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/task_planner.py +0 -0
  302. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/components/tool_learner.py +0 -0
  303. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/graph/__init__.py +0 -0
  304. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/graph/consolidator.py +0 -0
  305. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/graph/distiller.py +0 -0
  306. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/graph/migrations.py +0 -0
  307. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/graph/reconciler.py +0 -0
  308. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/graph/schema.py +0 -0
  309. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/learning/__init__.py +0 -0
  310. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/learning/continuous_learner.py +0 -0
  311. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/learning/feedback_store.py +0 -0
  312. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/mind_model/__init__.py +0 -0
  313. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/mind_model/graph_baseline.py +0 -0
  314. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/mind_model/signal_collector.py +0 -0
  315. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/relationships/__init__.py +0 -0
  316. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/relationships/profiler.py +0 -0
  317. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/relationships/scorer.py +0 -0
  318. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/relationships/signal_floor.py +0 -0
  319. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/relationships/trust_tiers.py +0 -0
  320. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/synthesis/__init__.py +0 -0
  321. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/synthesis/connection_discoverer.py +0 -0
  322. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/synthesis/cross_domain_analyzer.py +0 -0
  323. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/synthesis/insight_deliverer.py +0 -0
  324. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/synthesis/insight_store.py +0 -0
  325. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/synthesis/insight_validator.py +0 -0
  326. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/synthesis/novelty_scorer.py +0 -0
  327. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/turn_middleware/__init__.py +0 -0
  328. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/intelligence/turn_middleware/memory_sync.py +0 -0
  329. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mcp/__init__.py +0 -0
  330. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mcp/__main__.py +0 -0
  331. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mcp/config.py +0 -0
  332. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mcp/server.py +0 -0
  333. {apsimo-1.4.4/apsimo/intelligence/graph → apsimo-1.4.6/apsimo/memory}/selection.py +0 -0
  334. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/migrations.py +0 -0
  335. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mining/__init__.py +0 -0
  336. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mining/corpus.py +0 -0
  337. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mining/escalations.py +0 -0
  338. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mining/models.py +0 -0
  339. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/mining/store.py +0 -0
  340. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/models/__init__.py +0 -0
  341. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/models/memory.py +0 -0
  342. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/models/mesh.py +0 -0
  343. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/models/person.py +0 -0
  344. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/models/signal.py +0 -0
  345. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/observations/__init__.py +0 -0
  346. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/observations/store.py +0 -0
  347. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/patterns/__init__.py +0 -0
  348. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/patterns/extract.py +0 -0
  349. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/patterns/store.py +0 -0
  350. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/persona/__init__.py +0 -0
  351. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/persona/engine.py +0 -0
  352. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/persona/manifest.py +0 -0
  353. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/projects/__init__.py +0 -0
  354. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/projects/engine.py +0 -0
  355. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/projects/event_outbox.py +0 -0
  356. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/projects/models.py +0 -0
  357. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/projects/planner.py +0 -0
  358. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/projects/store.py +0 -0
  359. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/proposals/__init__.py +0 -0
  360. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/proposals/engine.py +0 -0
  361. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/proposals/models.py +0 -0
  362. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/qualification/__init__.py +0 -0
  363. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/qualification/cases.py +0 -0
  364. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/qualification/cli.py +0 -0
  365. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/qualification/records.py +0 -0
  366. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/qualification/report.py +0 -0
  367. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/qualification/runner.py +0 -0
  368. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/qualification/structured_cases.py +0 -0
  369. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/reasoning/__init__.py +0 -0
  370. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/reasoning/executor.py +0 -0
  371. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/reasoning/loop.py +0 -0
  372. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/reasoning/native_tools/__init__.py +0 -0
  373. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/reasoning/native_tools/calculate.py +0 -0
  374. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/reasoning/native_tools/file_ops.py +0 -0
  375. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/reasoning/native_tools/web_search.py +0 -0
  376. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/reasoning/tool_policy.py +0 -0
  377. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/redact/__init__.py +0 -0
  378. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/repos/__init__.py +0 -0
  379. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/repos/mirrors.py +0 -0
  380. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/__init__.py +0 -0
  381. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/artifact.py +0 -0
  382. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/gatherer.py +0 -0
  383. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/pipeline.py +0 -0
  384. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/search/__init__.py +0 -0
  385. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/search/base.py +0 -0
  386. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/search/brave.py +0 -0
  387. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/search/cache.py +0 -0
  388. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/search/duckduckgo.py +0 -0
  389. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/search/orchestrator.py +0 -0
  390. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/search/serpapi.py +0 -0
  391. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/search/tavily.py +0 -0
  392. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/research/synthesizer.py +0 -0
  393. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/__init__.py +0 -0
  394. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/complexity_scorer.py +0 -0
  395. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/endpoints.py +0 -0
  396. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/fallback.py +0 -0
  397. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/functions.py +0 -0
  398. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/native_policy.py +0 -0
  399. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/router.py +0 -0
  400. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/self_learning.py +0 -0
  401. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/router/tiers.py +0 -0
  402. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sandbox/__init__.py +0 -0
  403. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sandbox/backend.py +0 -0
  404. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sandbox/manager.py +0 -0
  405. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/scope_bounds.py +0 -0
  406. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/__init__.py +0 -0
  407. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/backends/__init__.py +0 -0
  408. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/backends/base.py +0 -0
  409. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/backends/env.py +0 -0
  410. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/backends/keyring.py +0 -0
  411. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/backends/onepassword.py +0 -0
  412. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/cli.py +0 -0
  413. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/manager.py +0 -0
  414. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/migration.py +0 -0
  415. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/secrets/types.py +0 -0
  416. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/__init__.py +0 -0
  417. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/appraisals.py +0 -0
  418. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/benchmark.py +0 -0
  419. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/brief.py +0 -0
  420. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/event_concerns.py +0 -0
  421. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/execution_forecasts.py +0 -0
  422. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/expectations.py +0 -0
  423. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/experiments.py +0 -0
  424. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/journal.py +0 -0
  425. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/judgments.py +0 -0
  426. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/native_outcomes.py +0 -0
  427. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/params.py +0 -0
  428. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/perspective.py +0 -0
  429. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/reconcile.py +0 -0
  430. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/reply_forecasts.py +0 -0
  431. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/runtime_forecasts.py +0 -0
  432. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/runtime_models.py +0 -0
  433. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/settlement.py +0 -0
  434. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/situation.py +0 -0
  435. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/store.py +0 -0
  436. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/supervised.py +0 -0
  437. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/thinker.py +0 -0
  438. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/trust.py +0 -0
  439. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/self_model/workspace.py +0 -0
  440. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/services/__init__.py +0 -0
  441. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/services/agent_bridge.py +0 -0
  442. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/services/initiative_executor.py +0 -0
  443. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/services/instance.py +0 -0
  444. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sessions/__init__.py +0 -0
  445. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sessions/config.py +0 -0
  446. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sessions/context_loader.py +0 -0
  447. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sessions/federation_session.py +0 -0
  448. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sessions/isolated_session.py +0 -0
  449. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sessions/reports.py +0 -0
  450. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/sessions/store.py +0 -0
  451. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/setup_local_work.py +0 -0
  452. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/setup_native_goals.py +0 -0
  453. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/setup_native_reviews.py +0 -0
  454. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/__init__.py +0 -0
  455. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/base.py +0 -0
  456. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/budget.py +0 -0
  457. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/executor.py +0 -0
  458. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/executors/__init__.py +0 -0
  459. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/executors/behavioral_correction.py +0 -0
  460. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/executors/capability_gap.py +0 -0
  461. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/executors/data_quality.py +0 -0
  462. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/executors/knowledge_acquisition.py +0 -0
  463. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/executors/operational_hygiene.py +0 -0
  464. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/executors/subsystem_health.py +0 -0
  465. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/hermes_export.py +0 -0
  466. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/index.py +0 -0
  467. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/learning/__init__.py +0 -0
  468. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/learning/novelty_detector.py +0 -0
  469. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/learning/pattern_extractor.py +0 -0
  470. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/learning/triggers.py +0 -0
  471. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/loader.py +0 -0
  472. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/migrations/002_progressive_loading.sql +0 -0
  473. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/migrations/backfill_triggers.py +0 -0
  474. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/models.py +0 -0
  475. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/packager.py +0 -0
  476. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/protocols.py +0 -0
  477. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/registry.py +0 -0
  478. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/runtime.py +0 -0
  479. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/sandbox_runner.py +0 -0
  480. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/scheduler.py +0 -0
  481. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/schema.py +0 -0
  482. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/security/__init__.py +0 -0
  483. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/security/guards.py +0 -0
  484. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills/security/scanner.py +0 -0
  485. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills_memory/__init__.py +0 -0
  486. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills_memory/distill.py +0 -0
  487. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills_memory/models.py +0 -0
  488. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills_memory/retrieve.py +0 -0
  489. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/skills_memory/store.py +0 -0
  490. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/surprise/__init__.py +0 -0
  491. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/surprise/accumulation.py +0 -0
  492. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/surprise/scorer.py +0 -0
  493. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/surprise/store.py +0 -0
  494. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/__init__.py +0 -0
  495. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/action_receipts.py +0 -0
  496. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/approval_relay_canary.py +0 -0
  497. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/config.py +0 -0
  498. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/contract.py +0 -0
  499. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/events.py +0 -0
  500. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/governor.py +0 -0
  501. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/handlers/__init__.py +0 -0
  502. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/handlers/base.py +0 -0
  503. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/handlers/inference.py +0 -0
  504. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/handlers/monitoring.py +0 -0
  505. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/handlers/registry.py +0 -0
  506. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/handlers/subtask_handler.py +0 -0
  507. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/handlers/system_maintenance.py +0 -0
  508. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/mesh_integration.py +0 -0
  509. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/models.py +0 -0
  510. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/queue_manager.py +0 -0
  511. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/routing.py +0 -0
  512. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/scheduler.py +0 -0
  513. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/schema.sql +0 -0
  514. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/work_control.py +0 -0
  515. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/task_queue/worker.py +0 -0
  516. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/telemetry.py +0 -0
  517. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/__init__.py +0 -0
  518. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/affect.py +0 -0
  519. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/approvals.py +0 -0
  520. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/arcs.py +0 -0
  521. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/asymmetry.py +0 -0
  522. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/eligibility.py +0 -0
  523. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/engagement.py +0 -0
  524. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/exposure.py +0 -0
  525. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/extractor.py +0 -0
  526. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/fact_adapters.py +0 -0
  527. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/facts.py +0 -0
  528. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/integration.py +0 -0
  529. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/leveled.py +0 -0
  530. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/levels.py +0 -0
  531. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/recipient_audit.py +0 -0
  532. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/recipient_simulator.py +0 -0
  533. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/source_lineage.py +0 -0
  534. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/tom2.py +0 -0
  535. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/visibility.py +0 -0
  536. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tom/visibility_store.py +0 -0
  537. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tools/__init__.py +0 -0
  538. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tools/definitions.py +0 -0
  539. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/tools/handlers.py +0 -0
  540. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/toolsmith/__init__.py +0 -0
  541. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/toolsmith/authority.py +0 -0
  542. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/toolsmith/engine.py +0 -0
  543. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/toolsmith/integrity.py +0 -0
  544. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/toolsmith/miner.py +0 -0
  545. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/toolsmith/policy.py +0 -0
  546. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/toolsmith/registry.py +0 -0
  547. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/__init__.py +0 -0
  548. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/audio.py +0 -0
  549. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/documents.py +0 -0
  550. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/executions.py +0 -0
  551. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/hermes_history.py +0 -0
  552. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/hermes_kanban.py +0 -0
  553. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/hermes_work.py +0 -0
  554. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/history_references.py +0 -0
  555. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/local_work.py +0 -0
  556. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/media.py +0 -0
  557. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/reported_workers.py +0 -0
  558. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/source_vectors.py +0 -0
  559. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/turns/video.py +0 -0
  560. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/util/autonomy_preset.py +0 -0
  561. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/util/instance.py +0 -0
  562. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/util/model_output.py +0 -0
  563. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/util/quiet_hours.py +0 -0
  564. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/util/session_safety.py +0 -0
  565. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/util/temporal.py +0 -0
  566. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/__init__.py +0 -0
  567. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/backfill.py +0 -0
  568. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/caption.py +0 -0
  569. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/collections.py +0 -0
  570. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/config.py +0 -0
  571. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/embedder.py +0 -0
  572. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/image_preprocess.py +0 -0
  573. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/image_store.py +0 -0
  574. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/indexes.py +0 -0
  575. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/migrate.py +0 -0
  576. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/multimodal_provider.py +0 -0
  577. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/multimodal_types.py +0 -0
  578. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/openai_provider.py +0 -0
  579. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/query.py +0 -0
  580. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/reranker.py +0 -0
  581. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/safety_image.py +0 -0
  582. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/scanner.py +0 -0
  583. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/setup.py +0 -0
  584. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/store.py +0 -0
  585. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/vector/tiers.py +0 -0
  586. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/work_orders.py +0 -0
  587. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/workers/__init__.py +0 -0
  588. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/workers/agent_bridge.py +0 -0
  589. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/workers/colony_worker.py +0 -0
  590. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/workers/queue_worker.py +0 -0
  591. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/workers/skills_sync.py +0 -0
  592. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/__init__.py +0 -0
  593. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/causal_maintenance.py +0 -0
  594. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/causal_policy.py +0 -0
  595. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/causal_query.py +0 -0
  596. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/confidence.py +0 -0
  597. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/config.py +0 -0
  598. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/constants.py +0 -0
  599. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/entities.py +0 -0
  600. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/expectation_resolvers.py +0 -0
  601. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/__init__.py +0 -0
  602. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/base.py +0 -0
  603. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/conversation_extractor.py +0 -0
  604. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/detector.py +0 -0
  605. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/document_extractor.py +0 -0
  606. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/formats/__init__.py +0 -0
  607. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/formats/csv_fmt.py +0 -0
  608. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/formats/html_fmt.py +0 -0
  609. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/formats/json_fmt.py +0 -0
  610. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/formats/pdf.py +0 -0
  611. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/formats/text.py +0 -0
  612. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/llm_extractor.py +0 -0
  613. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/extraction/pipeline.py +0 -0
  614. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/integrations/__init__.py +0 -0
  615. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/integrations/mind_model_bridge.py +0 -0
  616. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/integrations/social_intel_bridge.py +0 -0
  617. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/jobs/__init__.py +0 -0
  618. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/jobs/extraction_job.py +0 -0
  619. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/llm_extract.py +0 -0
  620. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/observations.py +0 -0
  621. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/populator.py +0 -0
  622. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/relationships.py +0 -0
  623. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/resolution/__init__.py +0 -0
  624. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/resolution/entity_resolver.py +0 -0
  625. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/resolution/merge_audit.py +0 -0
  626. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/resolution/merge_workflow.py +0 -0
  627. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/source_reports.py +0 -0
  628. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/sqlite/__init__.py +0 -0
  629. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/sqlite/backend.py +0 -0
  630. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/sqlite/schema.sql +0 -0
  631. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo/world_model/store.py +0 -0
  632. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo.egg-info/dependency_links.txt +0 -0
  633. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo.egg-info/entry_points.txt +0 -0
  634. {apsimo-1.4.4 → apsimo-1.4.6}/apsimo.egg-info/top_level.txt +0 -0
  635. {apsimo-1.4.4 → apsimo-1.4.6}/setup.cfg +0 -0
  636. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_accepted_local_work.py +0 -0
  637. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_adaptive_params.py +0 -0
  638. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_affect.py +0 -0
  639. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_agent_action_routing.py +0 -0
  640. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_agent_api.py +0 -0
  641. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_agent_bridge.py +0 -0
  642. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_agent_bridge_service.py +0 -0
  643. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_agent_sdk.py +0 -0
  644. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_agent_sensor_loop.py +0 -0
  645. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_agent_snapshot.py +0 -0
  646. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_agent_store.py +0 -0
  647. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_annotated_recall_reinforcement.py +0 -0
  648. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_answer_source_lineage.py +0 -0
  649. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_appraisal_incident_decisions.py +0 -0
  650. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_approval_gate.py +0 -0
  651. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_approval_relay_canary.py +0 -0
  652. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_apsimo_compat.py +0 -0
  653. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_apsimo_harness_guidance.py +0 -0
  654. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_assignment_engine.py +0 -0
  655. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_audit_cleanup.py +0 -0
  656. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_auth_coverage.py +0 -0
  657. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_auth_migration_readiness.py +0 -0
  658. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_authz_scope_api.py +0 -0
  659. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_autonomy_preset.py +0 -0
  660. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_backup.py +0 -0
  661. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_backup_receipt_evidence.py +0 -0
  662. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_beliefs.py +0 -0
  663. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_bind_auth_guard.py +0 -0
  664. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_boundary_fail_closed.py +0 -0
  665. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_bounded_approval_authority.py +0 -0
  666. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_briefing_aggregators.py +0 -0
  667. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_canonical_scoped_context.py +0 -0
  668. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_causal_extract.py +0 -0
  669. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_causal_falsifiability.py +0 -0
  670. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_causal_maintenance.py +0 -0
  671. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_causal_policy.py +0 -0
  672. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_causal_query.py +0 -0
  673. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_causal_query_only_guard.py +0 -0
  674. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_chain_keys.py +0 -0
  675. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_channel_preferences.py +0 -0
  676. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_channel_registry.py +0 -0
  677. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_channel_store.py +0 -0
  678. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition.py +0 -0
  679. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_evidence_pipeline.py +0 -0
  680. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_evidence_server_wiring.py +0 -0
  681. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_goal_spine.py +0 -0
  682. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_observability.py +0 -0
  683. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_p4_controlled_learning.py +0 -0
  684. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_p4_server_integration.py +0 -0
  685. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_p6_p7_server_wiring.py +0 -0
  686. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_p7_drive_governance.py +0 -0
  687. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_phase_b_runtime.py +0 -0
  688. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_phase_c_scheduler.py +0 -0
  689. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_cognition_server_wiring.py +0 -0
  690. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_colony_memory_provider.py +0 -0
  691. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_commitment_resolution.py +0 -0
  692. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_commitment_resolution_downgrade.py +0 -0
  693. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_commitment_resolution_schema.py +0 -0
  694. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_commitment_work.py +0 -0
  695. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_commitments.py +0 -0
  696. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_comms_source_erasure.py +0 -0
  697. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_competence_reconciliation.py +0 -0
  698. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_compression.py +0 -0
  699. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_concern_resolution_receipts.py +0 -0
  700. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_condition_producer.py +0 -0
  701. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_connectors.py +0 -0
  702. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_contact_fact_recall.py +0 -0
  703. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_contact_policy_projection.py +0 -0
  704. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_contact_provisioning.py +0 -0
  705. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_contact_timezone.py +0 -0
  706. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_contacts_intro.py +0 -0
  707. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_context_gate.py +0 -0
  708. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_context_phase1.py +0 -0
  709. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_context_provenance.py +0 -0
  710. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_context_skill_ownership.py +0 -0
  711. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_conversation_presence.py +0 -0
  712. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_conversation_turn_concerns.py +0 -0
  713. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_delivery_bridge_503.py +0 -0
  714. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_delivery_gateway_identity.py +0 -0
  715. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_delivery_reachout_routing.py +0 -0
  716. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_directed.py +0 -0
  717. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_directed_envelope.py +0 -0
  718. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_directed_reports.py +0 -0
  719. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_directed_trust.py +0 -0
  720. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_directive_sources.py +0 -0
  721. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_directives.py +0 -0
  722. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_distill.py +0 -0
  723. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_doctor.py +0 -0
  724. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_document_memory_guard.py +0 -0
  725. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_duckduckgo_provider.py +0 -0
  726. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_embedding_generations.py +0 -0
  727. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_enrolled_sender_turns.py +0 -0
  728. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_ensure_channel_id.py +0 -0
  729. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_env_risk.py +0 -0
  730. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_event_broadcasts.py +0 -0
  731. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_event_bus_types.py +0 -0
  732. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_event_concerns.py +0 -0
  733. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_event_stream_reliability.py +0 -0
  734. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_execution_forecasts.py +0 -0
  735. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_execution_input_purpose.py +0 -0
  736. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_execution_registry.py +0 -0
  737. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_expectations.py +0 -0
  738. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_expectations_v2.py +0 -0
  739. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_experiments.py +0 -0
  740. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_external_cognition_events.py +0 -0
  741. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_external_event_concerns.py +0 -0
  742. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_facts_backfill.py +0 -0
  743. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_feedback.py +0 -0
  744. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_followup_plans.py +0 -0
  745. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_forecast_learning.py +0 -0
  746. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_function_routing.py +0 -0
  747. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_gap_generators.py +0 -0
  748. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_genesis_manifest.py +0 -0
  749. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_global_pause.py +0 -0
  750. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_goal_dispatch_availability.py +0 -0
  751. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_goal_inference_provenance.py +0 -0
  752. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_goal_reader_imports.py +0 -0
  753. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_governed_actions.py +0 -0
  754. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_governed_research_handoff.py +0 -0
  755. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_graduated_approvals.py +0 -0
  756. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_grant_envelope.py +0 -0
  757. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_graph_reindex_metadata.py +0 -0
  758. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_guard_audit.py +0 -0
  759. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_guard_chat_mode.py +0 -0
  760. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_guard_derive_context.py +0 -0
  761. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_guard_enforce_policy.py +0 -0
  762. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_export.py +0 -0
  763. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_general_governance.py +0 -0
  764. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_history_import.py +0 -0
  765. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_native_tool_authority.py +0 -0
  766. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_plugin_contract.py +0 -0
  767. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_plugin_event_lifecycle.py +0 -0
  768. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_plugin_event_replay.py +0 -0
  769. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_plugin_guard_shadow.py +0 -0
  770. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_plugin_signals.py +0 -0
  771. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_plugin_turn_id.py +0 -0
  772. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_queue_stats_projection.py +0 -0
  773. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_setup.py +0 -0
  774. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_turn_outbox.py +0 -0
  775. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hermes_work_projection.py +0 -0
  776. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_host_input_provenance.py +0 -0
  777. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_hostworker_agreement.py +0 -0
  778. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_identity_continuity.py +0 -0
  779. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_identity_corrections.py +0 -0
  780. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_inference_context_gate.py +0 -0
  781. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_initiative_engine.py +0 -0
  782. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_initiative_evidence.py +0 -0
  783. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_initiative_executor.py +0 -0
  784. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_initiative_feedback.py +0 -0
  785. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_initiative_pipeline_v016.py +0 -0
  786. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_initiative_retry.py +0 -0
  787. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_initiative_store.py +0 -0
  788. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_input_source_lineage.py +0 -0
  789. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_insight_store.py +0 -0
  790. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_instance_service.py +0 -0
  791. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_instance_service_live.py +0 -0
  792. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_intelligence_components.py +0 -0
  793. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_intelligence_synthesis.py +0 -0
  794. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_introduction_initiatives.py +0 -0
  795. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_job_writeback.py +0 -0
  796. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_journal.py +0 -0
  797. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_legacy_fact_context.py +0 -0
  798. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_local_work_context.py +0 -0
  799. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_loop_stats_accuracy.py +0 -0
  800. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_mcp_config.py +0 -0
  801. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_mcp_server.py +0 -0
  802. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_memory_decay.py +0 -0
  803. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_memory_formation.py +0 -0
  804. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_memory_governance.py +0 -0
  805. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_memory_promotion.py +0 -0
  806. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_memory_prune.py +0 -0
  807. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_memory_read_hydration.py +0 -0
  808. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_memory_response_schemas.py +0 -0
  809. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_migrations.py +0 -0
  810. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_mining.py +0 -0
  811. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_model_qualification_cli.py +0 -0
  812. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_model_qualification_memory.py +0 -0
  813. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_model_qualification_runner.py +0 -0
  814. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_model_qualification_structured.py +0 -0
  815. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_accepted_local_work.py +0 -0
  816. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_history_references.py +0 -0
  817. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_initiative_work.py +0 -0
  818. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_input_carrier.py +0 -0
  819. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_outcome_judgments.py +0 -0
  820. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_request_erasure.py +0 -0
  821. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_review_recurrence.py +0 -0
  822. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_source_image_read.py +0 -0
  823. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_source_read.py +0 -0
  824. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_source_video_read.py +0 -0
  825. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_native_tool_observations.py +0 -0
  826. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_operator_deck_read_truth.py +0 -0
  827. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_ordinary_context_briefings.py +0 -0
  828. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_owner_preferences.py +0 -0
  829. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_p2_wirings.py +0 -0
  830. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_partial_work_rendering.py +0 -0
  831. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_patterns.py +0 -0
  832. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_pending_work_coverage.py +0 -0
  833. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_persona.py +0 -0
  834. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_persona_setup_result.py +0 -0
  835. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_phase_capability_check.py +0 -0
  836. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_preset_loop_coupling.py +0 -0
  837. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_project_event_outbox.py +0 -0
  838. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_project_result_reconciliation_phase.py +0 -0
  839. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_projects.py +0 -0
  840. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_prompt_evals.py +0 -0
  841. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_proposals.py +0 -0
  842. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_provenance_population.py +0 -0
  843. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_pseudo_agi_production_chain.py +0 -0
  844. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_queue_completed_filter.py +0 -0
  845. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_queue_contract.py +0 -0
  846. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_quiet_hours_and_reload.py +0 -0
  847. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_reachout_policy.py +0 -0
  848. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_recall_person_boost.py +0 -0
  849. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_recall_ranking.py +0 -0
  850. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_recall_rerank.py +0 -0
  851. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_recency.py +0 -0
  852. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_reflection_task_routing.py +0 -0
  853. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_rejection_loop.py +0 -0
  854. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_relationship_calendar_aggregators.py +0 -0
  855. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_relationship_score_refresh.py +0 -0
  856. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_relationship_signal_floor.py +0 -0
  857. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_relationships.py +0 -0
  858. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_reply_forecast_callback_order.py +0 -0
  859. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_reply_forecast_stops.py +0 -0
  860. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_reply_forecasts.py +0 -0
  861. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_repo_tools.py +0 -0
  862. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_reported_worker_status.py +0 -0
  863. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_request_capabilities.py +0 -0
  864. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_request_work_context.py +0 -0
  865. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_reranker_remote.py +0 -0
  866. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_research_orchestrator.py +0 -0
  867. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_resolve_messaging_handle.py +0 -0
  868. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_response_guard.py +0 -0
  869. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_response_guard_communication_policy.py +0 -0
  870. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_response_guard_endpoint.py +0 -0
  871. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_response_guard_surface_policy.py +0 -0
  872. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_router_tiers.py +0 -0
  873. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_runtime_model_observations.py +0 -0
  874. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_sandbox.py +0 -0
  875. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_scoped_api_authority.py +0 -0
  876. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_scoped_contact_resolution.py +0 -0
  877. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_secondary_review_contract.py +0 -0
  878. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_selected_autonomy.py +0 -0
  879. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_self_directed_thinker.py +0 -0
  880. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_self_initiatives.py +0 -0
  881. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_self_judgment_opt_in.py +0 -0
  882. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_self_judgment_premises.py +0 -0
  883. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_self_judgments.py +0 -0
  884. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_self_model.py +0 -0
  885. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_self_perspective.py +0 -0
  886. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_selfhood_benchmark.py +0 -0
  887. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_session_reports.py +0 -0
  888. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_shared_facts.py +0 -0
  889. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_shared_local_undertaking.py +0 -0
  890. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_sidecar.py +0 -0
  891. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_signals_attribution.py +0 -0
  892. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_situation_spine.py +0 -0
  893. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_skill_approval.py +0 -0
  894. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_skill_attribution.py +0 -0
  895. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_skill_sandbox.py +0 -0
  896. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_skill_synthesis.py +0 -0
  897. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_skill_synthesis_wiring.py +0 -0
  898. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_skills_memory.py +0 -0
  899. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_social_context_flow.py +0 -0
  900. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_social_transport.py +0 -0
  901. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_annotation_claim_survivors.py +0 -0
  902. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_appraisals.py +0 -0
  903. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_attribution.py +0 -0
  904. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_audio.py +0 -0
  905. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_claim_budget.py +0 -0
  906. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_claim_diagnostics.py +0 -0
  907. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_claim_media_eligibility.py +0 -0
  908. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_claim_review.py +0 -0
  909. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_claim_subject_basis.py +0 -0
  910. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_document_read.py +0 -0
  911. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_documents.py +0 -0
  912. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_episode_admission.py +0 -0
  913. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_episode_memory.py +0 -0
  914. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_episode_revisions.py +0 -0
  915. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_image_read.py +0 -0
  916. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_media.py +0 -0
  917. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_memory_backup.py +0 -0
  918. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_time_query.py +0 -0
  919. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_source_video.py +0 -0
  920. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_sqlite_connection_ownership.py +0 -0
  921. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_supervised_rung.py +0 -0
  922. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_surprise.py +0 -0
  923. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_sweep_fixes.py +0 -0
  924. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_synthesis.py +0 -0
  925. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_telemetry_staleness.py +0 -0
  926. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_temporal.py +0 -0
  927. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_temporal_followups.py +0 -0
  928. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_temporal_index.py +0 -0
  929. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_test_environment_isolation.py +0 -0
  930. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_thinking_phase.py +0 -0
  931. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_thought_function_routing.py +0 -0
  932. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tick_phase_budget.py +0 -0
  933. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tier_endpoints.py +0 -0
  934. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_timeline.py +0 -0
  935. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_approvals.py +0 -0
  936. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_asymmetry.py +0 -0
  937. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_context.py +0 -0
  938. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_cross_gate.py +0 -0
  939. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_eligibility.py +0 -0
  940. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_epistemic_guard.py +0 -0
  941. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_exposure.py +0 -0
  942. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_kill_switch.py +0 -0
  943. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_level_coherence.py +0 -0
  944. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_leveled.py +0 -0
  945. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_levels.py +0 -0
  946. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_source_corrections.py +0 -0
  947. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_store.py +0 -0
  948. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_taint.py +0 -0
  949. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom2_wiring.py +0 -0
  950. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_event_lineage.py +0 -0
  951. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_extractor.py +0 -0
  952. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_arcs.py +0 -0
  953. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_boundary_corpus.py +0 -0
  954. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_fact_adapters.py +0 -0
  955. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_outbound_integration.py +0 -0
  956. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_recipient_audit.py +0 -0
  957. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_recipient_simulator.py +0 -0
  958. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_server_integration.py +0 -0
  959. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_visibility.py +0 -0
  960. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_p8_visibility_store.py +0 -0
  961. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tom_source_lineage.py +0 -0
  962. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tool_handlers_graph.py +0 -0
  963. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tool_observation_reader.py +0 -0
  964. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tool_provenance.py +0 -0
  965. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_tool_surface.py +0 -0
  966. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_toolsmith.py +0 -0
  967. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_transport_ingress.py +0 -0
  968. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_transport_ingress_api.py +0 -0
  969. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_trust_configure.py +0 -0
  970. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_trust_scopes.py +0 -0
  971. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_trust_scopes_p2.py +0 -0
  972. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_turn_idempotency_ledger.py +0 -0
  973. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_turn_idempotency_v2.py +0 -0
  974. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_turn_ner_entities.py +0 -0
  975. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_turn_source_erasure.py +0 -0
  976. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_turn_source_evidence.py +0 -0
  977. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_turn_survivor_delivery.py +0 -0
  978. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_validation_sweep_fixes.py +0 -0
  979. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_vector_vacuum.py +0 -0
  980. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_wizard_autonomy.py +0 -0
  981. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_work_ancestry_projection.py +0 -0
  982. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_work_control_production_blockers.py +0 -0
  983. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_work_control_v1.py +0 -0
  984. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_work_orders.py +0 -0
  985. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_work_read_surface_authority.py +0 -0
  986. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_work_source_coverage.py +0 -0
  987. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_worker_handler_boundaries.py +0 -0
  988. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_worker_heartbeat_truth.py +0 -0
  989. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_worker_http_authority.py +0 -0
  990. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_worker_integration.py +0 -0
  991. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_worker_lifecycle_durability.py +0 -0
  992. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_workers_governor.py +0 -0
  993. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_workers_install.py +0 -0
  994. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_workspace.py +0 -0
  995. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_context_query.py +0 -0
  996. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_entity_reinforcement.py +0 -0
  997. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_llm_extract.py +0 -0
  998. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_model_prune.py +0 -0
  999. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_observations.py +0 -0
  1000. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_populator.py +0 -0
  1001. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_quality.py +0 -0
  1002. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_store_api.py +0 -0
  1003. {apsimo-1.4.4 → apsimo-1.4.6}/tests/test_world_supervised.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apsimo
3
- Version: 1.4.4
3
+ Version: 1.4.6
4
4
  Summary: Persistent identity, memory and autonomy for AI agents
5
5
  License-Expression: MIT
6
6
  Requires-Python: >=3.11
@@ -28,7 +28,7 @@ Requires-Dist: pandas>=2.0; extra == "vectors"
28
28
  Requires-Dist: pyarrow>=15.0; extra == "vectors"
29
29
  Requires-Dist: lancedb>=0.10; extra == "vectors"
30
30
  Provides-Extra: hermes
31
- Requires-Dist: apsimo-hermes<2,>=1.4.4; extra == "hermes"
31
+ Requires-Dist: apsimo-hermes<2,>=1.4.6; extra == "hermes"
32
32
  Provides-Extra: mcp
33
33
  Requires-Dist: mcp[cli]<2,>=1.0; extra == "mcp"
34
34
  Provides-Extra: lancedb
@@ -2516,7 +2516,7 @@ async def context_assemble(
2516
2516
 
2517
2517
  # --- Memory: authorized candidates, one selection and one budget ---
2518
2518
  if _canonical_person_allowed and query_text:
2519
- from apsimo.intelligence.graph.recall import source_candidates
2519
+ from apsimo.memory.recall import source_candidates
2520
2520
  beliefs, quotations, source_hits, semantic_media = [], [], [], []
2521
2521
  source_ledger = None
2522
2522
  if not _canonical_only and _graph is not None:
@@ -2581,7 +2581,7 @@ async def context_assemble(
2581
2581
  contact_tz, body.context.timezone or ("UTC" if _canonical_only else None)))
2582
2582
  if source_ledger is not None:
2583
2583
  from apsimo.beliefs.source_projection import SourceClaimProjection
2584
- from apsimo.intelligence.graph.selection import current_work_query
2584
+ from apsimo.memory.selection import current_work_query
2585
2585
  beliefs, quotations = SourceClaimProjection(source_ledger).prepare_context(
2586
2586
  beliefs, source_hits, contact_id=body.context.contact_id,
2587
2587
  session_id=body.context.session_id, time_query=time_query,
@@ -2598,7 +2598,7 @@ async def context_assemble(
2598
2598
  # The projected view preserves envelope and current-source
2599
2599
  # checks. A fact needs query overlap before any fail-open
2600
2600
  # reranker path; confidence alone never makes it relevant.
2601
- from apsimo.intelligence.graph.recall import contact_fact_candidates
2601
+ from apsimo.memory.recall import contact_fact_candidates
2602
2602
  fact_result = _tom_context_facts.list_facts(
2603
2603
  contact_id=body.context.contact_id, limit=512)
2604
2604
  facts = fact_result if isinstance(fact_result, list) else fact_result.get('facts', [])
@@ -2623,7 +2623,7 @@ async def context_assemble(
2623
2623
  from apsimo.turns.source_annotations import current_candidates
2624
2624
  retained = current_candidates(source_ledger, selected, **annotation_scope)
2625
2625
  if len(retained) != len(selected):
2626
- from apsimo.intelligence.graph.recall import pack_memory_context
2626
+ from apsimo.memory.recall import pack_memory_context
2627
2627
  selected, body_text = pack_memory_context(retained, limit=5,
2628
2628
  max_chars=max(0, min(max_chars, 24000)))
2629
2629
  if body_text:
@@ -11284,7 +11284,7 @@ async def enriched_context(
11284
11284
  and (_p8_runtime is None or _enriched_p8_viewer is not None):
11285
11285
  async def _shared_facts():
11286
11286
  try:
11287
- from apsimo.intelligence.graph.recall import contact_fact_candidates, pack_memory_context
11287
+ from apsimo.memory.recall import contact_fact_candidates, pack_memory_context
11288
11288
  from apsimo.turns.source_annotations import expand, current_candidates
11289
11289
  store = _p8_runtime.facts_store if _p8_runtime is not None else _facts_store
11290
11290
  view = (_p8_runtime.projected_facts_view(_enriched_p8_viewer,
@@ -11725,8 +11725,8 @@ def _memory_context_selector():
11725
11725
  """Keep one selector per active reranker, also usable without graph storage."""
11726
11726
  global _context_recall_selector
11727
11727
  if _context_recall_selector is None or _context_recall_selector[0] is not _reranker:
11728
- from apsimo.intelligence.graph.selection import RecallSelector
11729
- from apsimo.intelligence.graph.recall import provider_calibration_metadata
11728
+ from apsimo.memory.selection import RecallSelector
11729
+ from apsimo.memory.recall import provider_calibration_metadata
11730
11730
  provider = _reranker
11731
11731
  selector = RecallSelector(
11732
11732
  provider.rerank if provider is not None else None,
@@ -102,7 +102,7 @@ class MemoryReadRequest(BaseModel):
102
102
  source_id: Optional[str] = Field(default=None, min_length=1, max_length=256)
103
103
  source_version: Optional[str] = Field(default=None, pattern='^[0-9a-f]{64}$')
104
104
  session_id: Optional[str] = Field(default=None, min_length=1, max_length=256)
105
- source_view: Literal['source', 'assertions', 'image', 'document', 'video'] = 'source'
105
+ source_view: Literal['source', 'assertions', 'observations', 'image', 'document', 'video'] = 'source'
106
106
  asset_hash: Optional[str] = Field(default=None, pattern='^[0-9a-f]{64}$')
107
107
  page: Optional[int] = Field(default=None, ge=1, strict=True)
108
108
  requested_ms: Optional[int] = Field(default=None, ge=0, le=30000, strict=True)
@@ -470,7 +470,7 @@ class SourceClaimProjection:
470
470
  Unknown, corrected, changed, multiple-input and cross-scope provenance
471
471
  remains recallable. This transient hint never changes stored history.
472
472
  """
473
- from apsimo.intelligence.graph.selection import current_work_query
473
+ from apsimo.memory.selection import current_work_query
474
474
  from apsimo.turns.idempotency import canonical_turn_digest, source_message_hash
475
475
  if message.get('role') != 'assistant' or source['scope'] != 'person':
476
476
  return False
@@ -521,7 +521,7 @@ class SourceClaimProjection:
521
521
  """
522
522
  from apsimo.turns.idempotency import source_message_hash
523
523
  from apsimo.turns.audio import source_text
524
- from apsimo.intelligence.graph.recall import source_candidates
524
+ from apsimo.memory.recall import source_candidates
525
525
  turn_ids = list(dict.fromkeys(
526
526
  [row["turn_id"] for row in source_hits] + [str(row["source_uri"])[5:] for row in beliefs
527
527
  if str(row.get("source_uri") or "").startswith("turn:")]))
@@ -1,7 +1,7 @@
1
1
  """Shared phone gateway resolution.
2
2
 
3
3
  Replaces the three hardcoded _PHONE_GATEWAYS tuples scattered across
4
- contacts/store.py, identity/resolver.py, and contacts/world_bridge.py.
4
+ contacts/store.py and identity/resolver.py.
5
5
 
6
6
  Reads from the channel store when available; falls back to a built-in
7
7
  set so the system works before any channels are registered.
@@ -43,6 +43,7 @@ def main() -> None:
43
43
  init_p.add_argument("--quiet-hours", help="Optional local follow-up quiet window, HH:MM-HH:MM; grants no outreach permission")
44
44
  init_p.add_argument("--whatsapp-read-receipts", choices=["on", "off"], help="Set this Hermes profile's read receipts for accepted WhatsApp messages; omission preserves its setting")
45
45
  init_p.add_argument("--preferences-only", action="store_true", help="Update only an existing Hermes config preference; skip instance and model setup")
46
+ init_p.add_argument("--skills-only", action="store_true", help="Install or explicitly refresh owned bundled skills in one Hermes profile; no instance or model setup")
46
47
  init_p.add_argument("--preview", action="store_true", help="With --preferences-only, show changed preference paths without writing")
47
48
  init_p.add_argument("--model-url", help="One local OpenAI-compatible API root")
48
49
  init_p.add_argument("--model", help="Model identifier at that endpoint")
@@ -313,7 +314,7 @@ def main() -> None:
313
314
  code = run_init(root_dir=args.dir, args=args)
314
315
  if code != 0:
315
316
  sys.exit(code)
316
- if args.preferences_only:
317
+ if args.preferences_only or args.skills_only:
317
318
  return
318
319
 
319
320
  # Initialize Apsimo identity if not already done
@@ -132,11 +132,9 @@ class SQLiteContactImporter(ContactImporter):
132
132
  self,
133
133
  store: SQLiteContactStore,
134
134
  config: Optional[ContactsConfig] = None,
135
- bridge = None, # Optional[WorldModelContactBridge]
136
135
  ) -> None:
137
136
  self._store = store
138
137
  self._config = config or ContactsConfig()
139
- self._bridge = bridge
140
138
 
141
139
  async def import_raw(self, records: List[RawContactRecord], source: str) -> BatchImportResult:
142
140
  result = BatchImportResult(source=source, total=len(records))
@@ -186,9 +184,6 @@ class SQLiteContactImporter(ContactImporter):
186
184
  contact_id=existing_id,
187
185
  merged_into_id=existing_id,
188
186
  ))
189
- # Absorb any discovered contacts with overlapping handles
190
- if self._bridge:
191
- await self._absorb_discovered_for(existing_id, norm_phones, norm_emails)
192
187
  elif candidates and candidates[0][0] >= proposal_threshold:
193
188
  # Below auto-merge but above proposal threshold — create and propose
194
189
  contact = await self._store.create(
@@ -209,8 +204,6 @@ class SQLiteContactImporter(ContactImporter):
209
204
  outcome=ImportOutcome.CREATED,
210
205
  contact_id=contact.contact_id,
211
206
  ))
212
- if self._bridge:
213
- await self._absorb_discovered_for(contact.contact_id, norm_phones, norm_emails)
214
207
  else:
215
208
  # No match — create new contact
216
209
  contact = await self._store.create(
@@ -230,8 +223,6 @@ class SQLiteContactImporter(ContactImporter):
230
223
  outcome=ImportOutcome.CREATED,
231
224
  contact_id=contact.contact_id,
232
225
  ))
233
- if self._bridge:
234
- await self._absorb_discovered_for(contact.contact_id, norm_phones, norm_emails)
235
226
  except Exception as exc:
236
227
  logger.warning(
237
228
  "Failed to import record (name_hash=%s): %s",
@@ -245,26 +236,6 @@ class SQLiteContactImporter(ContactImporter):
245
236
  ))
246
237
  return result
247
238
 
248
- async def _absorb_discovered_for(
249
- self,
250
- curated_contact_id: str,
251
- norm_phones: List[str],
252
- norm_emails: List[str],
253
- ) -> None:
254
- """Find discovered contacts with overlapping handles and absorb them."""
255
- if not self._bridge:
256
- return
257
- for phone in norm_phones:
258
- discovered = await self._store.find_discovered_by_handle("imessage", phone)
259
- if discovered:
260
- await self._bridge.absorb_discovered_contact(curated_contact_id, discovered)
261
- return
262
- for email in norm_emails:
263
- discovered = await self._store.find_discovered_by_handle("email", email)
264
- if discovered:
265
- await self._bridge.absorb_discovered_contact(curated_contact_id, discovered)
266
- return
267
-
268
239
  async def import_from_macos_contacts(self) -> BatchImportResult:
269
240
  from .importers.macos_contacts import MacOSContactsImporter
270
241
  importer = MacOSContactsImporter(normalize_phones=self._config.import_cfg.normalize_phones)
@@ -258,10 +258,9 @@ class ContactStore(ABC):
258
258
  class SQLiteContactStore(ContactStore):
259
259
  """SQLite-backed implementation of ContactStore."""
260
260
 
261
- def __init__(self, config: Optional[ContactsConfig] = None, graph=None) -> None:
261
+ def __init__(self, config: Optional[ContactsConfig] = None) -> None:
262
262
  self._config = config or ContactsConfig()
263
263
  self._db: Optional[aiosqlite.Connection] = None
264
- self._graph = graph # Optional ColonyGraph for score sync
265
264
 
266
265
  async def connect(self) -> None:
267
266
  path = self._config.sqlite_path
@@ -529,28 +528,6 @@ class SQLiteContactStore(ContactStore):
529
528
  return None
530
529
  return Contact.from_row(dict(row))
531
530
 
532
- async def find_discovered_by_handle(
533
- self, gateway: str, address: str
534
- ) -> Optional[Contact]:
535
- """Find a discovered (world_model) contact that owns a given handle."""
536
- db = self._require_db()
537
- norm = _normalize_email(address) if gateway == "email" else _normalize_phone(address) if gateway in ("imessage", "sms", "signal") else address
538
- async with db.execute(
539
- """
540
- SELECT c.* FROM contacts c
541
- JOIN contact_handles h ON h.contact_id = c.contact_id
542
- WHERE c.import_source = 'world_model'
543
- AND c.deleted_at IS NULL
544
- AND h.gateway = ? AND h.address = ?
545
- LIMIT 1
546
- """,
547
- (gateway, norm),
548
- ) as cur:
549
- row = await cur.fetchone()
550
- if row is None:
551
- return None
552
- return Contact.from_row(dict(row))
553
-
554
531
  # ── Write ops ─────────────────────────────────────────────────────────────
555
532
 
556
533
  async def create(
@@ -1121,16 +1098,6 @@ class SQLiteContactStore(ContactStore):
1121
1098
  (score, _now_iso(), contact_id),
1122
1099
  )
1123
1100
  await db.commit()
1124
- # Sync to graph if linked
1125
- if self._graph is not None:
1126
- try:
1127
- contact = await self.get(contact_id)
1128
- if contact and contact.person_node_id:
1129
- await self._graph.update_person(
1130
- contact.person_node_id, score=score,
1131
- )
1132
- except Exception as exc:
1133
- logger.debug("Score sync to graph failed for %s: %s", contact_id, exc)
1134
1101
 
1135
1102
  async def update_interaction_allowed(
1136
1103
  self, contact_id: str, allowed: bool, performed_by: str = "operator"
@@ -1260,7 +1260,7 @@ class ColonyGraph:
1260
1260
  memories.append(mem)
1261
1261
 
1262
1262
  if hybrid:
1263
- from .recall import fuse_candidates
1263
+ from apsimo.memory.recall import fuse_candidates
1264
1264
  candidate_limit = min(max(limit * 5, limit), max(100, limit))
1265
1265
  lexical = await self._recall_lexical(
1266
1266
  query, candidate_limit, min_strength, min_confidence,
@@ -1394,7 +1394,7 @@ class ColonyGraph:
1394
1394
  content reaches Python/reranking. A missing/populating index degrades
1395
1395
  to the existing vector/keyword path.
1396
1396
  """
1397
- from .recall import FULLTEXT_INDEX, lexical_query
1397
+ from .queries import FULLTEXT_INDEX, lexical_query
1398
1398
  search_text = lexical_query(query)
1399
1399
  if not search_text:
1400
1400
  return []
@@ -1468,7 +1468,7 @@ class ColonyGraph:
1468
1468
  self, query, memories, limit, *, strength_ranking=False,
1469
1469
  ):
1470
1470
  # The same selector is used for mixed source/belief turn context.
1471
- from .selection import RecallSelector
1471
+ from apsimo.memory.selection import RecallSelector
1472
1472
  selector = getattr(self, "_recall_selector", None)
1473
1473
  if selector is None:
1474
1474
  selector = self._recall_selector = RecallSelector(
@@ -7,6 +7,16 @@ and makes it easy to test / review / optimise in one place.
7
7
  Parameters are referenced with ``$param`` syntax for Neo4j driver binding.
8
8
  """
9
9
 
10
+ FULLTEXT_INDEX = "memory_content_fulltext"
11
+
12
+
13
+ def lexical_query(text: str, max_terms: int = 16) -> str:
14
+ """Literal words/identifiers, not caller-supplied Lucene operators."""
15
+ from apsimo.memory.recall import lexical_terms
16
+
17
+ return " OR ".join(f'"{word}"' for word in lexical_terms(text, max_terms))
18
+
19
+
10
20
  # ──────────────────────────────────────────────────────────────────────
11
21
  # Memory operations
12
22
  # ──────────────────────────────────────────────────────────────────────
@@ -0,0 +1 @@
1
+ """Shared evidence selection and rendering for Apsimo memory."""
@@ -1,4 +1,4 @@
1
- """Small retrieval helpers shared by the existing graph/vector recall path."""
1
+ """Shared source candidates, rank fusion and bounded memory rendering."""
2
2
  from __future__ import annotations
3
3
 
4
4
  import re
@@ -7,7 +7,6 @@ import json
7
7
  import os
8
8
  from typing import Any
9
9
 
10
- FULLTEXT_INDEX = "memory_content_fulltext"
11
10
  _WORDS = re.compile(r"[^\W_]+(?:[-.][^\W_]+)*", re.UNICODE)
12
11
  _STOP = frozenset("a an and are as at be by do does for from how i in is it me of on or that the this to was what when where which who with you".split())
13
12
 
@@ -209,11 +208,6 @@ def lexical_terms(text: str, max_terms: int = 16) -> list[str]:
209
208
  return list(words)[:max_terms]
210
209
 
211
210
 
212
- def lexical_query(text: str, max_terms: int = 16) -> str:
213
- """Literal words/identifiers, not caller-supplied Lucene operators."""
214
- return " OR ".join(f'"{word}"' for word in lexical_terms(text, max_terms))
215
-
216
-
217
211
  def contact_fact_candidates(query: str, facts: list[dict[str, Any]], *, limit: int = 25) -> list[dict[str, Any]]:
218
212
  """Lexical candidates from an authorized, current source-linked fact view.
219
213
 
@@ -13,7 +13,7 @@ from .records import CaseSpec
13
13
 
14
14
  def _recollect(projection, query, *, contact, session, now, max_chars):
15
15
  from apsimo.beliefs.source_time import interpret_time_query
16
- from apsimo.intelligence.graph.recall import pack_memory_context
16
+ from apsimo.memory.recall import pack_memory_context
17
17
  from apsimo.turns.source_annotations import expand, current_candidates
18
18
  ledger = projection.ledger
19
19
  hits = ledger.search_sources(query, contact_id=contact, session_id=session, limit=10)
@@ -1433,6 +1433,19 @@ def _scheduler_health_check(autonomy_loop) -> dict:
1433
1433
  "autonomy_running": bool(getattr(autonomy_loop, "_running", False))}
1434
1434
 
1435
1435
 
1436
+ async def _initialize_contacts_store():
1437
+ """Open the canonical contact store without graph backfill or pruning."""
1438
+ from apsimo.contacts.config import ContactsConfig
1439
+ from apsimo.contacts.store import SQLiteContactStore
1440
+
1441
+ config = ContactsConfig.from_env()
1442
+ store = SQLiteContactStore(config=config)
1443
+ await store.connect()
1444
+ set_contacts_store(store)
1445
+ logger.info("ContactsStore initialized (path=%s)", config.sqlite_path)
1446
+ return store
1447
+
1448
+
1436
1449
  @asynccontextmanager
1437
1450
  async def lifespan(app: FastAPI):
1438
1451
  """Initialize subsystems on startup, tear down on shutdown."""
@@ -1861,7 +1874,7 @@ async def lifespan(app: FastAPI):
1861
1874
  # set_embed_fn wiring above). Registration alone changes
1862
1875
  # nothing: use is gated by COLONY_RECALL_RERANK (default off).
1863
1876
  if graph is not None and hasattr(graph, "set_rerank_fn"):
1864
- from apsimo.intelligence.graph.recall import provider_calibration_metadata
1877
+ from apsimo.memory.recall import provider_calibration_metadata
1865
1878
  def recall_calibration_metadata():
1866
1879
  return provider_calibration_metadata(reranker_provider)
1867
1880
  graph.set_rerank_fn(
@@ -2526,36 +2539,10 @@ async def lifespan(app: FastAPI):
2526
2539
  # --- 8. Contacts ---
2527
2540
  contacts_store = None
2528
2541
  try:
2529
- from apsimo.contacts.config import ContactsConfig
2530
- from apsimo.contacts.store import SQLiteContactStore
2531
- contacts_config = ContactsConfig.from_env()
2532
- contacts_store = SQLiteContactStore(config=contacts_config, graph=graph)
2533
- await contacts_store.connect()
2534
- set_contacts_store(contacts_store)
2535
- logger.info("ContactsStore initialized (path=%s)", contacts_config.sqlite_path)
2542
+ contacts_store = await _initialize_contacts_store()
2536
2543
  except Exception as exc:
2537
2544
  logger.warning("ContactsStore init failed: %s", exc)
2538
2545
 
2539
- # --- 8b. Contact-World Model Bridge ---
2540
- if contacts_store is not None and graph is not None:
2541
- try:
2542
- from apsimo.contacts.world_bridge import WorldModelContactBridge
2543
- bridge = WorldModelContactBridge(graph=graph, store=contacts_store)
2544
- # Backfill all substantive Person nodes on startup
2545
- backfill_stats = await bridge.backfill_all_people()
2546
- logger.info(
2547
- "WorldModelContactBridge initialized — backfill created=%d linked=%d skipped=%d",
2548
- backfill_stats["created"], backfill_stats["linked"], backfill_stats["skipped"],
2549
- )
2550
- # Prune shadow contacts whose Person node no longer exists
2551
- pruned = await bridge.prune_orphaned_shadows()
2552
- if pruned:
2553
- logger.info("Pruned %d orphaned shadow contacts", pruned)
2554
- except Exception as exc:
2555
- logger.warning("WorldModelContactBridge init failed: %s", exc)
2556
- else:
2557
- logger.info("WorldModelContactBridge skipped — contacts_store or graph unavailable")
2558
-
2559
2546
  # --- 8d. Relationship profiler (standing + psyche + approach briefs) ---
2560
2547
  if contacts_store is not None:
2561
2548
  try:
@@ -1946,7 +1946,7 @@ def run_init(root_dir: str | None = None, args=None) -> int:
1946
1946
  root_dir: Root directory for config files
1947
1947
  args: Parsed argparse Namespace for non-interactive mode
1948
1948
  """
1949
- if (getattr(args, 'owner_handle', None) or getattr(args, 'preferences_only', False) or getattr(args, 'preview', False)
1949
+ if (getattr(args, 'owner_handle', None) or getattr(args, 'preferences_only', False) or getattr(args, 'skills_only', False) or getattr(args, 'preview', False)
1950
1950
  or getattr(args, 'whatsapp_read_receipts', None) is not None):
1951
1951
  if (getattr(args, 'no_harness', False) or getattr(args, 'mcp_harnesses', None)
1952
1952
  or getattr(args, 'host_framework', None) not in (None, 'hermes')):
@@ -569,14 +569,25 @@ def run(root_dir=None, args=None):
569
569
  try:
570
570
  receipt_choice = getattr(args, 'whatsapp_read_receipts', None)
571
571
  preferences_only = bool(getattr(args, 'preferences_only', False))
572
+ skills_only = bool(getattr(args, 'skills_only', False))
572
573
  preview = bool(getattr(args, 'preview', False))
573
- if preferences_only:
574
+ if preferences_only or skills_only:
574
575
  home = setup._resolve_hermes_home(getattr(args, 'hermes_home', None))
575
576
  selected_python = None
576
577
  else:
577
578
  home, selected_python = _select_home(args, ask)
578
579
  if preview and not preferences_only:
579
580
  raise ValueError('--preview requires --preferences-only')
581
+ if skills_only:
582
+ if root_dir or receipt_choice or any(getattr(args, name, None) for name in (
583
+ 'preferences_only', 'preview', 'start', 'refresh_adapter', 'replace_memory_provider',
584
+ 'local_work', 'native_goals', 'native_reviews', 'model_url', 'model', 'agent_name',
585
+ 'agent_values', 'timezone', 'quiet_hours', 'contact_name', 'owner_handle', 'encrypt',
586
+ 'passphrase', 'claim_genesis', 'mcp_harnesses', 'no_harness')):
587
+ raise ValueError('--skills-only cannot be combined with instance or preference changes')
588
+ from .setup_skills import prepare, install
589
+ install(prepare(home, _adapter_resources(getattr(args, 'adapter_wheel', None)), refresh=True))
590
+ return 0
580
591
  if preferences_only:
581
592
  if receipt_choice is None:
582
593
  raise ValueError('--preferences-only requires --whatsapp-read-receipts on or off')
@@ -673,6 +684,8 @@ def run(root_dir=None, args=None):
673
684
  resources = _adapter_resources(getattr(args, 'adapter_wheel', None))
674
685
  _preflight_outbox(home, resources)
675
686
  binding = _adapter_binding(python, resources)
687
+ from .setup_skills import prepare as prepare_skills, install as install_skills
688
+ skill_updates = prepare_skills(home, resources)
676
689
  owner_name = ask('Your name', getattr(args, 'contact_name', None) or os.environ.get('USER', 'Owner'), True)
677
690
  owner_handles, owner_platforms = _owner_handles(args, ask, noninteractive)
678
691
  agent_name = ask('Agent name', getattr(args, 'agent_name', None) or 'Assistant', True)
@@ -858,6 +871,7 @@ def run(root_dir=None, args=None):
858
871
  guiding = ('Guiding values: ' + ', '.join(agent_preferences['values']) + '.\n'
859
872
  if agent_preferences['values'] else '')
860
873
  create(home/'SOUL.md', f'# {agent_name}\n\nYou are {agent_name}, the personal assistant of {owner_name}.\n{guiding}Use retained evidence with its provenance; ask about uncertainty.\nYour opinions are revisable interpretations; distinguish them from facts and permissions.\nOwner consent is required for consequential external actions; an existing task-scoped consent covers only its stated scope.\n')
874
+ install_skills(skill_updates)
861
875
  except Exception:
862
876
  # Undo only this installation's exact bytes. Concurrent edits stay
863
877
  # intact, with original files still retained in the private state.
@@ -0,0 +1,90 @@
1
+ """Install owned bundled skills into one native Hermes catalog."""
2
+ from __future__ import annotations
3
+
4
+ import hashlib
5
+ import json
6
+ from pathlib import Path
7
+ import re
8
+
9
+
10
+ SKILL_NAME = 'apsimo-deep-research'
11
+ BUNDLE_PREFIX = 'apsimo_hermes/bundled_skills/'
12
+ SKILL_RESOURCE = f'{BUNDLE_PREFIX}{SKILL_NAME}/SKILL.md'
13
+
14
+
15
+ def _read_owned_path(path):
16
+ for parent in (path, *path.parents):
17
+ if parent.is_symlink():
18
+ raise ValueError('Bundled skill destination is symlinked; existing files were preserved')
19
+ return path.read_bytes() if path.exists() else None
20
+
21
+
22
+ def prepare(home, resources, *, refresh=False):
23
+ """Validate all packaged skill preimages before any setup writes/probe."""
24
+ updates = []
25
+ for path, content in sorted(resources.items()):
26
+ if not path.startswith(BUNDLE_PREFIX) or not path.endswith('/SKILL.md'):
27
+ continue
28
+ name = path[len(BUNDLE_PREFIX):-len('/SKILL.md')]
29
+ if not re.fullmatch(r'apsimo-[a-z0-9-]{1,56}', name):
30
+ raise ValueError('Bundled skill must have a canonical apsimo- name')
31
+ updates.extend(_prepare_skill(home, name, content, refresh=refresh))
32
+ if not updates:
33
+ raise ValueError('Selected adapter has no bundled skills')
34
+ return updates
35
+
36
+
37
+ def _prepare_skill(home, name, content, *, refresh):
38
+ if not content:
39
+ raise ValueError('Selected adapter has an empty bundled skill')
40
+ directory = Path(home)/'skills'/name
41
+ skill, marker = directory/'SKILL.md', directory/'.apsimo-owned.json'
42
+ previous, recorded = _read_owned_path(skill), _read_owned_path(marker)
43
+ digest = hashlib.sha256(content).hexdigest()
44
+ if recorded is None:
45
+ if directory.exists():
46
+ raise ValueError('Unowned bundled skill destination was preserved; choose another profile or move your copy')
47
+ else:
48
+ try:
49
+ record = json.loads(recorded)
50
+ owned = (record['owner'] == 'apsimo-hermes' and record['version'] == 1
51
+ and previous is not None
52
+ and record['sha256'] == hashlib.sha256(previous).hexdigest())
53
+ except (ValueError, KeyError, TypeError):
54
+ owned = False
55
+ if not owned:
56
+ raise ValueError('Locally modified bundled skill was preserved; keep your copy or reconcile it before refreshing')
57
+ if previous != content and not refresh:
58
+ raise ValueError('Bundled skill update requires explicit apsimo init --skills-only')
59
+ after = (json.dumps({'owner': 'apsimo-hermes', 'version': 1, 'sha256': digest},
60
+ sort_keys=True, indent=2)+'\n').encode()
61
+ return [(skill, previous, content), (marker, recorded, after)]
62
+
63
+
64
+ def install(updates):
65
+ """Replace only previously verified owned bytes; retain local edits on conflict."""
66
+ from .setup import _atomic_hermes_config_write
67
+ for path, before, _ in updates:
68
+ if _read_owned_path(path) != before:
69
+ raise ValueError('Bundled skill changed during installation; current files were preserved')
70
+ completed = []
71
+ try:
72
+ for path, before, after in updates:
73
+ if before != after:
74
+ path.parent.mkdir(parents=True, exist_ok=True, mode=0o700)
75
+ _atomic_hermes_config_write(path, before, after)
76
+ completed.append((path, before, after))
77
+ except Exception:
78
+ for path, before, after in reversed(completed):
79
+ if _read_owned_path(path) == after:
80
+ if before is None:
81
+ path.unlink()
82
+ else:
83
+ _atomic_hermes_config_write(path, after, before)
84
+ # A failed first installation leaves no false ownership claim.
85
+ for directory in {path.parent for path, _, _ in updates}:
86
+ if directory.is_dir() and not any(directory.iterdir()):
87
+ directory.rmdir()
88
+ raise
89
+ names = sorted({path.parent.name for path, _, _ in updates})
90
+ print('Bundled skills available: '+', '.join(names)+'. With this Apsimo adapter version active, ongoing conversations refresh skill discovery on their next request.')
@@ -150,6 +150,11 @@ class TurnIdempotencyLedger:
150
150
  )
151
151
  )
152
152
  """)
153
+ conn.execute("""
154
+ CREATE INDEX IF NOT EXISTS source_observation_origin ON turn_sources
155
+ (contact_id, json_extract(messages_json, '$[0]._observation_sources[0].source_id'), turn_id)
156
+ WHERE json_extract(messages_json, '$[0]._native_tool_observation') = 'native-tool-observation-v1'
157
+ """)
153
158
  conn.execute("""
154
159
  CREATE VIRTUAL TABLE IF NOT EXISTS turn_source_search USING fts5(
155
160
  turn_id UNINDEXED, role UNINDEXED, content,
@@ -173,9 +173,11 @@ def expand(ledger, candidates, *, contact_id, session_id, covered=()):
173
173
  own_annotation = conn.execute('SELECT * FROM source_annotations WHERE annotation_source_id=?',
174
174
  (identifier,)).fetchone()
175
175
  for message in row['messages']:
176
- if (message.get('role') == 'assistant'
177
- and source_message_hash(row['session_id'], message) in selected_hashes):
178
- for ref in message.get('_supplied_sources', []):
176
+ dependencies = (message.get('_supplied_sources', []) if message.get('role') == 'assistant'
177
+ else message.get('_observation_sources', []) if message.get('role') == 'tool'
178
+ and message.get('_native_tool_observation') == 'native-tool-observation-v1' else [])
179
+ if source_message_hash(row['session_id'], message) in selected_hashes:
180
+ for ref in dependencies:
179
181
  parent = source(ref['source_id'])
180
182
  if parent and canonical_turn_digest(parent['messages']) == ref['source_version']:
181
183
  # Dedicated annotations have exact target message
@@ -71,7 +71,9 @@ def correct(ledger, *, operation_id, performed_by, old_contact_id, contact_id,
71
71
  if row['turn_id'] in selected or row['turn_id'] in descendants:
72
72
  continue
73
73
  if any(ref.get('source_id') in pending for message in json.loads(row['messages_json'])
74
- for ref in message.get('_supplied_sources', [])):
74
+ for ref in (message.get('_supplied_sources', []) if message.get('role') == 'assistant'
75
+ else message.get('_observation_sources', []) if message.get('role') == 'tool'
76
+ and message.get('_native_tool_observation') == 'native-tool-observation-v1' else [])):
75
77
  found.add(row['turn_id'])
76
78
  descendants.update(found)
77
79
  pending = found