apsimo 1.4.2__tar.gz → 1.4.4__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.
- {apsimo-1.4.2 → apsimo-1.4.4}/PKG-INFO +2 -4
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/host.py +2 -28
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cli.py +2 -11
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/recall.py +0 -2
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/server.py +4 -10
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/setup.py +2 -4
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/setup_hermes.py +7 -14
- apsimo-1.4.4/apsimo/workers/__init__.py +12 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/workers/colony_worker.py +3 -3
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/workers/queue_worker.py +4 -7
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/workers/skills_sync.py +4 -7
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/__init__.py +1 -1
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/config.py +1 -5
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/store.py +14 -81
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo.egg-info/PKG-INFO +2 -4
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo.egg-info/SOURCES.txt +1 -9
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo.egg-info/entry_points.txt +0 -5
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo.egg-info/requires.txt +1 -4
- apsimo-1.4.4/apsimo.egg-info/top_level.txt +1 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/pyproject.toml +3 -9
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_apsimo_compat.py +10 -20
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_causal_falsifiability.py +1 -2
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_causal_query.py +1 -1
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_causal_query_only_guard.py +1 -1
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_general_governance.py +3 -19
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_initiative_work.py +1 -1
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_setup.py +60 -18
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_tool_observations.py +49 -16
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_recall_source_presentation.py +30 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_server_integration.py +1 -1
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_workers_install.py +34 -55
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_world_entity_reinforcement.py +1 -1
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_world_model_prune.py +1 -13
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_world_observations.py +2 -9
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_world_populator.py +1 -1
- apsimo-1.4.4/tests/test_world_store_api.py +49 -0
- apsimo-1.4.2/apsimo/compat.py +0 -53
- apsimo-1.4.2/apsimo/seed.py +0 -41
- apsimo-1.4.2/apsimo/workers/__init__.py +0 -21
- apsimo-1.4.2/apsimo/world_model/neo4j/__init__.py +0 -5
- apsimo-1.4.2/apsimo/world_model/neo4j/backend.py +0 -654
- apsimo-1.4.2/apsimo/world_model/postgres/__init__.py +0 -1
- apsimo-1.4.2/apsimo/world_model/postgres/backend.py +0 -683
- apsimo-1.4.2/apsimo.egg-info/top_level.txt +0 -2
- apsimo-1.4.2/colony_sidecar/__init__.py +0 -4
- apsimo-1.4.2/tests/test_neo4j_backend.py +0 -211
- apsimo-1.4.2/tests/test_seed_retirement.py +0 -117
- {apsimo-1.4.2 → apsimo-1.4.4}/LICENSE +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/README.md +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/__main__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/agent/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/agent/client.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/agent/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/agents/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/agents/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/agents/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/agents/websocket.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/auth_telemetry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/authority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/contact_grants.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/middleware.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/commitment_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/context_gate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/executions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/followup_plans.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/governed_actions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/initiative_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/mining.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/observations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/social_state.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/task_queue.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/temporal_followups.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/transport.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/routers/transport_ingress_api.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/schemas/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/api/schemas/host.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/autonomy/cli.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/autonomy/condition_worker.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/autonomy/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/autonomy/loop.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/autonomy/registry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/autonomy/scheduler.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/autonomy/synthesis.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/backup.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/contradictions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/decay.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/promotion.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/resolve.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/source_claims.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/source_projection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/source_time.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/beliefs/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/aggregators.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/composer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/delivery.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/engagement.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/enhancer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/scheduler.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/briefings/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/block.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/cli.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/genesis.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/identity.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/keys.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/local_keys.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/manager.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/node.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/plugin_transactions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/protocol.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/state_machine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/storage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/transactions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/chain/validation.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/channels/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/channels/manifest.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/channels/migrations/001_channels_schema.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/channels/phone_gateways.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/channels/presence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/channels/router.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/channels/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/charter.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/drive_governance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/evidence_pipeline.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/external_events.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/goal_spine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/introspection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/prompt.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/runtime.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/cognition/trigger.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/commitments/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/commitments/local_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/commitments/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/commitments/work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/compression/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/connectors/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/connectors/base.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/connectors/caldav_calendar.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/connectors/fs_documents.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/connectors/imap_email.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/connectors/manager.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/connectors/webhook_pull.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/comms.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/exporters/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/exporters/vcard.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/identity_links.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/importer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/importers/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/importers/batch.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/importers/macos_contacts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/migrations/001_contacts_schema.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/migrations/002_trust_scopes.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/migrations/003_open_gateway_enum.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/migrations/004_contact_provision_operations.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/migrations/005_identity_links.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/scoring.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/transport_ingress.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contacts/world_bridge.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contextgate/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contextgate/chunker.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contextgate/estimate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contextgate/gate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/contextgate/retrieve.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/delivery/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/delivery/bridge.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/delivery/channels.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/delivery/classification.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/delivery/rate_limiter.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/delivery/reachout_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directed/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directed/audit.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directed/intake.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directed/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directed/service.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directives/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directives/evidence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directives/extractor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directives/guard.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directives/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directives/service.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/directives/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/doctor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/environment.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/events/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/events/broadcaster.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/events/bus.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/events/journal.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/events/stream.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/events/types.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/execution_results.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feedback/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feedback/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feeds/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feeds/cli.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feeds/engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feeds/example-feed.yaml +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feeds/hermes_cron.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feeds/manager.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feeds/spec.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/feeds/template.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/audit.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/communication_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/context_provenance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/env_risk.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/guard_audit.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/base.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/l1_recipient.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/l2_pii.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/l3_cross_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/l4_trust_tier.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/l5_injection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/l6_review.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/l7_delay.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/layers/tom2_epistemic.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/pending_dispatch.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/pipeline.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/rejection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/response_guard.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/rulesets/injection_v1.yaml +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/surface_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/gate/taint.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/genesis.json +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/decomposer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/inference.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/priority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/queue_bridge.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/replan.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/schema.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/goals/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/governed_actions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/harness_integration/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/harness_integration/context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/harness_integration/skills.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity/participants.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity/resolver.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/builder.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/corpus.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/runner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/briefings.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/chain.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/goals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/memory.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/neo4j_cognition.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/relationship.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/sessions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/skills.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/task_queue.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/seeders/world_model.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/self_query.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/self_reflection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/skill.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/identity_bootstrap/verifier.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/action_registry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/approval_authority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/approval_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/assignment.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/backup_evidence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/context_freshness.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/native_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/standing_approvals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/initiatives/temporal_followup.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/cognition/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/cognition/gap_detector.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/cognition/metalearner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/cognition/metrics_collector.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/cognition/performance_index.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/cognition/registry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/cognition/strategy_adjuster.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/cognition/types.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/anomaly_detector.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/initiative_engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/preference_learner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/research_orchestrator.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/self_directed_thinker.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/self_reflector.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/session_continuity.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/task_planner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/components/tool_learner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/client.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/consolidator.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/distiller.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/migrations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/queries.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/reconciler.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/schema.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/graph/selection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/learning/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/learning/continuous_learner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/learning/feedback_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/mind_model/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/mind_model/graph_baseline.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/mind_model/signal_collector.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/relationships/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/relationships/profiler.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/relationships/scorer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/relationships/signal_floor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/relationships/trust_tiers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/synthesis/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/synthesis/connection_discoverer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/synthesis/cross_domain_analyzer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/synthesis/insight_deliverer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/synthesis/insight_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/synthesis/insight_validator.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/synthesis/novelty_scorer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/turn_middleware/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/intelligence/turn_middleware/memory_sync.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mcp/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mcp/__main__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mcp/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mcp/server.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/migrations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mining/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mining/corpus.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mining/escalations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mining/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/mining/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/models/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/models/memory.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/models/mesh.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/models/person.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/models/signal.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/observations/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/observations/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/patterns/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/patterns/extract.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/patterns/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/persona/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/persona/engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/persona/manifest.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/projects/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/projects/engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/projects/event_outbox.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/projects/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/projects/planner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/projects/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/proposals/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/proposals/engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/proposals/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/qualification/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/qualification/cases.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/qualification/cli.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/qualification/memory_cases.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/qualification/records.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/qualification/report.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/qualification/runner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/qualification/structured_cases.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/reasoning/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/reasoning/executor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/reasoning/loop.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/reasoning/native_tools/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/reasoning/native_tools/calculate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/reasoning/native_tools/file_ops.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/reasoning/native_tools/web_search.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/reasoning/tool_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/redact/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/repos/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/repos/mirrors.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/artifact.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/gatherer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/pipeline.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/search/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/search/base.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/search/brave.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/search/cache.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/search/duckduckgo.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/search/orchestrator.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/search/serpapi.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/search/tavily.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/research/synthesizer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/complexity_scorer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/endpoints.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/fallback.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/functions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/native_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/router.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/self_learning.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/router/tiers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sandbox/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sandbox/backend.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sandbox/manager.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/scope_bounds.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/backends/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/backends/base.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/backends/env.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/backends/keyring.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/backends/onepassword.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/cli.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/manager.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/migration.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/secrets/types.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/appraisals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/benchmark.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/brief.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/event_concerns.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/execution_forecasts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/expectations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/experiments.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/journal.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/judgments.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/native_outcomes.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/params.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/perspective.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/reconcile.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/reply_forecasts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/runtime_forecasts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/runtime_models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/settlement.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/situation.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/supervised.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/thinker.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/trust.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/self_model/workspace.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/services/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/services/agent_bridge.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/services/initiative_executor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/services/instance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sessions/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sessions/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sessions/context_loader.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sessions/federation_session.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sessions/isolated_session.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sessions/reports.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/sessions/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/setup_local_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/setup_native_goals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/setup_native_reviews.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/base.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/budget.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/executor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/executors/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/executors/behavioral_correction.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/executors/capability_gap.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/executors/data_quality.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/executors/knowledge_acquisition.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/executors/operational_hygiene.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/executors/subsystem_health.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/hermes_export.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/index.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/learning/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/learning/novelty_detector.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/learning/pattern_extractor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/learning/triggers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/loader.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/migrations/002_progressive_loading.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/migrations/backfill_triggers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/packager.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/protocols.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/registry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/runtime.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/sandbox_runner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/scheduler.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/schema.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/security/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/security/guards.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills/security/scanner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills_memory/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills_memory/distill.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills_memory/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills_memory/retrieve.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/skills_memory/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/surprise/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/surprise/accumulation.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/surprise/scorer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/surprise/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/action_receipts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/approval_relay_canary.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/contract.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/events.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/governor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/handlers/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/handlers/base.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/handlers/inference.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/handlers/monitoring.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/handlers/registry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/handlers/subtask_handler.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/handlers/system_maintenance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/mesh_integration.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/models.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/queue_manager.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/routing.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/scheduler.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/schema.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/work_control.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/task_queue/worker.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/telemetry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/affect.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/approvals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/arcs.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/asymmetry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/eligibility.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/engagement.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/exposure.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/extractor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/fact_adapters.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/facts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/integration.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/leveled.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/levels.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/recipient_audit.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/recipient_simulator.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/source_lineage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/tom2.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/visibility.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tom/visibility_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tools/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tools/definitions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/tools/handlers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/toolsmith/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/toolsmith/authority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/toolsmith/engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/toolsmith/integrity.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/toolsmith/miner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/toolsmith/policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/toolsmith/registry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/audio.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/documents.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/executions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/hermes_history.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/hermes_kanban.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/hermes_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/history_references.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/idempotency.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/local_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/media.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/reported_workers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/source_annotations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/source_attribution.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/source_read.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/source_vectors.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/tool_observations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/turns/video.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/util/autonomy_preset.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/util/instance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/util/model_output.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/util/quiet_hours.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/util/session_safety.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/util/temporal.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/backfill.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/caption.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/collections.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/embedder.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/image_preprocess.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/image_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/indexes.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/migrate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/multimodal_provider.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/multimodal_types.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/openai_provider.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/query.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/reranker.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/safety_image.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/scanner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/setup.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/vector/tiers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/work_orders.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/workers/agent_bridge.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/causal_maintenance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/causal_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/causal_query.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/confidence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/constants.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/entities.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/expectation_resolvers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/base.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/conversation_extractor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/detector.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/document_extractor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/formats/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/formats/csv_fmt.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/formats/html_fmt.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/formats/json_fmt.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/formats/pdf.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/formats/text.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/llm_extractor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/extraction/pipeline.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/integrations/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/integrations/mind_model_bridge.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/integrations/social_intel_bridge.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/jobs/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/jobs/extraction_job.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/llm_extract.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/observations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/populator.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/relationships.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/resolution/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/resolution/entity_resolver.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/resolution/merge_audit.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/resolution/merge_workflow.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/source_reports.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/sqlite/__init__.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/sqlite/backend.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo/world_model/sqlite/schema.sql +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/apsimo.egg-info/dependency_links.txt +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/setup.cfg +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_accepted_local_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_adaptive_params.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_affect.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_agent_action_routing.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_agent_api.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_agent_bridge.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_agent_bridge_service.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_agent_sdk.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_agent_sensor_loop.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_agent_snapshot.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_agent_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_annotated_recall_reinforcement.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_answer_source_lineage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_appraisal_incident_decisions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_approval_gate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_approval_relay_canary.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_apsimo_harness_guidance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_assignment_engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_audit_cleanup.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_auth_coverage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_auth_migration_readiness.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_authz_scope_api.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_autonomy_preset.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_backup.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_backup_receipt_evidence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_beliefs.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_bind_auth_guard.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_boundary_fail_closed.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_bounded_approval_authority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_briefing_aggregators.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_canonical_scoped_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_canonical_source_read.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_causal_extract.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_causal_maintenance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_causal_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_chain_keys.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_channel_preferences.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_channel_registry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_channel_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_evidence_pipeline.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_evidence_server_wiring.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_goal_spine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_observability.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_p4_controlled_learning.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_p4_server_integration.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_p6_p7_server_wiring.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_p7_drive_governance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_phase_b_runtime.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_phase_c_scheduler.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_cognition_server_wiring.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_colony_memory_provider.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_commitment_resolution.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_commitment_resolution_downgrade.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_commitment_resolution_schema.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_commitment_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_commitments.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_comms_source_erasure.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_competence_reconciliation.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_compression.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_concern_resolution_receipts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_condition_producer.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_connectors.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_contact_fact_recall.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_contact_policy_projection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_contact_provisioning.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_contact_timezone.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_contacts_intro.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_contacts_persistence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_context_gate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_context_phase1.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_context_provenance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_context_skill_ownership.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_conversation_presence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_conversation_turn_concerns.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_current_work_recall_selection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_delivery_bridge_503.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_delivery_gateway_identity.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_delivery_reachout_routing.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_directed.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_directed_envelope.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_directed_reports.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_directed_trust.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_directive_sources.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_directives.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_distill.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_doctor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_document_memory_guard.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_duckduckgo_provider.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_embedding_generations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_enrolled_sender_turns.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_ensure_channel_id.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_env_risk.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_event_broadcasts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_event_bus_types.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_event_concerns.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_event_stream_reliability.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_execution_forecasts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_execution_input_purpose.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_execution_registry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_expectations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_expectations_v2.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_experiments.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_external_cognition_events.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_external_event_concerns.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_facts_backfill.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_feedback.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_followup_plans.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_forecast_learning.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_function_routing.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_gap_generators.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_genesis_manifest.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_global_pause.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_goal_dispatch_availability.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_goal_inference_provenance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_goal_reader_imports.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_governed_actions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_governed_research_handoff.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_graduated_approvals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_grant_envelope.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_graph_reindex_metadata.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_guard_audit.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_guard_chat_mode.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_guard_derive_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_guard_enforce_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_export.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_history_import.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_native_tool_authority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_plugin_contract.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_plugin_event_lifecycle.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_plugin_event_replay.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_plugin_guard_shadow.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_plugin_signals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_plugin_turn_id.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_queue_stats_projection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_setup.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_turn_outbox.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hermes_work_projection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_host_input_provenance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_hostworker_agreement.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_identity_continuity.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_identity_corrections.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_inference_context_gate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_initiative_engine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_initiative_evidence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_initiative_executor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_initiative_feedback.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_initiative_pipeline_v016.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_initiative_retry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_initiative_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_input_source_lineage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_insight_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_instance_service.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_instance_service_live.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_intelligence_components.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_intelligence_synthesis.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_introduction_initiatives.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_job_writeback.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_journal.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_legacy_fact_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_local_work_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_loop_stats_accuracy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_mcp_config.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_mcp_server.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_media_read_reference_presentation.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_memory_decay.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_memory_formation.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_memory_governance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_memory_promotion.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_memory_prune.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_memory_read_hydration.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_memory_response_schemas.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_migrations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_mining.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_model_qualification_cli.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_model_qualification_memory.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_model_qualification_runner.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_model_qualification_structured.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_accepted_local_work.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_history_references.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_input_carrier.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_outcome_judgments.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_request_erasure.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_review_recurrence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_source_image_read.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_source_read.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_native_source_video_read.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_operator_deck_read_truth.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_ordinary_context_briefings.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_owner_preferences.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_p2_wirings.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_partial_work_rendering.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_patterns.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_pending_work_coverage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_persona.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_persona_setup_result.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_phase_capability_check.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_preset_loop_coupling.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_procedure_source_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_project_event_outbox.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_project_result_reconciliation_phase.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_projects.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_prompt_evals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_proposals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_provenance_population.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_pseudo_agi_production_chain.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_queue_completed_filter.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_queue_contract.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_quiet_hours_and_reload.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_reachout_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_recall_hybrid.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_recall_person_boost.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_recall_ranking.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_recall_request_repetition.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_recall_rerank.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_recall_unified_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_recency.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_reflection_task_routing.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_rejection_loop.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_relationship_calendar_aggregators.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_relationship_score_refresh.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_relationship_signal_floor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_relationships.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_reply_forecast_callback_order.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_reply_forecast_stops.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_reply_forecasts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_repo_tools.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_reported_worker_status.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_request_capabilities.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_request_work_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_reranker_remote.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_research_orchestrator.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_resolve_messaging_handle.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_response_guard.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_response_guard_communication_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_response_guard_endpoint.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_response_guard_surface_policy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_router_tiers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_runtime_model_observations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_sandbox.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_scoped_api_authority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_scoped_contact_resolution.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_secondary_review_contract.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_selected_autonomy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_self_directed_thinker.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_self_initiatives.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_self_judgment_opt_in.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_self_judgment_premises.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_self_judgments.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_self_model.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_self_perspective.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_selfhood_benchmark.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_session_reports.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_shared_facts.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_shared_local_undertaking.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_short_source_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_sidecar.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_signals_attribution.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_situation_spine.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_skill_approval.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_skill_attribution.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_skill_sandbox.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_skill_synthesis.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_skill_synthesis_wiring.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_skills_memory.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_social_context_flow.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_social_transport.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_annotation_claim_survivors.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_annotations.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_appraisals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_attribution.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_audio.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_audio_claims.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_claim_budget.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_claim_diagnostics.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_claim_media_eligibility.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_claim_projection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_claim_review.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_claim_subject_basis.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_document_read.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_documents.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_episode_admission.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_episode_memory.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_episode_revisions.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_event_precision.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_excerpt_lineage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_image_read.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_media.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_memory_backup.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_time_query.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_vectors.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_source_video.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_sqlite_connection_ownership.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_supervised_rung.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_surprise.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_sweep_fixes.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_synthesis.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_telemetry_staleness.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_temporal.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_temporal_followups.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_temporal_index.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_test_environment_isolation.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_thinking_phase.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_thought_function_routing.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tick_phase_budget.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tier_endpoints.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_timeline.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_approvals.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_asymmetry.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_context.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_cross_gate.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_eligibility.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_epistemic_guard.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_exposure.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_kill_switch.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_level_coherence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_leveled.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_levels.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_source_corrections.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_taint.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom2_wiring.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_event_lineage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_extractor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_arcs.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_boundary_corpus.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_fact_adapters.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_outbound_integration.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_recipient_audit.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_recipient_simulator.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_visibility.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_p8_visibility_store.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tom_source_lineage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tool_handlers_graph.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tool_observation_reader.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tool_provenance.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_tool_surface.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_toolsmith.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_transport_ingress.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_transport_ingress_api.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_trust_configure.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_trust_scopes.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_trust_scopes_p2.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_turn_idempotency_ledger.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_turn_idempotency_v2.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_turn_ner_entities.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_turn_source_erasure.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_turn_source_evidence.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_turn_survivor_delivery.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_validation_sweep_fixes.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_vector_vacuum.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_wizard_autonomy.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_work_ancestry_projection.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_work_control_production_blockers.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_work_control_v1.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_work_orders.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_work_read_surface_authority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_work_source_coverage.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_worker_handler_boundaries.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_worker_heartbeat_truth.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_worker_http_authority.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_worker_integration.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_worker_lifecycle_durability.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_workers_governor.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_workspace.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_world_context_query.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_world_llm_extract.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_world_quality.py +0 -0
- {apsimo-1.4.2 → apsimo-1.4.4}/tests/test_world_supervised.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apsimo
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.4
|
|
4
4
|
Summary: Persistent identity, memory and autonomy for AI agents
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -28,15 +28,13 @@ Requires-Dist: pandas>=2.0; extra == "vectors"
|
|
|
28
28
|
Requires-Dist: pyarrow>=15.0; extra == "vectors"
|
|
29
29
|
Requires-Dist: lancedb>=0.10; extra == "vectors"
|
|
30
30
|
Provides-Extra: hermes
|
|
31
|
-
Requires-Dist: apsimo-hermes<2,>=1.4.
|
|
31
|
+
Requires-Dist: apsimo-hermes<2,>=1.4.4; extra == "hermes"
|
|
32
32
|
Provides-Extra: mcp
|
|
33
33
|
Requires-Dist: mcp[cli]<2,>=1.0; extra == "mcp"
|
|
34
34
|
Provides-Extra: lancedb
|
|
35
35
|
Requires-Dist: lancedb>=0.6; extra == "lancedb"
|
|
36
36
|
Requires-Dist: pyarrow>=14.0; extra == "lancedb"
|
|
37
37
|
Requires-Dist: pandas>=2.0; extra == "lancedb"
|
|
38
|
-
Provides-Extra: postgres
|
|
39
|
-
Requires-Dist: asyncpg>=0.29; extra == "postgres"
|
|
40
38
|
Provides-Extra: extraction
|
|
41
39
|
Requires-Dist: PyMuPDF>=1.24; extra == "extraction"
|
|
42
40
|
Requires-Dist: beautifulsoup4>=4.12; extra == "extraction"
|
|
@@ -485,8 +485,6 @@ def supported_capabilities() -> List[str]:
|
|
|
485
485
|
if _world_store is not None:
|
|
486
486
|
caps.append("context")
|
|
487
487
|
caps.append("world_model_api")
|
|
488
|
-
if _world_store is not None and hasattr(_world_store, '_config') and _world_store._config.backend == "neo4j":
|
|
489
|
-
caps.append("neo4j_backend")
|
|
490
488
|
caps.append("event_journal")
|
|
491
489
|
if _external_event_intake is not None:
|
|
492
490
|
caps.append("external_cognition_events")
|
|
@@ -820,8 +818,6 @@ async def health() -> HostHealthResponse:
|
|
|
820
818
|
if _world_store is not None and hasattr(_world_store, '_backend') and _world_store._backend is not None:
|
|
821
819
|
backend_type = type(_world_store._backend).__name__
|
|
822
820
|
notes["world_model_backend"] = f"{backend_type} connected"
|
|
823
|
-
if _world_store is not None and hasattr(_world_store, '_config') and _world_store._config.backend == "neo4j":
|
|
824
|
-
notes["neo4j"] = "Neo4j backend selected"
|
|
825
821
|
|
|
826
822
|
health_status = "ok"
|
|
827
823
|
if model_mismatch or embed_degraded or memory_backend_down:
|
|
@@ -12032,20 +12028,6 @@ async def executor_status() -> dict:
|
|
|
12032
12028
|
}
|
|
12033
12029
|
|
|
12034
12030
|
|
|
12035
|
-
# ---------------------------------------------------------------------------
|
|
12036
|
-
# Self-Knowledge Seeding
|
|
12037
|
-
# ---------------------------------------------------------------------------
|
|
12038
|
-
|
|
12039
|
-
|
|
12040
|
-
class SeedResponse(BaseModel):
|
|
12041
|
-
memories: int = 0
|
|
12042
|
-
entities: int = 0
|
|
12043
|
-
skills: int = 0
|
|
12044
|
-
insights: int = 0
|
|
12045
|
-
errors: list[str] = []
|
|
12046
|
-
skipped: list[str] = [] # Machine-readable dispositions, including retirement
|
|
12047
|
-
|
|
12048
|
-
|
|
12049
12031
|
# ---------------------------------------------------------------------------
|
|
12050
12032
|
# Commitment Tracking
|
|
12051
12033
|
# ---------------------------------------------------------------------------
|
|
@@ -13043,14 +13025,6 @@ async def extract_tom(
|
|
|
13043
13025
|
)
|
|
13044
13026
|
|
|
13045
13027
|
|
|
13046
|
-
@router.post("/seed", response_model=SeedResponse)
|
|
13047
|
-
async def seed_self_knowledge_endpoint(force: bool = Query(False, description="Compatibility flag; built-in seeding remains retired")) -> SeedResponse:
|
|
13048
|
-
"""Return the retired built-in seeding disposition without opening stores."""
|
|
13049
|
-
from apsimo.seed import seed_self_knowledge
|
|
13050
|
-
|
|
13051
|
-
return SeedResponse(**await seed_self_knowledge(force=force))
|
|
13052
|
-
|
|
13053
|
-
|
|
13054
13028
|
# ============================================================================
|
|
13055
13029
|
# World Model — Entity CRUD
|
|
13056
13030
|
# ============================================================================
|
|
@@ -13062,7 +13036,7 @@ async def create_world_entity(body: WorldEntityCreateRequest) -> WorldEntityDeta
|
|
|
13062
13036
|
raise HTTPException(status_code=501, detail="World model not initialized")
|
|
13063
13037
|
try:
|
|
13064
13038
|
from apsimo.world_model.entities import BaseEntity, ENTITY_CLASS_MAP
|
|
13065
|
-
from apsimo.world_model.
|
|
13039
|
+
from apsimo.world_model.sqlite.backend import _generate_id
|
|
13066
13040
|
cls = ENTITY_CLASS_MAP.get(body.entity_type, BaseEntity)
|
|
13067
13041
|
import dataclasses
|
|
13068
13042
|
valid = {f.name for f in dataclasses.fields(cls)}
|
|
@@ -13155,7 +13129,7 @@ async def create_world_relationship(body: WorldRelationshipCreateRequest) -> Wor
|
|
|
13155
13129
|
raise HTTPException(status_code=501, detail="World model not initialized")
|
|
13156
13130
|
try:
|
|
13157
13131
|
from apsimo.world_model.relationships import WorldRelationship
|
|
13158
|
-
from apsimo.world_model.
|
|
13132
|
+
from apsimo.world_model.sqlite.backend import _generate_id
|
|
13159
13133
|
now = datetime.now(timezone.utc).isoformat()
|
|
13160
13134
|
rel = WorldRelationship(
|
|
13161
13135
|
id=_generate_id("wr"),
|
|
@@ -105,11 +105,6 @@ def main() -> None:
|
|
|
105
105
|
# --- generate-types ---
|
|
106
106
|
sub.add_parser("generate-types", help="Export OpenAPI spec (for TypeScript generation)")
|
|
107
107
|
|
|
108
|
-
# --- seed ---
|
|
109
|
-
seed_p = sub.add_parser("seed", help="Show the retired built-in seeding disposition")
|
|
110
|
-
seed_p.add_argument("--verify", action="store_true", help="Compatibility flag; show the retirement disposition")
|
|
111
|
-
seed_p.add_argument("--force", action="store_true", help="Compatibility flag; built-in seeding remains retired")
|
|
112
|
-
|
|
113
108
|
# --- backfill ---
|
|
114
109
|
backfill_p = sub.add_parser("backfill", help="Re-embed all vectors with current model")
|
|
115
110
|
backfill_p.add_argument("--collection", default=None, help="Specific collection to backfill (default: all)")
|
|
@@ -441,10 +436,6 @@ def main() -> None:
|
|
|
441
436
|
p = len(spec.get("paths", {}))
|
|
442
437
|
print(f"✅ OpenAPI spec written to {out} ({n} schemas, {p} paths)")
|
|
443
438
|
|
|
444
|
-
elif args.command == "seed":
|
|
445
|
-
from apsimo.seed import seed_self_knowledge_summary
|
|
446
|
-
print(seed_self_knowledge_summary())
|
|
447
|
-
|
|
448
439
|
elif args.command == "backfill":
|
|
449
440
|
_load_dotenv()
|
|
450
441
|
import httpx
|
|
@@ -2398,8 +2389,8 @@ def _cmd_validate(args) -> None:
|
|
|
2398
2389
|
if llm_ok and len(found) >= 2:
|
|
2399
2390
|
print(" ✅ Full sidecar pipeline working — context assembly + LLM router live")
|
|
2400
2391
|
elif llm_ok:
|
|
2401
|
-
print(" ⚠️ LLM live but cognitive context sections are thin —
|
|
2402
|
-
"
|
|
2392
|
+
print(" ⚠️ LLM live but cognitive context sections are thin — run a few "
|
|
2393
|
+
"ordinary turns and check their retained evidence")
|
|
2403
2394
|
else:
|
|
2404
2395
|
print(" ⚪ LLM not verified — context pipeline validated, reasoning not")
|
|
2405
2396
|
|
|
@@ -91,8 +91,6 @@ def render_memory_context(memories: list[dict[str, Any]]) -> str:
|
|
|
91
91
|
source["event_time"] = "unprojected"
|
|
92
92
|
if memory.get("contradiction_count"):
|
|
93
93
|
source["contradictions"] = memory["contradiction_count"]
|
|
94
|
-
if memory.get("rerank_calibration"):
|
|
95
|
-
source["rerank_calibration"] = memory["rerank_calibration"]
|
|
96
94
|
if memory.get("rerank_status") == "unavailable":
|
|
97
95
|
source["rerank_status"] = "unavailable"
|
|
98
96
|
content = str(memory.get('content', ''))
|
|
@@ -2592,11 +2592,10 @@ async def lifespan(app: FastAPI):
|
|
|
2592
2592
|
try:
|
|
2593
2593
|
from apsimo.world_model.store import WorldModelStore
|
|
2594
2594
|
from apsimo.world_model.config import WorldModelConfig
|
|
2595
|
-
|
|
2596
|
-
world_store = WorldModelStore(WorldModelConfig(backend=_wm_backend))
|
|
2595
|
+
world_store = WorldModelStore(WorldModelConfig())
|
|
2597
2596
|
await world_store.connect()
|
|
2598
2597
|
set_world_store(world_store)
|
|
2599
|
-
logger.info("WorldModelStore
|
|
2598
|
+
logger.info("WorldModelStore connected to SQLite")
|
|
2600
2599
|
|
|
2601
2600
|
# World-model population from conversation (shadow-first). Boundary-checked
|
|
2602
2601
|
# via the directive manager. Mode from COLONY_WORLD_POPULATE_MODE
|
|
@@ -2687,13 +2686,8 @@ async def lifespan(app: FastAPI):
|
|
|
2687
2686
|
logger.warning("Extraction pipeline init skipped: %s", eexc)
|
|
2688
2687
|
except Exception as exc:
|
|
2689
2688
|
logger.warning("WorldModelStore init failed: %s", exc)
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
world_store = WorldModelStore(WorldModelConfig(backend=_wm_backend))
|
|
2693
|
-
set_world_store(world_store)
|
|
2694
|
-
logger.info("WorldModelStore initialized (without connect)")
|
|
2695
|
-
except Exception as exc2:
|
|
2696
|
-
logger.error("WorldModelStore fallback init also failed: %s", exc2)
|
|
2689
|
+
world_store = None
|
|
2690
|
+
set_world_store(None)
|
|
2697
2691
|
|
|
2698
2692
|
# --- 11. Cognition (CognitionPipeline) ---
|
|
2699
2693
|
cognition_pipeline = None
|
|
@@ -9,7 +9,6 @@ Guides the user through first-time configuration:
|
|
|
9
9
|
6. Write .env
|
|
10
10
|
7. Database setup
|
|
11
11
|
8. Autonomy & approvals (owner contact, approval policy, gates, home channel)
|
|
12
|
-
9. Self-knowledge seeding
|
|
13
12
|
10. Start sidecar + verify (10e: schedule agent workers via crontab)
|
|
14
13
|
11. Summary
|
|
15
14
|
12. Health check (colony doctor)
|
|
@@ -1685,14 +1684,14 @@ def run_autonomy_step(
|
|
|
1685
1684
|
#: (for the `python -m` fallback) and cron schedule.
|
|
1686
1685
|
WORKER_SPECS = (
|
|
1687
1686
|
{
|
|
1688
|
-
"name": "
|
|
1687
|
+
"name": "apsimo-queue-worker",
|
|
1689
1688
|
"module": "apsimo.workers.queue_worker",
|
|
1690
1689
|
"schedule": "*/5 * * * *",
|
|
1691
1690
|
"blurb": "claims approved agent_action jobs every 5 minutes and hands "
|
|
1692
1691
|
"them to your agent (without it, auto-approved jobs sit QUEUED forever)",
|
|
1693
1692
|
},
|
|
1694
1693
|
{
|
|
1695
|
-
"name": "
|
|
1694
|
+
"name": "apsimo-skills-sync",
|
|
1696
1695
|
"module": "apsimo.workers.skills_sync",
|
|
1697
1696
|
"schedule": "0 9 * * *",
|
|
1698
1697
|
"blurb": "reports your agent's installed skill index to Apsimo once a "
|
|
@@ -2378,7 +2377,6 @@ def run_init(root_dir: str | None = None, args=None) -> int:
|
|
|
2378
2377
|
"NEO4J_USER": existing.get("NEO4J_USER", "neo4j"),
|
|
2379
2378
|
"NEO4J_PASSWORD": neo4j_password or existing.get("NEO4J_PASSWORD", ""),
|
|
2380
2379
|
"NEO4J_DATABASE": existing.get("NEO4J_DATABASE", "neo4j"),
|
|
2381
|
-
"WORLD_MODEL_BACKEND": existing.get("WORLD_MODEL_BACKEND", "neo4j" if neo4j_password else "sqlite"),
|
|
2382
2380
|
"COLONY_API_KEY": existing.get("COLONY_API_KEY", secrets.token_urlsafe(32)),
|
|
2383
2381
|
"COLONY_CONTACTS_DB": existing.get("COLONY_CONTACTS_DB", str(colony_home / "data" / "contacts.db")),
|
|
2384
2382
|
"COLONY_EMBED_PROVIDER": embed_provider,
|
|
@@ -282,7 +282,7 @@ def _select_home(args, ask):
|
|
|
282
282
|
|
|
283
283
|
|
|
284
284
|
def _adapter_resources(wheel=None):
|
|
285
|
-
packages = ('apsimo_hermes/', 'apsimo_memory/'
|
|
285
|
+
packages = ('apsimo_hermes/', 'apsimo_memory/')
|
|
286
286
|
if wheel:
|
|
287
287
|
with zipfile.ZipFile(wheel) as archive:
|
|
288
288
|
resources = {name: archive.read(name) for name in archive.namelist()
|
|
@@ -344,13 +344,6 @@ import hashlib, importlib.metadata, importlib.util, json, sys
|
|
|
344
344
|
from pathlib import Path
|
|
345
345
|
expected = json.load(sys.stdin)
|
|
346
346
|
entries = importlib.metadata.entry_points()
|
|
347
|
-
aliases = []
|
|
348
|
-
for group, name, target in [('hermes_agent.plugins', 'colony', 'apsimo_hermes'),
|
|
349
|
-
('hermes_agent.memory_providers', 'colony-memory', 'apsimo_memory')]:
|
|
350
|
-
matches = [ep for ep in entries.select(group=group) if ep.name == name]
|
|
351
|
-
if len(matches) > 1 or any(ep.value != target for ep in matches):
|
|
352
|
-
raise ValueError('Conflicting legacy adapter distribution or target')
|
|
353
|
-
aliases.extend(matches)
|
|
354
347
|
selected = []
|
|
355
348
|
for group, name, module in [('hermes_agent.plugins', 'apsimo', 'apsimo_hermes'),
|
|
356
349
|
('hermes_agent.memory_providers', 'apsimo-memory', 'apsimo_memory')]:
|
|
@@ -358,14 +351,14 @@ for group, name, module in [('hermes_agent.plugins', 'apsimo', 'apsimo_hermes'),
|
|
|
358
351
|
if len(matches) > 1 or (matches and matches[0].value != module):
|
|
359
352
|
raise ValueError('Conflicting Apsimo entry point')
|
|
360
353
|
selected.append(matches[0] if matches else None)
|
|
361
|
-
if not any(selected)
|
|
354
|
+
if not any(selected):
|
|
362
355
|
print(json.dumps({'mode': 'private-directory'}))
|
|
363
356
|
sys.exit(0)
|
|
364
357
|
if not all(selected):
|
|
365
358
|
raise ValueError('Both canonical native Apsimo entry points are required')
|
|
366
|
-
identities = {(ep.dist.metadata['Name'].lower().replace('_', '-'), ep.dist.version) for ep in
|
|
359
|
+
identities = {(ep.dist.metadata['Name'].lower().replace('_', '-'), ep.dist.version) for ep in selected}
|
|
367
360
|
if len(identities) != 1:
|
|
368
|
-
raise ValueError('Canonical
|
|
361
|
+
raise ValueError('Canonical adapter registrations come from different distributions')
|
|
369
362
|
sources, external_modules, versions = {}, {}, set()
|
|
370
363
|
for ep in selected:
|
|
371
364
|
module = ep.value
|
|
@@ -473,14 +466,14 @@ def refresh_adapter(state, args):
|
|
|
473
466
|
raise ValueError('Expected one managed adapter directory; reconcile duplicate or missing bindings')
|
|
474
467
|
directory = directories[0]
|
|
475
468
|
forwarder = directory/'__init__.py'
|
|
476
|
-
modules = ('apsimo_memory',
|
|
469
|
+
modules = ('apsimo_memory',) if memory else ('apsimo_hermes',)
|
|
477
470
|
matches = [module for module in modules if not forwarder.is_symlink()
|
|
478
471
|
and forwarder.read_text() == _forwarder(adapter, module, memory)]
|
|
479
472
|
if len(matches) != 1:
|
|
480
473
|
raise ValueError('The selected profile adapter forwarder changed; reconcile it before refreshing')
|
|
481
474
|
module = matches[0]
|
|
482
475
|
if module+'/__init__.py' not in resources:
|
|
483
|
-
raise ValueError('New adapter lacks the
|
|
476
|
+
raise ValueError('New adapter lacks the canonical module required by this forwarder')
|
|
484
477
|
target = directory/'plugin.yaml'
|
|
485
478
|
if target.is_symlink() or target.read_bytes() != old_resources[module+'/plugin.yaml']:
|
|
486
479
|
raise ValueError('The selected profile adapter manifest changed; reconcile it before refreshing')
|
|
@@ -771,7 +764,7 @@ def run(root_dir=None, args=None):
|
|
|
771
764
|
'COLONY_PERSONA_NAME': agent_name, 'COLONY_CONTACTS_DB': str(state/'contacts.db'),
|
|
772
765
|
'COLONY_API_KEYRING_PATH': str(state/'api-keyring.json'), 'COLONY_API_KEY': '',
|
|
773
766
|
'COLONY_CLIENT_API_KEY': key, 'COLONY_GRAPH_ENABLED': 'false',
|
|
774
|
-
'COLONY_EMBED_PROVIDER': 'skip',
|
|
767
|
+
'COLONY_EMBED_PROVIDER': 'skip',
|
|
775
768
|
'COLONY_AUTONOMY_PRESET': 'passive', 'COLONY_EMBEDDED_WORKER_ENABLED': 'false',
|
|
776
769
|
'COLONY_SOURCE_CLAIMS': 'on'}
|
|
777
770
|
values.update({
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Schedulable agent-side workers, available as installed console commands.
|
|
2
|
+
|
|
3
|
+
- ``apsimo-agent-bridge`` (:mod:`apsimo.workers.agent_bridge`) runs
|
|
4
|
+
initiative polling, job dispatch, skills sync and circuit health checks.
|
|
5
|
+
- ``apsimo-queue-worker`` (:mod:`apsimo.workers.queue_worker`) claims
|
|
6
|
+
approved ``agent_action`` jobs and hands them to the agent.
|
|
7
|
+
- ``apsimo-skills-sync`` (:mod:`apsimo.workers.skills_sync`) reports
|
|
8
|
+
the agent's installed skill index to Apsimo.
|
|
9
|
+
|
|
10
|
+
These modules are stdlib-only so the workers can run without the full
|
|
11
|
+
sidecar dependency stack. Do not import heavy dependencies here.
|
|
12
|
+
"""
|
|
@@ -332,7 +332,7 @@ def run_cycle(cfg: Dict[str, Any]) -> int:
|
|
|
332
332
|
|
|
333
333
|
|
|
334
334
|
def run_forever(cfg: Dict[str, Any]) -> None:
|
|
335
|
-
print(f"
|
|
335
|
+
print(f"apsimo-worker {cfg['node_id']} polling {cfg['colony_url']} "
|
|
336
336
|
f"every {cfg['poll_secs']}s (caps={cfg['capabilities']}, "
|
|
337
337
|
f"types={cfg['job_types']})")
|
|
338
338
|
while True:
|
|
@@ -354,7 +354,7 @@ def main(argv: Optional[list] = None) -> int:
|
|
|
354
354
|
except Exception:
|
|
355
355
|
pass
|
|
356
356
|
parser = argparse.ArgumentParser(
|
|
357
|
-
prog="
|
|
357
|
+
prog="apsimo-worker",
|
|
358
358
|
description="Claim typed Colony jobs and execute them read/analyse-only.")
|
|
359
359
|
parser.add_argument("--dry-run", action="store_true",
|
|
360
360
|
help="print resolved config and exit (no network)")
|
|
@@ -367,7 +367,7 @@ def main(argv: Optional[list] = None) -> int:
|
|
|
367
367
|
safe = dict(cfg)
|
|
368
368
|
safe["api_key"] = "***" if cfg["api_key"] else ""
|
|
369
369
|
safe["llm_api_key"] = "***" if cfg["llm_api_key"] else ""
|
|
370
|
-
print("
|
|
370
|
+
print("apsimo-worker (dry run -- no network calls):")
|
|
371
371
|
for k, v in safe.items():
|
|
372
372
|
print(f" {k}: {v}")
|
|
373
373
|
return 0
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"""Claim Colony agent_action jobs and hand them to the agent.
|
|
2
2
|
|
|
3
|
-
Installed as the ``
|
|
4
|
-
logic moved here unchanged from
|
|
5
|
-
``plugins/hermes-plugin/poller/colony-queue-worker.py`` (v0.16.0),
|
|
6
|
-
which remains as a thin back-compat wrapper.
|
|
3
|
+
Installed as the ``apsimo-queue-worker`` console command.
|
|
7
4
|
|
|
8
5
|
This is the execution half of the agent-as-sensor loop:
|
|
9
6
|
|
|
@@ -24,7 +21,7 @@ close the loop with plain curl — no special tooling needed:
|
|
|
24
21
|
- complete the job: POST {COLONY_URL}/v1/host/queue/jobs/{id}/complete
|
|
25
22
|
- fail the job: POST {COLONY_URL}/v1/host/queue/jobs/{id}/fail
|
|
26
23
|
|
|
27
|
-
Environment
|
|
24
|
+
Environment:
|
|
28
25
|
COLONY_URL sidecar URL (default http://127.0.0.1:7777)
|
|
29
26
|
COLONY_API_KEY API key (default dev-mode-no-key)
|
|
30
27
|
COLONY_JOBS_WEBHOOK_URL agent webhook (default http://127.0.0.1:8644/webhooks/colony-jobs)
|
|
@@ -414,7 +411,7 @@ def run(cfg: Dict[str, Any]) -> int:
|
|
|
414
411
|
|
|
415
412
|
def main(argv: Optional[list] = None) -> int:
|
|
416
413
|
parser = argparse.ArgumentParser(
|
|
417
|
-
prog="
|
|
414
|
+
prog="apsimo-queue-worker",
|
|
418
415
|
description="Claim Colony agent_action jobs and hand them to the agent webhook.",
|
|
419
416
|
)
|
|
420
417
|
parser.add_argument(
|
|
@@ -426,7 +423,7 @@ def main(argv: Optional[list] = None) -> int:
|
|
|
426
423
|
|
|
427
424
|
cfg = load_config()
|
|
428
425
|
if args.dry_run:
|
|
429
|
-
print("
|
|
426
|
+
print("apsimo-queue-worker (dry run — no network calls):")
|
|
430
427
|
print(f" colony_url: {cfg['colony_url']}")
|
|
431
428
|
print(f" webhook_url: {cfg['webhook_url']}")
|
|
432
429
|
print(f" node_id: {cfg['node_id']}")
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"""Report the agent's skill index to Colony.
|
|
2
2
|
|
|
3
|
-
Installed as the ``
|
|
4
|
-
logic moved here unchanged from
|
|
5
|
-
``plugins/hermes-plugin/poller/colony-skills-sync.py`` (v0.18.0),
|
|
6
|
-
which remains as a thin back-compat wrapper.
|
|
3
|
+
Installed as the ``apsimo-skills-sync`` console command.
|
|
7
4
|
|
|
8
5
|
Scans the Hermes skills directory for SKILL.md files, parses the
|
|
9
6
|
frontmatter (name / description / tags), and POSTs the index to
|
|
@@ -16,7 +13,7 @@ installing new skills. The TypeScript OpenClaw plugin ships the same
|
|
|
16
13
|
sync built-in (src/hermes-skills.ts); this worker is for deployments
|
|
17
14
|
using the Python Hermes plugin.
|
|
18
15
|
|
|
19
|
-
Environment
|
|
16
|
+
Environment:
|
|
20
17
|
COLONY_URL sidecar URL (default http://127.0.0.1:7777)
|
|
21
18
|
COLONY_API_KEY API key (default dev-mode-no-key)
|
|
22
19
|
HERMES_SKILLS_DIR skills tree (default ~/.hermes/skills)
|
|
@@ -121,7 +118,7 @@ def report(observations: list) -> int:
|
|
|
121
118
|
|
|
122
119
|
def main(argv: Optional[list] = None) -> int:
|
|
123
120
|
parser = argparse.ArgumentParser(
|
|
124
|
-
prog="
|
|
121
|
+
prog="apsimo-skills-sync",
|
|
125
122
|
description="Report the agent's installed skill index to Colony.",
|
|
126
123
|
)
|
|
127
124
|
parser.add_argument(
|
|
@@ -137,7 +134,7 @@ def main(argv: Optional[list] = None) -> int:
|
|
|
137
134
|
print(f"No skills found under {base}")
|
|
138
135
|
return 0
|
|
139
136
|
if args.dry_run:
|
|
140
|
-
print("
|
|
137
|
+
print("apsimo-skills-sync (dry run — nothing reported):")
|
|
141
138
|
for obs in observations:
|
|
142
139
|
print(f" - {obs['entity_id']}: {obs['payload'].get('description', '')}")
|
|
143
140
|
print(f"Would report {len(observations)} skills from {base}")
|
|
@@ -8,7 +8,7 @@ Quick start::
|
|
|
8
8
|
|
|
9
9
|
from apsimo.world_model import WorldModelStore, WorldModelConfig
|
|
10
10
|
|
|
11
|
-
config = WorldModelConfig(
|
|
11
|
+
config = WorldModelConfig(sqlite_path=":memory:")
|
|
12
12
|
async with WorldModelStore(config) as store:
|
|
13
13
|
entity = await store.upsert_entity(PersonEntity(
|
|
14
14
|
id="we-000-test",
|
|
@@ -29,11 +29,7 @@ class WorldModelConfig:
|
|
|
29
29
|
entity_resolution_enabled: bool = True
|
|
30
30
|
|
|
31
31
|
# ── Backend ────────────────────────────────────────────────────────
|
|
32
|
-
#
|
|
33
|
-
# only the legacy entity/relationship graph, not observation parity.
|
|
34
|
-
backend: str = "sqlite" # "sqlite" | "neo4j" | "postgres"
|
|
35
|
-
neo4j_uri: str = "bolt://localhost:7687"
|
|
36
|
-
neo4j_database: str = "neo4j"
|
|
32
|
+
# Entities, relationships and source-backed observations share one store.
|
|
37
33
|
sqlite_path: str = field(default_factory=_default_sqlite_path)
|
|
38
34
|
|
|
39
35
|
# ── Confidence thresholds ──────────────────────────────────────────
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"""World Model primary store interface.
|
|
2
2
|
|
|
3
|
-
SQLite
|
|
4
|
-
legacy entity/relationship adapters without typed-observation support.
|
|
3
|
+
SQLite stores entities, relationships and source-backed typed observations.
|
|
5
4
|
All callers must use this interface and never access the backend directly.
|
|
6
5
|
"""
|
|
7
6
|
|
|
8
7
|
import logging
|
|
9
|
-
import os
|
|
10
8
|
from datetime import datetime, timedelta, timezone
|
|
11
9
|
from dataclasses import dataclass, field
|
|
12
10
|
from typing import Any, Dict, List, Optional, Union
|
|
@@ -58,10 +56,8 @@ class WorldModelStats:
|
|
|
58
56
|
class WorldModelStore:
|
|
59
57
|
"""Primary interface to the Colony World Model entity graph.
|
|
60
58
|
|
|
61
|
-
SQLite
|
|
62
|
-
|
|
63
|
-
observation methods reject an actual legacy backend rather than claiming
|
|
64
|
-
equivalent provenance, correction, temporal-view or erasure behavior.
|
|
59
|
+
SQLite provides provenance, correction, temporal views and erasure for
|
|
60
|
+
typed observations alongside the entity and relationship graph.
|
|
65
61
|
All methods are async. Callers MUST NOT access the backing store directly.
|
|
66
62
|
"""
|
|
67
63
|
|
|
@@ -70,44 +66,8 @@ class WorldModelStore:
|
|
|
70
66
|
self._backend: Optional[SQLiteBackend] = None
|
|
71
67
|
|
|
72
68
|
async def connect(self) -> None:
|
|
73
|
-
"""
|
|
74
|
-
|
|
75
|
-
try:
|
|
76
|
-
from apsimo.world_model.neo4j.backend import Neo4jBackend
|
|
77
|
-
neo4j_uri = self._config.neo4j_uri
|
|
78
|
-
neo4j_db = self._config.neo4j_database
|
|
79
|
-
neo4j_user = os.environ.get("NEO4J_USER", "neo4j")
|
|
80
|
-
neo4j_pass = os.environ.get("NEO4J_PASSWORD", "")
|
|
81
|
-
if neo4j_uri and neo4j_pass:
|
|
82
|
-
self._backend = Neo4jBackend(
|
|
83
|
-
uri=neo4j_uri,
|
|
84
|
-
database=neo4j_db,
|
|
85
|
-
username=neo4j_user,
|
|
86
|
-
password=neo4j_pass,
|
|
87
|
-
)
|
|
88
|
-
else:
|
|
89
|
-
logger.warning("NEO4J_URI or NEO4J_PASSWORD not set — falling back to sqlite")
|
|
90
|
-
self._backend = SQLiteBackend(self._config.sqlite_path)
|
|
91
|
-
except ImportError:
|
|
92
|
-
logger.warning("neo4j driver not installed — falling back to sqlite")
|
|
93
|
-
self._backend = SQLiteBackend(self._config.sqlite_path)
|
|
94
|
-
elif self._config.backend == "postgres":
|
|
95
|
-
try:
|
|
96
|
-
from apsimo.world_model.postgres.backend import PostgresBackend
|
|
97
|
-
pg_conn = os.environ.get("WORLD_MODEL_PG_CONNECTION", "")
|
|
98
|
-
if pg_conn:
|
|
99
|
-
self._backend = PostgresBackend(pg_conn)
|
|
100
|
-
else:
|
|
101
|
-
logger.warning("WORLD_MODEL_PG_CONNECTION not set — falling back to sqlite")
|
|
102
|
-
self._backend = SQLiteBackend(self._config.sqlite_path)
|
|
103
|
-
except ImportError:
|
|
104
|
-
logger.warning("asyncpg not installed — falling back to sqlite")
|
|
105
|
-
self._backend = SQLiteBackend(self._config.sqlite_path)
|
|
106
|
-
elif self._config.backend == "sqlite":
|
|
107
|
-
self._backend = SQLiteBackend(self._config.sqlite_path)
|
|
108
|
-
else:
|
|
109
|
-
logger.warning("WorldModel backend '%s' not supported — defaulting to sqlite", self._config.backend)
|
|
110
|
-
self._backend = SQLiteBackend(self._config.sqlite_path)
|
|
69
|
+
"""Open the canonical SQLite world-model store."""
|
|
70
|
+
self._backend = SQLiteBackend(self._config.sqlite_path)
|
|
111
71
|
await self._backend.connect()
|
|
112
72
|
|
|
113
73
|
async def close(self) -> None:
|
|
@@ -381,14 +341,9 @@ class WorldModelStore:
|
|
|
381
341
|
async def reinforce_entity(self, entity_id: str) -> None:
|
|
382
342
|
"""Record a repeat mention without raising evidential confidence.
|
|
383
343
|
|
|
384
|
-
Familiarity updates last_seen/count.
|
|
344
|
+
Familiarity updates last_seen/count.
|
|
385
345
|
"""
|
|
386
|
-
|
|
387
|
-
if fn is None:
|
|
388
|
-
logger.debug("reinforce_entity unsupported by %s backend",
|
|
389
|
-
type(self._backend).__name__)
|
|
390
|
-
return
|
|
391
|
-
await fn(entity_id)
|
|
346
|
+
await self._backend.reinforce_entity(entity_id)
|
|
392
347
|
|
|
393
348
|
async def add_entity_alias(self, entity_id: str, alias: str) -> None:
|
|
394
349
|
"""Add an alias to an entity's alias list if not already present."""
|
|
@@ -432,31 +387,20 @@ class WorldModelStore:
|
|
|
432
387
|
# ── Observations ─────────────────────────────────────────────────────────
|
|
433
388
|
|
|
434
389
|
async def record_property_observation(self, **kwargs):
|
|
435
|
-
"""Append one scoped assertion; producers must supply canonical evidence.
|
|
436
|
-
|
|
437
|
-
SQLite is the qualified observation backend in this release. Other
|
|
438
|
-
adapters remain valid for legacy entities/edges and report unsupported
|
|
439
|
-
rather than substituting old unqualified property values.
|
|
440
|
-
"""
|
|
390
|
+
"""Append one scoped assertion; producers must supply canonical evidence."""
|
|
441
391
|
from .observations import observation
|
|
442
|
-
put = getattr(self._backend, 'put_property_observation', None)
|
|
443
|
-
if put is None:
|
|
444
|
-
raise NotImplementedError('typed_world_observations_require_sqlite')
|
|
445
392
|
data = observation(**kwargs)
|
|
446
393
|
if await self.get_entity(data['entity_id'], min_confidence=0) is None:
|
|
447
394
|
raise ValueError('world_observation_entity_not_found')
|
|
448
|
-
result = await
|
|
395
|
+
result = await self._backend.put_property_observation(data)
|
|
449
396
|
self._emit_change('property_observed', entity_id=data['entity_id'], observation_id=data['observation_id'])
|
|
450
397
|
return result
|
|
451
398
|
|
|
452
399
|
async def property_state(self, entity_id, property_key, *, subject_person_id,
|
|
453
400
|
viewer_scope, shareability, as_of=None, source_ledger=None):
|
|
454
401
|
from .observations import project, iso
|
|
455
|
-
reader = getattr(self._backend, 'current_property_observations', None)
|
|
456
|
-
if reader is None:
|
|
457
|
-
raise NotImplementedError('typed_world_observations_require_sqlite')
|
|
458
402
|
moment = iso(as_of if as_of is not None else datetime.now(timezone.utc).isoformat())
|
|
459
|
-
rows = await
|
|
403
|
+
rows = await self._backend.current_property_observations(entity_id, property_key, subject_person_id=subject_person_id,
|
|
460
404
|
viewer_scope=viewer_scope, shareability=shareability, as_of=moment)
|
|
461
405
|
from .source_reports import validate_reports
|
|
462
406
|
rows = validate_reports(rows, source_ledger)
|
|
@@ -465,10 +409,7 @@ class WorldModelStore:
|
|
|
465
409
|
as_of=moment, coverage_limited=len(rows) >= 2001)
|
|
466
410
|
|
|
467
411
|
async def erase_property_evidence(self, evidence_refs, *, subject_person_id):
|
|
468
|
-
|
|
469
|
-
if eraser is None:
|
|
470
|
-
raise NotImplementedError('typed_world_observations_require_sqlite')
|
|
471
|
-
removed = await eraser(evidence_refs, subject_person_id=subject_person_id)
|
|
412
|
+
removed = await self._backend.erase_property_evidence(evidence_refs, subject_person_id=subject_person_id)
|
|
472
413
|
if removed:
|
|
473
414
|
self._emit_change('property_evidence_invalidated', observation_ids=removed)
|
|
474
415
|
return removed
|
|
@@ -476,13 +417,10 @@ class WorldModelStore:
|
|
|
476
417
|
async def property_views(self, entity_ids, *, subject_person_id, viewer_scope, shareability,
|
|
477
418
|
as_of=None, source_ledger=None, limit=8):
|
|
478
419
|
"""Bounded scoped facts about already-relevant entities for turn context."""
|
|
479
|
-
keys = getattr(self._backend, 'property_keys', None)
|
|
480
|
-
if keys is None:
|
|
481
|
-
raise NotImplementedError('typed_world_observations_require_sqlite')
|
|
482
420
|
limit = max(1, min(int(limit), 32))
|
|
483
421
|
result = []
|
|
484
422
|
for entity_id in list(dict.fromkeys(entity_ids))[:8]:
|
|
485
|
-
properties = await
|
|
423
|
+
properties = await self._backend.property_keys(entity_id, subject_person_id=subject_person_id, viewer_scope=viewer_scope,
|
|
486
424
|
shareability=shareability, limit=limit)
|
|
487
425
|
for key in properties:
|
|
488
426
|
result.append(await self.property_state(entity_id, key, subject_person_id=subject_person_id,
|
|
@@ -510,19 +448,14 @@ class WorldModelStore:
|
|
|
510
448
|
"""Remove low-confidence entities that haven't been seen within the
|
|
511
449
|
TTL (config: low_confidence_entity_ttl_days / min_confidence_for_query
|
|
512
450
|
by default). High-confidence entities are never pruned regardless of
|
|
513
|
-
age. Returns {"status", "pruned", "cutoff", "max_confidence"}
|
|
514
|
-
backends without a prune primitive report skipped instead of lying."""
|
|
515
|
-
backend_prune = getattr(self._backend, "prune_entities", None)
|
|
516
|
-
if backend_prune is None:
|
|
517
|
-
return {"status": "skipped",
|
|
518
|
-
"reason": f"{type(self._backend).__name__} has no prune"}
|
|
451
|
+
age. Returns {"status", "pruned", "cutoff", "max_confidence"}."""
|
|
519
452
|
ttl = int(ttl_days if ttl_days is not None
|
|
520
453
|
else self._config.low_confidence_entity_ttl_days)
|
|
521
454
|
ceiling = float(max_confidence if max_confidence is not None
|
|
522
455
|
else self._config.min_confidence_for_query)
|
|
523
456
|
cutoff = (datetime.now(timezone.utc) - timedelta(days=ttl)
|
|
524
457
|
).strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
525
|
-
pruned = await
|
|
458
|
+
pruned = await self._backend.prune_entities(cutoff, ceiling)
|
|
526
459
|
if pruned:
|
|
527
460
|
logger.info("world model pruned %d stale low-confidence entities "
|
|
528
461
|
"(last_seen < %s, confidence < %.2f)",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apsimo
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.4
|
|
4
4
|
Summary: Persistent identity, memory and autonomy for AI agents
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -28,15 +28,13 @@ Requires-Dist: pandas>=2.0; extra == "vectors"
|
|
|
28
28
|
Requires-Dist: pyarrow>=15.0; extra == "vectors"
|
|
29
29
|
Requires-Dist: lancedb>=0.10; extra == "vectors"
|
|
30
30
|
Provides-Extra: hermes
|
|
31
|
-
Requires-Dist: apsimo-hermes<2,>=1.4.
|
|
31
|
+
Requires-Dist: apsimo-hermes<2,>=1.4.4; extra == "hermes"
|
|
32
32
|
Provides-Extra: mcp
|
|
33
33
|
Requires-Dist: mcp[cli]<2,>=1.0; extra == "mcp"
|
|
34
34
|
Provides-Extra: lancedb
|
|
35
35
|
Requires-Dist: lancedb>=0.6; extra == "lancedb"
|
|
36
36
|
Requires-Dist: pyarrow>=14.0; extra == "lancedb"
|
|
37
37
|
Requires-Dist: pandas>=2.0; extra == "lancedb"
|
|
38
|
-
Provides-Extra: postgres
|
|
39
|
-
Requires-Dist: asyncpg>=0.29; extra == "postgres"
|
|
40
38
|
Provides-Extra: extraction
|
|
41
39
|
Requires-Dist: PyMuPDF>=1.24; extra == "extraction"
|
|
42
40
|
Requires-Dist: beautifulsoup4>=4.12; extra == "extraction"
|