apsimo 1.4.4__tar.gz → 1.4.5__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 (1001) hide show
  1. {apsimo-1.4.4 → apsimo-1.4.5}/PKG-INFO +2 -2
  2. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/host.py +7 -7
  3. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/source_projection.py +2 -2
  4. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cli.py +2 -1
  5. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/client.py +3 -3
  6. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/queries.py +10 -0
  7. apsimo-1.4.5/apsimo/memory/__init__.py +1 -0
  8. {apsimo-1.4.4/apsimo/intelligence/graph → apsimo-1.4.5/apsimo/memory}/recall.py +1 -7
  9. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/memory_cases.py +1 -1
  10. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/server.py +1 -1
  11. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup.py +1 -1
  12. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup_hermes.py +15 -1
  13. apsimo-1.4.5/apsimo/setup_skills.py +90 -0
  14. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/PKG-INFO +2 -2
  15. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/SOURCES.txt +4 -2
  16. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/requires.txt +1 -1
  17. {apsimo-1.4.4 → apsimo-1.4.5}/pyproject.toml +2 -2
  18. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_canonical_source_read.py +1 -1
  19. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_current_work_recall_selection.py +1 -1
  20. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_media_read_reference_presentation.py +1 -1
  21. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_setup.py +98 -0
  22. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_procedure_source_context.py +1 -1
  23. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_hybrid.py +3 -2
  24. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_request_repetition.py +2 -2
  25. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_source_presentation.py +1 -1
  26. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_unified_context.py +44 -2
  27. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_short_source_context.py +1 -1
  28. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_annotations.py +5 -5
  29. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_audio_claims.py +3 -3
  30. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_projection.py +1 -1
  31. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_event_precision.py +1 -1
  32. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_excerpt_lineage.py +1 -1
  33. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_vectors.py +5 -5
  34. {apsimo-1.4.4 → apsimo-1.4.5}/LICENSE +0 -0
  35. {apsimo-1.4.4 → apsimo-1.4.5}/README.md +0 -0
  36. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/__init__.py +0 -0
  37. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/__main__.py +0 -0
  38. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agent/__init__.py +0 -0
  39. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agent/client.py +0 -0
  40. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agent/models.py +0 -0
  41. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agents/__init__.py +0 -0
  42. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agents/models.py +0 -0
  43. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agents/store.py +0 -0
  44. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agents/websocket.py +0 -0
  45. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/__init__.py +0 -0
  46. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/auth_telemetry.py +0 -0
  47. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/authority.py +0 -0
  48. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/contact_grants.py +0 -0
  49. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/middleware.py +0 -0
  50. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/__init__.py +0 -0
  51. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/commitment_work.py +0 -0
  52. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/context_gate.py +0 -0
  53. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/executions.py +0 -0
  54. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/followup_plans.py +0 -0
  55. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/governed_actions.py +0 -0
  56. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/initiative_work.py +0 -0
  57. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/mining.py +0 -0
  58. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/observations.py +0 -0
  59. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/social_state.py +0 -0
  60. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/task_queue.py +0 -0
  61. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/temporal_followups.py +0 -0
  62. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/transport.py +0 -0
  63. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/transport_ingress_api.py +0 -0
  64. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/schemas/__init__.py +0 -0
  65. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/schemas/host.py +0 -0
  66. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/cli.py +0 -0
  67. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/condition_worker.py +0 -0
  68. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/config.py +0 -0
  69. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/loop.py +0 -0
  70. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/registry.py +0 -0
  71. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/scheduler.py +0 -0
  72. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/synthesis.py +0 -0
  73. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/backup.py +0 -0
  74. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/__init__.py +0 -0
  75. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/contradictions.py +0 -0
  76. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/decay.py +0 -0
  77. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/engine.py +0 -0
  78. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/models.py +0 -0
  79. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/promotion.py +0 -0
  80. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/resolve.py +0 -0
  81. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/source_claims.py +0 -0
  82. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/source_time.py +0 -0
  83. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/store.py +0 -0
  84. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/aggregators.py +0 -0
  85. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/composer.py +0 -0
  86. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/config.py +0 -0
  87. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/delivery.py +0 -0
  88. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/engagement.py +0 -0
  89. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/engine.py +0 -0
  90. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/enhancer.py +0 -0
  91. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/models.py +0 -0
  92. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/scheduler.py +0 -0
  93. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/store.py +0 -0
  94. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/__init__.py +0 -0
  95. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/block.py +0 -0
  96. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/cli.py +0 -0
  97. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/genesis.py +0 -0
  98. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/identity.py +0 -0
  99. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/keys.py +0 -0
  100. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/local_keys.py +0 -0
  101. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/manager.py +0 -0
  102. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/node.py +0 -0
  103. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/plugin_transactions.py +0 -0
  104. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/protocol.py +0 -0
  105. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/state_machine.py +0 -0
  106. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/storage.py +0 -0
  107. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/transactions.py +0 -0
  108. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/validation.py +0 -0
  109. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/__init__.py +0 -0
  110. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/manifest.py +0 -0
  111. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/migrations/001_channels_schema.sql +0 -0
  112. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/phone_gateways.py +0 -0
  113. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/presence.py +0 -0
  114. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/router.py +0 -0
  115. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/store.py +0 -0
  116. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/__init__.py +0 -0
  117. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/charter.py +0 -0
  118. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/drive_governance.py +0 -0
  119. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/evidence_pipeline.py +0 -0
  120. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/external_events.py +0 -0
  121. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/goal_spine.py +0 -0
  122. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/introspection.py +0 -0
  123. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/prompt.py +0 -0
  124. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/runtime.py +0 -0
  125. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/trigger.py +0 -0
  126. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/commitments/__init__.py +0 -0
  127. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/commitments/local_work.py +0 -0
  128. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/commitments/store.py +0 -0
  129. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/commitments/work.py +0 -0
  130. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/compression/__init__.py +0 -0
  131. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/__init__.py +0 -0
  132. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/base.py +0 -0
  133. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/caldav_calendar.py +0 -0
  134. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/fs_documents.py +0 -0
  135. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/imap_email.py +0 -0
  136. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/manager.py +0 -0
  137. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/webhook_pull.py +0 -0
  138. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/__init__.py +0 -0
  139. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/comms.py +0 -0
  140. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/config.py +0 -0
  141. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/exporters/__init__.py +0 -0
  142. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/exporters/vcard.py +0 -0
  143. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/identity_links.py +0 -0
  144. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/importer.py +0 -0
  145. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/importers/__init__.py +0 -0
  146. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/importers/batch.py +0 -0
  147. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/importers/macos_contacts.py +0 -0
  148. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/001_contacts_schema.sql +0 -0
  149. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/002_trust_scopes.sql +0 -0
  150. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/003_open_gateway_enum.sql +0 -0
  151. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/004_contact_provision_operations.sql +0 -0
  152. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/005_identity_links.sql +0 -0
  153. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/models.py +0 -0
  154. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/scoring.py +0 -0
  155. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/store.py +0 -0
  156. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/transport_ingress.py +0 -0
  157. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/world_bridge.py +0 -0
  158. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/__init__.py +0 -0
  159. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/chunker.py +0 -0
  160. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/estimate.py +0 -0
  161. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/gate.py +0 -0
  162. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/retrieve.py +0 -0
  163. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/__init__.py +0 -0
  164. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/bridge.py +0 -0
  165. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/channels.py +0 -0
  166. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/classification.py +0 -0
  167. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/rate_limiter.py +0 -0
  168. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/reachout_policy.py +0 -0
  169. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/__init__.py +0 -0
  170. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/audit.py +0 -0
  171. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/intake.py +0 -0
  172. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/models.py +0 -0
  173. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/service.py +0 -0
  174. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/__init__.py +0 -0
  175. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/evidence.py +0 -0
  176. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/extractor.py +0 -0
  177. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/guard.py +0 -0
  178. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/models.py +0 -0
  179. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/service.py +0 -0
  180. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/store.py +0 -0
  181. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/doctor.py +0 -0
  182. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/environment.py +0 -0
  183. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/__init__.py +0 -0
  184. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/broadcaster.py +0 -0
  185. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/bus.py +0 -0
  186. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/journal.py +0 -0
  187. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/stream.py +0 -0
  188. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/types.py +0 -0
  189. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/execution_results.py +0 -0
  190. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feedback/__init__.py +0 -0
  191. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feedback/store.py +0 -0
  192. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/__init__.py +0 -0
  193. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/cli.py +0 -0
  194. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/engine.py +0 -0
  195. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/example-feed.yaml +0 -0
  196. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/hermes_cron.py +0 -0
  197. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/manager.py +0 -0
  198. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/spec.py +0 -0
  199. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/template.py +0 -0
  200. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/__init__.py +0 -0
  201. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/audit.py +0 -0
  202. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/communication_policy.py +0 -0
  203. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/config.py +0 -0
  204. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/context_provenance.py +0 -0
  205. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/env_risk.py +0 -0
  206. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/guard_audit.py +0 -0
  207. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/__init__.py +0 -0
  208. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/base.py +0 -0
  209. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l1_recipient.py +0 -0
  210. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l2_pii.py +0 -0
  211. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l3_cross_context.py +0 -0
  212. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l4_trust_tier.py +0 -0
  213. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l5_injection.py +0 -0
  214. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l6_review.py +0 -0
  215. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l7_delay.py +0 -0
  216. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/tom2_epistemic.py +0 -0
  217. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/models.py +0 -0
  218. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/pending_dispatch.py +0 -0
  219. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/pipeline.py +0 -0
  220. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/rejection.py +0 -0
  221. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/response_guard.py +0 -0
  222. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/rulesets/injection_v1.yaml +0 -0
  223. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/surface_policy.py +0 -0
  224. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/taint.py +0 -0
  225. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/genesis.json +0 -0
  226. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/__init__.py +0 -0
  227. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/config.py +0 -0
  228. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/decomposer.py +0 -0
  229. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/engine.py +0 -0
  230. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/inference.py +0 -0
  231. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/models.py +0 -0
  232. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/priority.py +0 -0
  233. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/queue_bridge.py +0 -0
  234. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/replan.py +0 -0
  235. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/schema.sql +0 -0
  236. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/store.py +0 -0
  237. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/governed_actions.py +0 -0
  238. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/harness_integration/__init__.py +0 -0
  239. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/harness_integration/context.py +0 -0
  240. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/harness_integration/skills.py +0 -0
  241. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity/__init__.py +0 -0
  242. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity/participants.py +0 -0
  243. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity/resolver.py +0 -0
  244. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/__init__.py +0 -0
  245. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/builder.py +0 -0
  246. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/corpus.py +0 -0
  247. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/models.py +0 -0
  248. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/runner.py +0 -0
  249. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/__init__.py +0 -0
  250. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/briefings.py +0 -0
  251. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/chain.py +0 -0
  252. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/goals.py +0 -0
  253. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/memory.py +0 -0
  254. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/neo4j_cognition.py +0 -0
  255. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/relationship.py +0 -0
  256. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/sessions.py +0 -0
  257. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/skills.py +0 -0
  258. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/task_queue.py +0 -0
  259. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/world_model.py +0 -0
  260. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/self_query.py +0 -0
  261. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/self_reflection.py +0 -0
  262. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/skill.py +0 -0
  263. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/verifier.py +0 -0
  264. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/__init__.py +0 -0
  265. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/action_registry.py +0 -0
  266. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/approval_authority.py +0 -0
  267. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/approval_policy.py +0 -0
  268. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/assignment.py +0 -0
  269. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/backup_evidence.py +0 -0
  270. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/context_freshness.py +0 -0
  271. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/models.py +0 -0
  272. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/native_work.py +0 -0
  273. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/standing_approvals.py +0 -0
  274. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/store.py +0 -0
  275. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/temporal_followup.py +0 -0
  276. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/__init__.py +0 -0
  277. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/__init__.py +0 -0
  278. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/gap_detector.py +0 -0
  279. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/metalearner.py +0 -0
  280. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/metrics_collector.py +0 -0
  281. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/performance_index.py +0 -0
  282. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/registry.py +0 -0
  283. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/strategy_adjuster.py +0 -0
  284. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/types.py +0 -0
  285. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/__init__.py +0 -0
  286. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/anomaly_detector.py +0 -0
  287. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/initiative_engine.py +0 -0
  288. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/preference_learner.py +0 -0
  289. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/research_orchestrator.py +0 -0
  290. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/self_directed_thinker.py +0 -0
  291. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/self_reflector.py +0 -0
  292. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/session_continuity.py +0 -0
  293. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/task_planner.py +0 -0
  294. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/tool_learner.py +0 -0
  295. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/__init__.py +0 -0
  296. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/consolidator.py +0 -0
  297. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/distiller.py +0 -0
  298. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/migrations.py +0 -0
  299. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/reconciler.py +0 -0
  300. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/schema.py +0 -0
  301. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/learning/__init__.py +0 -0
  302. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/learning/continuous_learner.py +0 -0
  303. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/learning/feedback_store.py +0 -0
  304. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/mind_model/__init__.py +0 -0
  305. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/mind_model/graph_baseline.py +0 -0
  306. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/mind_model/signal_collector.py +0 -0
  307. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/__init__.py +0 -0
  308. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/profiler.py +0 -0
  309. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/scorer.py +0 -0
  310. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/signal_floor.py +0 -0
  311. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/trust_tiers.py +0 -0
  312. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/__init__.py +0 -0
  313. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/connection_discoverer.py +0 -0
  314. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/cross_domain_analyzer.py +0 -0
  315. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_deliverer.py +0 -0
  316. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_store.py +0 -0
  317. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_validator.py +0 -0
  318. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/novelty_scorer.py +0 -0
  319. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/turn_middleware/__init__.py +0 -0
  320. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/turn_middleware/memory_sync.py +0 -0
  321. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mcp/__init__.py +0 -0
  322. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mcp/__main__.py +0 -0
  323. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mcp/config.py +0 -0
  324. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mcp/server.py +0 -0
  325. {apsimo-1.4.4/apsimo/intelligence/graph → apsimo-1.4.5/apsimo/memory}/selection.py +0 -0
  326. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/migrations.py +0 -0
  327. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/__init__.py +0 -0
  328. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/corpus.py +0 -0
  329. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/escalations.py +0 -0
  330. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/models.py +0 -0
  331. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/store.py +0 -0
  332. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/__init__.py +0 -0
  333. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/memory.py +0 -0
  334. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/mesh.py +0 -0
  335. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/person.py +0 -0
  336. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/signal.py +0 -0
  337. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/observations/__init__.py +0 -0
  338. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/observations/store.py +0 -0
  339. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/patterns/__init__.py +0 -0
  340. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/patterns/extract.py +0 -0
  341. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/patterns/store.py +0 -0
  342. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/persona/__init__.py +0 -0
  343. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/persona/engine.py +0 -0
  344. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/persona/manifest.py +0 -0
  345. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/__init__.py +0 -0
  346. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/engine.py +0 -0
  347. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/event_outbox.py +0 -0
  348. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/models.py +0 -0
  349. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/planner.py +0 -0
  350. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/store.py +0 -0
  351. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/proposals/__init__.py +0 -0
  352. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/proposals/engine.py +0 -0
  353. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/proposals/models.py +0 -0
  354. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/__init__.py +0 -0
  355. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/cases.py +0 -0
  356. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/cli.py +0 -0
  357. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/records.py +0 -0
  358. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/report.py +0 -0
  359. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/runner.py +0 -0
  360. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/structured_cases.py +0 -0
  361. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/__init__.py +0 -0
  362. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/executor.py +0 -0
  363. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/loop.py +0 -0
  364. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/native_tools/__init__.py +0 -0
  365. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/native_tools/calculate.py +0 -0
  366. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/native_tools/file_ops.py +0 -0
  367. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/native_tools/web_search.py +0 -0
  368. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/tool_policy.py +0 -0
  369. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/redact/__init__.py +0 -0
  370. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/repos/__init__.py +0 -0
  371. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/repos/mirrors.py +0 -0
  372. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/__init__.py +0 -0
  373. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/artifact.py +0 -0
  374. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/gatherer.py +0 -0
  375. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/pipeline.py +0 -0
  376. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/__init__.py +0 -0
  377. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/base.py +0 -0
  378. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/brave.py +0 -0
  379. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/cache.py +0 -0
  380. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/duckduckgo.py +0 -0
  381. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/orchestrator.py +0 -0
  382. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/serpapi.py +0 -0
  383. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/tavily.py +0 -0
  384. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/synthesizer.py +0 -0
  385. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/__init__.py +0 -0
  386. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/complexity_scorer.py +0 -0
  387. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/endpoints.py +0 -0
  388. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/fallback.py +0 -0
  389. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/functions.py +0 -0
  390. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/native_policy.py +0 -0
  391. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/router.py +0 -0
  392. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/self_learning.py +0 -0
  393. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/tiers.py +0 -0
  394. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sandbox/__init__.py +0 -0
  395. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sandbox/backend.py +0 -0
  396. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sandbox/manager.py +0 -0
  397. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/scope_bounds.py +0 -0
  398. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/__init__.py +0 -0
  399. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/__init__.py +0 -0
  400. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/base.py +0 -0
  401. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/env.py +0 -0
  402. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/keyring.py +0 -0
  403. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/onepassword.py +0 -0
  404. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/cli.py +0 -0
  405. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/manager.py +0 -0
  406. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/migration.py +0 -0
  407. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/types.py +0 -0
  408. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/__init__.py +0 -0
  409. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/appraisals.py +0 -0
  410. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/benchmark.py +0 -0
  411. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/brief.py +0 -0
  412. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/event_concerns.py +0 -0
  413. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/execution_forecasts.py +0 -0
  414. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/expectations.py +0 -0
  415. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/experiments.py +0 -0
  416. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/journal.py +0 -0
  417. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/judgments.py +0 -0
  418. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/native_outcomes.py +0 -0
  419. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/params.py +0 -0
  420. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/perspective.py +0 -0
  421. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/reconcile.py +0 -0
  422. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/reply_forecasts.py +0 -0
  423. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/runtime_forecasts.py +0 -0
  424. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/runtime_models.py +0 -0
  425. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/settlement.py +0 -0
  426. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/situation.py +0 -0
  427. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/store.py +0 -0
  428. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/supervised.py +0 -0
  429. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/thinker.py +0 -0
  430. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/trust.py +0 -0
  431. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/workspace.py +0 -0
  432. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/services/__init__.py +0 -0
  433. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/services/agent_bridge.py +0 -0
  434. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/services/initiative_executor.py +0 -0
  435. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/services/instance.py +0 -0
  436. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/__init__.py +0 -0
  437. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/config.py +0 -0
  438. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/context_loader.py +0 -0
  439. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/federation_session.py +0 -0
  440. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/isolated_session.py +0 -0
  441. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/reports.py +0 -0
  442. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/store.py +0 -0
  443. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup_local_work.py +0 -0
  444. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup_native_goals.py +0 -0
  445. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup_native_reviews.py +0 -0
  446. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/__init__.py +0 -0
  447. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/base.py +0 -0
  448. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/budget.py +0 -0
  449. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executor.py +0 -0
  450. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/__init__.py +0 -0
  451. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/behavioral_correction.py +0 -0
  452. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/capability_gap.py +0 -0
  453. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/data_quality.py +0 -0
  454. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/knowledge_acquisition.py +0 -0
  455. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/operational_hygiene.py +0 -0
  456. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/subsystem_health.py +0 -0
  457. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/hermes_export.py +0 -0
  458. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/index.py +0 -0
  459. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/learning/__init__.py +0 -0
  460. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/learning/novelty_detector.py +0 -0
  461. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/learning/pattern_extractor.py +0 -0
  462. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/learning/triggers.py +0 -0
  463. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/loader.py +0 -0
  464. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/migrations/002_progressive_loading.sql +0 -0
  465. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/migrations/backfill_triggers.py +0 -0
  466. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/models.py +0 -0
  467. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/packager.py +0 -0
  468. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/protocols.py +0 -0
  469. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/registry.py +0 -0
  470. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/runtime.py +0 -0
  471. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/sandbox_runner.py +0 -0
  472. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/scheduler.py +0 -0
  473. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/schema.py +0 -0
  474. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/security/__init__.py +0 -0
  475. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/security/guards.py +0 -0
  476. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/security/scanner.py +0 -0
  477. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/__init__.py +0 -0
  478. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/distill.py +0 -0
  479. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/models.py +0 -0
  480. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/retrieve.py +0 -0
  481. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/store.py +0 -0
  482. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/surprise/__init__.py +0 -0
  483. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/surprise/accumulation.py +0 -0
  484. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/surprise/scorer.py +0 -0
  485. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/surprise/store.py +0 -0
  486. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/__init__.py +0 -0
  487. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/action_receipts.py +0 -0
  488. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/approval_relay_canary.py +0 -0
  489. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/config.py +0 -0
  490. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/contract.py +0 -0
  491. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/events.py +0 -0
  492. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/governor.py +0 -0
  493. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/__init__.py +0 -0
  494. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/base.py +0 -0
  495. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/inference.py +0 -0
  496. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/monitoring.py +0 -0
  497. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/registry.py +0 -0
  498. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/subtask_handler.py +0 -0
  499. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/system_maintenance.py +0 -0
  500. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/mesh_integration.py +0 -0
  501. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/models.py +0 -0
  502. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/queue_manager.py +0 -0
  503. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/routing.py +0 -0
  504. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/scheduler.py +0 -0
  505. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/schema.sql +0 -0
  506. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/work_control.py +0 -0
  507. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/worker.py +0 -0
  508. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/telemetry.py +0 -0
  509. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/__init__.py +0 -0
  510. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/affect.py +0 -0
  511. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/approvals.py +0 -0
  512. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/arcs.py +0 -0
  513. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/asymmetry.py +0 -0
  514. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/eligibility.py +0 -0
  515. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/engagement.py +0 -0
  516. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/exposure.py +0 -0
  517. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/extractor.py +0 -0
  518. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/fact_adapters.py +0 -0
  519. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/facts.py +0 -0
  520. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/integration.py +0 -0
  521. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/leveled.py +0 -0
  522. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/levels.py +0 -0
  523. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/recipient_audit.py +0 -0
  524. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/recipient_simulator.py +0 -0
  525. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/source_lineage.py +0 -0
  526. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/tom2.py +0 -0
  527. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/visibility.py +0 -0
  528. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/visibility_store.py +0 -0
  529. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tools/__init__.py +0 -0
  530. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tools/definitions.py +0 -0
  531. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tools/handlers.py +0 -0
  532. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/__init__.py +0 -0
  533. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/authority.py +0 -0
  534. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/engine.py +0 -0
  535. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/integrity.py +0 -0
  536. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/miner.py +0 -0
  537. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/policy.py +0 -0
  538. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/registry.py +0 -0
  539. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/__init__.py +0 -0
  540. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/audio.py +0 -0
  541. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/documents.py +0 -0
  542. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/executions.py +0 -0
  543. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/hermes_history.py +0 -0
  544. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/hermes_kanban.py +0 -0
  545. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/hermes_work.py +0 -0
  546. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/history_references.py +0 -0
  547. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/idempotency.py +0 -0
  548. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/local_work.py +0 -0
  549. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/media.py +0 -0
  550. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/reported_workers.py +0 -0
  551. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/source_annotations.py +0 -0
  552. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/source_attribution.py +0 -0
  553. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/source_read.py +0 -0
  554. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/source_vectors.py +0 -0
  555. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/tool_observations.py +0 -0
  556. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/video.py +0 -0
  557. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/autonomy_preset.py +0 -0
  558. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/instance.py +0 -0
  559. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/model_output.py +0 -0
  560. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/quiet_hours.py +0 -0
  561. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/session_safety.py +0 -0
  562. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/temporal.py +0 -0
  563. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/__init__.py +0 -0
  564. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/backfill.py +0 -0
  565. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/caption.py +0 -0
  566. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/collections.py +0 -0
  567. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/config.py +0 -0
  568. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/embedder.py +0 -0
  569. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/image_preprocess.py +0 -0
  570. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/image_store.py +0 -0
  571. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/indexes.py +0 -0
  572. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/migrate.py +0 -0
  573. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/multimodal_provider.py +0 -0
  574. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/multimodal_types.py +0 -0
  575. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/openai_provider.py +0 -0
  576. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/query.py +0 -0
  577. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/reranker.py +0 -0
  578. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/safety_image.py +0 -0
  579. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/scanner.py +0 -0
  580. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/setup.py +0 -0
  581. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/store.py +0 -0
  582. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/tiers.py +0 -0
  583. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/work_orders.py +0 -0
  584. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/__init__.py +0 -0
  585. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/agent_bridge.py +0 -0
  586. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/colony_worker.py +0 -0
  587. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/queue_worker.py +0 -0
  588. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/skills_sync.py +0 -0
  589. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/__init__.py +0 -0
  590. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/causal_maintenance.py +0 -0
  591. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/causal_policy.py +0 -0
  592. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/causal_query.py +0 -0
  593. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/confidence.py +0 -0
  594. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/config.py +0 -0
  595. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/constants.py +0 -0
  596. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/entities.py +0 -0
  597. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/expectation_resolvers.py +0 -0
  598. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/__init__.py +0 -0
  599. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/base.py +0 -0
  600. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/conversation_extractor.py +0 -0
  601. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/detector.py +0 -0
  602. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/document_extractor.py +0 -0
  603. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/__init__.py +0 -0
  604. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/csv_fmt.py +0 -0
  605. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/html_fmt.py +0 -0
  606. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/json_fmt.py +0 -0
  607. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/pdf.py +0 -0
  608. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/text.py +0 -0
  609. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/llm_extractor.py +0 -0
  610. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/pipeline.py +0 -0
  611. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/integrations/__init__.py +0 -0
  612. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/integrations/mind_model_bridge.py +0 -0
  613. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/integrations/social_intel_bridge.py +0 -0
  614. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/jobs/__init__.py +0 -0
  615. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/jobs/extraction_job.py +0 -0
  616. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/llm_extract.py +0 -0
  617. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/observations.py +0 -0
  618. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/populator.py +0 -0
  619. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/relationships.py +0 -0
  620. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/resolution/__init__.py +0 -0
  621. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/resolution/entity_resolver.py +0 -0
  622. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/resolution/merge_audit.py +0 -0
  623. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/resolution/merge_workflow.py +0 -0
  624. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/source_reports.py +0 -0
  625. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/sqlite/__init__.py +0 -0
  626. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/sqlite/backend.py +0 -0
  627. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/sqlite/schema.sql +0 -0
  628. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/store.py +0 -0
  629. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/dependency_links.txt +0 -0
  630. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/entry_points.txt +0 -0
  631. {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/top_level.txt +0 -0
  632. {apsimo-1.4.4 → apsimo-1.4.5}/setup.cfg +0 -0
  633. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_accepted_local_work.py +0 -0
  634. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_adaptive_params.py +0 -0
  635. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_affect.py +0 -0
  636. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_action_routing.py +0 -0
  637. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_api.py +0 -0
  638. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_bridge.py +0 -0
  639. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_bridge_service.py +0 -0
  640. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_sdk.py +0 -0
  641. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_sensor_loop.py +0 -0
  642. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_snapshot.py +0 -0
  643. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_store.py +0 -0
  644. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_annotated_recall_reinforcement.py +0 -0
  645. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_answer_source_lineage.py +0 -0
  646. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_appraisal_incident_decisions.py +0 -0
  647. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_approval_gate.py +0 -0
  648. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_approval_relay_canary.py +0 -0
  649. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_apsimo_compat.py +0 -0
  650. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_apsimo_harness_guidance.py +0 -0
  651. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_assignment_engine.py +0 -0
  652. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_audit_cleanup.py +0 -0
  653. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_auth_coverage.py +0 -0
  654. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_auth_migration_readiness.py +0 -0
  655. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_authz_scope_api.py +0 -0
  656. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_autonomy_preset.py +0 -0
  657. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_backup.py +0 -0
  658. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_backup_receipt_evidence.py +0 -0
  659. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_beliefs.py +0 -0
  660. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_bind_auth_guard.py +0 -0
  661. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_boundary_fail_closed.py +0 -0
  662. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_bounded_approval_authority.py +0 -0
  663. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_briefing_aggregators.py +0 -0
  664. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_canonical_scoped_context.py +0 -0
  665. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_extract.py +0 -0
  666. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_falsifiability.py +0 -0
  667. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_maintenance.py +0 -0
  668. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_policy.py +0 -0
  669. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_query.py +0 -0
  670. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_query_only_guard.py +0 -0
  671. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_chain_keys.py +0 -0
  672. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_channel_preferences.py +0 -0
  673. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_channel_registry.py +0 -0
  674. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_channel_store.py +0 -0
  675. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition.py +0 -0
  676. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_evidence_pipeline.py +0 -0
  677. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_evidence_server_wiring.py +0 -0
  678. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_goal_spine.py +0 -0
  679. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_observability.py +0 -0
  680. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_p4_controlled_learning.py +0 -0
  681. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_p4_server_integration.py +0 -0
  682. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_p6_p7_server_wiring.py +0 -0
  683. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_p7_drive_governance.py +0 -0
  684. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_phase_b_runtime.py +0 -0
  685. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_phase_c_scheduler.py +0 -0
  686. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_server_wiring.py +0 -0
  687. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_colony_memory_provider.py +0 -0
  688. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitment_resolution.py +0 -0
  689. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitment_resolution_downgrade.py +0 -0
  690. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitment_resolution_schema.py +0 -0
  691. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitment_work.py +0 -0
  692. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitments.py +0 -0
  693. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_comms_source_erasure.py +0 -0
  694. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_competence_reconciliation.py +0 -0
  695. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_compression.py +0 -0
  696. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_concern_resolution_receipts.py +0 -0
  697. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_condition_producer.py +0 -0
  698. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_connectors.py +0 -0
  699. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contact_fact_recall.py +0 -0
  700. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contact_policy_projection.py +0 -0
  701. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contact_provisioning.py +0 -0
  702. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contact_timezone.py +0 -0
  703. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contacts_intro.py +0 -0
  704. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contacts_persistence.py +0 -0
  705. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_context_gate.py +0 -0
  706. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_context_phase1.py +0 -0
  707. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_context_provenance.py +0 -0
  708. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_context_skill_ownership.py +0 -0
  709. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_conversation_presence.py +0 -0
  710. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_conversation_turn_concerns.py +0 -0
  711. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_delivery_bridge_503.py +0 -0
  712. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_delivery_gateway_identity.py +0 -0
  713. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_delivery_reachout_routing.py +0 -0
  714. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directed.py +0 -0
  715. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directed_envelope.py +0 -0
  716. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directed_reports.py +0 -0
  717. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directed_trust.py +0 -0
  718. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directive_sources.py +0 -0
  719. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directives.py +0 -0
  720. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_distill.py +0 -0
  721. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_doctor.py +0 -0
  722. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_document_memory_guard.py +0 -0
  723. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_duckduckgo_provider.py +0 -0
  724. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_embedding_generations.py +0 -0
  725. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_enrolled_sender_turns.py +0 -0
  726. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_ensure_channel_id.py +0 -0
  727. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_env_risk.py +0 -0
  728. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_event_broadcasts.py +0 -0
  729. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_event_bus_types.py +0 -0
  730. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_event_concerns.py +0 -0
  731. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_event_stream_reliability.py +0 -0
  732. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_execution_forecasts.py +0 -0
  733. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_execution_input_purpose.py +0 -0
  734. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_execution_registry.py +0 -0
  735. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_expectations.py +0 -0
  736. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_expectations_v2.py +0 -0
  737. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_experiments.py +0 -0
  738. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_external_cognition_events.py +0 -0
  739. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_external_event_concerns.py +0 -0
  740. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_facts_backfill.py +0 -0
  741. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_feedback.py +0 -0
  742. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_followup_plans.py +0 -0
  743. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_forecast_learning.py +0 -0
  744. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_function_routing.py +0 -0
  745. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_gap_generators.py +0 -0
  746. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_genesis_manifest.py +0 -0
  747. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_global_pause.py +0 -0
  748. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_goal_dispatch_availability.py +0 -0
  749. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_goal_inference_provenance.py +0 -0
  750. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_goal_reader_imports.py +0 -0
  751. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_governed_actions.py +0 -0
  752. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_governed_research_handoff.py +0 -0
  753. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_graduated_approvals.py +0 -0
  754. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_grant_envelope.py +0 -0
  755. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_graph_reindex_metadata.py +0 -0
  756. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_guard_audit.py +0 -0
  757. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_guard_chat_mode.py +0 -0
  758. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_guard_derive_context.py +0 -0
  759. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_guard_enforce_policy.py +0 -0
  760. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_export.py +0 -0
  761. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_general_governance.py +0 -0
  762. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_history_import.py +0 -0
  763. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_native_tool_authority.py +0 -0
  764. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_contract.py +0 -0
  765. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_event_lifecycle.py +0 -0
  766. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_event_replay.py +0 -0
  767. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_guard_shadow.py +0 -0
  768. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_signals.py +0 -0
  769. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_turn_id.py +0 -0
  770. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_queue_stats_projection.py +0 -0
  771. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_setup.py +0 -0
  772. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_turn_outbox.py +0 -0
  773. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_work_projection.py +0 -0
  774. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_host_input_provenance.py +0 -0
  775. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hostworker_agreement.py +0 -0
  776. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_identity_continuity.py +0 -0
  777. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_identity_corrections.py +0 -0
  778. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_inference_context_gate.py +0 -0
  779. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_engine.py +0 -0
  780. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_evidence.py +0 -0
  781. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_executor.py +0 -0
  782. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_feedback.py +0 -0
  783. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_pipeline_v016.py +0 -0
  784. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_retry.py +0 -0
  785. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_store.py +0 -0
  786. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_input_source_lineage.py +0 -0
  787. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_insight_store.py +0 -0
  788. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_instance_service.py +0 -0
  789. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_instance_service_live.py +0 -0
  790. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_intelligence_components.py +0 -0
  791. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_intelligence_synthesis.py +0 -0
  792. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_introduction_initiatives.py +0 -0
  793. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_job_writeback.py +0 -0
  794. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_journal.py +0 -0
  795. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_legacy_fact_context.py +0 -0
  796. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_local_work_context.py +0 -0
  797. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_loop_stats_accuracy.py +0 -0
  798. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_mcp_config.py +0 -0
  799. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_mcp_server.py +0 -0
  800. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_decay.py +0 -0
  801. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_formation.py +0 -0
  802. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_governance.py +0 -0
  803. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_promotion.py +0 -0
  804. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_prune.py +0 -0
  805. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_read_hydration.py +0 -0
  806. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_response_schemas.py +0 -0
  807. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_migrations.py +0 -0
  808. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_mining.py +0 -0
  809. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_model_qualification_cli.py +0 -0
  810. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_model_qualification_memory.py +0 -0
  811. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_model_qualification_runner.py +0 -0
  812. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_model_qualification_structured.py +0 -0
  813. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_accepted_local_work.py +0 -0
  814. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_history_references.py +0 -0
  815. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_initiative_work.py +0 -0
  816. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_input_carrier.py +0 -0
  817. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_outcome_judgments.py +0 -0
  818. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_request_erasure.py +0 -0
  819. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_review_recurrence.py +0 -0
  820. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_source_image_read.py +0 -0
  821. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_source_read.py +0 -0
  822. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_source_video_read.py +0 -0
  823. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_tool_observations.py +0 -0
  824. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_operator_deck_read_truth.py +0 -0
  825. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_ordinary_context_briefings.py +0 -0
  826. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_owner_preferences.py +0 -0
  827. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_p2_wirings.py +0 -0
  828. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_partial_work_rendering.py +0 -0
  829. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_patterns.py +0 -0
  830. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_pending_work_coverage.py +0 -0
  831. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_persona.py +0 -0
  832. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_persona_setup_result.py +0 -0
  833. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_phase_capability_check.py +0 -0
  834. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_preset_loop_coupling.py +0 -0
  835. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_project_event_outbox.py +0 -0
  836. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_project_result_reconciliation_phase.py +0 -0
  837. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_projects.py +0 -0
  838. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_prompt_evals.py +0 -0
  839. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_proposals.py +0 -0
  840. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_provenance_population.py +0 -0
  841. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_pseudo_agi_production_chain.py +0 -0
  842. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_queue_completed_filter.py +0 -0
  843. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_queue_contract.py +0 -0
  844. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_quiet_hours_and_reload.py +0 -0
  845. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reachout_policy.py +0 -0
  846. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_person_boost.py +0 -0
  847. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_ranking.py +0 -0
  848. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_rerank.py +0 -0
  849. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recency.py +0 -0
  850. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reflection_task_routing.py +0 -0
  851. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_rejection_loop.py +0 -0
  852. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_relationship_calendar_aggregators.py +0 -0
  853. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_relationship_score_refresh.py +0 -0
  854. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_relationship_signal_floor.py +0 -0
  855. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_relationships.py +0 -0
  856. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reply_forecast_callback_order.py +0 -0
  857. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reply_forecast_stops.py +0 -0
  858. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reply_forecasts.py +0 -0
  859. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_repo_tools.py +0 -0
  860. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reported_worker_status.py +0 -0
  861. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_request_capabilities.py +0 -0
  862. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_request_work_context.py +0 -0
  863. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reranker_remote.py +0 -0
  864. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_research_orchestrator.py +0 -0
  865. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_resolve_messaging_handle.py +0 -0
  866. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_response_guard.py +0 -0
  867. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_response_guard_communication_policy.py +0 -0
  868. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_response_guard_endpoint.py +0 -0
  869. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_response_guard_surface_policy.py +0 -0
  870. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_router_tiers.py +0 -0
  871. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_runtime_model_observations.py +0 -0
  872. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_sandbox.py +0 -0
  873. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_scoped_api_authority.py +0 -0
  874. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_scoped_contact_resolution.py +0 -0
  875. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_secondary_review_contract.py +0 -0
  876. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_selected_autonomy.py +0 -0
  877. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_directed_thinker.py +0 -0
  878. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_initiatives.py +0 -0
  879. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_judgment_opt_in.py +0 -0
  880. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_judgment_premises.py +0 -0
  881. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_judgments.py +0 -0
  882. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_model.py +0 -0
  883. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_perspective.py +0 -0
  884. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_selfhood_benchmark.py +0 -0
  885. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_session_reports.py +0 -0
  886. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_shared_facts.py +0 -0
  887. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_shared_local_undertaking.py +0 -0
  888. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_sidecar.py +0 -0
  889. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_signals_attribution.py +0 -0
  890. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_situation_spine.py +0 -0
  891. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_approval.py +0 -0
  892. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_attribution.py +0 -0
  893. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_sandbox.py +0 -0
  894. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_synthesis.py +0 -0
  895. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_synthesis_wiring.py +0 -0
  896. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skills_memory.py +0 -0
  897. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_social_context_flow.py +0 -0
  898. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_social_transport.py +0 -0
  899. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_annotation_claim_survivors.py +0 -0
  900. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_appraisals.py +0 -0
  901. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_attribution.py +0 -0
  902. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_audio.py +0 -0
  903. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_budget.py +0 -0
  904. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_diagnostics.py +0 -0
  905. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_media_eligibility.py +0 -0
  906. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_review.py +0 -0
  907. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_subject_basis.py +0 -0
  908. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_document_read.py +0 -0
  909. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_documents.py +0 -0
  910. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_episode_admission.py +0 -0
  911. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_episode_memory.py +0 -0
  912. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_episode_revisions.py +0 -0
  913. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_image_read.py +0 -0
  914. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_media.py +0 -0
  915. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_memory_backup.py +0 -0
  916. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_time_query.py +0 -0
  917. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_video.py +0 -0
  918. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_sqlite_connection_ownership.py +0 -0
  919. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_supervised_rung.py +0 -0
  920. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_surprise.py +0 -0
  921. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_sweep_fixes.py +0 -0
  922. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_synthesis.py +0 -0
  923. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_telemetry_staleness.py +0 -0
  924. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_temporal.py +0 -0
  925. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_temporal_followups.py +0 -0
  926. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_temporal_index.py +0 -0
  927. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_test_environment_isolation.py +0 -0
  928. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_thinking_phase.py +0 -0
  929. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_thought_function_routing.py +0 -0
  930. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tick_phase_budget.py +0 -0
  931. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tier_endpoints.py +0 -0
  932. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_timeline.py +0 -0
  933. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_approvals.py +0 -0
  934. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_asymmetry.py +0 -0
  935. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_context.py +0 -0
  936. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_cross_gate.py +0 -0
  937. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_eligibility.py +0 -0
  938. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_epistemic_guard.py +0 -0
  939. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_exposure.py +0 -0
  940. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_kill_switch.py +0 -0
  941. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_level_coherence.py +0 -0
  942. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_leveled.py +0 -0
  943. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_levels.py +0 -0
  944. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_source_corrections.py +0 -0
  945. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_store.py +0 -0
  946. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_taint.py +0 -0
  947. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_wiring.py +0 -0
  948. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_event_lineage.py +0 -0
  949. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_extractor.py +0 -0
  950. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_arcs.py +0 -0
  951. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_boundary_corpus.py +0 -0
  952. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_fact_adapters.py +0 -0
  953. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_outbound_integration.py +0 -0
  954. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_recipient_audit.py +0 -0
  955. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_recipient_simulator.py +0 -0
  956. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_server_integration.py +0 -0
  957. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_visibility.py +0 -0
  958. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_visibility_store.py +0 -0
  959. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_source_lineage.py +0 -0
  960. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tool_handlers_graph.py +0 -0
  961. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tool_observation_reader.py +0 -0
  962. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tool_provenance.py +0 -0
  963. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tool_surface.py +0 -0
  964. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_toolsmith.py +0 -0
  965. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_transport_ingress.py +0 -0
  966. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_transport_ingress_api.py +0 -0
  967. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_trust_configure.py +0 -0
  968. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_trust_scopes.py +0 -0
  969. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_trust_scopes_p2.py +0 -0
  970. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_idempotency_ledger.py +0 -0
  971. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_idempotency_v2.py +0 -0
  972. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_ner_entities.py +0 -0
  973. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_source_erasure.py +0 -0
  974. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_source_evidence.py +0 -0
  975. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_survivor_delivery.py +0 -0
  976. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_validation_sweep_fixes.py +0 -0
  977. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_vector_vacuum.py +0 -0
  978. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_wizard_autonomy.py +0 -0
  979. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_ancestry_projection.py +0 -0
  980. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_control_production_blockers.py +0 -0
  981. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_control_v1.py +0 -0
  982. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_orders.py +0 -0
  983. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_read_surface_authority.py +0 -0
  984. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_source_coverage.py +0 -0
  985. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_handler_boundaries.py +0 -0
  986. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_heartbeat_truth.py +0 -0
  987. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_http_authority.py +0 -0
  988. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_integration.py +0 -0
  989. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_lifecycle_durability.py +0 -0
  990. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_workers_governor.py +0 -0
  991. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_workers_install.py +0 -0
  992. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_workspace.py +0 -0
  993. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_context_query.py +0 -0
  994. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_entity_reinforcement.py +0 -0
  995. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_llm_extract.py +0 -0
  996. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_model_prune.py +0 -0
  997. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_observations.py +0 -0
  998. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_populator.py +0 -0
  999. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_quality.py +0 -0
  1000. {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_store_api.py +0 -0
  1001. {apsimo-1.4.4 → apsimo-1.4.5}/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.5
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.5; 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,
@@ -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:")]))
@@ -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
@@ -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)
@@ -1861,7 +1861,7 @@ async def lifespan(app: FastAPI):
1861
1861
  # set_embed_fn wiring above). Registration alone changes
1862
1862
  # nothing: use is gated by COLONY_RECALL_RERANK (default off).
1863
1863
  if graph is not None and hasattr(graph, "set_rerank_fn"):
1864
- from apsimo.intelligence.graph.recall import provider_calibration_metadata
1864
+ from apsimo.memory.recall import provider_calibration_metadata
1865
1865
  def recall_calibration_metadata():
1866
1866
  return provider_calibration_metadata(reranker_provider)
1867
1867
  graph.set_rerank_fn(
@@ -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.')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apsimo
3
- Version: 1.4.4
3
+ Version: 1.4.5
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.5; extra == "hermes"
32
32
  Provides-Extra: mcp
33
33
  Requires-Dist: mcp[cli]<2,>=1.0; extra == "mcp"
34
34
  Provides-Extra: lancedb
@@ -18,6 +18,7 @@ apsimo/setup_hermes.py
18
18
  apsimo/setup_local_work.py
19
19
  apsimo/setup_native_goals.py
20
20
  apsimo/setup_native_reviews.py
21
+ apsimo/setup_skills.py
21
22
  apsimo/telemetry.py
22
23
  apsimo/work_orders.py
23
24
  apsimo.egg-info/PKG-INFO
@@ -285,10 +286,8 @@ apsimo/intelligence/graph/consolidator.py
285
286
  apsimo/intelligence/graph/distiller.py
286
287
  apsimo/intelligence/graph/migrations.py
287
288
  apsimo/intelligence/graph/queries.py
288
- apsimo/intelligence/graph/recall.py
289
289
  apsimo/intelligence/graph/reconciler.py
290
290
  apsimo/intelligence/graph/schema.py
291
- apsimo/intelligence/graph/selection.py
292
291
  apsimo/intelligence/learning/__init__.py
293
292
  apsimo/intelligence/learning/continuous_learner.py
294
293
  apsimo/intelligence/learning/feedback_store.py
@@ -313,6 +312,9 @@ apsimo/mcp/__init__.py
313
312
  apsimo/mcp/__main__.py
314
313
  apsimo/mcp/config.py
315
314
  apsimo/mcp/server.py
315
+ apsimo/memory/__init__.py
316
+ apsimo/memory/recall.py
317
+ apsimo/memory/selection.py
316
318
  apsimo/mining/__init__.py
317
319
  apsimo/mining/corpus.py
318
320
  apsimo/mining/escalations.py
@@ -35,7 +35,7 @@ beautifulsoup4>=4.12
35
35
  neo4j>=5.18
36
36
 
37
37
  [hermes]
38
- apsimo-hermes<2,>=1.4.4
38
+ apsimo-hermes<2,>=1.4.5
39
39
 
40
40
  [lancedb]
41
41
  lancedb>=0.6
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "apsimo"
7
- version = "1.4.4"
7
+ version = "1.4.5"
8
8
  description = "Persistent identity, memory and autonomy for AI agents"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -29,7 +29,7 @@ dependencies = [
29
29
  graph = ["neo4j>=5.18"]
30
30
  neo4j = ["neo4j>=5.18"]
31
31
  vectors = ["sentence-transformers>=3.0", "pandas>=2.0", "pyarrow>=15.0", "lancedb>=0.10"]
32
- hermes = ["apsimo-hermes>=1.4.4,<2"]
32
+ hermes = ["apsimo-hermes>=1.4.5,<2"]
33
33
  mcp = ["mcp[cli]>=1.0,<2"]
34
34
  lancedb = ["lancedb>=0.6", "pyarrow>=14.0", "pandas>=2.0"]
35
35
  extraction = ["PyMuPDF>=1.24", "beautifulsoup4>=4.12"]
@@ -8,7 +8,7 @@ import pytest
8
8
  from apsimo.api.middleware import ApiKeyMiddleware
9
9
  from apsimo.beliefs.source_projection import SourceClaimProjection
10
10
  from apsimo.beliefs.source_time import interpret_time_query
11
- from apsimo.intelligence.graph.recall import pack_memory_context
11
+ from apsimo.memory.recall import pack_memory_context
12
12
  from apsimo.turns import TurnIdempotencyLedger
13
13
  from apsimo.turns.source_read import read
14
14
  from test_scoped_api_authority import _principal, _write_keyring
@@ -11,7 +11,7 @@ from apsimo.api.authority import RequestAuthority
11
11
  from apsimo.api.routers import executions
12
12
  from apsimo.beliefs.source_projection import SourceClaimProjection
13
13
  from apsimo.beliefs.source_time import MemoryTimeQuery
14
- from apsimo.intelligence.graph.selection import RecallSelector, current_work_query
14
+ from apsimo.memory.selection import RecallSelector, current_work_query
15
15
  from apsimo.turns import TurnIdempotencyLedger
16
16
  from apsimo.turns.idempotency import source_message_hash
17
17
  from apsimo.turns.source_annotations import expand
@@ -9,7 +9,7 @@ import httpx
9
9
  import pytest
10
10
  import pytest_asyncio
11
11
 
12
- from apsimo.intelligence.graph.recall import pack_memory_context, render_memory_context
12
+ from apsimo.memory.recall import pack_memory_context, render_memory_context
13
13
  from apsimo.turns import TurnIdempotencyLedger
14
14
  from apsimo.turns.media import SourceMedia
15
15
  from apsimo.turns.source_annotations import expand, current_candidates
@@ -139,6 +139,8 @@ def test_new_private_instance_uses_canonical_resources_and_scoped_authority(args
139
139
  assert principal['credentials'][0]['secret'] not in (home/'config.yaml').read_text()
140
140
  assert (home/'SOUL.md').read_text().startswith('# Orion')
141
141
  assert (state/'adapter/apsimo_hermes/evidence.py').is_file()
142
+ from apsimo.setup_skills import SKILL_NAME, SKILL_RESOURCE
143
+ assert (home/'skills'/SKILL_NAME/'SKILL.md').read_bytes() == setup_hermes._adapter_resources(args.adapter_wheel)[SKILL_RESOURCE]
142
144
  assert (state/'api-keyring.json').stat().st_mode & 0o777 == 0o600
143
145
  # Same selected home finds this instance without a separate global pointer.
144
146
  monkeypatch.delenv('APSIMO_STATE_DIR', raising=False)
@@ -153,6 +155,102 @@ def test_new_private_instance_uses_canonical_resources_and_scoped_authority(args
153
155
  assert before == ((home/'config.yaml').read_bytes(), (state/'api-keyring.json').read_bytes())
154
156
 
155
157
 
158
+ def test_skills_only_installs_and_refreshes_owned_bytes_without_instance_or_model(args, monkeypatch):
159
+ from apsimo.setup_skills import SKILL_NAME, SKILL_RESOURCE
160
+ home = Path(args.hermes_home)
161
+ home.mkdir()
162
+ originals = {'config.yaml': b'model: {default: retained}\n', 'SOUL.md': b'Private identity',
163
+ 'skills/personal/SKILL.md': b'User-authored instructions'}
164
+ for relative, content in originals.items():
165
+ path = home/relative; path.parent.mkdir(parents=True, exist_ok=True); path.write_bytes(content)
166
+ only = SimpleNamespace(skills_only=True, hermes_home=str(home), adapter_wheel=args.adapter_wheel)
167
+ monkeypatch.setattr(httpx, 'post', lambda *a, **k: pytest.fail('Skills setup called a model'))
168
+ monkeypatch.setattr(setup_hermes, '_interpreter', lambda *a: pytest.fail('Skills setup changed runtime selection'))
169
+ assert setup.run_init(None, only) == 0
170
+ skill = home/'skills'/SKILL_NAME/'SKILL.md'
171
+ original = skill.read_bytes()
172
+ current = setup_hermes._adapter_resources(args.adapter_wheel)
173
+ monkeypatch.setattr(setup_hermes, '_adapter_resources', lambda *a: {**current, SKILL_RESOURCE: original+b'\nA new bundled revision.\n'})
174
+ assert setup.run_init(None, only) == 0
175
+ assert skill.read_bytes() == original+b'\nA new bundled revision.\n'
176
+ before = {path: path.read_bytes() for path in skill.parent.iterdir() if path.is_file()}
177
+ assert setup.run_init(None, only) == 0
178
+ assert before == {path: path.read_bytes() for path in skill.parent.iterdir() if path.is_file()}
179
+ assert all((home/name).read_bytes() == content for name, content in originals.items())
180
+ assert not (home/'apsimo').exists() and not (home/'.env').exists()
181
+
182
+
183
+ def test_skills_only_cli_does_not_continue_into_identity_setup(args, monkeypatch):
184
+ from apsimo import cli
185
+ monkeypatch.setattr(cli.sys, 'argv', ['apsimo', 'init', '--skills-only',
186
+ '--hermes-home', args.hermes_home, '--adapter-wheel', args.adapter_wheel])
187
+ monkeypatch.setattr(cli, '_load_dotenv', lambda: pytest.fail('Skills-only loaded instance environment'))
188
+ monkeypatch.setattr(cli, '_cmd_init', lambda *a: pytest.fail('Skills-only initialized identity'))
189
+ monkeypatch.setattr(httpx, 'post', lambda *a, **k: pytest.fail('Skills-only called a model'))
190
+ cli.main()
191
+ assert not (Path(args.hermes_home)/'apsimo').exists()
192
+
193
+
194
+ @pytest.mark.parametrize('collision', ['unowned', 'edited', 'symlink'])
195
+ def test_skills_install_preserves_user_owned_or_edited_destinations(args, collision):
196
+ from apsimo.setup_skills import SKILL_NAME
197
+ home = Path(args.hermes_home)
198
+ skill = home/'skills'/SKILL_NAME/'SKILL.md'
199
+ only = SimpleNamespace(skills_only=True, hermes_home=str(home), adapter_wheel=args.adapter_wheel)
200
+ if collision == 'edited':
201
+ assert setup.run_init(None, only) == 0
202
+ else:
203
+ skill.parent.mkdir(parents=True)
204
+ if collision == 'symlink':
205
+ target = home/'personal.md'; target.write_bytes(b'Keep my research workflow')
206
+ skill.symlink_to(target)
207
+ else:
208
+ skill.write_bytes(b'Keep my research workflow')
209
+ before = {path: path.read_bytes() for path in home.rglob('*') if path.is_file()}
210
+ assert setup.run_init(None, only) == 1
211
+ assert before == {path: path.read_bytes() for path in home.rglob('*') if path.is_file()}
212
+
213
+
214
+ def test_new_setup_detects_skill_collision_before_model_or_attachment(args, monkeypatch):
215
+ from apsimo.setup_skills import SKILL_NAME
216
+ home = Path(args.hermes_home)
217
+ skill = home/'skills'/SKILL_NAME/'SKILL.md'
218
+ skill.parent.mkdir(parents=True); skill.write_text('My own skill')
219
+ monkeypatch.setattr(httpx, 'post', lambda *a, **k: pytest.fail('Collision must precede inference'))
220
+ assert setup.run_init(None, args) == 1
221
+ assert skill.read_text() == 'My own skill'
222
+ assert not (home/'apsimo').exists() and not (home/'config.yaml').exists()
223
+
224
+
225
+ def test_skill_install_rolls_back_a_failed_ownership_write(args, monkeypatch):
226
+ from apsimo.setup_skills import SKILL_NAME
227
+ write = setup._atomic_hermes_config_write
228
+ def fail_marker(path, before, after):
229
+ if path.name == '.apsimo-owned.json':
230
+ raise OSError('Fixture ownership write failure')
231
+ write(path, before, after)
232
+ monkeypatch.setattr(setup, '_atomic_hermes_config_write', fail_marker)
233
+ only = SimpleNamespace(skills_only=True, hermes_home=args.hermes_home, adapter_wheel=args.adapter_wheel)
234
+ assert setup.run_init(None, only) == 1
235
+ assert not (Path(args.hermes_home)/'skills'/SKILL_NAME).exists()
236
+
237
+
238
+ def test_multiple_bundled_skills_validate_all_destinations_before_any_write(tmp_path):
239
+ from apsimo.setup_skills import BUNDLE_PREFIX, prepare, install
240
+ home = tmp_path/'profile'
241
+ resources = {BUNDLE_PREFIX+name+'/SKILL.md': ('Instructions for '+name).encode()
242
+ for name in ('apsimo-first', 'apsimo-second')}
243
+ install(prepare(home, resources))
244
+ first, second = [home/'skills'/name/'SKILL.md' for name in ('apsimo-first', 'apsimo-second')]
245
+ second.write_bytes(b'My modified second skill')
246
+ before = {p: p.read_bytes() for p in home.rglob('*') if p.is_file()}
247
+ candidate = {path: content+b' updated' for path, content in resources.items()}
248
+ with pytest.raises(ValueError, match='Locally modified'):
249
+ prepare(home, candidate, refresh=True)
250
+ assert before == {p: p.read_bytes() for p in home.rglob('*') if p.is_file()}
251
+ assert first.read_bytes() == b'Instructions for apsimo-first'
252
+
253
+
156
254
  def test_enrolled_owner_accounts_resolve_through_the_generated_scoped_api(args, monkeypatch):
157
255
  from fastapi import FastAPI
158
256
  from apsimo.api.middleware import ApiKeyMiddleware
@@ -8,7 +8,7 @@ import pytest
8
8
 
9
9
  from apsimo.beliefs.source_projection import SourceClaimProjection
10
10
  from apsimo.beliefs.source_time import interpret_time_query
11
- from apsimo.intelligence.graph.recall import pack_memory_context
11
+ from apsimo.memory.recall import pack_memory_context
12
12
  from apsimo.turns import TurnIdempotencyLedger
13
13
  from apsimo.turns.source_read import read
14
14
  from test_source_claim_projection import Model, claim
@@ -3,9 +3,10 @@ from unittest.mock import AsyncMock
3
3
 
4
4
  import pytest
5
5
 
6
- from apsimo.intelligence.graph.recall import (
7
- calibration_fingerprint, lexical_query, render_memory_context,
6
+ from apsimo.memory.recall import (
7
+ calibration_fingerprint, render_memory_context,
8
8
  )
9
+ from apsimo.intelligence.graph.queries import lexical_query
9
10
  from test_recall_ranking import RecallFixture, _Hit, _node
10
11
  from test_recall_rerank import _RecordingReranker
11
12
 
@@ -5,8 +5,8 @@ import json
5
5
 
6
6
  import pytest
7
7
 
8
- from apsimo.intelligence.graph.recall import source_candidates
9
- from apsimo.intelligence.graph.selection import RecallSelector
8
+ from apsimo.memory.recall import source_candidates
9
+ from apsimo.memory.selection import RecallSelector
10
10
  from apsimo.beliefs.source_projection import SourceClaimProjection
11
11
  from apsimo.beliefs.source_time import interpret_time_query
12
12
  from apsimo.turns.idempotency import TurnIdempotencyLedger, source_message_hash
@@ -6,7 +6,7 @@ from httpx import ASGITransport, AsyncClient
6
6
  import pytest
7
7
 
8
8
  from apsimo.beliefs.source_projection import SourceClaimProjection
9
- from apsimo.intelligence.graph.recall import pack_memory_context, render_memory_context
9
+ from apsimo.memory.recall import pack_memory_context, render_memory_context
10
10
  from apsimo.turns import TurnIdempotencyLedger
11
11
  from test_procedure_source_context import ProcedureModel, candidates
12
12
  from test_source_claim_projection import claim