apsimo 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. apsimo-1.3.0/LICENSE +21 -0
  2. apsimo-1.3.0/PKG-INFO +78 -0
  3. apsimo-1.3.0/README.md +19 -0
  4. apsimo-1.3.0/apsimo/__init__.py +38 -0
  5. apsimo-1.3.0/apsimo/__main__.py +6 -0
  6. apsimo-1.3.0/apsimo/agent/__init__.py +6 -0
  7. apsimo-1.3.0/apsimo/agent/client.py +276 -0
  8. apsimo-1.3.0/apsimo/agent/models.py +46 -0
  9. apsimo-1.3.0/apsimo/agents/__init__.py +20 -0
  10. apsimo-1.3.0/apsimo/agents/models.py +264 -0
  11. apsimo-1.3.0/apsimo/agents/store.py +861 -0
  12. apsimo-1.3.0/apsimo/agents/websocket.py +522 -0
  13. apsimo-1.3.0/apsimo/api/__init__.py +1 -0
  14. apsimo-1.3.0/apsimo/api/auth_telemetry.py +287 -0
  15. apsimo-1.3.0/apsimo/api/authority.py +1203 -0
  16. apsimo-1.3.0/apsimo/api/contact_grants.py +347 -0
  17. apsimo-1.3.0/apsimo/api/middleware.py +483 -0
  18. apsimo-1.3.0/apsimo/api/routers/__init__.py +1 -0
  19. apsimo-1.3.0/apsimo/api/routers/commitment_work.py +265 -0
  20. apsimo-1.3.0/apsimo/api/routers/context_gate.py +123 -0
  21. apsimo-1.3.0/apsimo/api/routers/executions.py +140 -0
  22. apsimo-1.3.0/apsimo/api/routers/followup_plans.py +147 -0
  23. apsimo-1.3.0/apsimo/api/routers/governed_actions.py +162 -0
  24. apsimo-1.3.0/apsimo/api/routers/host.py +14473 -0
  25. apsimo-1.3.0/apsimo/api/routers/initiative_work.py +115 -0
  26. apsimo-1.3.0/apsimo/api/routers/mining.py +104 -0
  27. apsimo-1.3.0/apsimo/api/routers/observations.py +110 -0
  28. apsimo-1.3.0/apsimo/api/routers/social_state.py +225 -0
  29. apsimo-1.3.0/apsimo/api/routers/task_queue.py +2715 -0
  30. apsimo-1.3.0/apsimo/api/routers/temporal_followups.py +251 -0
  31. apsimo-1.3.0/apsimo/api/routers/transport.py +110 -0
  32. apsimo-1.3.0/apsimo/api/routers/transport_ingress_api.py +240 -0
  33. apsimo-1.3.0/apsimo/api/schemas/__init__.py +1 -0
  34. apsimo-1.3.0/apsimo/api/schemas/host.py +1949 -0
  35. apsimo-1.3.0/apsimo/autonomy/cli.py +110 -0
  36. apsimo-1.3.0/apsimo/autonomy/condition_worker.py +437 -0
  37. apsimo-1.3.0/apsimo/autonomy/config.py +424 -0
  38. apsimo-1.3.0/apsimo/autonomy/loop.py +4316 -0
  39. apsimo-1.3.0/apsimo/autonomy/registry.py +339 -0
  40. apsimo-1.3.0/apsimo/autonomy/scheduler.py +1822 -0
  41. apsimo-1.3.0/apsimo/autonomy/synthesis.py +449 -0
  42. apsimo-1.3.0/apsimo/backup.py +962 -0
  43. apsimo-1.3.0/apsimo/beliefs/__init__.py +23 -0
  44. apsimo-1.3.0/apsimo/beliefs/contradictions.py +109 -0
  45. apsimo-1.3.0/apsimo/beliefs/decay.py +61 -0
  46. apsimo-1.3.0/apsimo/beliefs/engine.py +479 -0
  47. apsimo-1.3.0/apsimo/beliefs/models.py +67 -0
  48. apsimo-1.3.0/apsimo/beliefs/promotion.py +41 -0
  49. apsimo-1.3.0/apsimo/beliefs/resolve.py +58 -0
  50. apsimo-1.3.0/apsimo/beliefs/source_claims.py +690 -0
  51. apsimo-1.3.0/apsimo/beliefs/source_projection.py +883 -0
  52. apsimo-1.3.0/apsimo/beliefs/source_time.py +208 -0
  53. apsimo-1.3.0/apsimo/beliefs/store.py +133 -0
  54. apsimo-1.3.0/apsimo/briefings/aggregators.py +824 -0
  55. apsimo-1.3.0/apsimo/briefings/composer.py +420 -0
  56. apsimo-1.3.0/apsimo/briefings/config.py +55 -0
  57. apsimo-1.3.0/apsimo/briefings/delivery.py +439 -0
  58. apsimo-1.3.0/apsimo/briefings/engagement.py +97 -0
  59. apsimo-1.3.0/apsimo/briefings/engine.py +274 -0
  60. apsimo-1.3.0/apsimo/briefings/enhancer.py +99 -0
  61. apsimo-1.3.0/apsimo/briefings/models.py +183 -0
  62. apsimo-1.3.0/apsimo/briefings/scheduler.py +382 -0
  63. apsimo-1.3.0/apsimo/briefings/store.py +435 -0
  64. apsimo-1.3.0/apsimo/chain/__init__.py +48 -0
  65. apsimo-1.3.0/apsimo/chain/block.py +100 -0
  66. apsimo-1.3.0/apsimo/chain/cli.py +704 -0
  67. apsimo-1.3.0/apsimo/chain/genesis.py +443 -0
  68. apsimo-1.3.0/apsimo/chain/identity.py +416 -0
  69. apsimo-1.3.0/apsimo/chain/keys.py +1025 -0
  70. apsimo-1.3.0/apsimo/chain/local_keys.py +187 -0
  71. apsimo-1.3.0/apsimo/chain/manager.py +290 -0
  72. apsimo-1.3.0/apsimo/chain/node.py +163 -0
  73. apsimo-1.3.0/apsimo/chain/plugin_transactions.py +371 -0
  74. apsimo-1.3.0/apsimo/chain/protocol.py +220 -0
  75. apsimo-1.3.0/apsimo/chain/state_machine.py +676 -0
  76. apsimo-1.3.0/apsimo/chain/storage.py +503 -0
  77. apsimo-1.3.0/apsimo/chain/transactions.py +250 -0
  78. apsimo-1.3.0/apsimo/chain/validation.py +397 -0
  79. apsimo-1.3.0/apsimo/channels/__init__.py +1 -0
  80. apsimo-1.3.0/apsimo/channels/manifest.py +31 -0
  81. apsimo-1.3.0/apsimo/channels/migrations/001_channels_schema.sql +12 -0
  82. apsimo-1.3.0/apsimo/channels/phone_gateways.py +42 -0
  83. apsimo-1.3.0/apsimo/channels/presence.py +188 -0
  84. apsimo-1.3.0/apsimo/channels/router.py +235 -0
  85. apsimo-1.3.0/apsimo/channels/store.py +231 -0
  86. apsimo-1.3.0/apsimo/cli.py +2688 -0
  87. apsimo-1.3.0/apsimo/cognition/__init__.py +11 -0
  88. apsimo-1.3.0/apsimo/cognition/charter.py +398 -0
  89. apsimo-1.3.0/apsimo/cognition/drive_governance.py +3530 -0
  90. apsimo-1.3.0/apsimo/cognition/evidence_pipeline.py +1627 -0
  91. apsimo-1.3.0/apsimo/cognition/external_events.py +932 -0
  92. apsimo-1.3.0/apsimo/cognition/goal_spine.py +3488 -0
  93. apsimo-1.3.0/apsimo/cognition/introspection.py +214 -0
  94. apsimo-1.3.0/apsimo/cognition/prompt.py +150 -0
  95. apsimo-1.3.0/apsimo/cognition/runtime.py +108 -0
  96. apsimo-1.3.0/apsimo/cognition/trigger.py +154 -0
  97. apsimo-1.3.0/apsimo/commitments/__init__.py +18 -0
  98. apsimo-1.3.0/apsimo/commitments/local_work.py +355 -0
  99. apsimo-1.3.0/apsimo/commitments/store.py +1052 -0
  100. apsimo-1.3.0/apsimo/commitments/work.py +91 -0
  101. apsimo-1.3.0/apsimo/compat.py +53 -0
  102. apsimo-1.3.0/apsimo/compression/__init__.py +467 -0
  103. apsimo-1.3.0/apsimo/connectors/__init__.py +21 -0
  104. apsimo-1.3.0/apsimo/connectors/base.py +152 -0
  105. apsimo-1.3.0/apsimo/connectors/caldav_calendar.py +125 -0
  106. apsimo-1.3.0/apsimo/connectors/fs_documents.py +85 -0
  107. apsimo-1.3.0/apsimo/connectors/imap_email.py +138 -0
  108. apsimo-1.3.0/apsimo/connectors/manager.py +218 -0
  109. apsimo-1.3.0/apsimo/connectors/webhook_pull.py +88 -0
  110. apsimo-1.3.0/apsimo/contacts/__init__.py +33 -0
  111. apsimo-1.3.0/apsimo/contacts/comms.py +357 -0
  112. apsimo-1.3.0/apsimo/contacts/config.py +79 -0
  113. apsimo-1.3.0/apsimo/contacts/exporters/__init__.py +1 -0
  114. apsimo-1.3.0/apsimo/contacts/exporters/vcard.py +71 -0
  115. apsimo-1.3.0/apsimo/contacts/identity_links.py +251 -0
  116. apsimo-1.3.0/apsimo/contacts/importer.py +280 -0
  117. apsimo-1.3.0/apsimo/contacts/importers/__init__.py +1 -0
  118. apsimo-1.3.0/apsimo/contacts/importers/batch.py +43 -0
  119. apsimo-1.3.0/apsimo/contacts/importers/macos_contacts.py +101 -0
  120. apsimo-1.3.0/apsimo/contacts/migrations/001_contacts_schema.sql +141 -0
  121. apsimo-1.3.0/apsimo/contacts/migrations/002_trust_scopes.sql +36 -0
  122. apsimo-1.3.0/apsimo/contacts/migrations/003_open_gateway_enum.sql +32 -0
  123. apsimo-1.3.0/apsimo/contacts/migrations/004_contact_provision_operations.sql +18 -0
  124. apsimo-1.3.0/apsimo/contacts/migrations/005_identity_links.sql +27 -0
  125. apsimo-1.3.0/apsimo/contacts/models.py +308 -0
  126. apsimo-1.3.0/apsimo/contacts/scoring.py +16 -0
  127. apsimo-1.3.0/apsimo/contacts/store.py +1623 -0
  128. apsimo-1.3.0/apsimo/contacts/transport_ingress.py +252 -0
  129. apsimo-1.3.0/apsimo/contacts/world_bridge.py +314 -0
  130. apsimo-1.3.0/apsimo/contextgate/__init__.py +69 -0
  131. apsimo-1.3.0/apsimo/contextgate/chunker.py +169 -0
  132. apsimo-1.3.0/apsimo/contextgate/estimate.py +54 -0
  133. apsimo-1.3.0/apsimo/contextgate/gate.py +313 -0
  134. apsimo-1.3.0/apsimo/contextgate/retrieve.py +115 -0
  135. apsimo-1.3.0/apsimo/delivery/__init__.py +16 -0
  136. apsimo-1.3.0/apsimo/delivery/bridge.py +1260 -0
  137. apsimo-1.3.0/apsimo/delivery/channels.py +526 -0
  138. apsimo-1.3.0/apsimo/delivery/classification.py +50 -0
  139. apsimo-1.3.0/apsimo/delivery/rate_limiter.py +268 -0
  140. apsimo-1.3.0/apsimo/delivery/reachout_policy.py +206 -0
  141. apsimo-1.3.0/apsimo/directed/__init__.py +22 -0
  142. apsimo-1.3.0/apsimo/directed/audit.py +167 -0
  143. apsimo-1.3.0/apsimo/directed/intake.py +95 -0
  144. apsimo-1.3.0/apsimo/directed/models.py +191 -0
  145. apsimo-1.3.0/apsimo/directed/service.py +509 -0
  146. apsimo-1.3.0/apsimo/directives/__init__.py +25 -0
  147. apsimo-1.3.0/apsimo/directives/evidence.py +87 -0
  148. apsimo-1.3.0/apsimo/directives/extractor.py +188 -0
  149. apsimo-1.3.0/apsimo/directives/guard.py +364 -0
  150. apsimo-1.3.0/apsimo/directives/models.py +206 -0
  151. apsimo-1.3.0/apsimo/directives/service.py +372 -0
  152. apsimo-1.3.0/apsimo/directives/store.py +167 -0
  153. apsimo-1.3.0/apsimo/doctor.py +2173 -0
  154. apsimo-1.3.0/apsimo/environment.py +43 -0
  155. apsimo-1.3.0/apsimo/events/__init__.py +33 -0
  156. apsimo-1.3.0/apsimo/events/broadcaster.py +98 -0
  157. apsimo-1.3.0/apsimo/events/bus.py +217 -0
  158. apsimo-1.3.0/apsimo/events/journal.py +863 -0
  159. apsimo-1.3.0/apsimo/events/stream.py +131 -0
  160. apsimo-1.3.0/apsimo/events/types.py +150 -0
  161. apsimo-1.3.0/apsimo/execution_results.py +357 -0
  162. apsimo-1.3.0/apsimo/feedback/__init__.py +5 -0
  163. apsimo-1.3.0/apsimo/feedback/store.py +76 -0
  164. apsimo-1.3.0/apsimo/feeds/__init__.py +19 -0
  165. apsimo-1.3.0/apsimo/feeds/cli.py +84 -0
  166. apsimo-1.3.0/apsimo/feeds/engine.py +437 -0
  167. apsimo-1.3.0/apsimo/feeds/example-feed.yaml +77 -0
  168. apsimo-1.3.0/apsimo/feeds/hermes_cron.py +126 -0
  169. apsimo-1.3.0/apsimo/feeds/manager.py +235 -0
  170. apsimo-1.3.0/apsimo/feeds/spec.py +250 -0
  171. apsimo-1.3.0/apsimo/feeds/template.py +202 -0
  172. apsimo-1.3.0/apsimo/gate/__init__.py +18 -0
  173. apsimo-1.3.0/apsimo/gate/audit.py +61 -0
  174. apsimo-1.3.0/apsimo/gate/communication_policy.py +166 -0
  175. apsimo-1.3.0/apsimo/gate/config.py +72 -0
  176. apsimo-1.3.0/apsimo/gate/context_provenance.py +170 -0
  177. apsimo-1.3.0/apsimo/gate/env_risk.py +226 -0
  178. apsimo-1.3.0/apsimo/gate/guard_audit.py +353 -0
  179. apsimo-1.3.0/apsimo/gate/layers/__init__.py +1 -0
  180. apsimo-1.3.0/apsimo/gate/layers/base.py +15 -0
  181. apsimo-1.3.0/apsimo/gate/layers/l1_recipient.py +66 -0
  182. apsimo-1.3.0/apsimo/gate/layers/l2_pii.py +134 -0
  183. apsimo-1.3.0/apsimo/gate/layers/l3_cross_context.py +50 -0
  184. apsimo-1.3.0/apsimo/gate/layers/l4_trust_tier.py +78 -0
  185. apsimo-1.3.0/apsimo/gate/layers/l5_injection.py +199 -0
  186. apsimo-1.3.0/apsimo/gate/layers/l6_review.py +86 -0
  187. apsimo-1.3.0/apsimo/gate/layers/l7_delay.py +100 -0
  188. apsimo-1.3.0/apsimo/gate/layers/tom2_epistemic.py +185 -0
  189. apsimo-1.3.0/apsimo/gate/models.py +64 -0
  190. apsimo-1.3.0/apsimo/gate/pending_dispatch.py +5 -0
  191. apsimo-1.3.0/apsimo/gate/pipeline.py +206 -0
  192. apsimo-1.3.0/apsimo/gate/rejection.py +259 -0
  193. apsimo-1.3.0/apsimo/gate/response_guard.py +700 -0
  194. apsimo-1.3.0/apsimo/gate/rulesets/injection_v1.yaml +51 -0
  195. apsimo-1.3.0/apsimo/gate/surface_policy.py +189 -0
  196. apsimo-1.3.0/apsimo/gate/taint.py +226 -0
  197. apsimo-1.3.0/apsimo/genesis.json +9 -0
  198. apsimo-1.3.0/apsimo/goals/__init__.py +100 -0
  199. apsimo-1.3.0/apsimo/goals/config.py +38 -0
  200. apsimo-1.3.0/apsimo/goals/decomposer.py +421 -0
  201. apsimo-1.3.0/apsimo/goals/engine.py +617 -0
  202. apsimo-1.3.0/apsimo/goals/inference.py +354 -0
  203. apsimo-1.3.0/apsimo/goals/models.py +302 -0
  204. apsimo-1.3.0/apsimo/goals/priority.py +270 -0
  205. apsimo-1.3.0/apsimo/goals/queue_bridge.py +149 -0
  206. apsimo-1.3.0/apsimo/goals/replan.py +450 -0
  207. apsimo-1.3.0/apsimo/goals/schema.sql +89 -0
  208. apsimo-1.3.0/apsimo/goals/store.py +692 -0
  209. apsimo-1.3.0/apsimo/governed_actions.py +1708 -0
  210. apsimo-1.3.0/apsimo/harness_integration/__init__.py +45 -0
  211. apsimo-1.3.0/apsimo/harness_integration/context.py +41 -0
  212. apsimo-1.3.0/apsimo/harness_integration/skills.py +231 -0
  213. apsimo-1.3.0/apsimo/identity/__init__.py +26 -0
  214. apsimo-1.3.0/apsimo/identity/participants.py +181 -0
  215. apsimo-1.3.0/apsimo/identity/resolver.py +329 -0
  216. apsimo-1.3.0/apsimo/identity_bootstrap/__init__.py +5 -0
  217. apsimo-1.3.0/apsimo/identity_bootstrap/builder.py +208 -0
  218. apsimo-1.3.0/apsimo/identity_bootstrap/corpus.py +443 -0
  219. apsimo-1.3.0/apsimo/identity_bootstrap/models.py +54 -0
  220. apsimo-1.3.0/apsimo/identity_bootstrap/runner.py +353 -0
  221. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/__init__.py +25 -0
  222. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/briefings.py +109 -0
  223. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/chain.py +57 -0
  224. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/goals.py +128 -0
  225. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/memory.py +191 -0
  226. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/neo4j_cognition.py +79 -0
  227. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/relationship.py +152 -0
  228. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/sessions.py +67 -0
  229. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/skills.py +92 -0
  230. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/task_queue.py +72 -0
  231. apsimo-1.3.0/apsimo/identity_bootstrap/seeders/world_model.py +143 -0
  232. apsimo-1.3.0/apsimo/identity_bootstrap/self_query.py +92 -0
  233. apsimo-1.3.0/apsimo/identity_bootstrap/self_reflection.py +155 -0
  234. apsimo-1.3.0/apsimo/identity_bootstrap/skill.py +37 -0
  235. apsimo-1.3.0/apsimo/identity_bootstrap/verifier.py +436 -0
  236. apsimo-1.3.0/apsimo/initiatives/__init__.py +20 -0
  237. apsimo-1.3.0/apsimo/initiatives/action_registry.py +454 -0
  238. apsimo-1.3.0/apsimo/initiatives/approval_authority.py +2105 -0
  239. apsimo-1.3.0/apsimo/initiatives/approval_policy.py +123 -0
  240. apsimo-1.3.0/apsimo/initiatives/assignment.py +263 -0
  241. apsimo-1.3.0/apsimo/initiatives/backup_evidence.py +100 -0
  242. apsimo-1.3.0/apsimo/initiatives/context_freshness.py +103 -0
  243. apsimo-1.3.0/apsimo/initiatives/models.py +318 -0
  244. apsimo-1.3.0/apsimo/initiatives/native_work.py +270 -0
  245. apsimo-1.3.0/apsimo/initiatives/standing_approvals.py +232 -0
  246. apsimo-1.3.0/apsimo/initiatives/store.py +1081 -0
  247. apsimo-1.3.0/apsimo/initiatives/temporal_followup.py +410 -0
  248. apsimo-1.3.0/apsimo/intelligence/__init__.py +1 -0
  249. apsimo-1.3.0/apsimo/intelligence/cognition/__init__.py +24 -0
  250. apsimo-1.3.0/apsimo/intelligence/cognition/gap_detector.py +148 -0
  251. apsimo-1.3.0/apsimo/intelligence/cognition/metalearner.py +547 -0
  252. apsimo-1.3.0/apsimo/intelligence/cognition/metrics_collector.py +217 -0
  253. apsimo-1.3.0/apsimo/intelligence/cognition/performance_index.py +299 -0
  254. apsimo-1.3.0/apsimo/intelligence/cognition/registry.py +192 -0
  255. apsimo-1.3.0/apsimo/intelligence/cognition/strategy_adjuster.py +222 -0
  256. apsimo-1.3.0/apsimo/intelligence/cognition/types.py +16 -0
  257. apsimo-1.3.0/apsimo/intelligence/components/__init__.py +66 -0
  258. apsimo-1.3.0/apsimo/intelligence/components/anomaly_detector.py +413 -0
  259. apsimo-1.3.0/apsimo/intelligence/components/initiative_engine.py +2643 -0
  260. apsimo-1.3.0/apsimo/intelligence/components/preference_learner.py +521 -0
  261. apsimo-1.3.0/apsimo/intelligence/components/research_orchestrator.py +358 -0
  262. apsimo-1.3.0/apsimo/intelligence/components/self_directed_thinker.py +221 -0
  263. apsimo-1.3.0/apsimo/intelligence/components/self_reflector.py +252 -0
  264. apsimo-1.3.0/apsimo/intelligence/components/session_continuity.py +154 -0
  265. apsimo-1.3.0/apsimo/intelligence/components/task_planner.py +320 -0
  266. apsimo-1.3.0/apsimo/intelligence/components/tool_learner.py +217 -0
  267. apsimo-1.3.0/apsimo/intelligence/graph/__init__.py +79 -0
  268. apsimo-1.3.0/apsimo/intelligence/graph/client.py +2483 -0
  269. apsimo-1.3.0/apsimo/intelligence/graph/consolidator.py +405 -0
  270. apsimo-1.3.0/apsimo/intelligence/graph/distiller.py +312 -0
  271. apsimo-1.3.0/apsimo/intelligence/graph/migrations.py +129 -0
  272. apsimo-1.3.0/apsimo/intelligence/graph/queries.py +248 -0
  273. apsimo-1.3.0/apsimo/intelligence/graph/recall.py +281 -0
  274. apsimo-1.3.0/apsimo/intelligence/graph/reconciler.py +144 -0
  275. apsimo-1.3.0/apsimo/intelligence/graph/schema.py +337 -0
  276. apsimo-1.3.0/apsimo/intelligence/graph/selection.py +252 -0
  277. apsimo-1.3.0/apsimo/intelligence/learning/__init__.py +17 -0
  278. apsimo-1.3.0/apsimo/intelligence/learning/continuous_learner.py +245 -0
  279. apsimo-1.3.0/apsimo/intelligence/learning/feedback_store.py +321 -0
  280. apsimo-1.3.0/apsimo/intelligence/mind_model/__init__.py +1 -0
  281. apsimo-1.3.0/apsimo/intelligence/mind_model/graph_baseline.py +136 -0
  282. apsimo-1.3.0/apsimo/intelligence/mind_model/signal_collector.py +361 -0
  283. apsimo-1.3.0/apsimo/intelligence/relationships/__init__.py +11 -0
  284. apsimo-1.3.0/apsimo/intelligence/relationships/profiler.py +389 -0
  285. apsimo-1.3.0/apsimo/intelligence/relationships/scorer.py +560 -0
  286. apsimo-1.3.0/apsimo/intelligence/relationships/signal_floor.py +66 -0
  287. apsimo-1.3.0/apsimo/intelligence/relationships/trust_tiers.py +300 -0
  288. apsimo-1.3.0/apsimo/intelligence/synthesis/__init__.py +40 -0
  289. apsimo-1.3.0/apsimo/intelligence/synthesis/connection_discoverer.py +379 -0
  290. apsimo-1.3.0/apsimo/intelligence/synthesis/cross_domain_analyzer.py +287 -0
  291. apsimo-1.3.0/apsimo/intelligence/synthesis/insight_deliverer.py +171 -0
  292. apsimo-1.3.0/apsimo/intelligence/synthesis/insight_store.py +79 -0
  293. apsimo-1.3.0/apsimo/intelligence/synthesis/insight_validator.py +183 -0
  294. apsimo-1.3.0/apsimo/intelligence/synthesis/novelty_scorer.py +267 -0
  295. apsimo-1.3.0/apsimo/intelligence/turn_middleware/__init__.py +15 -0
  296. apsimo-1.3.0/apsimo/intelligence/turn_middleware/memory_sync.py +119 -0
  297. apsimo-1.3.0/apsimo/mcp/__init__.py +41 -0
  298. apsimo-1.3.0/apsimo/mcp/__main__.py +6 -0
  299. apsimo-1.3.0/apsimo/mcp/config.py +287 -0
  300. apsimo-1.3.0/apsimo/mcp/server.py +501 -0
  301. apsimo-1.3.0/apsimo/migrations.py +187 -0
  302. apsimo-1.3.0/apsimo/mining/__init__.py +27 -0
  303. apsimo-1.3.0/apsimo/mining/corpus.py +239 -0
  304. apsimo-1.3.0/apsimo/mining/escalations.py +289 -0
  305. apsimo-1.3.0/apsimo/mining/models.py +169 -0
  306. apsimo-1.3.0/apsimo/mining/store.py +210 -0
  307. apsimo-1.3.0/apsimo/models/__init__.py +30 -0
  308. apsimo-1.3.0/apsimo/models/memory.py +80 -0
  309. apsimo-1.3.0/apsimo/models/mesh.py +72 -0
  310. apsimo-1.3.0/apsimo/models/person.py +104 -0
  311. apsimo-1.3.0/apsimo/models/signal.py +108 -0
  312. apsimo-1.3.0/apsimo/observations/__init__.py +15 -0
  313. apsimo-1.3.0/apsimo/observations/store.py +277 -0
  314. apsimo-1.3.0/apsimo/patterns/__init__.py +6 -0
  315. apsimo-1.3.0/apsimo/patterns/extract.py +187 -0
  316. apsimo-1.3.0/apsimo/patterns/store.py +227 -0
  317. apsimo-1.3.0/apsimo/persona/__init__.py +1 -0
  318. apsimo-1.3.0/apsimo/persona/engine.py +611 -0
  319. apsimo-1.3.0/apsimo/persona/manifest.py +140 -0
  320. apsimo-1.3.0/apsimo/projects/__init__.py +28 -0
  321. apsimo-1.3.0/apsimo/projects/engine.py +1681 -0
  322. apsimo-1.3.0/apsimo/projects/event_outbox.py +188 -0
  323. apsimo-1.3.0/apsimo/projects/models.py +216 -0
  324. apsimo-1.3.0/apsimo/projects/planner.py +181 -0
  325. apsimo-1.3.0/apsimo/projects/store.py +1446 -0
  326. apsimo-1.3.0/apsimo/proposals/__init__.py +12 -0
  327. apsimo-1.3.0/apsimo/proposals/engine.py +114 -0
  328. apsimo-1.3.0/apsimo/proposals/models.py +207 -0
  329. apsimo-1.3.0/apsimo/qualification/__init__.py +1 -0
  330. apsimo-1.3.0/apsimo/qualification/cases.py +75 -0
  331. apsimo-1.3.0/apsimo/qualification/cli.py +51 -0
  332. apsimo-1.3.0/apsimo/qualification/memory_cases.py +209 -0
  333. apsimo-1.3.0/apsimo/qualification/records.py +92 -0
  334. apsimo-1.3.0/apsimo/qualification/report.py +87 -0
  335. apsimo-1.3.0/apsimo/qualification/runner.py +311 -0
  336. apsimo-1.3.0/apsimo/qualification/structured_cases.py +131 -0
  337. apsimo-1.3.0/apsimo/reasoning/__init__.py +13 -0
  338. apsimo-1.3.0/apsimo/reasoning/executor.py +506 -0
  339. apsimo-1.3.0/apsimo/reasoning/loop.py +373 -0
  340. apsimo-1.3.0/apsimo/reasoning/native_tools/__init__.py +16 -0
  341. apsimo-1.3.0/apsimo/reasoning/native_tools/calculate.py +141 -0
  342. apsimo-1.3.0/apsimo/reasoning/native_tools/file_ops.py +150 -0
  343. apsimo-1.3.0/apsimo/reasoning/native_tools/web_search.py +49 -0
  344. apsimo-1.3.0/apsimo/reasoning/tool_policy.py +182 -0
  345. apsimo-1.3.0/apsimo/redact/__init__.py +176 -0
  346. apsimo-1.3.0/apsimo/repos/__init__.py +5 -0
  347. apsimo-1.3.0/apsimo/repos/mirrors.py +204 -0
  348. apsimo-1.3.0/apsimo/research/__init__.py +41 -0
  349. apsimo-1.3.0/apsimo/research/artifact.py +482 -0
  350. apsimo-1.3.0/apsimo/research/gatherer.py +387 -0
  351. apsimo-1.3.0/apsimo/research/pipeline.py +513 -0
  352. apsimo-1.3.0/apsimo/research/search/__init__.py +7 -0
  353. apsimo-1.3.0/apsimo/research/search/base.py +41 -0
  354. apsimo-1.3.0/apsimo/research/search/brave.py +59 -0
  355. apsimo-1.3.0/apsimo/research/search/cache.py +51 -0
  356. apsimo-1.3.0/apsimo/research/search/duckduckgo.py +103 -0
  357. apsimo-1.3.0/apsimo/research/search/orchestrator.py +119 -0
  358. apsimo-1.3.0/apsimo/research/search/serpapi.py +59 -0
  359. apsimo-1.3.0/apsimo/research/search/tavily.py +59 -0
  360. apsimo-1.3.0/apsimo/research/synthesizer.py +309 -0
  361. apsimo-1.3.0/apsimo/router/__init__.py +30 -0
  362. apsimo-1.3.0/apsimo/router/complexity_scorer.py +148 -0
  363. apsimo-1.3.0/apsimo/router/endpoints.py +153 -0
  364. apsimo-1.3.0/apsimo/router/fallback.py +58 -0
  365. apsimo-1.3.0/apsimo/router/functions.py +243 -0
  366. apsimo-1.3.0/apsimo/router/native_policy.py +52 -0
  367. apsimo-1.3.0/apsimo/router/router.py +762 -0
  368. apsimo-1.3.0/apsimo/router/self_learning.py +174 -0
  369. apsimo-1.3.0/apsimo/router/tiers.py +677 -0
  370. apsimo-1.3.0/apsimo/sandbox/__init__.py +21 -0
  371. apsimo-1.3.0/apsimo/sandbox/backend.py +195 -0
  372. apsimo-1.3.0/apsimo/sandbox/manager.py +173 -0
  373. apsimo-1.3.0/apsimo/scope_bounds.py +7 -0
  374. apsimo-1.3.0/apsimo/secrets/__init__.py +6 -0
  375. apsimo-1.3.0/apsimo/secrets/backends/__init__.py +8 -0
  376. apsimo-1.3.0/apsimo/secrets/backends/base.py +42 -0
  377. apsimo-1.3.0/apsimo/secrets/backends/env.py +110 -0
  378. apsimo-1.3.0/apsimo/secrets/backends/keyring.py +72 -0
  379. apsimo-1.3.0/apsimo/secrets/backends/onepassword.py +232 -0
  380. apsimo-1.3.0/apsimo/secrets/cli.py +191 -0
  381. apsimo-1.3.0/apsimo/secrets/manager.py +160 -0
  382. apsimo-1.3.0/apsimo/secrets/migration.py +101 -0
  383. apsimo-1.3.0/apsimo/secrets/types.py +98 -0
  384. apsimo-1.3.0/apsimo/seed.py +41 -0
  385. apsimo-1.3.0/apsimo/self_model/__init__.py +37 -0
  386. apsimo-1.3.0/apsimo/self_model/appraisals.py +673 -0
  387. apsimo-1.3.0/apsimo/self_model/benchmark.py +1314 -0
  388. apsimo-1.3.0/apsimo/self_model/brief.py +40 -0
  389. apsimo-1.3.0/apsimo/self_model/event_concerns.py +1128 -0
  390. apsimo-1.3.0/apsimo/self_model/execution_forecasts.py +353 -0
  391. apsimo-1.3.0/apsimo/self_model/expectations.py +1595 -0
  392. apsimo-1.3.0/apsimo/self_model/experiments.py +1150 -0
  393. apsimo-1.3.0/apsimo/self_model/journal.py +148 -0
  394. apsimo-1.3.0/apsimo/self_model/judgments.py +705 -0
  395. apsimo-1.3.0/apsimo/self_model/native_outcomes.py +55 -0
  396. apsimo-1.3.0/apsimo/self_model/params.py +220 -0
  397. apsimo-1.3.0/apsimo/self_model/perspective.py +246 -0
  398. apsimo-1.3.0/apsimo/self_model/reconcile.py +183 -0
  399. apsimo-1.3.0/apsimo/self_model/reply_forecasts.py +381 -0
  400. apsimo-1.3.0/apsimo/self_model/runtime_forecasts.py +296 -0
  401. apsimo-1.3.0/apsimo/self_model/runtime_models.py +67 -0
  402. apsimo-1.3.0/apsimo/self_model/settlement.py +207 -0
  403. apsimo-1.3.0/apsimo/self_model/situation.py +1731 -0
  404. apsimo-1.3.0/apsimo/self_model/store.py +883 -0
  405. apsimo-1.3.0/apsimo/self_model/supervised.py +137 -0
  406. apsimo-1.3.0/apsimo/self_model/thinker.py +99 -0
  407. apsimo-1.3.0/apsimo/self_model/trust.py +388 -0
  408. apsimo-1.3.0/apsimo/self_model/workspace.py +2388 -0
  409. apsimo-1.3.0/apsimo/server.py +4197 -0
  410. apsimo-1.3.0/apsimo/services/__init__.py +1 -0
  411. apsimo-1.3.0/apsimo/services/agent_bridge.py +474 -0
  412. apsimo-1.3.0/apsimo/services/initiative_executor.py +914 -0
  413. apsimo-1.3.0/apsimo/services/instance.py +297 -0
  414. apsimo-1.3.0/apsimo/sessions/__init__.py +22 -0
  415. apsimo-1.3.0/apsimo/sessions/config.py +13 -0
  416. apsimo-1.3.0/apsimo/sessions/context_loader.py +88 -0
  417. apsimo-1.3.0/apsimo/sessions/federation_session.py +75 -0
  418. apsimo-1.3.0/apsimo/sessions/isolated_session.py +98 -0
  419. apsimo-1.3.0/apsimo/sessions/reports.py +84 -0
  420. apsimo-1.3.0/apsimo/sessions/store.py +148 -0
  421. apsimo-1.3.0/apsimo/setup.py +2818 -0
  422. apsimo-1.3.0/apsimo/setup_hermes.py +879 -0
  423. apsimo-1.3.0/apsimo/setup_local_work.py +218 -0
  424. apsimo-1.3.0/apsimo/setup_native_goals.py +134 -0
  425. apsimo-1.3.0/apsimo/setup_native_reviews.py +115 -0
  426. apsimo-1.3.0/apsimo/skills/__init__.py +10 -0
  427. apsimo-1.3.0/apsimo/skills/base.py +108 -0
  428. apsimo-1.3.0/apsimo/skills/budget.py +28 -0
  429. apsimo-1.3.0/apsimo/skills/executor.py +493 -0
  430. apsimo-1.3.0/apsimo/skills/executors/__init__.py +1 -0
  431. apsimo-1.3.0/apsimo/skills/executors/behavioral_correction.py +75 -0
  432. apsimo-1.3.0/apsimo/skills/executors/capability_gap.py +38 -0
  433. apsimo-1.3.0/apsimo/skills/executors/data_quality.py +163 -0
  434. apsimo-1.3.0/apsimo/skills/executors/knowledge_acquisition.py +41 -0
  435. apsimo-1.3.0/apsimo/skills/executors/operational_hygiene.py +185 -0
  436. apsimo-1.3.0/apsimo/skills/executors/subsystem_health.py +169 -0
  437. apsimo-1.3.0/apsimo/skills/hermes_export.py +431 -0
  438. apsimo-1.3.0/apsimo/skills/index.py +123 -0
  439. apsimo-1.3.0/apsimo/skills/learning/__init__.py +21 -0
  440. apsimo-1.3.0/apsimo/skills/learning/novelty_detector.py +206 -0
  441. apsimo-1.3.0/apsimo/skills/learning/pattern_extractor.py +199 -0
  442. apsimo-1.3.0/apsimo/skills/learning/triggers.py +159 -0
  443. apsimo-1.3.0/apsimo/skills/loader.py +246 -0
  444. apsimo-1.3.0/apsimo/skills/migrations/002_progressive_loading.sql +6 -0
  445. apsimo-1.3.0/apsimo/skills/migrations/backfill_triggers.py +20 -0
  446. apsimo-1.3.0/apsimo/skills/models.py +202 -0
  447. apsimo-1.3.0/apsimo/skills/packager.py +128 -0
  448. apsimo-1.3.0/apsimo/skills/protocols.py +70 -0
  449. apsimo-1.3.0/apsimo/skills/registry.py +191 -0
  450. apsimo-1.3.0/apsimo/skills/runtime.py +58 -0
  451. apsimo-1.3.0/apsimo/skills/sandbox_runner.py +229 -0
  452. apsimo-1.3.0/apsimo/skills/scheduler.py +129 -0
  453. apsimo-1.3.0/apsimo/skills/schema.py +79 -0
  454. apsimo-1.3.0/apsimo/skills/security/__init__.py +12 -0
  455. apsimo-1.3.0/apsimo/skills/security/guards.py +53 -0
  456. apsimo-1.3.0/apsimo/skills/security/scanner.py +223 -0
  457. apsimo-1.3.0/apsimo/skills_memory/__init__.py +26 -0
  458. apsimo-1.3.0/apsimo/skills_memory/distill.py +159 -0
  459. apsimo-1.3.0/apsimo/skills_memory/models.py +85 -0
  460. apsimo-1.3.0/apsimo/skills_memory/retrieve.py +62 -0
  461. apsimo-1.3.0/apsimo/skills_memory/store.py +172 -0
  462. apsimo-1.3.0/apsimo/surprise/__init__.py +6 -0
  463. apsimo-1.3.0/apsimo/surprise/accumulation.py +57 -0
  464. apsimo-1.3.0/apsimo/surprise/scorer.py +102 -0
  465. apsimo-1.3.0/apsimo/surprise/store.py +203 -0
  466. apsimo-1.3.0/apsimo/task_queue/__init__.py +69 -0
  467. apsimo-1.3.0/apsimo/task_queue/action_receipts.py +148 -0
  468. apsimo-1.3.0/apsimo/task_queue/approval_relay_canary.py +108 -0
  469. apsimo-1.3.0/apsimo/task_queue/config.py +85 -0
  470. apsimo-1.3.0/apsimo/task_queue/contract.py +361 -0
  471. apsimo-1.3.0/apsimo/task_queue/events.py +130 -0
  472. apsimo-1.3.0/apsimo/task_queue/governor.py +1031 -0
  473. apsimo-1.3.0/apsimo/task_queue/handlers/__init__.py +16 -0
  474. apsimo-1.3.0/apsimo/task_queue/handlers/base.py +37 -0
  475. apsimo-1.3.0/apsimo/task_queue/handlers/inference.py +640 -0
  476. apsimo-1.3.0/apsimo/task_queue/handlers/monitoring.py +116 -0
  477. apsimo-1.3.0/apsimo/task_queue/handlers/registry.py +75 -0
  478. apsimo-1.3.0/apsimo/task_queue/handlers/subtask_handler.py +173 -0
  479. apsimo-1.3.0/apsimo/task_queue/handlers/system_maintenance.py +147 -0
  480. apsimo-1.3.0/apsimo/task_queue/mesh_integration.py +111 -0
  481. apsimo-1.3.0/apsimo/task_queue/models.py +317 -0
  482. apsimo-1.3.0/apsimo/task_queue/queue_manager.py +8286 -0
  483. apsimo-1.3.0/apsimo/task_queue/routing.py +287 -0
  484. apsimo-1.3.0/apsimo/task_queue/scheduler.py +252 -0
  485. apsimo-1.3.0/apsimo/task_queue/schema.sql +197 -0
  486. apsimo-1.3.0/apsimo/task_queue/work_control.py +342 -0
  487. apsimo-1.3.0/apsimo/task_queue/worker.py +993 -0
  488. apsimo-1.3.0/apsimo/telemetry.py +145 -0
  489. apsimo-1.3.0/apsimo/tom/__init__.py +6 -0
  490. apsimo-1.3.0/apsimo/tom/affect.py +387 -0
  491. apsimo-1.3.0/apsimo/tom/approvals.py +171 -0
  492. apsimo-1.3.0/apsimo/tom/arcs.py +896 -0
  493. apsimo-1.3.0/apsimo/tom/asymmetry.py +131 -0
  494. apsimo-1.3.0/apsimo/tom/eligibility.py +248 -0
  495. apsimo-1.3.0/apsimo/tom/engagement.py +214 -0
  496. apsimo-1.3.0/apsimo/tom/exposure.py +214 -0
  497. apsimo-1.3.0/apsimo/tom/extractor.py +306 -0
  498. apsimo-1.3.0/apsimo/tom/fact_adapters.py +144 -0
  499. apsimo-1.3.0/apsimo/tom/facts.py +326 -0
  500. apsimo-1.3.0/apsimo/tom/integration.py +592 -0
  501. apsimo-1.3.0/apsimo/tom/leveled.py +118 -0
  502. apsimo-1.3.0/apsimo/tom/levels.py +247 -0
  503. apsimo-1.3.0/apsimo/tom/recipient_audit.py +995 -0
  504. apsimo-1.3.0/apsimo/tom/recipient_simulator.py +593 -0
  505. apsimo-1.3.0/apsimo/tom/source_lineage.py +93 -0
  506. apsimo-1.3.0/apsimo/tom/tom2.py +277 -0
  507. apsimo-1.3.0/apsimo/tom/visibility.py +559 -0
  508. apsimo-1.3.0/apsimo/tom/visibility_store.py +414 -0
  509. apsimo-1.3.0/apsimo/tools/__init__.py +0 -0
  510. apsimo-1.3.0/apsimo/tools/definitions.py +740 -0
  511. apsimo-1.3.0/apsimo/tools/handlers.py +943 -0
  512. apsimo-1.3.0/apsimo/toolsmith/__init__.py +26 -0
  513. apsimo-1.3.0/apsimo/toolsmith/authority.py +166 -0
  514. apsimo-1.3.0/apsimo/toolsmith/engine.py +559 -0
  515. apsimo-1.3.0/apsimo/toolsmith/integrity.py +100 -0
  516. apsimo-1.3.0/apsimo/toolsmith/miner.py +145 -0
  517. apsimo-1.3.0/apsimo/toolsmith/policy.py +110 -0
  518. apsimo-1.3.0/apsimo/toolsmith/registry.py +635 -0
  519. apsimo-1.3.0/apsimo/turns/__init__.py +17 -0
  520. apsimo-1.3.0/apsimo/turns/audio.py +134 -0
  521. apsimo-1.3.0/apsimo/turns/documents.py +235 -0
  522. apsimo-1.3.0/apsimo/turns/executions.py +486 -0
  523. apsimo-1.3.0/apsimo/turns/hermes_history.py +245 -0
  524. apsimo-1.3.0/apsimo/turns/hermes_kanban.py +268 -0
  525. apsimo-1.3.0/apsimo/turns/hermes_work.py +96 -0
  526. apsimo-1.3.0/apsimo/turns/idempotency.py +752 -0
  527. apsimo-1.3.0/apsimo/turns/local_work.py +115 -0
  528. apsimo-1.3.0/apsimo/turns/media.py +581 -0
  529. apsimo-1.3.0/apsimo/turns/reported_workers.py +196 -0
  530. apsimo-1.3.0/apsimo/turns/source_annotations.py +283 -0
  531. apsimo-1.3.0/apsimo/turns/source_attribution.py +154 -0
  532. apsimo-1.3.0/apsimo/turns/source_read.py +351 -0
  533. apsimo-1.3.0/apsimo/turns/source_vectors.py +263 -0
  534. apsimo-1.3.0/apsimo/turns/video.py +210 -0
  535. apsimo-1.3.0/apsimo/util/autonomy_preset.py +220 -0
  536. apsimo-1.3.0/apsimo/util/instance.py +92 -0
  537. apsimo-1.3.0/apsimo/util/model_output.py +25 -0
  538. apsimo-1.3.0/apsimo/util/quiet_hours.py +27 -0
  539. apsimo-1.3.0/apsimo/util/session_safety.py +37 -0
  540. apsimo-1.3.0/apsimo/util/temporal.py +343 -0
  541. apsimo-1.3.0/apsimo/vector/__init__.py +75 -0
  542. apsimo-1.3.0/apsimo/vector/backfill.py +171 -0
  543. apsimo-1.3.0/apsimo/vector/caption.py +114 -0
  544. apsimo-1.3.0/apsimo/vector/collections.py +51 -0
  545. apsimo-1.3.0/apsimo/vector/config.py +102 -0
  546. apsimo-1.3.0/apsimo/vector/embedder.py +670 -0
  547. apsimo-1.3.0/apsimo/vector/image_preprocess.py +406 -0
  548. apsimo-1.3.0/apsimo/vector/image_store.py +296 -0
  549. apsimo-1.3.0/apsimo/vector/indexes.py +162 -0
  550. apsimo-1.3.0/apsimo/vector/migrate.py +334 -0
  551. apsimo-1.3.0/apsimo/vector/multimodal_provider.py +417 -0
  552. apsimo-1.3.0/apsimo/vector/multimodal_types.py +87 -0
  553. apsimo-1.3.0/apsimo/vector/openai_provider.py +119 -0
  554. apsimo-1.3.0/apsimo/vector/query.py +49 -0
  555. apsimo-1.3.0/apsimo/vector/reranker.py +565 -0
  556. apsimo-1.3.0/apsimo/vector/safety_image.py +159 -0
  557. apsimo-1.3.0/apsimo/vector/scanner.py +197 -0
  558. apsimo-1.3.0/apsimo/vector/setup.py +289 -0
  559. apsimo-1.3.0/apsimo/vector/store.py +533 -0
  560. apsimo-1.3.0/apsimo/vector/tiers.py +263 -0
  561. apsimo-1.3.0/apsimo/work_orders.py +925 -0
  562. apsimo-1.3.0/apsimo/workers/__init__.py +21 -0
  563. apsimo-1.3.0/apsimo/workers/agent_bridge.py +640 -0
  564. apsimo-1.3.0/apsimo/workers/colony_worker.py +382 -0
  565. apsimo-1.3.0/apsimo/workers/queue_worker.py +441 -0
  566. apsimo-1.3.0/apsimo/workers/skills_sync.py +152 -0
  567. apsimo-1.3.0/apsimo/world_model/__init__.py +71 -0
  568. apsimo-1.3.0/apsimo/world_model/causal_maintenance.py +131 -0
  569. apsimo-1.3.0/apsimo/world_model/causal_policy.py +43 -0
  570. apsimo-1.3.0/apsimo/world_model/causal_query.py +125 -0
  571. apsimo-1.3.0/apsimo/world_model/confidence.py +54 -0
  572. apsimo-1.3.0/apsimo/world_model/config.py +64 -0
  573. apsimo-1.3.0/apsimo/world_model/constants.py +97 -0
  574. apsimo-1.3.0/apsimo/world_model/entities.py +145 -0
  575. apsimo-1.3.0/apsimo/world_model/expectation_resolvers.py +177 -0
  576. apsimo-1.3.0/apsimo/world_model/extraction/__init__.py +7 -0
  577. apsimo-1.3.0/apsimo/world_model/extraction/base.py +62 -0
  578. apsimo-1.3.0/apsimo/world_model/extraction/conversation_extractor.py +262 -0
  579. apsimo-1.3.0/apsimo/world_model/extraction/detector.py +74 -0
  580. apsimo-1.3.0/apsimo/world_model/extraction/document_extractor.py +78 -0
  581. apsimo-1.3.0/apsimo/world_model/extraction/formats/__init__.py +24 -0
  582. apsimo-1.3.0/apsimo/world_model/extraction/formats/csv_fmt.py +68 -0
  583. apsimo-1.3.0/apsimo/world_model/extraction/formats/html_fmt.py +72 -0
  584. apsimo-1.3.0/apsimo/world_model/extraction/formats/json_fmt.py +68 -0
  585. apsimo-1.3.0/apsimo/world_model/extraction/formats/pdf.py +43 -0
  586. apsimo-1.3.0/apsimo/world_model/extraction/formats/text.py +27 -0
  587. apsimo-1.3.0/apsimo/world_model/extraction/llm_extractor.py +164 -0
  588. apsimo-1.3.0/apsimo/world_model/extraction/pipeline.py +73 -0
  589. apsimo-1.3.0/apsimo/world_model/integrations/__init__.py +5 -0
  590. apsimo-1.3.0/apsimo/world_model/integrations/mind_model_bridge.py +115 -0
  591. apsimo-1.3.0/apsimo/world_model/integrations/social_intel_bridge.py +120 -0
  592. apsimo-1.3.0/apsimo/world_model/jobs/__init__.py +4 -0
  593. apsimo-1.3.0/apsimo/world_model/jobs/extraction_job.py +168 -0
  594. apsimo-1.3.0/apsimo/world_model/llm_extract.py +572 -0
  595. apsimo-1.3.0/apsimo/world_model/neo4j/__init__.py +5 -0
  596. apsimo-1.3.0/apsimo/world_model/neo4j/backend.py +654 -0
  597. apsimo-1.3.0/apsimo/world_model/observations.py +155 -0
  598. apsimo-1.3.0/apsimo/world_model/populator.py +307 -0
  599. apsimo-1.3.0/apsimo/world_model/postgres/__init__.py +1 -0
  600. apsimo-1.3.0/apsimo/world_model/postgres/backend.py +683 -0
  601. apsimo-1.3.0/apsimo/world_model/relationships.py +25 -0
  602. apsimo-1.3.0/apsimo/world_model/resolution/__init__.py +13 -0
  603. apsimo-1.3.0/apsimo/world_model/resolution/entity_resolver.py +232 -0
  604. apsimo-1.3.0/apsimo/world_model/resolution/merge_audit.py +16 -0
  605. apsimo-1.3.0/apsimo/world_model/resolution/merge_workflow.py +117 -0
  606. apsimo-1.3.0/apsimo/world_model/source_reports.py +121 -0
  607. apsimo-1.3.0/apsimo/world_model/sqlite/__init__.py +4 -0
  608. apsimo-1.3.0/apsimo/world_model/sqlite/backend.py +855 -0
  609. apsimo-1.3.0/apsimo/world_model/sqlite/schema.sql +132 -0
  610. apsimo-1.3.0/apsimo/world_model/store.py +545 -0
  611. apsimo-1.3.0/apsimo.egg-info/PKG-INFO +78 -0
  612. apsimo-1.3.0/apsimo.egg-info/SOURCES.txt +995 -0
  613. apsimo-1.3.0/apsimo.egg-info/dependency_links.txt +1 -0
  614. apsimo-1.3.0/apsimo.egg-info/entry_points.txt +11 -0
  615. apsimo-1.3.0/apsimo.egg-info/requires.txt +61 -0
  616. apsimo-1.3.0/apsimo.egg-info/top_level.txt +2 -0
  617. apsimo-1.3.0/colony_sidecar/__init__.py +4 -0
  618. apsimo-1.3.0/pyproject.toml +71 -0
  619. apsimo-1.3.0/setup.cfg +4 -0
  620. apsimo-1.3.0/tests/test_accepted_local_work.py +159 -0
  621. apsimo-1.3.0/tests/test_adaptive_params.py +106 -0
  622. apsimo-1.3.0/tests/test_affect.py +226 -0
  623. apsimo-1.3.0/tests/test_agent_action_routing.py +1325 -0
  624. apsimo-1.3.0/tests/test_agent_api.py +506 -0
  625. apsimo-1.3.0/tests/test_agent_bridge.py +521 -0
  626. apsimo-1.3.0/tests/test_agent_bridge_service.py +132 -0
  627. apsimo-1.3.0/tests/test_agent_sdk.py +338 -0
  628. apsimo-1.3.0/tests/test_agent_sensor_loop.py +394 -0
  629. apsimo-1.3.0/tests/test_agent_snapshot.py +177 -0
  630. apsimo-1.3.0/tests/test_agent_store.py +390 -0
  631. apsimo-1.3.0/tests/test_annotated_recall_reinforcement.py +58 -0
  632. apsimo-1.3.0/tests/test_answer_source_lineage.py +245 -0
  633. apsimo-1.3.0/tests/test_appraisal_incident_decisions.py +196 -0
  634. apsimo-1.3.0/tests/test_approval_gate.py +513 -0
  635. apsimo-1.3.0/tests/test_approval_relay_canary.py +564 -0
  636. apsimo-1.3.0/tests/test_apsimo_compat.py +124 -0
  637. apsimo-1.3.0/tests/test_apsimo_harness_guidance.py +30 -0
  638. apsimo-1.3.0/tests/test_assignment_engine.py +330 -0
  639. apsimo-1.3.0/tests/test_audit_cleanup.py +442 -0
  640. apsimo-1.3.0/tests/test_auth_coverage.py +61 -0
  641. apsimo-1.3.0/tests/test_auth_migration_readiness.py +548 -0
  642. apsimo-1.3.0/tests/test_authz_scope_api.py +96 -0
  643. apsimo-1.3.0/tests/test_autonomy_preset.py +227 -0
  644. apsimo-1.3.0/tests/test_backup.py +414 -0
  645. apsimo-1.3.0/tests/test_backup_receipt_evidence.py +129 -0
  646. apsimo-1.3.0/tests/test_beliefs.py +565 -0
  647. apsimo-1.3.0/tests/test_bind_auth_guard.py +47 -0
  648. apsimo-1.3.0/tests/test_boundary_fail_closed.py +178 -0
  649. apsimo-1.3.0/tests/test_bounded_approval_authority.py +2321 -0
  650. apsimo-1.3.0/tests/test_briefing_aggregators.py +129 -0
  651. apsimo-1.3.0/tests/test_canonical_scoped_context.py +134 -0
  652. apsimo-1.3.0/tests/test_canonical_source_read.py +123 -0
  653. apsimo-1.3.0/tests/test_causal_extract.py +212 -0
  654. apsimo-1.3.0/tests/test_causal_falsifiability.py +201 -0
  655. apsimo-1.3.0/tests/test_causal_maintenance.py +250 -0
  656. apsimo-1.3.0/tests/test_causal_policy.py +47 -0
  657. apsimo-1.3.0/tests/test_causal_query.py +88 -0
  658. apsimo-1.3.0/tests/test_causal_query_only_guard.py +191 -0
  659. apsimo-1.3.0/tests/test_chain_keys.py +109 -0
  660. apsimo-1.3.0/tests/test_channel_preferences.py +163 -0
  661. apsimo-1.3.0/tests/test_channel_registry.py +371 -0
  662. apsimo-1.3.0/tests/test_channel_store.py +164 -0
  663. apsimo-1.3.0/tests/test_cognition.py +147 -0
  664. apsimo-1.3.0/tests/test_cognition_evidence_pipeline.py +1233 -0
  665. apsimo-1.3.0/tests/test_cognition_evidence_server_wiring.py +313 -0
  666. apsimo-1.3.0/tests/test_cognition_goal_spine.py +1347 -0
  667. apsimo-1.3.0/tests/test_cognition_observability.py +61 -0
  668. apsimo-1.3.0/tests/test_cognition_p4_controlled_learning.py +617 -0
  669. apsimo-1.3.0/tests/test_cognition_p4_server_integration.py +458 -0
  670. apsimo-1.3.0/tests/test_cognition_p6_p7_server_wiring.py +1494 -0
  671. apsimo-1.3.0/tests/test_cognition_p7_drive_governance.py +1416 -0
  672. apsimo-1.3.0/tests/test_cognition_phase_b_runtime.py +628 -0
  673. apsimo-1.3.0/tests/test_cognition_phase_c_scheduler.py +1391 -0
  674. apsimo-1.3.0/tests/test_cognition_server_wiring.py +227 -0
  675. apsimo-1.3.0/tests/test_colony_memory_provider.py +1214 -0
  676. apsimo-1.3.0/tests/test_commitment_resolution.py +602 -0
  677. apsimo-1.3.0/tests/test_commitment_resolution_downgrade.py +109 -0
  678. apsimo-1.3.0/tests/test_commitment_resolution_schema.py +471 -0
  679. apsimo-1.3.0/tests/test_commitment_work.py +215 -0
  680. apsimo-1.3.0/tests/test_commitments.py +216 -0
  681. apsimo-1.3.0/tests/test_competence_reconciliation.py +339 -0
  682. apsimo-1.3.0/tests/test_compression.py +194 -0
  683. apsimo-1.3.0/tests/test_concern_resolution_receipts.py +1243 -0
  684. apsimo-1.3.0/tests/test_condition_producer.py +106 -0
  685. apsimo-1.3.0/tests/test_connectors.py +247 -0
  686. apsimo-1.3.0/tests/test_contact_fact_recall.py +165 -0
  687. apsimo-1.3.0/tests/test_contact_policy_projection.py +1376 -0
  688. apsimo-1.3.0/tests/test_contact_provisioning.py +424 -0
  689. apsimo-1.3.0/tests/test_contact_timezone.py +63 -0
  690. apsimo-1.3.0/tests/test_contacts_intro.py +140 -0
  691. apsimo-1.3.0/tests/test_contacts_persistence.py +48 -0
  692. apsimo-1.3.0/tests/test_context_gate.py +399 -0
  693. apsimo-1.3.0/tests/test_context_phase1.py +263 -0
  694. apsimo-1.3.0/tests/test_context_provenance.py +117 -0
  695. apsimo-1.3.0/tests/test_conversation_presence.py +205 -0
  696. apsimo-1.3.0/tests/test_conversation_turn_concerns.py +1155 -0
  697. apsimo-1.3.0/tests/test_current_work_recall_selection.py +235 -0
  698. apsimo-1.3.0/tests/test_delivery_bridge_503.py +61 -0
  699. apsimo-1.3.0/tests/test_delivery_gateway_identity.py +556 -0
  700. apsimo-1.3.0/tests/test_delivery_reachout_routing.py +811 -0
  701. apsimo-1.3.0/tests/test_directed.py +211 -0
  702. apsimo-1.3.0/tests/test_directed_envelope.py +98 -0
  703. apsimo-1.3.0/tests/test_directed_reports.py +111 -0
  704. apsimo-1.3.0/tests/test_directed_trust.py +100 -0
  705. apsimo-1.3.0/tests/test_directive_sources.py +300 -0
  706. apsimo-1.3.0/tests/test_directives.py +409 -0
  707. apsimo-1.3.0/tests/test_distill.py +230 -0
  708. apsimo-1.3.0/tests/test_doctor.py +1225 -0
  709. apsimo-1.3.0/tests/test_document_memory_guard.py +199 -0
  710. apsimo-1.3.0/tests/test_duckduckgo_provider.py +60 -0
  711. apsimo-1.3.0/tests/test_embedding_generations.py +414 -0
  712. apsimo-1.3.0/tests/test_ensure_channel_id.py +188 -0
  713. apsimo-1.3.0/tests/test_env_risk.py +269 -0
  714. apsimo-1.3.0/tests/test_event_broadcasts.py +193 -0
  715. apsimo-1.3.0/tests/test_event_bus_types.py +493 -0
  716. apsimo-1.3.0/tests/test_event_concerns.py +400 -0
  717. apsimo-1.3.0/tests/test_event_stream_reliability.py +240 -0
  718. apsimo-1.3.0/tests/test_execution_forecasts.py +331 -0
  719. apsimo-1.3.0/tests/test_execution_input_purpose.py +290 -0
  720. apsimo-1.3.0/tests/test_execution_registry.py +290 -0
  721. apsimo-1.3.0/tests/test_expectations.py +336 -0
  722. apsimo-1.3.0/tests/test_expectations_v2.py +393 -0
  723. apsimo-1.3.0/tests/test_experiments.py +162 -0
  724. apsimo-1.3.0/tests/test_external_cognition_events.py +902 -0
  725. apsimo-1.3.0/tests/test_external_event_concerns.py +1496 -0
  726. apsimo-1.3.0/tests/test_facts_backfill.py +178 -0
  727. apsimo-1.3.0/tests/test_feedback.py +35 -0
  728. apsimo-1.3.0/tests/test_followup_plans.py +136 -0
  729. apsimo-1.3.0/tests/test_forecast_learning.py +221 -0
  730. apsimo-1.3.0/tests/test_function_routing.py +852 -0
  731. apsimo-1.3.0/tests/test_gap_generators.py +368 -0
  732. apsimo-1.3.0/tests/test_genesis_manifest.py +49 -0
  733. apsimo-1.3.0/tests/test_global_pause.py +85 -0
  734. apsimo-1.3.0/tests/test_goal_dispatch_availability.py +179 -0
  735. apsimo-1.3.0/tests/test_goal_inference_provenance.py +89 -0
  736. apsimo-1.3.0/tests/test_goal_reader_imports.py +72 -0
  737. apsimo-1.3.0/tests/test_governed_actions.py +989 -0
  738. apsimo-1.3.0/tests/test_governed_research_handoff.py +1083 -0
  739. apsimo-1.3.0/tests/test_graduated_approvals.py +544 -0
  740. apsimo-1.3.0/tests/test_grant_envelope.py +260 -0
  741. apsimo-1.3.0/tests/test_graph_reindex_metadata.py +102 -0
  742. apsimo-1.3.0/tests/test_guard_audit.py +255 -0
  743. apsimo-1.3.0/tests/test_guard_chat_mode.py +62 -0
  744. apsimo-1.3.0/tests/test_guard_derive_context.py +185 -0
  745. apsimo-1.3.0/tests/test_guard_enforce_policy.py +107 -0
  746. apsimo-1.3.0/tests/test_hermes_export.py +438 -0
  747. apsimo-1.3.0/tests/test_hermes_general_governance.py +1945 -0
  748. apsimo-1.3.0/tests/test_hermes_history_import.py +159 -0
  749. apsimo-1.3.0/tests/test_hermes_native_tool_authority.py +137 -0
  750. apsimo-1.3.0/tests/test_hermes_plugin_contract.py +85 -0
  751. apsimo-1.3.0/tests/test_hermes_plugin_event_lifecycle.py +35 -0
  752. apsimo-1.3.0/tests/test_hermes_plugin_event_replay.py +39 -0
  753. apsimo-1.3.0/tests/test_hermes_plugin_guard_shadow.py +228 -0
  754. apsimo-1.3.0/tests/test_hermes_plugin_signals.py +223 -0
  755. apsimo-1.3.0/tests/test_hermes_plugin_turn_id.py +139 -0
  756. apsimo-1.3.0/tests/test_hermes_queue_stats_projection.py +92 -0
  757. apsimo-1.3.0/tests/test_hermes_setup.py +305 -0
  758. apsimo-1.3.0/tests/test_hermes_turn_outbox.py +1314 -0
  759. apsimo-1.3.0/tests/test_hermes_work_projection.py +120 -0
  760. apsimo-1.3.0/tests/test_host_input_provenance.py +495 -0
  761. apsimo-1.3.0/tests/test_hostworker_agreement.py +665 -0
  762. apsimo-1.3.0/tests/test_identity_continuity.py +180 -0
  763. apsimo-1.3.0/tests/test_identity_corrections.py +171 -0
  764. apsimo-1.3.0/tests/test_inference_context_gate.py +100 -0
  765. apsimo-1.3.0/tests/test_initiative_engine.py +76 -0
  766. apsimo-1.3.0/tests/test_initiative_evidence.py +196 -0
  767. apsimo-1.3.0/tests/test_initiative_executor.py +562 -0
  768. apsimo-1.3.0/tests/test_initiative_feedback.py +138 -0
  769. apsimo-1.3.0/tests/test_initiative_pipeline_v016.py +650 -0
  770. apsimo-1.3.0/tests/test_initiative_retry.py +115 -0
  771. apsimo-1.3.0/tests/test_initiative_store.py +368 -0
  772. apsimo-1.3.0/tests/test_input_source_lineage.py +119 -0
  773. apsimo-1.3.0/tests/test_insight_store.py +34 -0
  774. apsimo-1.3.0/tests/test_instance_service.py +250 -0
  775. apsimo-1.3.0/tests/test_instance_service_live.py +118 -0
  776. apsimo-1.3.0/tests/test_intelligence_components.py +891 -0
  777. apsimo-1.3.0/tests/test_intelligence_synthesis.py +627 -0
  778. apsimo-1.3.0/tests/test_introduction_initiatives.py +157 -0
  779. apsimo-1.3.0/tests/test_job_writeback.py +263 -0
  780. apsimo-1.3.0/tests/test_journal.py +346 -0
  781. apsimo-1.3.0/tests/test_legacy_fact_context.py +224 -0
  782. apsimo-1.3.0/tests/test_local_work_context.py +169 -0
  783. apsimo-1.3.0/tests/test_loop_stats_accuracy.py +112 -0
  784. apsimo-1.3.0/tests/test_mcp_config.py +402 -0
  785. apsimo-1.3.0/tests/test_mcp_server.py +357 -0
  786. apsimo-1.3.0/tests/test_media_read_reference_presentation.py +147 -0
  787. apsimo-1.3.0/tests/test_memory_decay.py +207 -0
  788. apsimo-1.3.0/tests/test_memory_formation.py +135 -0
  789. apsimo-1.3.0/tests/test_memory_governance.py +319 -0
  790. apsimo-1.3.0/tests/test_memory_promotion.py +62 -0
  791. apsimo-1.3.0/tests/test_memory_prune.py +184 -0
  792. apsimo-1.3.0/tests/test_memory_read_hydration.py +83 -0
  793. apsimo-1.3.0/tests/test_memory_response_schemas.py +127 -0
  794. apsimo-1.3.0/tests/test_migrations.py +175 -0
  795. apsimo-1.3.0/tests/test_mining.py +371 -0
  796. apsimo-1.3.0/tests/test_model_qualification_cli.py +106 -0
  797. apsimo-1.3.0/tests/test_model_qualification_memory.py +245 -0
  798. apsimo-1.3.0/tests/test_model_qualification_runner.py +352 -0
  799. apsimo-1.3.0/tests/test_model_qualification_structured.py +145 -0
  800. apsimo-1.3.0/tests/test_native_accepted_local_work.py +344 -0
  801. apsimo-1.3.0/tests/test_native_initiative_work.py +137 -0
  802. apsimo-1.3.0/tests/test_native_input_carrier.py +80 -0
  803. apsimo-1.3.0/tests/test_native_outcome_judgments.py +204 -0
  804. apsimo-1.3.0/tests/test_native_request_erasure.py +507 -0
  805. apsimo-1.3.0/tests/test_native_review_recurrence.py +222 -0
  806. apsimo-1.3.0/tests/test_native_setup.py +881 -0
  807. apsimo-1.3.0/tests/test_native_source_image_read.py +133 -0
  808. apsimo-1.3.0/tests/test_native_source_read.py +97 -0
  809. apsimo-1.3.0/tests/test_native_source_video_read.py +187 -0
  810. apsimo-1.3.0/tests/test_neo4j_backend.py +211 -0
  811. apsimo-1.3.0/tests/test_operator_deck_read_truth.py +109 -0
  812. apsimo-1.3.0/tests/test_ordinary_context_briefings.py +70 -0
  813. apsimo-1.3.0/tests/test_owner_preferences.py +138 -0
  814. apsimo-1.3.0/tests/test_p2_wirings.py +201 -0
  815. apsimo-1.3.0/tests/test_partial_work_rendering.py +120 -0
  816. apsimo-1.3.0/tests/test_patterns.py +150 -0
  817. apsimo-1.3.0/tests/test_pending_work_coverage.py +101 -0
  818. apsimo-1.3.0/tests/test_persona.py +94 -0
  819. apsimo-1.3.0/tests/test_persona_setup_result.py +70 -0
  820. apsimo-1.3.0/tests/test_phase_capability_check.py +93 -0
  821. apsimo-1.3.0/tests/test_preset_loop_coupling.py +162 -0
  822. apsimo-1.3.0/tests/test_procedure_source_context.py +205 -0
  823. apsimo-1.3.0/tests/test_project_event_outbox.py +614 -0
  824. apsimo-1.3.0/tests/test_project_result_reconciliation_phase.py +64 -0
  825. apsimo-1.3.0/tests/test_projects.py +526 -0
  826. apsimo-1.3.0/tests/test_prompt_evals.py +264 -0
  827. apsimo-1.3.0/tests/test_proposals.py +70 -0
  828. apsimo-1.3.0/tests/test_provenance_population.py +59 -0
  829. apsimo-1.3.0/tests/test_pseudo_agi_production_chain.py +437 -0
  830. apsimo-1.3.0/tests/test_queue_completed_filter.py +51 -0
  831. apsimo-1.3.0/tests/test_queue_contract.py +390 -0
  832. apsimo-1.3.0/tests/test_quiet_hours_and_reload.py +136 -0
  833. apsimo-1.3.0/tests/test_reachout_policy.py +135 -0
  834. apsimo-1.3.0/tests/test_recall_hybrid.py +98 -0
  835. apsimo-1.3.0/tests/test_recall_person_boost.py +368 -0
  836. apsimo-1.3.0/tests/test_recall_ranking.py +294 -0
  837. apsimo-1.3.0/tests/test_recall_rerank.py +206 -0
  838. apsimo-1.3.0/tests/test_recall_source_presentation.py +160 -0
  839. apsimo-1.3.0/tests/test_recall_unified_context.py +296 -0
  840. apsimo-1.3.0/tests/test_recency.py +27 -0
  841. apsimo-1.3.0/tests/test_reflection_task_routing.py +72 -0
  842. apsimo-1.3.0/tests/test_rejection_loop.py +563 -0
  843. apsimo-1.3.0/tests/test_relationship_calendar_aggregators.py +436 -0
  844. apsimo-1.3.0/tests/test_relationship_score_refresh.py +36 -0
  845. apsimo-1.3.0/tests/test_relationship_signal_floor.py +220 -0
  846. apsimo-1.3.0/tests/test_relationships.py +410 -0
  847. apsimo-1.3.0/tests/test_reply_forecast_callback_order.py +94 -0
  848. apsimo-1.3.0/tests/test_reply_forecast_stops.py +63 -0
  849. apsimo-1.3.0/tests/test_reply_forecasts.py +418 -0
  850. apsimo-1.3.0/tests/test_repo_tools.py +98 -0
  851. apsimo-1.3.0/tests/test_reported_worker_status.py +130 -0
  852. apsimo-1.3.0/tests/test_request_capabilities.py +104 -0
  853. apsimo-1.3.0/tests/test_request_work_context.py +168 -0
  854. apsimo-1.3.0/tests/test_reranker_remote.py +92 -0
  855. apsimo-1.3.0/tests/test_research_orchestrator.py +89 -0
  856. apsimo-1.3.0/tests/test_resolve_messaging_handle.py +66 -0
  857. apsimo-1.3.0/tests/test_response_guard.py +191 -0
  858. apsimo-1.3.0/tests/test_response_guard_communication_policy.py +364 -0
  859. apsimo-1.3.0/tests/test_response_guard_endpoint.py +95 -0
  860. apsimo-1.3.0/tests/test_response_guard_surface_policy.py +132 -0
  861. apsimo-1.3.0/tests/test_router_tiers.py +249 -0
  862. apsimo-1.3.0/tests/test_runtime_model_observations.py +93 -0
  863. apsimo-1.3.0/tests/test_sandbox.py +292 -0
  864. apsimo-1.3.0/tests/test_scoped_api_authority.py +1153 -0
  865. apsimo-1.3.0/tests/test_secondary_review_contract.py +56 -0
  866. apsimo-1.3.0/tests/test_seed_retirement.py +117 -0
  867. apsimo-1.3.0/tests/test_selected_autonomy.py +91 -0
  868. apsimo-1.3.0/tests/test_self_directed_thinker.py +100 -0
  869. apsimo-1.3.0/tests/test_self_initiatives.py +212 -0
  870. apsimo-1.3.0/tests/test_self_judgment_opt_in.py +78 -0
  871. apsimo-1.3.0/tests/test_self_judgment_premises.py +181 -0
  872. apsimo-1.3.0/tests/test_self_judgments.py +577 -0
  873. apsimo-1.3.0/tests/test_self_model.py +310 -0
  874. apsimo-1.3.0/tests/test_self_perspective.py +267 -0
  875. apsimo-1.3.0/tests/test_selfhood_benchmark.py +335 -0
  876. apsimo-1.3.0/tests/test_session_reports.py +352 -0
  877. apsimo-1.3.0/tests/test_shared_facts.py +238 -0
  878. apsimo-1.3.0/tests/test_shared_local_undertaking.py +293 -0
  879. apsimo-1.3.0/tests/test_short_source_context.py +138 -0
  880. apsimo-1.3.0/tests/test_sidecar.py +994 -0
  881. apsimo-1.3.0/tests/test_signals_attribution.py +139 -0
  882. apsimo-1.3.0/tests/test_situation_spine.py +685 -0
  883. apsimo-1.3.0/tests/test_skill_approval.py +115 -0
  884. apsimo-1.3.0/tests/test_skill_attribution.py +104 -0
  885. apsimo-1.3.0/tests/test_skill_sandbox.py +360 -0
  886. apsimo-1.3.0/tests/test_skill_synthesis.py +47 -0
  887. apsimo-1.3.0/tests/test_skill_synthesis_wiring.py +86 -0
  888. apsimo-1.3.0/tests/test_skills_memory.py +181 -0
  889. apsimo-1.3.0/tests/test_social_context_flow.py +98 -0
  890. apsimo-1.3.0/tests/test_social_transport.py +71 -0
  891. apsimo-1.3.0/tests/test_source_annotation_claim_survivors.py +90 -0
  892. apsimo-1.3.0/tests/test_source_annotations.py +382 -0
  893. apsimo-1.3.0/tests/test_source_appraisals.py +538 -0
  894. apsimo-1.3.0/tests/test_source_attribution.py +92 -0
  895. apsimo-1.3.0/tests/test_source_audio.py +169 -0
  896. apsimo-1.3.0/tests/test_source_audio_claims.py +346 -0
  897. apsimo-1.3.0/tests/test_source_claim_budget.py +110 -0
  898. apsimo-1.3.0/tests/test_source_claim_diagnostics.py +150 -0
  899. apsimo-1.3.0/tests/test_source_claim_media_eligibility.py +56 -0
  900. apsimo-1.3.0/tests/test_source_claim_projection.py +375 -0
  901. apsimo-1.3.0/tests/test_source_claim_review.py +236 -0
  902. apsimo-1.3.0/tests/test_source_claim_subject_basis.py +361 -0
  903. apsimo-1.3.0/tests/test_source_document_read.py +328 -0
  904. apsimo-1.3.0/tests/test_source_documents.py +304 -0
  905. apsimo-1.3.0/tests/test_source_episode_admission.py +164 -0
  906. apsimo-1.3.0/tests/test_source_episode_memory.py +102 -0
  907. apsimo-1.3.0/tests/test_source_episode_revisions.py +375 -0
  908. apsimo-1.3.0/tests/test_source_event_precision.py +64 -0
  909. apsimo-1.3.0/tests/test_source_excerpt_lineage.py +181 -0
  910. apsimo-1.3.0/tests/test_source_image_read.py +155 -0
  911. apsimo-1.3.0/tests/test_source_media.py +305 -0
  912. apsimo-1.3.0/tests/test_source_memory_backup.py +344 -0
  913. apsimo-1.3.0/tests/test_source_time_query.py +85 -0
  914. apsimo-1.3.0/tests/test_source_vectors.py +398 -0
  915. apsimo-1.3.0/tests/test_source_video.py +301 -0
  916. apsimo-1.3.0/tests/test_sqlite_connection_ownership.py +62 -0
  917. apsimo-1.3.0/tests/test_supervised_rung.py +128 -0
  918. apsimo-1.3.0/tests/test_surprise.py +290 -0
  919. apsimo-1.3.0/tests/test_sweep_fixes.py +186 -0
  920. apsimo-1.3.0/tests/test_synthesis.py +465 -0
  921. apsimo-1.3.0/tests/test_telemetry_staleness.py +196 -0
  922. apsimo-1.3.0/tests/test_temporal.py +144 -0
  923. apsimo-1.3.0/tests/test_temporal_followups.py +153 -0
  924. apsimo-1.3.0/tests/test_temporal_index.py +68 -0
  925. apsimo-1.3.0/tests/test_test_environment_isolation.py +12 -0
  926. apsimo-1.3.0/tests/test_thinking_phase.py +91 -0
  927. apsimo-1.3.0/tests/test_thought_function_routing.py +105 -0
  928. apsimo-1.3.0/tests/test_tick_phase_budget.py +380 -0
  929. apsimo-1.3.0/tests/test_tier_endpoints.py +181 -0
  930. apsimo-1.3.0/tests/test_timeline.py +42 -0
  931. apsimo-1.3.0/tests/test_tom2_approvals.py +153 -0
  932. apsimo-1.3.0/tests/test_tom2_asymmetry.py +117 -0
  933. apsimo-1.3.0/tests/test_tom2_context.py +160 -0
  934. apsimo-1.3.0/tests/test_tom2_cross_gate.py +186 -0
  935. apsimo-1.3.0/tests/test_tom2_eligibility.py +326 -0
  936. apsimo-1.3.0/tests/test_tom2_epistemic_guard.py +305 -0
  937. apsimo-1.3.0/tests/test_tom2_exposure.py +185 -0
  938. apsimo-1.3.0/tests/test_tom2_kill_switch.py +207 -0
  939. apsimo-1.3.0/tests/test_tom2_level_coherence.py +161 -0
  940. apsimo-1.3.0/tests/test_tom2_leveled.py +174 -0
  941. apsimo-1.3.0/tests/test_tom2_levels.py +245 -0
  942. apsimo-1.3.0/tests/test_tom2_source_corrections.py +126 -0
  943. apsimo-1.3.0/tests/test_tom2_store.py +73 -0
  944. apsimo-1.3.0/tests/test_tom2_taint.py +148 -0
  945. apsimo-1.3.0/tests/test_tom2_wiring.py +370 -0
  946. apsimo-1.3.0/tests/test_tom_event_lineage.py +378 -0
  947. apsimo-1.3.0/tests/test_tom_extractor.py +210 -0
  948. apsimo-1.3.0/tests/test_tom_p8_arcs.py +362 -0
  949. apsimo-1.3.0/tests/test_tom_p8_boundary_corpus.py +99 -0
  950. apsimo-1.3.0/tests/test_tom_p8_fact_adapters.py +105 -0
  951. apsimo-1.3.0/tests/test_tom_p8_outbound_integration.py +291 -0
  952. apsimo-1.3.0/tests/test_tom_p8_recipient_audit.py +576 -0
  953. apsimo-1.3.0/tests/test_tom_p8_recipient_simulator.py +293 -0
  954. apsimo-1.3.0/tests/test_tom_p8_server_integration.py +1973 -0
  955. apsimo-1.3.0/tests/test_tom_p8_visibility.py +240 -0
  956. apsimo-1.3.0/tests/test_tom_p8_visibility_store.py +237 -0
  957. apsimo-1.3.0/tests/test_tom_source_lineage.py +220 -0
  958. apsimo-1.3.0/tests/test_tool_handlers_graph.py +119 -0
  959. apsimo-1.3.0/tests/test_tool_provenance.py +584 -0
  960. apsimo-1.3.0/tests/test_tool_surface.py +176 -0
  961. apsimo-1.3.0/tests/test_toolsmith.py +674 -0
  962. apsimo-1.3.0/tests/test_transport_ingress.py +93 -0
  963. apsimo-1.3.0/tests/test_transport_ingress_api.py +233 -0
  964. apsimo-1.3.0/tests/test_trust_configure.py +157 -0
  965. apsimo-1.3.0/tests/test_trust_scopes.py +80 -0
  966. apsimo-1.3.0/tests/test_trust_scopes_p2.py +129 -0
  967. apsimo-1.3.0/tests/test_turn_idempotency_ledger.py +66 -0
  968. apsimo-1.3.0/tests/test_turn_idempotency_v2.py +214 -0
  969. apsimo-1.3.0/tests/test_turn_ner_entities.py +107 -0
  970. apsimo-1.3.0/tests/test_turn_source_erasure.py +197 -0
  971. apsimo-1.3.0/tests/test_turn_source_evidence.py +176 -0
  972. apsimo-1.3.0/tests/test_turn_survivor_delivery.py +109 -0
  973. apsimo-1.3.0/tests/test_validation_sweep_fixes.py +312 -0
  974. apsimo-1.3.0/tests/test_vector_vacuum.py +276 -0
  975. apsimo-1.3.0/tests/test_wizard_autonomy.py +340 -0
  976. apsimo-1.3.0/tests/test_work_ancestry_projection.py +190 -0
  977. apsimo-1.3.0/tests/test_work_control_production_blockers.py +2161 -0
  978. apsimo-1.3.0/tests/test_work_control_v1.py +780 -0
  979. apsimo-1.3.0/tests/test_work_orders.py +1450 -0
  980. apsimo-1.3.0/tests/test_work_read_surface_authority.py +266 -0
  981. apsimo-1.3.0/tests/test_work_source_coverage.py +146 -0
  982. apsimo-1.3.0/tests/test_worker_handler_boundaries.py +169 -0
  983. apsimo-1.3.0/tests/test_worker_heartbeat_truth.py +208 -0
  984. apsimo-1.3.0/tests/test_worker_http_authority.py +1112 -0
  985. apsimo-1.3.0/tests/test_worker_integration.py +512 -0
  986. apsimo-1.3.0/tests/test_worker_lifecycle_durability.py +723 -0
  987. apsimo-1.3.0/tests/test_workers_governor.py +1731 -0
  988. apsimo-1.3.0/tests/test_workers_install.py +552 -0
  989. apsimo-1.3.0/tests/test_workspace.py +301 -0
  990. apsimo-1.3.0/tests/test_world_context_query.py +101 -0
  991. apsimo-1.3.0/tests/test_world_entity_reinforcement.py +134 -0
  992. apsimo-1.3.0/tests/test_world_llm_extract.py +113 -0
  993. apsimo-1.3.0/tests/test_world_model_prune.py +95 -0
  994. apsimo-1.3.0/tests/test_world_observations.py +237 -0
  995. apsimo-1.3.0/tests/test_world_populator.py +104 -0
  996. apsimo-1.3.0/tests/test_world_quality.py +64 -0
  997. apsimo-1.3.0/tests/test_world_supervised.py +233 -0
