apsimo 1.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (614) hide show
  1. apsimo/__init__.py +38 -0
  2. apsimo/__main__.py +6 -0
  3. apsimo/agent/__init__.py +6 -0
  4. apsimo/agent/client.py +276 -0
  5. apsimo/agent/models.py +46 -0
  6. apsimo/agents/__init__.py +20 -0
  7. apsimo/agents/models.py +264 -0
  8. apsimo/agents/store.py +861 -0
  9. apsimo/agents/websocket.py +522 -0
  10. apsimo/api/__init__.py +1 -0
  11. apsimo/api/auth_telemetry.py +287 -0
  12. apsimo/api/authority.py +1203 -0
  13. apsimo/api/contact_grants.py +347 -0
  14. apsimo/api/middleware.py +483 -0
  15. apsimo/api/routers/__init__.py +1 -0
  16. apsimo/api/routers/commitment_work.py +265 -0
  17. apsimo/api/routers/context_gate.py +123 -0
  18. apsimo/api/routers/executions.py +140 -0
  19. apsimo/api/routers/followup_plans.py +147 -0
  20. apsimo/api/routers/governed_actions.py +162 -0
  21. apsimo/api/routers/host.py +14473 -0
  22. apsimo/api/routers/initiative_work.py +115 -0
  23. apsimo/api/routers/mining.py +104 -0
  24. apsimo/api/routers/observations.py +110 -0
  25. apsimo/api/routers/social_state.py +225 -0
  26. apsimo/api/routers/task_queue.py +2715 -0
  27. apsimo/api/routers/temporal_followups.py +251 -0
  28. apsimo/api/routers/transport.py +110 -0
  29. apsimo/api/routers/transport_ingress_api.py +240 -0
  30. apsimo/api/schemas/__init__.py +1 -0
  31. apsimo/api/schemas/host.py +1949 -0
  32. apsimo/autonomy/cli.py +110 -0
  33. apsimo/autonomy/condition_worker.py +437 -0
  34. apsimo/autonomy/config.py +424 -0
  35. apsimo/autonomy/loop.py +4316 -0
  36. apsimo/autonomy/registry.py +339 -0
  37. apsimo/autonomy/scheduler.py +1822 -0
  38. apsimo/autonomy/synthesis.py +449 -0
  39. apsimo/backup.py +962 -0
  40. apsimo/beliefs/__init__.py +23 -0
  41. apsimo/beliefs/contradictions.py +109 -0
  42. apsimo/beliefs/decay.py +61 -0
  43. apsimo/beliefs/engine.py +479 -0
  44. apsimo/beliefs/models.py +67 -0
  45. apsimo/beliefs/promotion.py +41 -0
  46. apsimo/beliefs/resolve.py +58 -0
  47. apsimo/beliefs/source_claims.py +690 -0
  48. apsimo/beliefs/source_projection.py +883 -0
  49. apsimo/beliefs/source_time.py +208 -0
  50. apsimo/beliefs/store.py +133 -0
  51. apsimo/briefings/aggregators.py +824 -0
  52. apsimo/briefings/composer.py +420 -0
  53. apsimo/briefings/config.py +55 -0
  54. apsimo/briefings/delivery.py +439 -0
  55. apsimo/briefings/engagement.py +97 -0
  56. apsimo/briefings/engine.py +274 -0
  57. apsimo/briefings/enhancer.py +99 -0
  58. apsimo/briefings/models.py +183 -0
  59. apsimo/briefings/scheduler.py +382 -0
  60. apsimo/briefings/store.py +435 -0
  61. apsimo/chain/__init__.py +48 -0
  62. apsimo/chain/block.py +100 -0
  63. apsimo/chain/cli.py +704 -0
  64. apsimo/chain/genesis.py +443 -0
  65. apsimo/chain/identity.py +416 -0
  66. apsimo/chain/keys.py +1025 -0
  67. apsimo/chain/local_keys.py +187 -0
  68. apsimo/chain/manager.py +290 -0
  69. apsimo/chain/node.py +163 -0
  70. apsimo/chain/plugin_transactions.py +371 -0
  71. apsimo/chain/protocol.py +220 -0
  72. apsimo/chain/state_machine.py +676 -0
  73. apsimo/chain/storage.py +503 -0
  74. apsimo/chain/transactions.py +250 -0
  75. apsimo/chain/validation.py +397 -0
  76. apsimo/channels/__init__.py +1 -0
  77. apsimo/channels/manifest.py +31 -0
  78. apsimo/channels/migrations/001_channels_schema.sql +12 -0
  79. apsimo/channels/phone_gateways.py +42 -0
  80. apsimo/channels/presence.py +188 -0
  81. apsimo/channels/router.py +235 -0
  82. apsimo/channels/store.py +231 -0
  83. apsimo/cli.py +2688 -0
  84. apsimo/cognition/__init__.py +11 -0
  85. apsimo/cognition/charter.py +398 -0
  86. apsimo/cognition/drive_governance.py +3530 -0
  87. apsimo/cognition/evidence_pipeline.py +1627 -0
  88. apsimo/cognition/external_events.py +932 -0
  89. apsimo/cognition/goal_spine.py +3488 -0
  90. apsimo/cognition/introspection.py +214 -0
  91. apsimo/cognition/prompt.py +150 -0
  92. apsimo/cognition/runtime.py +108 -0
  93. apsimo/cognition/trigger.py +154 -0
  94. apsimo/commitments/__init__.py +18 -0
  95. apsimo/commitments/local_work.py +355 -0
  96. apsimo/commitments/store.py +1052 -0
  97. apsimo/commitments/work.py +91 -0
  98. apsimo/compat.py +53 -0
  99. apsimo/compression/__init__.py +467 -0
  100. apsimo/connectors/__init__.py +21 -0
  101. apsimo/connectors/base.py +152 -0
  102. apsimo/connectors/caldav_calendar.py +125 -0
  103. apsimo/connectors/fs_documents.py +85 -0
  104. apsimo/connectors/imap_email.py +138 -0
  105. apsimo/connectors/manager.py +218 -0
  106. apsimo/connectors/webhook_pull.py +88 -0
  107. apsimo/contacts/__init__.py +33 -0
  108. apsimo/contacts/comms.py +357 -0
  109. apsimo/contacts/config.py +79 -0
  110. apsimo/contacts/exporters/__init__.py +1 -0
  111. apsimo/contacts/exporters/vcard.py +71 -0
  112. apsimo/contacts/identity_links.py +251 -0
  113. apsimo/contacts/importer.py +280 -0
  114. apsimo/contacts/importers/__init__.py +1 -0
  115. apsimo/contacts/importers/batch.py +43 -0
  116. apsimo/contacts/importers/macos_contacts.py +101 -0
  117. apsimo/contacts/migrations/001_contacts_schema.sql +141 -0
  118. apsimo/contacts/migrations/002_trust_scopes.sql +36 -0
  119. apsimo/contacts/migrations/003_open_gateway_enum.sql +32 -0
  120. apsimo/contacts/migrations/004_contact_provision_operations.sql +18 -0
  121. apsimo/contacts/migrations/005_identity_links.sql +27 -0
  122. apsimo/contacts/models.py +308 -0
  123. apsimo/contacts/scoring.py +16 -0
  124. apsimo/contacts/store.py +1623 -0
  125. apsimo/contacts/transport_ingress.py +252 -0
  126. apsimo/contacts/world_bridge.py +314 -0
  127. apsimo/contextgate/__init__.py +69 -0
  128. apsimo/contextgate/chunker.py +169 -0
  129. apsimo/contextgate/estimate.py +54 -0
  130. apsimo/contextgate/gate.py +313 -0
  131. apsimo/contextgate/retrieve.py +115 -0
  132. apsimo/delivery/__init__.py +16 -0
  133. apsimo/delivery/bridge.py +1260 -0
  134. apsimo/delivery/channels.py +526 -0
  135. apsimo/delivery/classification.py +50 -0
  136. apsimo/delivery/rate_limiter.py +268 -0
  137. apsimo/delivery/reachout_policy.py +206 -0
  138. apsimo/directed/__init__.py +22 -0
  139. apsimo/directed/audit.py +167 -0
  140. apsimo/directed/intake.py +95 -0
  141. apsimo/directed/models.py +191 -0
  142. apsimo/directed/service.py +509 -0
  143. apsimo/directives/__init__.py +25 -0
  144. apsimo/directives/evidence.py +87 -0
  145. apsimo/directives/extractor.py +188 -0
  146. apsimo/directives/guard.py +364 -0
  147. apsimo/directives/models.py +206 -0
  148. apsimo/directives/service.py +372 -0
  149. apsimo/directives/store.py +167 -0
  150. apsimo/doctor.py +2173 -0
  151. apsimo/environment.py +43 -0
  152. apsimo/events/__init__.py +33 -0
  153. apsimo/events/broadcaster.py +98 -0
  154. apsimo/events/bus.py +217 -0
  155. apsimo/events/journal.py +863 -0
  156. apsimo/events/stream.py +131 -0
  157. apsimo/events/types.py +150 -0
  158. apsimo/execution_results.py +357 -0
  159. apsimo/feedback/__init__.py +5 -0
  160. apsimo/feedback/store.py +76 -0
  161. apsimo/feeds/__init__.py +19 -0
  162. apsimo/feeds/cli.py +84 -0
  163. apsimo/feeds/engine.py +437 -0
  164. apsimo/feeds/example-feed.yaml +77 -0
  165. apsimo/feeds/hermes_cron.py +126 -0
  166. apsimo/feeds/manager.py +235 -0
  167. apsimo/feeds/spec.py +250 -0
  168. apsimo/feeds/template.py +202 -0
  169. apsimo/gate/__init__.py +18 -0
  170. apsimo/gate/audit.py +61 -0
  171. apsimo/gate/communication_policy.py +166 -0
  172. apsimo/gate/config.py +72 -0
  173. apsimo/gate/context_provenance.py +170 -0
  174. apsimo/gate/env_risk.py +226 -0
  175. apsimo/gate/guard_audit.py +353 -0
  176. apsimo/gate/layers/__init__.py +1 -0
  177. apsimo/gate/layers/base.py +15 -0
  178. apsimo/gate/layers/l1_recipient.py +66 -0
  179. apsimo/gate/layers/l2_pii.py +134 -0
  180. apsimo/gate/layers/l3_cross_context.py +50 -0
  181. apsimo/gate/layers/l4_trust_tier.py +78 -0
  182. apsimo/gate/layers/l5_injection.py +199 -0
  183. apsimo/gate/layers/l6_review.py +86 -0
  184. apsimo/gate/layers/l7_delay.py +100 -0
  185. apsimo/gate/layers/tom2_epistemic.py +185 -0
  186. apsimo/gate/models.py +64 -0
  187. apsimo/gate/pending_dispatch.py +5 -0
  188. apsimo/gate/pipeline.py +206 -0
  189. apsimo/gate/rejection.py +259 -0
  190. apsimo/gate/response_guard.py +700 -0
  191. apsimo/gate/rulesets/injection_v1.yaml +51 -0
  192. apsimo/gate/surface_policy.py +189 -0
  193. apsimo/gate/taint.py +226 -0
  194. apsimo/genesis.json +9 -0
  195. apsimo/goals/__init__.py +100 -0
  196. apsimo/goals/config.py +38 -0
  197. apsimo/goals/decomposer.py +421 -0
  198. apsimo/goals/engine.py +617 -0
  199. apsimo/goals/inference.py +354 -0
  200. apsimo/goals/models.py +302 -0
  201. apsimo/goals/priority.py +270 -0
  202. apsimo/goals/queue_bridge.py +149 -0
  203. apsimo/goals/replan.py +450 -0
  204. apsimo/goals/schema.sql +89 -0
  205. apsimo/goals/store.py +692 -0
  206. apsimo/governed_actions.py +1708 -0
  207. apsimo/harness_integration/__init__.py +45 -0
  208. apsimo/harness_integration/context.py +41 -0
  209. apsimo/harness_integration/skills.py +231 -0
  210. apsimo/identity/__init__.py +26 -0
  211. apsimo/identity/participants.py +181 -0
  212. apsimo/identity/resolver.py +329 -0
  213. apsimo/identity_bootstrap/__init__.py +5 -0
  214. apsimo/identity_bootstrap/builder.py +208 -0
  215. apsimo/identity_bootstrap/corpus.py +443 -0
  216. apsimo/identity_bootstrap/models.py +54 -0
  217. apsimo/identity_bootstrap/runner.py +353 -0
  218. apsimo/identity_bootstrap/seeders/__init__.py +25 -0
  219. apsimo/identity_bootstrap/seeders/briefings.py +109 -0
  220. apsimo/identity_bootstrap/seeders/chain.py +57 -0
  221. apsimo/identity_bootstrap/seeders/goals.py +128 -0
  222. apsimo/identity_bootstrap/seeders/memory.py +191 -0
  223. apsimo/identity_bootstrap/seeders/neo4j_cognition.py +79 -0
  224. apsimo/identity_bootstrap/seeders/relationship.py +152 -0
  225. apsimo/identity_bootstrap/seeders/sessions.py +67 -0
  226. apsimo/identity_bootstrap/seeders/skills.py +92 -0
  227. apsimo/identity_bootstrap/seeders/task_queue.py +72 -0
  228. apsimo/identity_bootstrap/seeders/world_model.py +143 -0
  229. apsimo/identity_bootstrap/self_query.py +92 -0
  230. apsimo/identity_bootstrap/self_reflection.py +155 -0
  231. apsimo/identity_bootstrap/skill.py +37 -0
  232. apsimo/identity_bootstrap/verifier.py +436 -0
  233. apsimo/initiatives/__init__.py +20 -0
  234. apsimo/initiatives/action_registry.py +454 -0
  235. apsimo/initiatives/approval_authority.py +2105 -0
  236. apsimo/initiatives/approval_policy.py +123 -0
  237. apsimo/initiatives/assignment.py +263 -0
  238. apsimo/initiatives/backup_evidence.py +100 -0
  239. apsimo/initiatives/context_freshness.py +103 -0
  240. apsimo/initiatives/models.py +318 -0
  241. apsimo/initiatives/native_work.py +270 -0
  242. apsimo/initiatives/standing_approvals.py +232 -0
  243. apsimo/initiatives/store.py +1081 -0
  244. apsimo/initiatives/temporal_followup.py +410 -0
  245. apsimo/intelligence/__init__.py +1 -0
  246. apsimo/intelligence/cognition/__init__.py +24 -0
  247. apsimo/intelligence/cognition/gap_detector.py +148 -0
  248. apsimo/intelligence/cognition/metalearner.py +547 -0
  249. apsimo/intelligence/cognition/metrics_collector.py +217 -0
  250. apsimo/intelligence/cognition/performance_index.py +299 -0
  251. apsimo/intelligence/cognition/registry.py +192 -0
  252. apsimo/intelligence/cognition/strategy_adjuster.py +222 -0
  253. apsimo/intelligence/cognition/types.py +16 -0
  254. apsimo/intelligence/components/__init__.py +66 -0
  255. apsimo/intelligence/components/anomaly_detector.py +413 -0
  256. apsimo/intelligence/components/initiative_engine.py +2643 -0
  257. apsimo/intelligence/components/preference_learner.py +521 -0
  258. apsimo/intelligence/components/research_orchestrator.py +358 -0
  259. apsimo/intelligence/components/self_directed_thinker.py +221 -0
  260. apsimo/intelligence/components/self_reflector.py +252 -0
  261. apsimo/intelligence/components/session_continuity.py +154 -0
  262. apsimo/intelligence/components/task_planner.py +320 -0
  263. apsimo/intelligence/components/tool_learner.py +217 -0
  264. apsimo/intelligence/graph/__init__.py +79 -0
  265. apsimo/intelligence/graph/client.py +2483 -0
  266. apsimo/intelligence/graph/consolidator.py +405 -0
  267. apsimo/intelligence/graph/distiller.py +312 -0
  268. apsimo/intelligence/graph/migrations.py +129 -0
  269. apsimo/intelligence/graph/queries.py +248 -0
  270. apsimo/intelligence/graph/recall.py +281 -0
  271. apsimo/intelligence/graph/reconciler.py +144 -0
  272. apsimo/intelligence/graph/schema.py +337 -0
  273. apsimo/intelligence/graph/selection.py +252 -0
  274. apsimo/intelligence/learning/__init__.py +17 -0
  275. apsimo/intelligence/learning/continuous_learner.py +245 -0
  276. apsimo/intelligence/learning/feedback_store.py +321 -0
  277. apsimo/intelligence/mind_model/__init__.py +1 -0
  278. apsimo/intelligence/mind_model/graph_baseline.py +136 -0
  279. apsimo/intelligence/mind_model/signal_collector.py +361 -0
  280. apsimo/intelligence/relationships/__init__.py +11 -0
  281. apsimo/intelligence/relationships/profiler.py +389 -0
  282. apsimo/intelligence/relationships/scorer.py +560 -0
  283. apsimo/intelligence/relationships/signal_floor.py +66 -0
  284. apsimo/intelligence/relationships/trust_tiers.py +300 -0
  285. apsimo/intelligence/synthesis/__init__.py +40 -0
  286. apsimo/intelligence/synthesis/connection_discoverer.py +379 -0
  287. apsimo/intelligence/synthesis/cross_domain_analyzer.py +287 -0
  288. apsimo/intelligence/synthesis/insight_deliverer.py +171 -0
  289. apsimo/intelligence/synthesis/insight_store.py +79 -0
  290. apsimo/intelligence/synthesis/insight_validator.py +183 -0
  291. apsimo/intelligence/synthesis/novelty_scorer.py +267 -0
  292. apsimo/intelligence/turn_middleware/__init__.py +15 -0
  293. apsimo/intelligence/turn_middleware/memory_sync.py +119 -0
  294. apsimo/mcp/__init__.py +41 -0
  295. apsimo/mcp/__main__.py +6 -0
  296. apsimo/mcp/config.py +287 -0
  297. apsimo/mcp/server.py +501 -0
  298. apsimo/migrations.py +187 -0
  299. apsimo/mining/__init__.py +27 -0
  300. apsimo/mining/corpus.py +239 -0
  301. apsimo/mining/escalations.py +289 -0
  302. apsimo/mining/models.py +169 -0
  303. apsimo/mining/store.py +210 -0
  304. apsimo/models/__init__.py +30 -0
  305. apsimo/models/memory.py +80 -0
  306. apsimo/models/mesh.py +72 -0
  307. apsimo/models/person.py +104 -0
  308. apsimo/models/signal.py +108 -0
  309. apsimo/observations/__init__.py +15 -0
  310. apsimo/observations/store.py +277 -0
  311. apsimo/patterns/__init__.py +6 -0
  312. apsimo/patterns/extract.py +187 -0
  313. apsimo/patterns/store.py +227 -0
  314. apsimo/persona/__init__.py +1 -0
  315. apsimo/persona/engine.py +611 -0
  316. apsimo/persona/manifest.py +140 -0
  317. apsimo/projects/__init__.py +28 -0
  318. apsimo/projects/engine.py +1681 -0
  319. apsimo/projects/event_outbox.py +188 -0
  320. apsimo/projects/models.py +216 -0
  321. apsimo/projects/planner.py +181 -0
  322. apsimo/projects/store.py +1446 -0
  323. apsimo/proposals/__init__.py +12 -0
  324. apsimo/proposals/engine.py +114 -0
  325. apsimo/proposals/models.py +207 -0
  326. apsimo/qualification/__init__.py +1 -0
  327. apsimo/qualification/cases.py +75 -0
  328. apsimo/qualification/cli.py +51 -0
  329. apsimo/qualification/memory_cases.py +209 -0
  330. apsimo/qualification/records.py +92 -0
  331. apsimo/qualification/report.py +87 -0
  332. apsimo/qualification/runner.py +311 -0
  333. apsimo/qualification/structured_cases.py +131 -0
  334. apsimo/reasoning/__init__.py +13 -0
  335. apsimo/reasoning/executor.py +506 -0
  336. apsimo/reasoning/loop.py +373 -0
  337. apsimo/reasoning/native_tools/__init__.py +16 -0
  338. apsimo/reasoning/native_tools/calculate.py +141 -0
  339. apsimo/reasoning/native_tools/file_ops.py +150 -0
  340. apsimo/reasoning/native_tools/web_search.py +49 -0
  341. apsimo/reasoning/tool_policy.py +182 -0
  342. apsimo/redact/__init__.py +176 -0
  343. apsimo/repos/__init__.py +5 -0
  344. apsimo/repos/mirrors.py +204 -0
  345. apsimo/research/__init__.py +41 -0
  346. apsimo/research/artifact.py +482 -0
  347. apsimo/research/gatherer.py +387 -0
  348. apsimo/research/pipeline.py +513 -0
  349. apsimo/research/search/__init__.py +7 -0
  350. apsimo/research/search/base.py +41 -0
  351. apsimo/research/search/brave.py +59 -0
  352. apsimo/research/search/cache.py +51 -0
  353. apsimo/research/search/duckduckgo.py +103 -0
  354. apsimo/research/search/orchestrator.py +119 -0
  355. apsimo/research/search/serpapi.py +59 -0
  356. apsimo/research/search/tavily.py +59 -0
  357. apsimo/research/synthesizer.py +309 -0
  358. apsimo/router/__init__.py +30 -0
  359. apsimo/router/complexity_scorer.py +148 -0
  360. apsimo/router/endpoints.py +153 -0
  361. apsimo/router/fallback.py +58 -0
  362. apsimo/router/functions.py +243 -0
  363. apsimo/router/native_policy.py +52 -0
  364. apsimo/router/router.py +762 -0
  365. apsimo/router/self_learning.py +174 -0
  366. apsimo/router/tiers.py +677 -0
  367. apsimo/sandbox/__init__.py +21 -0
  368. apsimo/sandbox/backend.py +195 -0
  369. apsimo/sandbox/manager.py +173 -0
  370. apsimo/scope_bounds.py +7 -0
  371. apsimo/secrets/__init__.py +6 -0
  372. apsimo/secrets/backends/__init__.py +8 -0
  373. apsimo/secrets/backends/base.py +42 -0
  374. apsimo/secrets/backends/env.py +110 -0
  375. apsimo/secrets/backends/keyring.py +72 -0
  376. apsimo/secrets/backends/onepassword.py +232 -0
  377. apsimo/secrets/cli.py +191 -0
  378. apsimo/secrets/manager.py +160 -0
  379. apsimo/secrets/migration.py +101 -0
  380. apsimo/secrets/types.py +98 -0
  381. apsimo/seed.py +41 -0
  382. apsimo/self_model/__init__.py +37 -0
  383. apsimo/self_model/appraisals.py +673 -0
  384. apsimo/self_model/benchmark.py +1314 -0
  385. apsimo/self_model/brief.py +40 -0
  386. apsimo/self_model/event_concerns.py +1128 -0
  387. apsimo/self_model/execution_forecasts.py +353 -0
  388. apsimo/self_model/expectations.py +1595 -0
  389. apsimo/self_model/experiments.py +1150 -0
  390. apsimo/self_model/journal.py +148 -0
  391. apsimo/self_model/judgments.py +705 -0
  392. apsimo/self_model/native_outcomes.py +55 -0
  393. apsimo/self_model/params.py +220 -0
  394. apsimo/self_model/perspective.py +246 -0
  395. apsimo/self_model/reconcile.py +183 -0
  396. apsimo/self_model/reply_forecasts.py +381 -0
  397. apsimo/self_model/runtime_forecasts.py +296 -0
  398. apsimo/self_model/runtime_models.py +67 -0
  399. apsimo/self_model/settlement.py +207 -0
  400. apsimo/self_model/situation.py +1731 -0
  401. apsimo/self_model/store.py +883 -0
  402. apsimo/self_model/supervised.py +137 -0
  403. apsimo/self_model/thinker.py +99 -0
  404. apsimo/self_model/trust.py +388 -0
  405. apsimo/self_model/workspace.py +2388 -0
  406. apsimo/server.py +4197 -0
  407. apsimo/services/__init__.py +1 -0
  408. apsimo/services/agent_bridge.py +474 -0
  409. apsimo/services/initiative_executor.py +914 -0
  410. apsimo/services/instance.py +297 -0
  411. apsimo/sessions/__init__.py +22 -0
  412. apsimo/sessions/config.py +13 -0
  413. apsimo/sessions/context_loader.py +88 -0
  414. apsimo/sessions/federation_session.py +75 -0
  415. apsimo/sessions/isolated_session.py +98 -0
  416. apsimo/sessions/reports.py +84 -0
  417. apsimo/sessions/store.py +148 -0
  418. apsimo/setup.py +2818 -0
  419. apsimo/setup_hermes.py +879 -0
  420. apsimo/setup_local_work.py +218 -0
  421. apsimo/setup_native_goals.py +134 -0
  422. apsimo/setup_native_reviews.py +115 -0
  423. apsimo/skills/__init__.py +10 -0
  424. apsimo/skills/base.py +108 -0
  425. apsimo/skills/budget.py +28 -0
  426. apsimo/skills/executor.py +493 -0
  427. apsimo/skills/executors/__init__.py +1 -0
  428. apsimo/skills/executors/behavioral_correction.py +75 -0
  429. apsimo/skills/executors/capability_gap.py +38 -0
  430. apsimo/skills/executors/data_quality.py +163 -0
  431. apsimo/skills/executors/knowledge_acquisition.py +41 -0
  432. apsimo/skills/executors/operational_hygiene.py +185 -0
  433. apsimo/skills/executors/subsystem_health.py +169 -0
  434. apsimo/skills/hermes_export.py +431 -0
  435. apsimo/skills/index.py +123 -0
  436. apsimo/skills/learning/__init__.py +21 -0
  437. apsimo/skills/learning/novelty_detector.py +206 -0
  438. apsimo/skills/learning/pattern_extractor.py +199 -0
  439. apsimo/skills/learning/triggers.py +159 -0
  440. apsimo/skills/loader.py +246 -0
  441. apsimo/skills/migrations/002_progressive_loading.sql +6 -0
  442. apsimo/skills/migrations/backfill_triggers.py +20 -0
  443. apsimo/skills/models.py +202 -0
  444. apsimo/skills/packager.py +128 -0
  445. apsimo/skills/protocols.py +70 -0
  446. apsimo/skills/registry.py +191 -0
  447. apsimo/skills/runtime.py +58 -0
  448. apsimo/skills/sandbox_runner.py +229 -0
  449. apsimo/skills/scheduler.py +129 -0
  450. apsimo/skills/schema.py +79 -0
  451. apsimo/skills/security/__init__.py +12 -0
  452. apsimo/skills/security/guards.py +53 -0
  453. apsimo/skills/security/scanner.py +223 -0
  454. apsimo/skills_memory/__init__.py +26 -0
  455. apsimo/skills_memory/distill.py +159 -0
  456. apsimo/skills_memory/models.py +85 -0
  457. apsimo/skills_memory/retrieve.py +62 -0
  458. apsimo/skills_memory/store.py +172 -0
  459. apsimo/surprise/__init__.py +6 -0
  460. apsimo/surprise/accumulation.py +57 -0
  461. apsimo/surprise/scorer.py +102 -0
  462. apsimo/surprise/store.py +203 -0
  463. apsimo/task_queue/__init__.py +69 -0
  464. apsimo/task_queue/action_receipts.py +148 -0
  465. apsimo/task_queue/approval_relay_canary.py +108 -0
  466. apsimo/task_queue/config.py +85 -0
  467. apsimo/task_queue/contract.py +361 -0
  468. apsimo/task_queue/events.py +130 -0
  469. apsimo/task_queue/governor.py +1031 -0
  470. apsimo/task_queue/handlers/__init__.py +16 -0
  471. apsimo/task_queue/handlers/base.py +37 -0
  472. apsimo/task_queue/handlers/inference.py +640 -0
  473. apsimo/task_queue/handlers/monitoring.py +116 -0
  474. apsimo/task_queue/handlers/registry.py +75 -0
  475. apsimo/task_queue/handlers/subtask_handler.py +173 -0
  476. apsimo/task_queue/handlers/system_maintenance.py +147 -0
  477. apsimo/task_queue/mesh_integration.py +111 -0
  478. apsimo/task_queue/models.py +317 -0
  479. apsimo/task_queue/queue_manager.py +8286 -0
  480. apsimo/task_queue/routing.py +287 -0
  481. apsimo/task_queue/scheduler.py +252 -0
  482. apsimo/task_queue/schema.sql +197 -0
  483. apsimo/task_queue/work_control.py +342 -0
  484. apsimo/task_queue/worker.py +993 -0
  485. apsimo/telemetry.py +145 -0
  486. apsimo/tom/__init__.py +6 -0
  487. apsimo/tom/affect.py +387 -0
  488. apsimo/tom/approvals.py +171 -0
  489. apsimo/tom/arcs.py +896 -0
  490. apsimo/tom/asymmetry.py +131 -0
  491. apsimo/tom/eligibility.py +248 -0
  492. apsimo/tom/engagement.py +214 -0
  493. apsimo/tom/exposure.py +214 -0
  494. apsimo/tom/extractor.py +306 -0
  495. apsimo/tom/fact_adapters.py +144 -0
  496. apsimo/tom/facts.py +326 -0
  497. apsimo/tom/integration.py +592 -0
  498. apsimo/tom/leveled.py +118 -0
  499. apsimo/tom/levels.py +247 -0
  500. apsimo/tom/recipient_audit.py +995 -0
  501. apsimo/tom/recipient_simulator.py +593 -0
  502. apsimo/tom/source_lineage.py +93 -0
  503. apsimo/tom/tom2.py +277 -0
  504. apsimo/tom/visibility.py +559 -0
  505. apsimo/tom/visibility_store.py +414 -0
  506. apsimo/tools/__init__.py +0 -0
  507. apsimo/tools/definitions.py +740 -0
  508. apsimo/tools/handlers.py +943 -0
  509. apsimo/toolsmith/__init__.py +26 -0
  510. apsimo/toolsmith/authority.py +166 -0
  511. apsimo/toolsmith/engine.py +559 -0
  512. apsimo/toolsmith/integrity.py +100 -0
  513. apsimo/toolsmith/miner.py +145 -0
  514. apsimo/toolsmith/policy.py +110 -0
  515. apsimo/toolsmith/registry.py +635 -0
  516. apsimo/turns/__init__.py +17 -0
  517. apsimo/turns/audio.py +134 -0
  518. apsimo/turns/documents.py +235 -0
  519. apsimo/turns/executions.py +486 -0
  520. apsimo/turns/hermes_history.py +245 -0
  521. apsimo/turns/hermes_kanban.py +268 -0
  522. apsimo/turns/hermes_work.py +96 -0
  523. apsimo/turns/idempotency.py +752 -0
  524. apsimo/turns/local_work.py +115 -0
  525. apsimo/turns/media.py +581 -0
  526. apsimo/turns/reported_workers.py +196 -0
  527. apsimo/turns/source_annotations.py +283 -0
  528. apsimo/turns/source_attribution.py +154 -0
  529. apsimo/turns/source_read.py +351 -0
  530. apsimo/turns/source_vectors.py +263 -0
  531. apsimo/turns/video.py +210 -0
  532. apsimo/util/autonomy_preset.py +220 -0
  533. apsimo/util/instance.py +92 -0
  534. apsimo/util/model_output.py +25 -0
  535. apsimo/util/quiet_hours.py +27 -0
  536. apsimo/util/session_safety.py +37 -0
  537. apsimo/util/temporal.py +343 -0
  538. apsimo/vector/__init__.py +75 -0
  539. apsimo/vector/backfill.py +171 -0
  540. apsimo/vector/caption.py +114 -0
  541. apsimo/vector/collections.py +51 -0
  542. apsimo/vector/config.py +102 -0
  543. apsimo/vector/embedder.py +670 -0
  544. apsimo/vector/image_preprocess.py +406 -0
  545. apsimo/vector/image_store.py +296 -0
  546. apsimo/vector/indexes.py +162 -0
  547. apsimo/vector/migrate.py +334 -0
  548. apsimo/vector/multimodal_provider.py +417 -0
  549. apsimo/vector/multimodal_types.py +87 -0
  550. apsimo/vector/openai_provider.py +119 -0
  551. apsimo/vector/query.py +49 -0
  552. apsimo/vector/reranker.py +565 -0
  553. apsimo/vector/safety_image.py +159 -0
  554. apsimo/vector/scanner.py +197 -0
  555. apsimo/vector/setup.py +289 -0
  556. apsimo/vector/store.py +533 -0
  557. apsimo/vector/tiers.py +263 -0
  558. apsimo/work_orders.py +925 -0
  559. apsimo/workers/__init__.py +21 -0
  560. apsimo/workers/agent_bridge.py +640 -0
  561. apsimo/workers/colony_worker.py +382 -0
  562. apsimo/workers/queue_worker.py +441 -0
  563. apsimo/workers/skills_sync.py +152 -0
  564. apsimo/world_model/__init__.py +71 -0
  565. apsimo/world_model/causal_maintenance.py +131 -0
  566. apsimo/world_model/causal_policy.py +43 -0
  567. apsimo/world_model/causal_query.py +125 -0
  568. apsimo/world_model/confidence.py +54 -0
  569. apsimo/world_model/config.py +64 -0
  570. apsimo/world_model/constants.py +97 -0
  571. apsimo/world_model/entities.py +145 -0
  572. apsimo/world_model/expectation_resolvers.py +177 -0
  573. apsimo/world_model/extraction/__init__.py +7 -0
  574. apsimo/world_model/extraction/base.py +62 -0
  575. apsimo/world_model/extraction/conversation_extractor.py +262 -0
  576. apsimo/world_model/extraction/detector.py +74 -0
  577. apsimo/world_model/extraction/document_extractor.py +78 -0
  578. apsimo/world_model/extraction/formats/__init__.py +24 -0
  579. apsimo/world_model/extraction/formats/csv_fmt.py +68 -0
  580. apsimo/world_model/extraction/formats/html_fmt.py +72 -0
  581. apsimo/world_model/extraction/formats/json_fmt.py +68 -0
  582. apsimo/world_model/extraction/formats/pdf.py +43 -0
  583. apsimo/world_model/extraction/formats/text.py +27 -0
  584. apsimo/world_model/extraction/llm_extractor.py +164 -0
  585. apsimo/world_model/extraction/pipeline.py +73 -0
  586. apsimo/world_model/integrations/__init__.py +5 -0
  587. apsimo/world_model/integrations/mind_model_bridge.py +115 -0
  588. apsimo/world_model/integrations/social_intel_bridge.py +120 -0
  589. apsimo/world_model/jobs/__init__.py +4 -0
  590. apsimo/world_model/jobs/extraction_job.py +168 -0
  591. apsimo/world_model/llm_extract.py +572 -0
  592. apsimo/world_model/neo4j/__init__.py +5 -0
  593. apsimo/world_model/neo4j/backend.py +654 -0
  594. apsimo/world_model/observations.py +155 -0
  595. apsimo/world_model/populator.py +307 -0
  596. apsimo/world_model/postgres/__init__.py +1 -0
  597. apsimo/world_model/postgres/backend.py +683 -0
  598. apsimo/world_model/relationships.py +25 -0
  599. apsimo/world_model/resolution/__init__.py +13 -0
  600. apsimo/world_model/resolution/entity_resolver.py +232 -0
  601. apsimo/world_model/resolution/merge_audit.py +16 -0
  602. apsimo/world_model/resolution/merge_workflow.py +117 -0
  603. apsimo/world_model/source_reports.py +121 -0
  604. apsimo/world_model/sqlite/__init__.py +4 -0
  605. apsimo/world_model/sqlite/backend.py +855 -0
  606. apsimo/world_model/sqlite/schema.sql +132 -0
  607. apsimo/world_model/store.py +545 -0
  608. apsimo-1.3.0.dist-info/METADATA +78 -0
  609. apsimo-1.3.0.dist-info/RECORD +614 -0
  610. apsimo-1.3.0.dist-info/WHEEL +5 -0
  611. apsimo-1.3.0.dist-info/entry_points.txt +11 -0
  612. apsimo-1.3.0.dist-info/licenses/LICENSE +21 -0
  613. apsimo-1.3.0.dist-info/top_level.txt +2 -0
  614. colony_sidecar/__init__.py +4 -0
