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.
- apsimo/__init__.py +38 -0
- apsimo/__main__.py +6 -0
- apsimo/agent/__init__.py +6 -0
- apsimo/agent/client.py +276 -0
- apsimo/agent/models.py +46 -0
- apsimo/agents/__init__.py +20 -0
- apsimo/agents/models.py +264 -0
- apsimo/agents/store.py +861 -0
- apsimo/agents/websocket.py +522 -0
- apsimo/api/__init__.py +1 -0
- apsimo/api/auth_telemetry.py +287 -0
- apsimo/api/authority.py +1203 -0
- apsimo/api/contact_grants.py +347 -0
- apsimo/api/middleware.py +483 -0
- apsimo/api/routers/__init__.py +1 -0
- apsimo/api/routers/commitment_work.py +265 -0
- apsimo/api/routers/context_gate.py +123 -0
- apsimo/api/routers/executions.py +140 -0
- apsimo/api/routers/followup_plans.py +147 -0
- apsimo/api/routers/governed_actions.py +162 -0
- apsimo/api/routers/host.py +14473 -0
- apsimo/api/routers/initiative_work.py +115 -0
- apsimo/api/routers/mining.py +104 -0
- apsimo/api/routers/observations.py +110 -0
- apsimo/api/routers/social_state.py +225 -0
- apsimo/api/routers/task_queue.py +2715 -0
- apsimo/api/routers/temporal_followups.py +251 -0
- apsimo/api/routers/transport.py +110 -0
- apsimo/api/routers/transport_ingress_api.py +240 -0
- apsimo/api/schemas/__init__.py +1 -0
- apsimo/api/schemas/host.py +1949 -0
- apsimo/autonomy/cli.py +110 -0
- apsimo/autonomy/condition_worker.py +437 -0
- apsimo/autonomy/config.py +424 -0
- apsimo/autonomy/loop.py +4316 -0
- apsimo/autonomy/registry.py +339 -0
- apsimo/autonomy/scheduler.py +1822 -0
- apsimo/autonomy/synthesis.py +449 -0
- apsimo/backup.py +962 -0
- apsimo/beliefs/__init__.py +23 -0
- apsimo/beliefs/contradictions.py +109 -0
- apsimo/beliefs/decay.py +61 -0
- apsimo/beliefs/engine.py +479 -0
- apsimo/beliefs/models.py +67 -0
- apsimo/beliefs/promotion.py +41 -0
- apsimo/beliefs/resolve.py +58 -0
- apsimo/beliefs/source_claims.py +690 -0
- apsimo/beliefs/source_projection.py +883 -0
- apsimo/beliefs/source_time.py +208 -0
- apsimo/beliefs/store.py +133 -0
- apsimo/briefings/aggregators.py +824 -0
- apsimo/briefings/composer.py +420 -0
- apsimo/briefings/config.py +55 -0
- apsimo/briefings/delivery.py +439 -0
- apsimo/briefings/engagement.py +97 -0
- apsimo/briefings/engine.py +274 -0
- apsimo/briefings/enhancer.py +99 -0
- apsimo/briefings/models.py +183 -0
- apsimo/briefings/scheduler.py +382 -0
- apsimo/briefings/store.py +435 -0
- apsimo/chain/__init__.py +48 -0
- apsimo/chain/block.py +100 -0
- apsimo/chain/cli.py +704 -0
- apsimo/chain/genesis.py +443 -0
- apsimo/chain/identity.py +416 -0
- apsimo/chain/keys.py +1025 -0
- apsimo/chain/local_keys.py +187 -0
- apsimo/chain/manager.py +290 -0
- apsimo/chain/node.py +163 -0
- apsimo/chain/plugin_transactions.py +371 -0
- apsimo/chain/protocol.py +220 -0
- apsimo/chain/state_machine.py +676 -0
- apsimo/chain/storage.py +503 -0
- apsimo/chain/transactions.py +250 -0
- apsimo/chain/validation.py +397 -0
- apsimo/channels/__init__.py +1 -0
- apsimo/channels/manifest.py +31 -0
- apsimo/channels/migrations/001_channels_schema.sql +12 -0
- apsimo/channels/phone_gateways.py +42 -0
- apsimo/channels/presence.py +188 -0
- apsimo/channels/router.py +235 -0
- apsimo/channels/store.py +231 -0
- apsimo/cli.py +2688 -0
- apsimo/cognition/__init__.py +11 -0
- apsimo/cognition/charter.py +398 -0
- apsimo/cognition/drive_governance.py +3530 -0
- apsimo/cognition/evidence_pipeline.py +1627 -0
- apsimo/cognition/external_events.py +932 -0
- apsimo/cognition/goal_spine.py +3488 -0
- apsimo/cognition/introspection.py +214 -0
- apsimo/cognition/prompt.py +150 -0
- apsimo/cognition/runtime.py +108 -0
- apsimo/cognition/trigger.py +154 -0
- apsimo/commitments/__init__.py +18 -0
- apsimo/commitments/local_work.py +355 -0
- apsimo/commitments/store.py +1052 -0
- apsimo/commitments/work.py +91 -0
- apsimo/compat.py +53 -0
- apsimo/compression/__init__.py +467 -0
- apsimo/connectors/__init__.py +21 -0
- apsimo/connectors/base.py +152 -0
- apsimo/connectors/caldav_calendar.py +125 -0
- apsimo/connectors/fs_documents.py +85 -0
- apsimo/connectors/imap_email.py +138 -0
- apsimo/connectors/manager.py +218 -0
- apsimo/connectors/webhook_pull.py +88 -0
- apsimo/contacts/__init__.py +33 -0
- apsimo/contacts/comms.py +357 -0
- apsimo/contacts/config.py +79 -0
- apsimo/contacts/exporters/__init__.py +1 -0
- apsimo/contacts/exporters/vcard.py +71 -0
- apsimo/contacts/identity_links.py +251 -0
- apsimo/contacts/importer.py +280 -0
- apsimo/contacts/importers/__init__.py +1 -0
- apsimo/contacts/importers/batch.py +43 -0
- apsimo/contacts/importers/macos_contacts.py +101 -0
- apsimo/contacts/migrations/001_contacts_schema.sql +141 -0
- apsimo/contacts/migrations/002_trust_scopes.sql +36 -0
- apsimo/contacts/migrations/003_open_gateway_enum.sql +32 -0
- apsimo/contacts/migrations/004_contact_provision_operations.sql +18 -0
- apsimo/contacts/migrations/005_identity_links.sql +27 -0
- apsimo/contacts/models.py +308 -0
- apsimo/contacts/scoring.py +16 -0
- apsimo/contacts/store.py +1623 -0
- apsimo/contacts/transport_ingress.py +252 -0
- apsimo/contacts/world_bridge.py +314 -0
- apsimo/contextgate/__init__.py +69 -0
- apsimo/contextgate/chunker.py +169 -0
- apsimo/contextgate/estimate.py +54 -0
- apsimo/contextgate/gate.py +313 -0
- apsimo/contextgate/retrieve.py +115 -0
- apsimo/delivery/__init__.py +16 -0
- apsimo/delivery/bridge.py +1260 -0
- apsimo/delivery/channels.py +526 -0
- apsimo/delivery/classification.py +50 -0
- apsimo/delivery/rate_limiter.py +268 -0
- apsimo/delivery/reachout_policy.py +206 -0
- apsimo/directed/__init__.py +22 -0
- apsimo/directed/audit.py +167 -0
- apsimo/directed/intake.py +95 -0
- apsimo/directed/models.py +191 -0
- apsimo/directed/service.py +509 -0
- apsimo/directives/__init__.py +25 -0
- apsimo/directives/evidence.py +87 -0
- apsimo/directives/extractor.py +188 -0
- apsimo/directives/guard.py +364 -0
- apsimo/directives/models.py +206 -0
- apsimo/directives/service.py +372 -0
- apsimo/directives/store.py +167 -0
- apsimo/doctor.py +2173 -0
- apsimo/environment.py +43 -0
- apsimo/events/__init__.py +33 -0
- apsimo/events/broadcaster.py +98 -0
- apsimo/events/bus.py +217 -0
- apsimo/events/journal.py +863 -0
- apsimo/events/stream.py +131 -0
- apsimo/events/types.py +150 -0
- apsimo/execution_results.py +357 -0
- apsimo/feedback/__init__.py +5 -0
- apsimo/feedback/store.py +76 -0
- apsimo/feeds/__init__.py +19 -0
- apsimo/feeds/cli.py +84 -0
- apsimo/feeds/engine.py +437 -0
- apsimo/feeds/example-feed.yaml +77 -0
- apsimo/feeds/hermes_cron.py +126 -0
- apsimo/feeds/manager.py +235 -0
- apsimo/feeds/spec.py +250 -0
- apsimo/feeds/template.py +202 -0
- apsimo/gate/__init__.py +18 -0
- apsimo/gate/audit.py +61 -0
- apsimo/gate/communication_policy.py +166 -0
- apsimo/gate/config.py +72 -0
- apsimo/gate/context_provenance.py +170 -0
- apsimo/gate/env_risk.py +226 -0
- apsimo/gate/guard_audit.py +353 -0
- apsimo/gate/layers/__init__.py +1 -0
- apsimo/gate/layers/base.py +15 -0
- apsimo/gate/layers/l1_recipient.py +66 -0
- apsimo/gate/layers/l2_pii.py +134 -0
- apsimo/gate/layers/l3_cross_context.py +50 -0
- apsimo/gate/layers/l4_trust_tier.py +78 -0
- apsimo/gate/layers/l5_injection.py +199 -0
- apsimo/gate/layers/l6_review.py +86 -0
- apsimo/gate/layers/l7_delay.py +100 -0
- apsimo/gate/layers/tom2_epistemic.py +185 -0
- apsimo/gate/models.py +64 -0
- apsimo/gate/pending_dispatch.py +5 -0
- apsimo/gate/pipeline.py +206 -0
- apsimo/gate/rejection.py +259 -0
- apsimo/gate/response_guard.py +700 -0
- apsimo/gate/rulesets/injection_v1.yaml +51 -0
- apsimo/gate/surface_policy.py +189 -0
- apsimo/gate/taint.py +226 -0
- apsimo/genesis.json +9 -0
- apsimo/goals/__init__.py +100 -0
- apsimo/goals/config.py +38 -0
- apsimo/goals/decomposer.py +421 -0
- apsimo/goals/engine.py +617 -0
- apsimo/goals/inference.py +354 -0
- apsimo/goals/models.py +302 -0
- apsimo/goals/priority.py +270 -0
- apsimo/goals/queue_bridge.py +149 -0
- apsimo/goals/replan.py +450 -0
- apsimo/goals/schema.sql +89 -0
- apsimo/goals/store.py +692 -0
- apsimo/governed_actions.py +1708 -0
- apsimo/harness_integration/__init__.py +45 -0
- apsimo/harness_integration/context.py +41 -0
- apsimo/harness_integration/skills.py +231 -0
- apsimo/identity/__init__.py +26 -0
- apsimo/identity/participants.py +181 -0
- apsimo/identity/resolver.py +329 -0
- apsimo/identity_bootstrap/__init__.py +5 -0
- apsimo/identity_bootstrap/builder.py +208 -0
- apsimo/identity_bootstrap/corpus.py +443 -0
- apsimo/identity_bootstrap/models.py +54 -0
- apsimo/identity_bootstrap/runner.py +353 -0
- apsimo/identity_bootstrap/seeders/__init__.py +25 -0
- apsimo/identity_bootstrap/seeders/briefings.py +109 -0
- apsimo/identity_bootstrap/seeders/chain.py +57 -0
- apsimo/identity_bootstrap/seeders/goals.py +128 -0
- apsimo/identity_bootstrap/seeders/memory.py +191 -0
- apsimo/identity_bootstrap/seeders/neo4j_cognition.py +79 -0
- apsimo/identity_bootstrap/seeders/relationship.py +152 -0
- apsimo/identity_bootstrap/seeders/sessions.py +67 -0
- apsimo/identity_bootstrap/seeders/skills.py +92 -0
- apsimo/identity_bootstrap/seeders/task_queue.py +72 -0
- apsimo/identity_bootstrap/seeders/world_model.py +143 -0
- apsimo/identity_bootstrap/self_query.py +92 -0
- apsimo/identity_bootstrap/self_reflection.py +155 -0
- apsimo/identity_bootstrap/skill.py +37 -0
- apsimo/identity_bootstrap/verifier.py +436 -0
- apsimo/initiatives/__init__.py +20 -0
- apsimo/initiatives/action_registry.py +454 -0
- apsimo/initiatives/approval_authority.py +2105 -0
- apsimo/initiatives/approval_policy.py +123 -0
- apsimo/initiatives/assignment.py +263 -0
- apsimo/initiatives/backup_evidence.py +100 -0
- apsimo/initiatives/context_freshness.py +103 -0
- apsimo/initiatives/models.py +318 -0
- apsimo/initiatives/native_work.py +270 -0
- apsimo/initiatives/standing_approvals.py +232 -0
- apsimo/initiatives/store.py +1081 -0
- apsimo/initiatives/temporal_followup.py +410 -0
- apsimo/intelligence/__init__.py +1 -0
- apsimo/intelligence/cognition/__init__.py +24 -0
- apsimo/intelligence/cognition/gap_detector.py +148 -0
- apsimo/intelligence/cognition/metalearner.py +547 -0
- apsimo/intelligence/cognition/metrics_collector.py +217 -0
- apsimo/intelligence/cognition/performance_index.py +299 -0
- apsimo/intelligence/cognition/registry.py +192 -0
- apsimo/intelligence/cognition/strategy_adjuster.py +222 -0
- apsimo/intelligence/cognition/types.py +16 -0
- apsimo/intelligence/components/__init__.py +66 -0
- apsimo/intelligence/components/anomaly_detector.py +413 -0
- apsimo/intelligence/components/initiative_engine.py +2643 -0
- apsimo/intelligence/components/preference_learner.py +521 -0
- apsimo/intelligence/components/research_orchestrator.py +358 -0
- apsimo/intelligence/components/self_directed_thinker.py +221 -0
- apsimo/intelligence/components/self_reflector.py +252 -0
- apsimo/intelligence/components/session_continuity.py +154 -0
- apsimo/intelligence/components/task_planner.py +320 -0
- apsimo/intelligence/components/tool_learner.py +217 -0
- apsimo/intelligence/graph/__init__.py +79 -0
- apsimo/intelligence/graph/client.py +2483 -0
- apsimo/intelligence/graph/consolidator.py +405 -0
- apsimo/intelligence/graph/distiller.py +312 -0
- apsimo/intelligence/graph/migrations.py +129 -0
- apsimo/intelligence/graph/queries.py +248 -0
- apsimo/intelligence/graph/recall.py +281 -0
- apsimo/intelligence/graph/reconciler.py +144 -0
- apsimo/intelligence/graph/schema.py +337 -0
- apsimo/intelligence/graph/selection.py +252 -0
- apsimo/intelligence/learning/__init__.py +17 -0
- apsimo/intelligence/learning/continuous_learner.py +245 -0
- apsimo/intelligence/learning/feedback_store.py +321 -0
- apsimo/intelligence/mind_model/__init__.py +1 -0
- apsimo/intelligence/mind_model/graph_baseline.py +136 -0
- apsimo/intelligence/mind_model/signal_collector.py +361 -0
- apsimo/intelligence/relationships/__init__.py +11 -0
- apsimo/intelligence/relationships/profiler.py +389 -0
- apsimo/intelligence/relationships/scorer.py +560 -0
- apsimo/intelligence/relationships/signal_floor.py +66 -0
- apsimo/intelligence/relationships/trust_tiers.py +300 -0
- apsimo/intelligence/synthesis/__init__.py +40 -0
- apsimo/intelligence/synthesis/connection_discoverer.py +379 -0
- apsimo/intelligence/synthesis/cross_domain_analyzer.py +287 -0
- apsimo/intelligence/synthesis/insight_deliverer.py +171 -0
- apsimo/intelligence/synthesis/insight_store.py +79 -0
- apsimo/intelligence/synthesis/insight_validator.py +183 -0
- apsimo/intelligence/synthesis/novelty_scorer.py +267 -0
- apsimo/intelligence/turn_middleware/__init__.py +15 -0
- apsimo/intelligence/turn_middleware/memory_sync.py +119 -0
- apsimo/mcp/__init__.py +41 -0
- apsimo/mcp/__main__.py +6 -0
- apsimo/mcp/config.py +287 -0
- apsimo/mcp/server.py +501 -0
- apsimo/migrations.py +187 -0
- apsimo/mining/__init__.py +27 -0
- apsimo/mining/corpus.py +239 -0
- apsimo/mining/escalations.py +289 -0
- apsimo/mining/models.py +169 -0
- apsimo/mining/store.py +210 -0
- apsimo/models/__init__.py +30 -0
- apsimo/models/memory.py +80 -0
- apsimo/models/mesh.py +72 -0
- apsimo/models/person.py +104 -0
- apsimo/models/signal.py +108 -0
- apsimo/observations/__init__.py +15 -0
- apsimo/observations/store.py +277 -0
- apsimo/patterns/__init__.py +6 -0
- apsimo/patterns/extract.py +187 -0
- apsimo/patterns/store.py +227 -0
- apsimo/persona/__init__.py +1 -0
- apsimo/persona/engine.py +611 -0
- apsimo/persona/manifest.py +140 -0
- apsimo/projects/__init__.py +28 -0
- apsimo/projects/engine.py +1681 -0
- apsimo/projects/event_outbox.py +188 -0
- apsimo/projects/models.py +216 -0
- apsimo/projects/planner.py +181 -0
- apsimo/projects/store.py +1446 -0
- apsimo/proposals/__init__.py +12 -0
- apsimo/proposals/engine.py +114 -0
- apsimo/proposals/models.py +207 -0
- apsimo/qualification/__init__.py +1 -0
- apsimo/qualification/cases.py +75 -0
- apsimo/qualification/cli.py +51 -0
- apsimo/qualification/memory_cases.py +209 -0
- apsimo/qualification/records.py +92 -0
- apsimo/qualification/report.py +87 -0
- apsimo/qualification/runner.py +311 -0
- apsimo/qualification/structured_cases.py +131 -0
- apsimo/reasoning/__init__.py +13 -0
- apsimo/reasoning/executor.py +506 -0
- apsimo/reasoning/loop.py +373 -0
- apsimo/reasoning/native_tools/__init__.py +16 -0
- apsimo/reasoning/native_tools/calculate.py +141 -0
- apsimo/reasoning/native_tools/file_ops.py +150 -0
- apsimo/reasoning/native_tools/web_search.py +49 -0
- apsimo/reasoning/tool_policy.py +182 -0
- apsimo/redact/__init__.py +176 -0
- apsimo/repos/__init__.py +5 -0
- apsimo/repos/mirrors.py +204 -0
- apsimo/research/__init__.py +41 -0
- apsimo/research/artifact.py +482 -0
- apsimo/research/gatherer.py +387 -0
- apsimo/research/pipeline.py +513 -0
- apsimo/research/search/__init__.py +7 -0
- apsimo/research/search/base.py +41 -0
- apsimo/research/search/brave.py +59 -0
- apsimo/research/search/cache.py +51 -0
- apsimo/research/search/duckduckgo.py +103 -0
- apsimo/research/search/orchestrator.py +119 -0
- apsimo/research/search/serpapi.py +59 -0
- apsimo/research/search/tavily.py +59 -0
- apsimo/research/synthesizer.py +309 -0
- apsimo/router/__init__.py +30 -0
- apsimo/router/complexity_scorer.py +148 -0
- apsimo/router/endpoints.py +153 -0
- apsimo/router/fallback.py +58 -0
- apsimo/router/functions.py +243 -0
- apsimo/router/native_policy.py +52 -0
- apsimo/router/router.py +762 -0
- apsimo/router/self_learning.py +174 -0
- apsimo/router/tiers.py +677 -0
- apsimo/sandbox/__init__.py +21 -0
- apsimo/sandbox/backend.py +195 -0
- apsimo/sandbox/manager.py +173 -0
- apsimo/scope_bounds.py +7 -0
- apsimo/secrets/__init__.py +6 -0
- apsimo/secrets/backends/__init__.py +8 -0
- apsimo/secrets/backends/base.py +42 -0
- apsimo/secrets/backends/env.py +110 -0
- apsimo/secrets/backends/keyring.py +72 -0
- apsimo/secrets/backends/onepassword.py +232 -0
- apsimo/secrets/cli.py +191 -0
- apsimo/secrets/manager.py +160 -0
- apsimo/secrets/migration.py +101 -0
- apsimo/secrets/types.py +98 -0
- apsimo/seed.py +41 -0
- apsimo/self_model/__init__.py +37 -0
- apsimo/self_model/appraisals.py +673 -0
- apsimo/self_model/benchmark.py +1314 -0
- apsimo/self_model/brief.py +40 -0
- apsimo/self_model/event_concerns.py +1128 -0
- apsimo/self_model/execution_forecasts.py +353 -0
- apsimo/self_model/expectations.py +1595 -0
- apsimo/self_model/experiments.py +1150 -0
- apsimo/self_model/journal.py +148 -0
- apsimo/self_model/judgments.py +705 -0
- apsimo/self_model/native_outcomes.py +55 -0
- apsimo/self_model/params.py +220 -0
- apsimo/self_model/perspective.py +246 -0
- apsimo/self_model/reconcile.py +183 -0
- apsimo/self_model/reply_forecasts.py +381 -0
- apsimo/self_model/runtime_forecasts.py +296 -0
- apsimo/self_model/runtime_models.py +67 -0
- apsimo/self_model/settlement.py +207 -0
- apsimo/self_model/situation.py +1731 -0
- apsimo/self_model/store.py +883 -0
- apsimo/self_model/supervised.py +137 -0
- apsimo/self_model/thinker.py +99 -0
- apsimo/self_model/trust.py +388 -0
- apsimo/self_model/workspace.py +2388 -0
- apsimo/server.py +4197 -0
- apsimo/services/__init__.py +1 -0
- apsimo/services/agent_bridge.py +474 -0
- apsimo/services/initiative_executor.py +914 -0
- apsimo/services/instance.py +297 -0
- apsimo/sessions/__init__.py +22 -0
- apsimo/sessions/config.py +13 -0
- apsimo/sessions/context_loader.py +88 -0
- apsimo/sessions/federation_session.py +75 -0
- apsimo/sessions/isolated_session.py +98 -0
- apsimo/sessions/reports.py +84 -0
- apsimo/sessions/store.py +148 -0
- apsimo/setup.py +2818 -0
- apsimo/setup_hermes.py +879 -0
- apsimo/setup_local_work.py +218 -0
- apsimo/setup_native_goals.py +134 -0
- apsimo/setup_native_reviews.py +115 -0
- apsimo/skills/__init__.py +10 -0
- apsimo/skills/base.py +108 -0
- apsimo/skills/budget.py +28 -0
- apsimo/skills/executor.py +493 -0
- apsimo/skills/executors/__init__.py +1 -0
- apsimo/skills/executors/behavioral_correction.py +75 -0
- apsimo/skills/executors/capability_gap.py +38 -0
- apsimo/skills/executors/data_quality.py +163 -0
- apsimo/skills/executors/knowledge_acquisition.py +41 -0
- apsimo/skills/executors/operational_hygiene.py +185 -0
- apsimo/skills/executors/subsystem_health.py +169 -0
- apsimo/skills/hermes_export.py +431 -0
- apsimo/skills/index.py +123 -0
- apsimo/skills/learning/__init__.py +21 -0
- apsimo/skills/learning/novelty_detector.py +206 -0
- apsimo/skills/learning/pattern_extractor.py +199 -0
- apsimo/skills/learning/triggers.py +159 -0
- apsimo/skills/loader.py +246 -0
- apsimo/skills/migrations/002_progressive_loading.sql +6 -0
- apsimo/skills/migrations/backfill_triggers.py +20 -0
- apsimo/skills/models.py +202 -0
- apsimo/skills/packager.py +128 -0
- apsimo/skills/protocols.py +70 -0
- apsimo/skills/registry.py +191 -0
- apsimo/skills/runtime.py +58 -0
- apsimo/skills/sandbox_runner.py +229 -0
- apsimo/skills/scheduler.py +129 -0
- apsimo/skills/schema.py +79 -0
- apsimo/skills/security/__init__.py +12 -0
- apsimo/skills/security/guards.py +53 -0
- apsimo/skills/security/scanner.py +223 -0
- apsimo/skills_memory/__init__.py +26 -0
- apsimo/skills_memory/distill.py +159 -0
- apsimo/skills_memory/models.py +85 -0
- apsimo/skills_memory/retrieve.py +62 -0
- apsimo/skills_memory/store.py +172 -0
- apsimo/surprise/__init__.py +6 -0
- apsimo/surprise/accumulation.py +57 -0
- apsimo/surprise/scorer.py +102 -0
- apsimo/surprise/store.py +203 -0
- apsimo/task_queue/__init__.py +69 -0
- apsimo/task_queue/action_receipts.py +148 -0
- apsimo/task_queue/approval_relay_canary.py +108 -0
- apsimo/task_queue/config.py +85 -0
- apsimo/task_queue/contract.py +361 -0
- apsimo/task_queue/events.py +130 -0
- apsimo/task_queue/governor.py +1031 -0
- apsimo/task_queue/handlers/__init__.py +16 -0
- apsimo/task_queue/handlers/base.py +37 -0
- apsimo/task_queue/handlers/inference.py +640 -0
- apsimo/task_queue/handlers/monitoring.py +116 -0
- apsimo/task_queue/handlers/registry.py +75 -0
- apsimo/task_queue/handlers/subtask_handler.py +173 -0
- apsimo/task_queue/handlers/system_maintenance.py +147 -0
- apsimo/task_queue/mesh_integration.py +111 -0
- apsimo/task_queue/models.py +317 -0
- apsimo/task_queue/queue_manager.py +8286 -0
- apsimo/task_queue/routing.py +287 -0
- apsimo/task_queue/scheduler.py +252 -0
- apsimo/task_queue/schema.sql +197 -0
- apsimo/task_queue/work_control.py +342 -0
- apsimo/task_queue/worker.py +993 -0
- apsimo/telemetry.py +145 -0
- apsimo/tom/__init__.py +6 -0
- apsimo/tom/affect.py +387 -0
- apsimo/tom/approvals.py +171 -0
- apsimo/tom/arcs.py +896 -0
- apsimo/tom/asymmetry.py +131 -0
- apsimo/tom/eligibility.py +248 -0
- apsimo/tom/engagement.py +214 -0
- apsimo/tom/exposure.py +214 -0
- apsimo/tom/extractor.py +306 -0
- apsimo/tom/fact_adapters.py +144 -0
- apsimo/tom/facts.py +326 -0
- apsimo/tom/integration.py +592 -0
- apsimo/tom/leveled.py +118 -0
- apsimo/tom/levels.py +247 -0
- apsimo/tom/recipient_audit.py +995 -0
- apsimo/tom/recipient_simulator.py +593 -0
- apsimo/tom/source_lineage.py +93 -0
- apsimo/tom/tom2.py +277 -0
- apsimo/tom/visibility.py +559 -0
- apsimo/tom/visibility_store.py +414 -0
- apsimo/tools/__init__.py +0 -0
- apsimo/tools/definitions.py +740 -0
- apsimo/tools/handlers.py +943 -0
- apsimo/toolsmith/__init__.py +26 -0
- apsimo/toolsmith/authority.py +166 -0
- apsimo/toolsmith/engine.py +559 -0
- apsimo/toolsmith/integrity.py +100 -0
- apsimo/toolsmith/miner.py +145 -0
- apsimo/toolsmith/policy.py +110 -0
- apsimo/toolsmith/registry.py +635 -0
- apsimo/turns/__init__.py +17 -0
- apsimo/turns/audio.py +134 -0
- apsimo/turns/documents.py +235 -0
- apsimo/turns/executions.py +486 -0
- apsimo/turns/hermes_history.py +245 -0
- apsimo/turns/hermes_kanban.py +268 -0
- apsimo/turns/hermes_work.py +96 -0
- apsimo/turns/idempotency.py +752 -0
- apsimo/turns/local_work.py +115 -0
- apsimo/turns/media.py +581 -0
- apsimo/turns/reported_workers.py +196 -0
- apsimo/turns/source_annotations.py +283 -0
- apsimo/turns/source_attribution.py +154 -0
- apsimo/turns/source_read.py +351 -0
- apsimo/turns/source_vectors.py +263 -0
- apsimo/turns/video.py +210 -0
- apsimo/util/autonomy_preset.py +220 -0
- apsimo/util/instance.py +92 -0
- apsimo/util/model_output.py +25 -0
- apsimo/util/quiet_hours.py +27 -0
- apsimo/util/session_safety.py +37 -0
- apsimo/util/temporal.py +343 -0
- apsimo/vector/__init__.py +75 -0
- apsimo/vector/backfill.py +171 -0
- apsimo/vector/caption.py +114 -0
- apsimo/vector/collections.py +51 -0
- apsimo/vector/config.py +102 -0
- apsimo/vector/embedder.py +670 -0
- apsimo/vector/image_preprocess.py +406 -0
- apsimo/vector/image_store.py +296 -0
- apsimo/vector/indexes.py +162 -0
- apsimo/vector/migrate.py +334 -0
- apsimo/vector/multimodal_provider.py +417 -0
- apsimo/vector/multimodal_types.py +87 -0
- apsimo/vector/openai_provider.py +119 -0
- apsimo/vector/query.py +49 -0
- apsimo/vector/reranker.py +565 -0
- apsimo/vector/safety_image.py +159 -0
- apsimo/vector/scanner.py +197 -0
- apsimo/vector/setup.py +289 -0
- apsimo/vector/store.py +533 -0
- apsimo/vector/tiers.py +263 -0
- apsimo/work_orders.py +925 -0
- apsimo/workers/__init__.py +21 -0
- apsimo/workers/agent_bridge.py +640 -0
- apsimo/workers/colony_worker.py +382 -0
- apsimo/workers/queue_worker.py +441 -0
- apsimo/workers/skills_sync.py +152 -0
- apsimo/world_model/__init__.py +71 -0
- apsimo/world_model/causal_maintenance.py +131 -0
- apsimo/world_model/causal_policy.py +43 -0
- apsimo/world_model/causal_query.py +125 -0
- apsimo/world_model/confidence.py +54 -0
- apsimo/world_model/config.py +64 -0
- apsimo/world_model/constants.py +97 -0
- apsimo/world_model/entities.py +145 -0
- apsimo/world_model/expectation_resolvers.py +177 -0
- apsimo/world_model/extraction/__init__.py +7 -0
- apsimo/world_model/extraction/base.py +62 -0
- apsimo/world_model/extraction/conversation_extractor.py +262 -0
- apsimo/world_model/extraction/detector.py +74 -0
- apsimo/world_model/extraction/document_extractor.py +78 -0
- apsimo/world_model/extraction/formats/__init__.py +24 -0
- apsimo/world_model/extraction/formats/csv_fmt.py +68 -0
- apsimo/world_model/extraction/formats/html_fmt.py +72 -0
- apsimo/world_model/extraction/formats/json_fmt.py +68 -0
- apsimo/world_model/extraction/formats/pdf.py +43 -0
- apsimo/world_model/extraction/formats/text.py +27 -0
- apsimo/world_model/extraction/llm_extractor.py +164 -0
- apsimo/world_model/extraction/pipeline.py +73 -0
- apsimo/world_model/integrations/__init__.py +5 -0
- apsimo/world_model/integrations/mind_model_bridge.py +115 -0
- apsimo/world_model/integrations/social_intel_bridge.py +120 -0
- apsimo/world_model/jobs/__init__.py +4 -0
- apsimo/world_model/jobs/extraction_job.py +168 -0
- apsimo/world_model/llm_extract.py +572 -0
- apsimo/world_model/neo4j/__init__.py +5 -0
- apsimo/world_model/neo4j/backend.py +654 -0
- apsimo/world_model/observations.py +155 -0
- apsimo/world_model/populator.py +307 -0
- apsimo/world_model/postgres/__init__.py +1 -0
- apsimo/world_model/postgres/backend.py +683 -0
- apsimo/world_model/relationships.py +25 -0
- apsimo/world_model/resolution/__init__.py +13 -0
- apsimo/world_model/resolution/entity_resolver.py +232 -0
- apsimo/world_model/resolution/merge_audit.py +16 -0
- apsimo/world_model/resolution/merge_workflow.py +117 -0
- apsimo/world_model/source_reports.py +121 -0
- apsimo/world_model/sqlite/__init__.py +4 -0
- apsimo/world_model/sqlite/backend.py +855 -0
- apsimo/world_model/sqlite/schema.sql +132 -0
- apsimo/world_model/store.py +545 -0
- apsimo-1.3.0.dist-info/METADATA +78 -0
- apsimo-1.3.0.dist-info/RECORD +614 -0
- apsimo-1.3.0.dist-info/WHEEL +5 -0
- apsimo-1.3.0.dist-info/entry_points.txt +11 -0
- apsimo-1.3.0.dist-info/licenses/LICENSE +21 -0
- apsimo-1.3.0.dist-info/top_level.txt +2 -0
- 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
|
+
]
|