apsimo-1.3.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Aevonix
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
apsimo-1.3.0/PKG-INFO ADDED
@@ -0,0 +1,78 @@
1
+ Metadata-Version: 2.4
2
+ Name: apsimo
3
+ Version: 1.3.0
4
+ Summary: Persistent identity, memory and autonomy for AI agents
5
+ License-Expression: MIT
6
+ Requires-Python: >=3.11
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: fastapi>=0.110
10
+ Requires-Dist: uvicorn[standard]>=0.29
11
+ Requires-Dist: litellm>=1.40
12
+ Requires-Dist: pydantic>=2.6
13
+ Requires-Dist: PyYAML>=6.0
14
+ Requires-Dist: aiosqlite>=0.19
15
+ Requires-Dist: httpx>=0.27
16
+ Requires-Dist: websockets>=12.0
17
+ Requires-Dist: Pillow>=10.0
18
+ Requires-Dist: cryptography>=42.0
19
+ Requires-Dist: pypdf<7,>=6.18.0
20
+ Requires-Dist: psutil<8,>=7.2.2; sys_platform == "darwin"
21
+ Provides-Extra: graph
22
+ Requires-Dist: neo4j>=5.18; extra == "graph"
23
+ Provides-Extra: neo4j
24
+ Requires-Dist: neo4j>=5.18; extra == "neo4j"
25
+ Provides-Extra: vectors
26
+ Requires-Dist: sentence-transformers>=3.0; extra == "vectors"
27
+ Requires-Dist: pandas>=2.0; extra == "vectors"
28
+ Requires-Dist: pyarrow>=15.0; extra == "vectors"
29
+ Requires-Dist: lancedb>=0.10; extra == "vectors"
30
+ Provides-Extra: hermes
31
+ Requires-Dist: apsimo-hermes<2,>=1.3.0; extra == "hermes"
32
+ Provides-Extra: mcp
33
+ Requires-Dist: mcp[cli]<2,>=1.0; extra == "mcp"
34
+ Provides-Extra: lancedb
35
+ Requires-Dist: lancedb>=0.6; extra == "lancedb"
36
+ Requires-Dist: pyarrow>=14.0; extra == "lancedb"
37
+ Requires-Dist: pandas>=2.0; extra == "lancedb"
38
+ Provides-Extra: postgres
39
+ Requires-Dist: asyncpg>=0.29; extra == "postgres"
40
+ Provides-Extra: extraction
41
+ Requires-Dist: PyMuPDF>=1.24; extra == "extraction"
42
+ Requires-Dist: beautifulsoup4>=4.12; extra == "extraction"
43
+ Provides-Extra: video
44
+ Requires-Dist: av==18.1.0; extra == "video"
45
+ Provides-Extra: dev
46
+ Requires-Dist: av==18.1.0; extra == "dev"
47
+ Requires-Dist: psutil<8,>=7.2.2; extra == "dev"
48
+ Requires-Dist: neo4j>=5.18; extra == "dev"
49
+ Requires-Dist: sentence-transformers>=3.0; extra == "dev"
50
+ Requires-Dist: pandas>=2.0; extra == "dev"
51
+ Requires-Dist: pyarrow>=15.0; extra == "dev"
52
+ Requires-Dist: lancedb>=0.10; extra == "dev"
53
+ Requires-Dist: pytest>=8.0; extra == "dev"
54
+ Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
55
+ Requires-Dist: httpx>=0.27; extra == "dev"
56
+ Requires-Dist: jsonschema>=4.21; extra == "dev"
57
+ Requires-Dist: mcp[cli]<2,>=1.0; extra == "dev"
58
+ Dynamic: license-file
59
+
60
+ # Apsimo sidecar
61
+
62
+ Apsimo provides persistent source memory, relevant context and shared work for
63
+ a personal agent using locally configured models. This package runs the sidecar
64
+ and supplies the `apsimo` command.
65
+
66
+ Native Hermes attachment also requires the companion `apsimo-hermes` package
67
+ and an existing supported Hermes installation. The guided local setup uses one
68
+ OpenAI-compatible chat endpoint and SQLite; graph and vector dependencies are
69
+ optional.
70
+
71
+ See the [public setup guide](https://github.com/Aevonix/Apsimo/blob/main/docs/LOCAL-HERMES-SETUP.md)
72
+ for installation, private identity setup, supported runtime and operation.
73
+ The [project README](https://github.com/Aevonix/Apsimo/blob/main/README.md)
74
+ describes current capabilities and their limits. Personal configuration,
75
+ credentials and hardware adapters belong in the private deployment.
76
+
77
+ Licensed under the included MIT license. Optional dependencies retain their
78
+ own licenses.
apsimo-1.3.0/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # Apsimo sidecar
2
+
3
+ Apsimo provides persistent source memory, relevant context and shared work for
4
+ a personal agent using locally configured models. This package runs the sidecar
5
+ and supplies the `apsimo` command.
6
+
7
+ Native Hermes attachment also requires the companion `apsimo-hermes` package
8
+ and an existing supported Hermes installation. The guided local setup uses one
9
+ OpenAI-compatible chat endpoint and SQLite; graph and vector dependencies are
10
+ optional.
11
+
12
+ See the [public setup guide](https://github.com/Aevonix/Apsimo/blob/main/docs/LOCAL-HERMES-SETUP.md)
13
+ for installation, private identity setup, supported runtime and operation.
14
+ The [project README](https://github.com/Aevonix/Apsimo/blob/main/README.md)
15
+ describes current capabilities and their limits. Personal configuration,
16
+ credentials and hardware adapters belong in the private deployment.
17
+
18
+ Licensed under the included MIT license. Optional dependencies retain their
19
+ own licenses.
@@ -0,0 +1,38 @@
1
+ """Apsimo cognition server for agent runtimes.
2
+
3
+ A standalone FastAPI server that agent hosts (Hermes plugin, MCP harnesses,
4
+ REST integrations) mount via the ``/v1/host`` API surface.
5
+ """
6
+
7
+ from pathlib import Path
8
+ import os
9
+ from .environment import apply_environment_aliases
10
+
11
+ apply_environment_aliases()
12
+
13
+ try: # single source of truth: the installed package metadata (pyproject)
14
+ from importlib.metadata import version as _pkg_version
15
+ __version__ = _pkg_version("apsimo")
16
+ except Exception: # editable/unbuilt checkouts without installed metadata
17
+ __version__ = "0.0.0+unknown"
18
+
19
+
20
+ def get_state_dir() -> Path:
21
+ """Return the selected state directory without moving existing state.
22
+
23
+ Priority:
24
+ 1. APSIMO_STATE_DIR or legacy COLONY_STATE_DIR (explicit override)
25
+ 2. ~/.colony/data (retained unconfigured-library compatibility default)
26
+
27
+ Guided setup selects its explicit private instance directory. This fallback
28
+ stays aligned with older independently configured storage readers.
29
+
30
+ Creates the directory if it doesn't exist.
31
+ """
32
+ explicit = os.environ.get("APSIMO_STATE_DIR") or os.environ.get("COLONY_STATE_DIR")
33
+ if explicit:
34
+ path = Path(explicit)
35
+ else:
36
+ path = Path.home() / ".colony" / "data"
37
+ path.mkdir(parents=True, exist_ok=True)
38
+ return path
@@ -0,0 +1,6 @@
1
+ """Run the same CLI used by the installed ``apsimo`` command."""
2
+ from apsimo.cli import main
3
+
4
+
5
+ if __name__ == "__main__":
6
+ main()
@@ -0,0 +1,6 @@
1
+ """Colony Agent SDK — Python client for remote agents."""
2
+
3
+ from .client import AgentClient
4
+ from .models import AgentConfig, NodeCertificate
5
+
6
+ __all__ = ["AgentClient", "AgentConfig", "NodeCertificate"]
@@ -0,0 +1,276 @@
1
+ """Colony Agent Client — WebSocket client for remote agents.
2
+
3
+ Usage:
4
+ from colony.agent import AgentClient
5
+
6
+ client = AgentClient(config_path="~/.colony/agent.json")
7
+
8
+ @client.on_initiative
9
+ async def handle_initiative(initiative):
10
+ print(f"Received: {initiative['description']}")
11
+ await client.acknowledge(initiative["id"])
12
+ result = await process_initiative(initiative)
13
+ await client.complete(initiative["id"], result=result)
14
+
15
+ await client.start()
16
+ """
17
+
18
+ import asyncio
19
+ import json
20
+ import time
21
+ from pathlib import Path
22
+ from typing import Any, Callable, Dict, Optional
23
+
24
+ import websockets
25
+
26
+ from .models import AgentConfig
27
+
28
+
29
+ class AgentClient:
30
+ """WebSocket client for remote Colony agents.
31
+
32
+ Handles:
33
+ - WebSocket connection with auth
34
+ - Heartbeat loop
35
+ - Initiative delivery
36
+ - Reconnection with exponential backoff
37
+ """
38
+
39
+ def __init__(
40
+ self,
41
+ config_path: str = "~/.colony/agent.json",
42
+ config: Optional[AgentConfig] = None,
43
+ ) -> None:
44
+ """Initialize agent client.
45
+
46
+ Args:
47
+ config_path: Path to agent config file
48
+ config: Optional pre-loaded config (skips file read)
49
+ """
50
+ if config:
51
+ self.config = config
52
+ else:
53
+ config_file = Path(config_path).expanduser()
54
+ if not config_file.exists():
55
+ raise FileNotFoundError(f"Agent config not found: {config_file}")
56
+ self.config = AgentConfig.parse_file(config_file)
57
+
58
+ self._ws: Optional[websockets.WebSocketClientProtocol] = None
59
+ self._running = False
60
+ self._seq = 0
61
+ self._pending_acks: Dict[int, asyncio.Future] = {}
62
+ self._handlers: Dict[str, Callable] = {
63
+ "initiative": None,
64
+ "config": None,
65
+ "disconnect": None,
66
+ }
67
+
68
+ # Reconnection state
69
+ self._reconnect_delay = 1.0
70
+ self._max_reconnect_delay = 60.0
71
+
72
+ def on_initiative(self, handler: Callable) -> Callable:
73
+ """Register initiative handler."""
74
+ self._handlers["initiative"] = handler
75
+ return handler
76
+
77
+ def on_config(self, handler: Callable) -> Callable:
78
+ """Register config update handler."""
79
+ self._handlers["config"] = handler
80
+ return handler
81
+
82
+ def on_disconnect(self, handler: Callable) -> Callable:
83
+ """Register disconnect handler."""
84
+ self._handlers["disconnect"] = handler
85
+ return handler
86
+
87
+ async def start(self) -> None:
88
+ """Connect to Colony and start message loop."""
89
+ if not self.config.websocket_url:
90
+ raise ValueError("No websocket_url in config (local mode?)")
91
+
92
+ self._running = True
93
+
94
+ while self._running:
95
+ try:
96
+ await self._connect()
97
+ await self._message_loop()
98
+ except Exception as e:
99
+ if not self._running:
100
+ break
101
+ print(f"Connection error: {e}, reconnecting in {self._reconnect_delay}s...")
102
+ await asyncio.sleep(self._reconnect_delay)
103
+ self._reconnect_delay = min(
104
+ self._reconnect_delay * 2,
105
+ self._max_reconnect_delay,
106
+ )
107
+
108
+ async def stop(self) -> None:
109
+ """Disconnect from Colony."""
110
+ self._running = False
111
+ if self._ws:
112
+ await self._ws.close()
113
+
114
+ async def _connect(self) -> None:
115
+ """Establish WebSocket connection with auth."""
116
+ headers = {}
117
+ if self.config.node_cert:
118
+ # Sign challenge with node cert
119
+ headers["Authorization"] = f"Bearer {self.config.node_cert.signature}"
120
+ headers["X-Agent-Id"] = self.config.agent_id
121
+
122
+ self._ws = await websockets.connect(
123
+ self.config.websocket_url,
124
+ extra_headers=headers,
125
+ ping_interval=30,
126
+ ping_timeout=10,
127
+ )
128
+ self._reconnect_delay = 1.0 # Reset on successful connection
129
+ print(f"Connected to Colony: {self.config.websocket_url}")
130
+
131
+ # Start heartbeat task
132
+ asyncio.create_task(self._heartbeat_loop())
133
+
134
+ async def _message_loop(self) -> None:
135
+ """Process incoming messages."""
136
+ if not self._ws:
137
+ return
138
+
139
+ async for message in self._ws:
140
+ try:
141
+ data = json.loads(message)
142
+ await self._handle_message(data)
143
+ except json.JSONDecodeError:
144
+ print(f"Invalid JSON: {message}")
145
+ except Exception as e:
146
+ print(f"Error handling message: {e}")
147
+
148
+ async def _handle_message(self, data: Dict[str, Any]) -> None:
149
+ """Handle incoming message."""
150
+ msg_type = data.get("type")
151
+ seq = data.get("seq")
152
+
153
+ # Handle ACKs for our messages
154
+ if msg_type == "ack" and seq in self._pending_acks:
155
+ self._pending_acks[seq].set_result(data)
156
+ return
157
+
158
+ # Handle initiative delivery
159
+ if msg_type == "initiative":
160
+ if self._handlers["initiative"]:
161
+ await self._handlers["initiative"](data.get("initiative", {}))
162
+ # Auto-ack receipt
163
+ await self._send_ack(seq)
164
+
165
+ # Handle config update
166
+ elif msg_type == "config":
167
+ if self._handlers["config"]:
168
+ await self._handlers["config"](data.get("config", {}))
169
+
170
+ # Handle disconnect notice
171
+ elif msg_type == "disconnect":
172
+ if self._handlers["disconnect"]:
173
+ await self._handlers["disconnect"](data.get("reason", "unknown"))
174
+ await self.stop()
175
+
176
+ # Handle ping
177
+ elif msg_type == "ping":
178
+ await self._send({"type": "pong", "seq": seq})
179
+
180
+ async def _heartbeat_loop(self) -> None:
181
+ """Send periodic heartbeats."""
182
+ # The colony side tracks current_assignments via the agents table
183
+ # (incremented/decremented when initiatives are assigned/completed),
184
+ # so the heartbeat does not need to carry it — the server only uses
185
+ # this message to update last_seen_at.
186
+ while self._running and self._ws:
187
+ try:
188
+ await self._send({
189
+ "type": "heartbeat",
190
+ "status": "online",
191
+ })
192
+ await asyncio.sleep(30)
193
+ except Exception:
194
+ break
195
+
196
+ async def _send(self, message: Dict[str, Any]) -> bool:
197
+ """Send message with sequencing."""
198
+ if not self._ws:
199
+ return False
200
+
201
+ self._seq += 1
202
+ message["seq"] = self._seq
203
+
204
+ try:
205
+ await self._ws.send(json.dumps(message))
206
+ return True
207
+ except Exception as e:
208
+ print(f"Send error: {e}")
209
+ return False
210
+
211
+ async def _send_ack(self, seq: Optional[int]) -> None:
212
+ """Send acknowledgment."""
213
+ await self._send({"type": "ack", "ack_seq": seq})
214
+
215
+ # --- Public API ---
216
+
217
+ async def acknowledge(self, initiative_id: str) -> bool:
218
+ """Acknowledge initiative receipt."""
219
+ return await self._send({
220
+ "type": "initiative_ack",
221
+ "initiative_id": initiative_id,
222
+ })
223
+
224
+ async def complete(
225
+ self,
226
+ initiative_id: str,
227
+ result: Optional[str] = None,
228
+ metadata: Optional[Dict[str, Any]] = None,
229
+ ) -> bool:
230
+ """Mark initiative as completed."""
231
+ return await self._send({
232
+ "type": "initiative_complete",
233
+ "initiative_id": initiative_id,
234
+ "result": result,
235
+ "result_metadata": metadata or {},
236
+ })
237
+
238
+ async def fail(
239
+ self,
240
+ initiative_id: str,
241
+ reason: str,
242
+ retry: bool = True,
243
+ ) -> bool:
244
+ """Mark initiative as failed."""
245
+ return await self._send({
246
+ "type": "initiative_fail",
247
+ "initiative_id": initiative_id,
248
+ "reason": reason,
249
+ "retry": retry,
250
+ })
251
+
252
+ async def delegate(
253
+ self,
254
+ initiative_id: str,
255
+ reason: str,
256
+ target_agent_id: Optional[str] = None,
257
+ ) -> bool:
258
+ """Delegate initiative to another agent."""
259
+ return await self._send({
260
+ "type": "initiative_delegate",
261
+ "initiative_id": initiative_id,
262
+ "reason": reason,
263
+ "target_agent_id": target_agent_id,
264
+ })
265
+
266
+ async def update_status(
267
+ self,
268
+ status: str = "online",
269
+ current_assignments: int = 0,
270
+ ) -> bool:
271
+ """Update agent status."""
272
+ return await self._send({
273
+ "type": "status_update",
274
+ "status": status,
275
+ "current_assignments": current_assignments,
276
+ })
@@ -0,0 +1,46 @@
1
+ """Agent SDK models."""
2
+
3
+ from datetime import datetime
4
+ from typing import Any, Dict, List, Optional
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+
9
+ class NodeCertificate(BaseModel):
10
+ """Node certificate structure."""
11
+
12
+ colony_id: str
13
+ node_id: str
14
+ public_key: Optional[str] = None # node_public_key_ed25519 in spec
15
+ issued_at: str # ISO timestamp
16
+ expires_at: Optional[str] = None # ISO timestamp
17
+ signature: str
18
+
19
+
20
+ class AgentConfig(BaseModel):
21
+ """Agent configuration file schema.
22
+
23
+ This is the structure saved to ~/.colony/agent.json after
24
+ running `colony agent connect`.
25
+ """
26
+
27
+ agent_id: str
28
+ node_id: str
29
+ colony_id: str
30
+ websocket_url: Optional[str] = None # For remote mode
31
+ name: str
32
+ capabilities: List[str] = Field(default_factory=list)
33
+ is_primary: bool = False
34
+ max_concurrent: int = 5
35
+ node_cert: Optional[NodeCertificate] = None
36
+ connection_mode: str = "remote"
37
+ registered_at: Optional[str] = None # ISO timestamp
38
+
39
+ # Optional fields
40
+ priority: int = 1
41
+ excluded_types: List[str] = Field(default_factory=list)
42
+ included_types: List[str] = Field(default_factory=list)
43
+ metadata: Dict[str, Any] = Field(default_factory=dict)
44
+
45
+ class Config:
46
+ extra = "allow" # Forward compatibility
@@ -0,0 +1,20 @@
1
+ """Multi-agent support for Colony.
2
+
3
+ Provides:
4
+ - AgentStore: Registry of connected agents
5
+ - InviteStore: Setup code management
6
+ - WebSocketManager: Remote agent connections
7
+ """
8
+
9
+ from .models import Agent, AgentStatus, AgentMetadata
10
+ from .store import AgentStore, InviteStore
11
+ from .websocket import WebSocketManager
12
+
13
+ __all__ = [
14
+ "Agent",
15
+ "AgentStatus",
16
+ "AgentMetadata",
17
+ "AgentStore",
18
+ "InviteStore",
19
+ "WebSocketManager",
20
+ ]