@@ -0,0 +1,436 @@
1
+ """Colony Identity Bootstrap — 16-point self-check matrix.
2
+
3
+ Each check method returns Optional[BootstrapAnomaly].
4
+ None = pass, anomaly object = failure.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import logging
10
+ from typing import Any, List, Optional
11
+
12
+ from apsimo.identity_bootstrap.models import BootstrapAnomaly
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class BootstrapVerifier:
18
+ """Runs 16 self-checks against live Colony subsystems."""
19
+
20
+ def __init__(self, corpus: Any, colony_graph: Optional[Any] = None) -> None:
21
+ self._corpus = corpus
22
+ self._graph = colony_graph
23
+
24
+ async def run_all(self) -> List[BootstrapAnomaly]:
25
+ """Run all checks; return list of anomalies (empty = all passed)."""
26
+ checks = [
27
+ self._check_wm_self_entity,
28
+ self._check_wm_subsystem_count,
29
+ self._check_wm_part_of_relationships,
30
+ self._check_wm_depends_on_relationships,
31
+ self._check_contacts_self_entry,
32
+ self._check_memory_identity,
33
+ self._check_memory_architecture,
34
+ self._check_memory_safety,
35
+ self._check_memory_cognition,
36
+ self._check_goals_bootstrap_present,
37
+ self._check_briefing_present,
38
+ self._check_session_present,
39
+ self._check_corpus_layer_count,
40
+ self._check_corpus_gate_layers,
41
+ self._check_corpus_inference_tiers,
42
+ self._check_corpus_cognition_phases,
43
+ self._check_corpus_api_endpoints,
44
+ self._check_colony_id_consistent,
45
+ ]
46
+
47
+ anomalies: List[BootstrapAnomaly] = []
48
+ for check_fn in checks:
49
+ try:
50
+ anomaly = await check_fn()
51
+ if anomaly is not None:
52
+ anomalies.append(anomaly)
53
+ except Exception as exc:
54
+ logger.warning("verifier: check %s raised: %s", check_fn.__name__, exc)
55
+ anomalies.append(BootstrapAnomaly(
56
+ system="verifier",
57
+ check=check_fn.__name__,
58
+ expected="no exception",
59
+ actual=str(exc),
60
+ severity="WARNING",
61
+ ))
62
+ return anomalies
63
+
64
+ # ── Check 1: world model self entity ──────────────────────────────────────
65
+
66
+ async def _check_wm_self_entity(self) -> Optional[BootstrapAnomaly]:
67
+ try:
68
+ import colony.api.routers.world as wm_mod
69
+ backend = getattr(wm_mod, "_wm_backend", None)
70
+ if backend is None:
71
+ return None # WM not available — skip
72
+ entity = await backend.get_entity(f"colony-self-{self._corpus.colony_id}")
73
+ if entity is None:
74
+ return BootstrapAnomaly(
75
+ system="world_model",
76
+ check="self_entity_exists",
77
+ expected=f"colony-self-{self._corpus.colony_id}",
78
+ actual="not found",
79
+ severity="CRITICAL",
80
+ )
81
+ except Exception as exc:
82
+ logger.debug("check_wm_self_entity: %s", exc)
83
+ return None
84
+
85
+ # ── Check 2: subsystem entity count ───────────────────────────────────────
86
+
87
+ async def _check_wm_subsystem_count(self) -> Optional[BootstrapAnomaly]:
88
+ try:
89
+ import colony.api.routers.world as wm_mod
90
+ from apsimo.identity_bootstrap.corpus import SUBSYSTEMS
91
+ backend = getattr(wm_mod, "_wm_backend", None)
92
+ if backend is None:
93
+ return None
94
+ colony_id = self._corpus.colony_id
95
+ found = 0
96
+ for sub in SUBSYSTEMS:
97
+ ent = await backend.get_entity(f"colony-subsystem-{colony_id}-{sub}")
98
+ if ent is not None:
99
+ found += 1
100
+ expected = len(SUBSYSTEMS)
101
+ if found < expected:
102
+ return BootstrapAnomaly(
103
+ system="world_model",
104
+ check="subsystem_count",
105
+ expected=str(expected),
106
+ actual=str(found),
107
+ severity="WARNING",
108
+ )
109
+ except Exception as exc:
110
+ logger.debug("check_wm_subsystem_count: %s", exc)
111
+ return None
112
+
113
+ # ── Check 3: WM_PART_OF relationships ─────────────────────────────────────
114
+
115
+ async def _check_wm_part_of_relationships(self) -> Optional[BootstrapAnomaly]:
116
+ try:
117
+ import colony.api.routers.world as wm_mod
118
+ backend = getattr(wm_mod, "_wm_backend", None)
119
+ if backend is None:
120
+ return None
121
+ # Use find_entities to verify the self entity has neighbors
122
+ self_id = f"colony-self-{self._corpus.colony_id}"
123
+ neighbors = await backend.get_neighbors(self_id)
124
+ if not neighbors:
125
+ return BootstrapAnomaly(
126
+ system="world_model",
127
+ check="part_of_relationships",
128
+ expected="at least 1 WM_PART_OF neighbor",
129
+ actual="0 neighbors",
130
+ severity="WARNING",
131
+ )
132
+ except Exception as exc:
133
+ logger.debug("check_wm_part_of_relationships: %s", exc)
134
+ return None
135
+
136
+ # ── Check 4: WM_DEPENDS_ON relationships ──────────────────────────────────
137
+
138
+ async def _check_wm_depends_on_relationships(self) -> Optional[BootstrapAnomaly]:
139
+ try:
140
+ from apsimo.world_model.constants import RELATIONSHIP_TYPES
141
+ if "WM_DEPENDS_ON" not in RELATIONSHIP_TYPES:
142
+ return BootstrapAnomaly(
143
+ system="world_model",
144
+ check="depends_on_in_constants",
145
+ expected="WM_DEPENDS_ON in RELATIONSHIP_TYPES",
146
+ actual="not present",
147
+ severity="CRITICAL",
148
+ )
149
+ except Exception as exc:
150
+ logger.debug("check_wm_depends_on: %s", exc)
151
+ return None
152
+
153
+ # ── Check 5: self contact ─────────────────────────────────────────────────
154
+
155
+ async def _check_contacts_self_entry(self) -> Optional[BootstrapAnomaly]:
156
+ try:
157
+ import colony.api.routers.contacts as contacts_mod
158
+ store = getattr(contacts_mod, "_contact_store", None)
159
+ contact_id = f"self:{self._corpus.colony_id}"
160
+ if store is not None:
161
+ contact = await store.get(contact_id)
162
+ if contact is None:
163
+ # Check fallback
164
+ in_mem = getattr(contacts_mod, "_store", {})
165
+ if contact_id not in in_mem:
166
+ return BootstrapAnomaly(
167
+ system="contacts",
168
+ check="self_contact_exists",
169
+ expected=contact_id,
170
+ actual="not found",
171
+ severity="WARNING",
172
+ )
173
+ else:
174
+ in_mem = getattr(contacts_mod, "_store", {})
175
+ if contact_id not in in_mem:
176
+ return BootstrapAnomaly(
177
+ system="contacts",
178
+ check="self_contact_exists",
179
+ expected=contact_id,
180
+ actual="not found",
181
+ severity="WARNING",
182
+ )
183
+ except Exception as exc:
184
+ logger.debug("check_contacts_self_entry: %s", exc)
185
+ return None
186
+
187
+ # ── Check 6: identity memory ──────────────────────────────────────────────
188
+
189
+ async def _check_memory_identity(self) -> Optional[BootstrapAnomaly]:
190
+ mem_id = f"mem-bootstrap-identity-{self._corpus.colony_id[:8]}"
191
+ found = await self._check_memory_in_graph(mem_id)
192
+ if not found:
193
+ return BootstrapAnomaly(
194
+ system="memory",
195
+ check="identity_memory_exists",
196
+ expected=mem_id,
197
+ actual="not found",
198
+ severity="WARNING",
199
+ )
200
+ return None
201
+
202
+ # ── Check 7: architecture memory ──────────────────────────────────────────
203
+
204
+ async def _check_memory_architecture(self) -> Optional[BootstrapAnomaly]:
205
+ mem_id = f"mem-bootstrap-architecture-{self._corpus.colony_id[:8]}"
206
+ found = await self._check_memory_in_graph(mem_id)
207
+ if not found:
208
+ return BootstrapAnomaly(
209
+ system="memory",
210
+ check="architecture_memory_exists",
211
+ expected=mem_id,
212
+ actual="not found",
213
+ severity="WARNING",
214
+ )
215
+ return None
216
+
217
+ # ── Check 7b: safety gate memory ─────────────────────────────────────────
218
+
219
+ async def _check_memory_safety(self) -> Optional[BootstrapAnomaly]:
220
+ mem_id = f"mem-bootstrap-safety-{self._corpus.colony_id[:8]}"
221
+ found = await self._check_memory_in_graph(mem_id)
222
+ if not found:
223
+ return BootstrapAnomaly(
224
+ system="memory",
225
+ check="safety_memory_exists",
226
+ expected=mem_id,
227
+ actual="not found",
228
+ severity="WARNING",
229
+ )
230
+ return None
231
+
232
+ # ── Check 7c: cognition memory ───────────────────────────────────────────
233
+
234
+ async def _check_memory_cognition(self) -> Optional[BootstrapAnomaly]:
235
+ mem_id = f"mem-bootstrap-cognition-{self._corpus.colony_id[:8]}"
236
+ found = await self._check_memory_in_graph(mem_id)
237
+ if not found:
238
+ return BootstrapAnomaly(
239
+ system="memory",
240
+ check="cognition_memory_exists",
241
+ expected=mem_id,
242
+ actual="not found",
243
+ severity="WARNING",
244
+ )
245
+ return None
246
+
247
+ # ── Helper: check for bootstrap memory in Neo4j ──────────────────────────
248
+
249
+ async def _check_memory_in_graph(self, bootstrap_id: str) -> bool:
250
+ """Check Neo4j for a bootstrap memory, fall back to API dict."""
251
+ # Try Neo4j graph first (canonical store)
252
+ try:
253
+ import colony.api.server as server_mod
254
+ # Prefer the graph passed directly to the verifier, then server module
255
+ graph = self._graph or getattr(server_mod, "_colony_graph", None)
256
+ if graph is not None and hasattr(graph, "driver"):
257
+ async with graph.driver.session(database=graph.database) as session:
258
+ result = await session.run(
259
+ "MATCH (m:Memory) WHERE m.metadata CONTAINS $tag "
260
+ "RETURN count(m) > 0 AS found",
261
+ tag=bootstrap_id,
262
+ )
263
+ record = await result.single()
264
+ if record is not None and record["found"]:
265
+ return True
266
+ except Exception as exc:
267
+ logger.debug("_check_memory_in_graph neo4j: %s", exc)
268
+
269
+ # Fallback: check the API router in-memory dict
270
+ try:
271
+ import colony.api.routers.memory as memory_mod
272
+ store = getattr(memory_mod, "_store", {})
273
+ if bootstrap_id in store:
274
+ return True
275
+ except Exception as exc:
276
+ logger.debug("_check_memory_in_graph dict: %s", exc)
277
+
278
+ return False
279
+
280
+ # ── Check 8: bootstrap goal present ───────────────────────────────────────
281
+
282
+ async def _check_goals_bootstrap_present(self) -> Optional[BootstrapAnomaly]:
283
+ try:
284
+ from apsimo.goals.store import GoalStore
285
+ store = GoalStore.get_instance()
286
+ goal_id = f"goal-bootstrap-selfknowledge-{self._corpus.colony_id[:8]}"
287
+ goal = store.get_goal(goal_id)
288
+ if goal is None:
289
+ return BootstrapAnomaly(
290
+ system="goals",
291
+ check="bootstrap_goal_exists",
292
+ expected=goal_id,
293
+ actual="not found",
294
+ severity="WARNING",
295
+ )
296
+ except Exception as exc:
297
+ logger.debug("check_goals_bootstrap_present: %s", exc)
298
+ return None
299
+
300
+ # ── Check 9: welcome briefing ─────────────────────────────────────────────
301
+
302
+ async def _check_briefing_present(self) -> Optional[BootstrapAnomaly]:
303
+ try:
304
+ from apsimo.briefings.store import BriefingStore
305
+ store = BriefingStore.get_instance()
306
+ briefing_id = f"briefing-bootstrap-{self._corpus.colony_id[:8]}"
307
+ briefing = store.get(briefing_id)
308
+ if briefing is None:
309
+ return BootstrapAnomaly(
310
+ system="briefings",
311
+ check="welcome_briefing_exists",
312
+ expected=briefing_id,
313
+ actual="not found",
314
+ severity="WARNING",
315
+ )
316
+ except Exception as exc:
317
+ logger.debug("check_briefing_present: %s", exc)
318
+ return None
319
+
320
+ # ── Check 10: bootstrap session ───────────────────────────────────────────
321
+
322
+ async def _check_session_present(self) -> Optional[BootstrapAnomaly]:
323
+ try:
324
+ import colony.api.routers.sessions as sessions_mod
325
+ session_id = f"sess-bootstrap-{self._corpus.colony_id[:8]}"
326
+ db = getattr(sessions_mod, "_db_backend", None)
327
+ if db is not None:
328
+ row = db.get(session_id)
329
+ if row is None:
330
+ return BootstrapAnomaly(
331
+ system="sessions",
332
+ check="bootstrap_session_exists",
333
+ expected=session_id,
334
+ actual="not found in sqlite",
335
+ severity="WARNING",
336
+ )
337
+ else:
338
+ in_mem = getattr(sessions_mod, "_store", {})
339
+ if session_id not in in_mem:
340
+ return BootstrapAnomaly(
341
+ system="sessions",
342
+ check="bootstrap_session_exists",
343
+ expected=session_id,
344
+ actual="not found in memory",
345
+ severity="WARNING",
346
+ )
347
+ except Exception as exc:
348
+ logger.debug("check_session_present: %s", exc)
349
+ return None
350
+
351
+ # ── Check 11: corpus layer count ──────────────────────────────────────────
352
+
353
+ async def _check_corpus_layer_count(self) -> Optional[BootstrapAnomaly]:
354
+ expected = 10
355
+ actual = len(self._corpus.layers)
356
+ if actual != expected:
357
+ return BootstrapAnomaly(
358
+ system="corpus",
359
+ check="layer_count",
360
+ expected=str(expected),
361
+ actual=str(actual),
362
+ severity="WARNING",
363
+ )
364
+ return None
365
+
366
+ # ── Check 12: gate layers ─────────────────────────────────────────────────
367
+
368
+ async def _check_corpus_gate_layers(self) -> Optional[BootstrapAnomaly]:
369
+ expected = 7
370
+ actual = len(self._corpus.gate_layers)
371
+ if actual != expected:
372
+ return BootstrapAnomaly(
373
+ system="corpus",
374
+ check="gate_layer_count",
375
+ expected=str(expected),
376
+ actual=str(actual),
377
+ severity="WARNING",
378
+ )
379
+ return None
380
+
381
+ # ── Check 13: inference tiers ─────────────────────────────────────────────
382
+
383
+ async def _check_corpus_inference_tiers(self) -> Optional[BootstrapAnomaly]:
384
+ expected = 4
385
+ actual = len(self._corpus.inference_tiers)
386
+ if actual != expected:
387
+ return BootstrapAnomaly(
388
+ system="corpus",
389
+ check="inference_tier_count",
390
+ expected=str(expected),
391
+ actual=str(actual),
392
+ severity="WARNING",
393
+ )
394
+ return None
395
+
396
+ # ── Check 14: cognition phases ────────────────────────────────────────────
397
+
398
+ async def _check_corpus_cognition_phases(self) -> Optional[BootstrapAnomaly]:
399
+ expected = 8
400
+ actual = len(self._corpus.cognition_phases)
401
+ if actual != expected:
402
+ return BootstrapAnomaly(
403
+ system="corpus",
404
+ check="cognition_phase_count",
405
+ expected=str(expected),
406
+ actual=str(actual),
407
+ severity="WARNING",
408
+ )
409
+ return None
410
+
411
+ # ── Check 15: API endpoints ───────────────────────────────────────────────
412
+
413
+ async def _check_corpus_api_endpoints(self) -> Optional[BootstrapAnomaly]:
414
+ if len(self._corpus.api_endpoints) < 80:
415
+ return BootstrapAnomaly(
416
+ system="corpus",
417
+ check="api_endpoint_count",
418
+ expected=">=80",
419
+ actual=str(len(self._corpus.api_endpoints)),
420
+ severity="WARNING",
421
+ )
422
+ return None
423
+
424
+ # ── Check 16: colony_id consistency ───────────────────────────────────────
425
+
426
+ async def _check_colony_id_consistent(self) -> Optional[BootstrapAnomaly]:
427
+ colony_id = self._corpus.colony_id
428
+ if not colony_id or colony_id == "unknown":
429
+ return BootstrapAnomaly(
430
+ system="corpus",
431
+ check="colony_id_set",
432
+ expected="non-empty colony_id",
433
+ actual=repr(colony_id),
434
+ severity="CRITICAL",
435
+ )
436
+ return None
@@ -0,0 +1,20 @@
1
+ """Initiative persistence for multi-agent Colony.
2
+
3
+ Provides:
4
+ - InitiativeStore: SQLite persistence for initiatives
5
+ - AssignmentHistory tracking
6
+ - Dead letter queue
7
+ - AssignmentEngine: Agent selection for initiatives
8
+ """
9
+
10
+ from .models import InitiativeStatus, StoredInitiative
11
+ from .store import InitiativeStore
12
+ from .assignment import AssignmentEngine, INITIATIVE_CAPABILITIES
13
+
14
+ __all__ = [
15
+ "InitiativeStatus",
16
+ "StoredInitiative",
17
+ "InitiativeStore",
18
+ "AssignmentEngine",
19
+ "INITIATIVE_CAPABILITIES",
20
+ ]