apsimo 1.4.3__tar.gz → 1.4.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {apsimo-1.4.3 → apsimo-1.4.5}/PKG-INFO +2 -4
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/host.py +9 -35
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/source_projection.py +2 -2
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cli.py +4 -12
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/graph/client.py +3 -3
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/graph/queries.py +10 -0
- apsimo-1.4.5/apsimo/memory/__init__.py +1 -0
- {apsimo-1.4.3/apsimo/intelligence/graph → apsimo-1.4.5/apsimo/memory}/recall.py +1 -7
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/qualification/memory_cases.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/server.py +5 -11
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/setup.py +3 -5
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/setup_hermes.py +22 -15
- apsimo-1.4.5/apsimo/setup_skills.py +90 -0
- apsimo-1.4.5/apsimo/workers/__init__.py +12 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/workers/colony_worker.py +3 -3
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/workers/queue_worker.py +4 -7
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/workers/skills_sync.py +4 -7
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/__init__.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/config.py +1 -5
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/store.py +14 -81
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo.egg-info/PKG-INFO +2 -4
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo.egg-info/SOURCES.txt +5 -11
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo.egg-info/entry_points.txt +0 -5
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo.egg-info/requires.txt +1 -4
- apsimo-1.4.5/apsimo.egg-info/top_level.txt +1 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/pyproject.toml +3 -9
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_apsimo_compat.py +10 -20
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_canonical_source_read.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_causal_falsifiability.py +1 -2
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_causal_query.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_causal_query_only_guard.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_current_work_recall_selection.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_general_governance.py +3 -19
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_media_read_reference_presentation.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_initiative_work.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_setup.py +158 -18
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_procedure_source_context.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_recall_hybrid.py +3 -2
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_recall_request_repetition.py +2 -2
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_recall_source_presentation.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_recall_unified_context.py +44 -2
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_short_source_context.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_annotations.py +5 -5
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_audio_claims.py +3 -3
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_claim_projection.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_event_precision.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_excerpt_lineage.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_vectors.py +5 -5
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_server_integration.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_workers_install.py +34 -55
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_world_entity_reinforcement.py +1 -1
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_world_model_prune.py +1 -13
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_world_observations.py +2 -9
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_world_populator.py +1 -1
- apsimo-1.4.5/tests/test_world_store_api.py +49 -0
- apsimo-1.4.3/apsimo/compat.py +0 -53
- apsimo-1.4.3/apsimo/seed.py +0 -41
- apsimo-1.4.3/apsimo/workers/__init__.py +0 -21
- apsimo-1.4.3/apsimo/world_model/neo4j/__init__.py +0 -5
- apsimo-1.4.3/apsimo/world_model/neo4j/backend.py +0 -654
- apsimo-1.4.3/apsimo/world_model/postgres/__init__.py +0 -1
- apsimo-1.4.3/apsimo/world_model/postgres/backend.py +0 -683
- apsimo-1.4.3/apsimo.egg-info/top_level.txt +0 -2
- apsimo-1.4.3/colony_sidecar/__init__.py +0 -4
- apsimo-1.4.3/tests/test_neo4j_backend.py +0 -211
- apsimo-1.4.3/tests/test_seed_retirement.py +0 -117
- {apsimo-1.4.3 → apsimo-1.4.5}/LICENSE +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/README.md +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/__main__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/agent/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/agent/client.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/agent/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/agents/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/agents/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/agents/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/agents/websocket.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/auth_telemetry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/authority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/contact_grants.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/middleware.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/commitment_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/context_gate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/executions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/followup_plans.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/governed_actions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/initiative_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/mining.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/observations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/social_state.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/task_queue.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/temporal_followups.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/transport.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/routers/transport_ingress_api.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/schemas/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/api/schemas/host.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/autonomy/cli.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/autonomy/condition_worker.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/autonomy/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/autonomy/loop.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/autonomy/registry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/autonomy/scheduler.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/autonomy/synthesis.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/backup.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/contradictions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/decay.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/promotion.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/resolve.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/source_claims.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/source_time.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/beliefs/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/aggregators.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/composer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/delivery.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/engagement.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/enhancer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/scheduler.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/briefings/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/block.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/cli.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/genesis.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/identity.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/keys.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/local_keys.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/manager.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/node.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/plugin_transactions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/protocol.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/state_machine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/storage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/transactions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/chain/validation.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/channels/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/channels/manifest.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/channels/migrations/001_channels_schema.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/channels/phone_gateways.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/channels/presence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/channels/router.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/channels/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/charter.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/drive_governance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/evidence_pipeline.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/external_events.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/goal_spine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/introspection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/prompt.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/runtime.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/cognition/trigger.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/commitments/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/commitments/local_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/commitments/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/commitments/work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/compression/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/connectors/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/connectors/base.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/connectors/caldav_calendar.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/connectors/fs_documents.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/connectors/imap_email.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/connectors/manager.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/connectors/webhook_pull.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/comms.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/exporters/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/exporters/vcard.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/identity_links.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/importer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/importers/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/importers/batch.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/importers/macos_contacts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/migrations/001_contacts_schema.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/migrations/002_trust_scopes.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/migrations/003_open_gateway_enum.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/migrations/004_contact_provision_operations.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/migrations/005_identity_links.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/scoring.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/transport_ingress.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contacts/world_bridge.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contextgate/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contextgate/chunker.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contextgate/estimate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contextgate/gate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/contextgate/retrieve.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/delivery/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/delivery/bridge.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/delivery/channels.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/delivery/classification.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/delivery/rate_limiter.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/delivery/reachout_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directed/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directed/audit.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directed/intake.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directed/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directed/service.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directives/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directives/evidence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directives/extractor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directives/guard.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directives/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directives/service.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/directives/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/doctor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/environment.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/events/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/events/broadcaster.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/events/bus.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/events/journal.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/events/stream.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/events/types.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/execution_results.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feedback/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feedback/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feeds/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feeds/cli.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feeds/engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feeds/example-feed.yaml +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feeds/hermes_cron.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feeds/manager.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feeds/spec.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/feeds/template.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/audit.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/communication_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/context_provenance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/env_risk.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/guard_audit.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/base.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/l1_recipient.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/l2_pii.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/l3_cross_context.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/l4_trust_tier.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/l5_injection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/l6_review.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/l7_delay.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/layers/tom2_epistemic.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/pending_dispatch.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/pipeline.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/rejection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/response_guard.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/rulesets/injection_v1.yaml +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/surface_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/gate/taint.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/genesis.json +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/decomposer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/inference.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/priority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/queue_bridge.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/replan.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/schema.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/goals/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/governed_actions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/harness_integration/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/harness_integration/context.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/harness_integration/skills.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity/participants.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity/resolver.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/builder.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/corpus.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/runner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/briefings.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/chain.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/goals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/memory.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/neo4j_cognition.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/relationship.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/sessions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/skills.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/task_queue.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/world_model.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/self_query.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/self_reflection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/skill.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/identity_bootstrap/verifier.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/action_registry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/approval_authority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/approval_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/assignment.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/backup_evidence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/context_freshness.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/native_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/standing_approvals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/initiatives/temporal_followup.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/cognition/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/cognition/gap_detector.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/cognition/metalearner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/cognition/metrics_collector.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/cognition/performance_index.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/cognition/registry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/cognition/strategy_adjuster.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/cognition/types.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/anomaly_detector.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/initiative_engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/preference_learner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/research_orchestrator.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/self_directed_thinker.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/self_reflector.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/session_continuity.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/task_planner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/components/tool_learner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/graph/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/graph/consolidator.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/graph/distiller.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/graph/migrations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/graph/reconciler.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/graph/schema.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/learning/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/learning/continuous_learner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/learning/feedback_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/mind_model/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/mind_model/graph_baseline.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/mind_model/signal_collector.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/relationships/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/relationships/profiler.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/relationships/scorer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/relationships/signal_floor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/relationships/trust_tiers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/synthesis/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/synthesis/connection_discoverer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/synthesis/cross_domain_analyzer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_deliverer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_validator.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/synthesis/novelty_scorer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/turn_middleware/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/intelligence/turn_middleware/memory_sync.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mcp/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mcp/__main__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mcp/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mcp/server.py +0 -0
- {apsimo-1.4.3/apsimo/intelligence/graph → apsimo-1.4.5/apsimo/memory}/selection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/migrations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mining/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mining/corpus.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mining/escalations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mining/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/mining/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/models/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/models/memory.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/models/mesh.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/models/person.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/models/signal.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/observations/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/observations/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/patterns/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/patterns/extract.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/patterns/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/persona/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/persona/engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/persona/manifest.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/projects/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/projects/engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/projects/event_outbox.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/projects/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/projects/planner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/projects/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/proposals/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/proposals/engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/proposals/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/qualification/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/qualification/cases.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/qualification/cli.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/qualification/records.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/qualification/report.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/qualification/runner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/qualification/structured_cases.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/reasoning/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/reasoning/executor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/reasoning/loop.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/reasoning/native_tools/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/reasoning/native_tools/calculate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/reasoning/native_tools/file_ops.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/reasoning/native_tools/web_search.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/reasoning/tool_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/redact/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/repos/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/repos/mirrors.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/artifact.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/gatherer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/pipeline.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/search/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/search/base.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/search/brave.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/search/cache.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/search/duckduckgo.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/search/orchestrator.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/search/serpapi.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/search/tavily.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/research/synthesizer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/complexity_scorer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/endpoints.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/fallback.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/functions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/native_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/router.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/self_learning.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/router/tiers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sandbox/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sandbox/backend.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sandbox/manager.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/scope_bounds.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/backends/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/backends/base.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/backends/env.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/backends/keyring.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/backends/onepassword.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/cli.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/manager.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/migration.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/secrets/types.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/appraisals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/benchmark.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/brief.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/event_concerns.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/execution_forecasts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/expectations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/experiments.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/journal.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/judgments.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/native_outcomes.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/params.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/perspective.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/reconcile.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/reply_forecasts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/runtime_forecasts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/runtime_models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/settlement.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/situation.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/supervised.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/thinker.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/trust.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/self_model/workspace.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/services/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/services/agent_bridge.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/services/initiative_executor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/services/instance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sessions/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sessions/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sessions/context_loader.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sessions/federation_session.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sessions/isolated_session.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sessions/reports.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/sessions/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/setup_local_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/setup_native_goals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/setup_native_reviews.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/base.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/budget.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/executor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/executors/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/executors/behavioral_correction.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/executors/capability_gap.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/executors/data_quality.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/executors/knowledge_acquisition.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/executors/operational_hygiene.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/executors/subsystem_health.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/hermes_export.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/index.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/learning/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/learning/novelty_detector.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/learning/pattern_extractor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/learning/triggers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/loader.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/migrations/002_progressive_loading.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/migrations/backfill_triggers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/packager.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/protocols.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/registry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/runtime.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/sandbox_runner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/scheduler.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/schema.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/security/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/security/guards.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills/security/scanner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills_memory/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills_memory/distill.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills_memory/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills_memory/retrieve.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/skills_memory/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/surprise/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/surprise/accumulation.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/surprise/scorer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/surprise/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/action_receipts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/approval_relay_canary.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/contract.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/events.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/governor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/handlers/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/handlers/base.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/handlers/inference.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/handlers/monitoring.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/handlers/registry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/handlers/subtask_handler.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/handlers/system_maintenance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/mesh_integration.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/models.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/queue_manager.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/routing.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/scheduler.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/schema.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/work_control.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/task_queue/worker.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/telemetry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/affect.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/approvals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/arcs.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/asymmetry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/eligibility.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/engagement.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/exposure.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/extractor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/fact_adapters.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/facts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/integration.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/leveled.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/levels.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/recipient_audit.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/recipient_simulator.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/source_lineage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/tom2.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/visibility.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tom/visibility_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tools/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tools/definitions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/tools/handlers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/toolsmith/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/toolsmith/authority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/toolsmith/engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/toolsmith/integrity.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/toolsmith/miner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/toolsmith/policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/toolsmith/registry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/audio.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/documents.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/executions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/hermes_history.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/hermes_kanban.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/hermes_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/history_references.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/idempotency.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/local_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/media.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/reported_workers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/source_annotations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/source_attribution.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/source_read.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/source_vectors.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/tool_observations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/turns/video.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/util/autonomy_preset.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/util/instance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/util/model_output.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/util/quiet_hours.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/util/session_safety.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/util/temporal.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/backfill.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/caption.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/collections.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/embedder.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/image_preprocess.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/image_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/indexes.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/migrate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/multimodal_provider.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/multimodal_types.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/openai_provider.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/query.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/reranker.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/safety_image.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/scanner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/setup.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/vector/tiers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/work_orders.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/workers/agent_bridge.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/causal_maintenance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/causal_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/causal_query.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/confidence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/constants.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/entities.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/expectation_resolvers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/base.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/conversation_extractor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/detector.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/document_extractor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/csv_fmt.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/html_fmt.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/json_fmt.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/pdf.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/text.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/llm_extractor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/extraction/pipeline.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/integrations/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/integrations/mind_model_bridge.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/integrations/social_intel_bridge.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/jobs/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/jobs/extraction_job.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/llm_extract.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/observations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/populator.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/relationships.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/resolution/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/resolution/entity_resolver.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/resolution/merge_audit.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/resolution/merge_workflow.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/source_reports.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/sqlite/__init__.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/sqlite/backend.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo/world_model/sqlite/schema.sql +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/apsimo.egg-info/dependency_links.txt +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/setup.cfg +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_accepted_local_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_adaptive_params.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_affect.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_agent_action_routing.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_agent_api.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_agent_bridge.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_agent_bridge_service.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_agent_sdk.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_agent_sensor_loop.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_agent_snapshot.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_agent_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_annotated_recall_reinforcement.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_answer_source_lineage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_appraisal_incident_decisions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_approval_gate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_approval_relay_canary.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_apsimo_harness_guidance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_assignment_engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_audit_cleanup.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_auth_coverage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_auth_migration_readiness.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_authz_scope_api.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_autonomy_preset.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_backup.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_backup_receipt_evidence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_beliefs.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_bind_auth_guard.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_boundary_fail_closed.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_bounded_approval_authority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_briefing_aggregators.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_canonical_scoped_context.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_causal_extract.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_causal_maintenance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_causal_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_chain_keys.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_channel_preferences.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_channel_registry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_channel_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_evidence_pipeline.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_evidence_server_wiring.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_goal_spine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_observability.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_p4_controlled_learning.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_p4_server_integration.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_p6_p7_server_wiring.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_p7_drive_governance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_phase_b_runtime.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_phase_c_scheduler.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_cognition_server_wiring.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_colony_memory_provider.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_commitment_resolution.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_commitment_resolution_downgrade.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_commitment_resolution_schema.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_commitment_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_commitments.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_comms_source_erasure.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_competence_reconciliation.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_compression.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_concern_resolution_receipts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_condition_producer.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_connectors.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_contact_fact_recall.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_contact_policy_projection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_contact_provisioning.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_contact_timezone.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_contacts_intro.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_contacts_persistence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_context_gate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_context_phase1.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_context_provenance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_context_skill_ownership.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_conversation_presence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_conversation_turn_concerns.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_delivery_bridge_503.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_delivery_gateway_identity.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_delivery_reachout_routing.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_directed.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_directed_envelope.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_directed_reports.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_directed_trust.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_directive_sources.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_directives.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_distill.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_doctor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_document_memory_guard.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_duckduckgo_provider.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_embedding_generations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_enrolled_sender_turns.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_ensure_channel_id.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_env_risk.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_event_broadcasts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_event_bus_types.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_event_concerns.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_event_stream_reliability.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_execution_forecasts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_execution_input_purpose.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_execution_registry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_expectations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_expectations_v2.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_experiments.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_external_cognition_events.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_external_event_concerns.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_facts_backfill.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_feedback.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_followup_plans.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_forecast_learning.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_function_routing.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_gap_generators.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_genesis_manifest.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_global_pause.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_goal_dispatch_availability.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_goal_inference_provenance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_goal_reader_imports.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_governed_actions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_governed_research_handoff.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_graduated_approvals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_grant_envelope.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_graph_reindex_metadata.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_guard_audit.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_guard_chat_mode.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_guard_derive_context.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_guard_enforce_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_export.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_history_import.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_native_tool_authority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_plugin_contract.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_plugin_event_lifecycle.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_plugin_event_replay.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_plugin_guard_shadow.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_plugin_signals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_plugin_turn_id.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_queue_stats_projection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_setup.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_turn_outbox.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hermes_work_projection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_host_input_provenance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_hostworker_agreement.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_identity_continuity.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_identity_corrections.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_inference_context_gate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_initiative_engine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_initiative_evidence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_initiative_executor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_initiative_feedback.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_initiative_pipeline_v016.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_initiative_retry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_initiative_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_input_source_lineage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_insight_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_instance_service.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_instance_service_live.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_intelligence_components.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_intelligence_synthesis.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_introduction_initiatives.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_job_writeback.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_journal.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_legacy_fact_context.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_local_work_context.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_loop_stats_accuracy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_mcp_config.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_mcp_server.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_memory_decay.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_memory_formation.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_memory_governance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_memory_promotion.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_memory_prune.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_memory_read_hydration.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_memory_response_schemas.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_migrations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_mining.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_model_qualification_cli.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_model_qualification_memory.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_model_qualification_runner.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_model_qualification_structured.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_accepted_local_work.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_history_references.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_input_carrier.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_outcome_judgments.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_request_erasure.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_review_recurrence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_source_image_read.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_source_read.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_source_video_read.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_native_tool_observations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_operator_deck_read_truth.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_ordinary_context_briefings.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_owner_preferences.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_p2_wirings.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_partial_work_rendering.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_patterns.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_pending_work_coverage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_persona.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_persona_setup_result.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_phase_capability_check.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_preset_loop_coupling.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_project_event_outbox.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_project_result_reconciliation_phase.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_projects.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_prompt_evals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_proposals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_provenance_population.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_pseudo_agi_production_chain.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_queue_completed_filter.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_queue_contract.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_quiet_hours_and_reload.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_reachout_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_recall_person_boost.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_recall_ranking.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_recall_rerank.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_recency.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_reflection_task_routing.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_rejection_loop.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_relationship_calendar_aggregators.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_relationship_score_refresh.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_relationship_signal_floor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_relationships.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_reply_forecast_callback_order.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_reply_forecast_stops.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_reply_forecasts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_repo_tools.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_reported_worker_status.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_request_capabilities.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_request_work_context.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_reranker_remote.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_research_orchestrator.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_resolve_messaging_handle.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_response_guard.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_response_guard_communication_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_response_guard_endpoint.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_response_guard_surface_policy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_router_tiers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_runtime_model_observations.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_sandbox.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_scoped_api_authority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_scoped_contact_resolution.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_secondary_review_contract.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_selected_autonomy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_self_directed_thinker.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_self_initiatives.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_self_judgment_opt_in.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_self_judgment_premises.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_self_judgments.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_self_model.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_self_perspective.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_selfhood_benchmark.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_session_reports.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_shared_facts.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_shared_local_undertaking.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_sidecar.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_signals_attribution.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_situation_spine.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_skill_approval.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_skill_attribution.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_skill_sandbox.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_skill_synthesis.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_skill_synthesis_wiring.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_skills_memory.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_social_context_flow.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_social_transport.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_annotation_claim_survivors.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_appraisals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_attribution.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_audio.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_claim_budget.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_claim_diagnostics.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_claim_media_eligibility.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_claim_review.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_claim_subject_basis.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_document_read.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_documents.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_episode_admission.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_episode_memory.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_episode_revisions.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_image_read.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_media.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_memory_backup.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_time_query.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_source_video.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_sqlite_connection_ownership.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_supervised_rung.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_surprise.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_sweep_fixes.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_synthesis.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_telemetry_staleness.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_temporal.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_temporal_followups.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_temporal_index.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_test_environment_isolation.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_thinking_phase.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_thought_function_routing.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tick_phase_budget.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tier_endpoints.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_timeline.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_approvals.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_asymmetry.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_context.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_cross_gate.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_eligibility.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_epistemic_guard.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_exposure.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_kill_switch.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_level_coherence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_leveled.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_levels.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_source_corrections.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_taint.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom2_wiring.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_event_lineage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_extractor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_arcs.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_boundary_corpus.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_fact_adapters.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_outbound_integration.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_recipient_audit.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_recipient_simulator.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_visibility.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_p8_visibility_store.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tom_source_lineage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tool_handlers_graph.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tool_observation_reader.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tool_provenance.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_tool_surface.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_toolsmith.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_transport_ingress.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_transport_ingress_api.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_trust_configure.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_trust_scopes.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_trust_scopes_p2.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_turn_idempotency_ledger.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_turn_idempotency_v2.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_turn_ner_entities.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_turn_source_erasure.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_turn_source_evidence.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_turn_survivor_delivery.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_validation_sweep_fixes.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_vector_vacuum.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_wizard_autonomy.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_work_ancestry_projection.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_work_control_production_blockers.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_work_control_v1.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_work_orders.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_work_read_surface_authority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_work_source_coverage.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_worker_handler_boundaries.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_worker_heartbeat_truth.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_worker_http_authority.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_worker_integration.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_worker_lifecycle_durability.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_workers_governor.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_workspace.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_world_context_query.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_world_llm_extract.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_world_quality.py +0 -0
- {apsimo-1.4.3 → apsimo-1.4.5}/tests/test_world_supervised.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apsimo
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.5
|
|
4
4
|
Summary: Persistent identity, memory and autonomy for AI agents
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -28,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.5; 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:
|
|
@@ -2520,7 +2516,7 @@ async def context_assemble(
|
|
|
2520
2516
|
|
|
2521
2517
|
# --- Memory: authorized candidates, one selection and one budget ---
|
|
2522
2518
|
if _canonical_person_allowed and query_text:
|
|
2523
|
-
from apsimo.
|
|
2519
|
+
from apsimo.memory.recall import source_candidates
|
|
2524
2520
|
beliefs, quotations, source_hits, semantic_media = [], [], [], []
|
|
2525
2521
|
source_ledger = None
|
|
2526
2522
|
if not _canonical_only and _graph is not None:
|
|
@@ -2585,7 +2581,7 @@ async def context_assemble(
|
|
|
2585
2581
|
contact_tz, body.context.timezone or ("UTC" if _canonical_only else None)))
|
|
2586
2582
|
if source_ledger is not None:
|
|
2587
2583
|
from apsimo.beliefs.source_projection import SourceClaimProjection
|
|
2588
|
-
from apsimo.
|
|
2584
|
+
from apsimo.memory.selection import current_work_query
|
|
2589
2585
|
beliefs, quotations = SourceClaimProjection(source_ledger).prepare_context(
|
|
2590
2586
|
beliefs, source_hits, contact_id=body.context.contact_id,
|
|
2591
2587
|
session_id=body.context.session_id, time_query=time_query,
|
|
@@ -2602,7 +2598,7 @@ async def context_assemble(
|
|
|
2602
2598
|
# The projected view preserves envelope and current-source
|
|
2603
2599
|
# checks. A fact needs query overlap before any fail-open
|
|
2604
2600
|
# reranker path; confidence alone never makes it relevant.
|
|
2605
|
-
from apsimo.
|
|
2601
|
+
from apsimo.memory.recall import contact_fact_candidates
|
|
2606
2602
|
fact_result = _tom_context_facts.list_facts(
|
|
2607
2603
|
contact_id=body.context.contact_id, limit=512)
|
|
2608
2604
|
facts = fact_result if isinstance(fact_result, list) else fact_result.get('facts', [])
|
|
@@ -2627,7 +2623,7 @@ async def context_assemble(
|
|
|
2627
2623
|
from apsimo.turns.source_annotations import current_candidates
|
|
2628
2624
|
retained = current_candidates(source_ledger, selected, **annotation_scope)
|
|
2629
2625
|
if len(retained) != len(selected):
|
|
2630
|
-
from apsimo.
|
|
2626
|
+
from apsimo.memory.recall import pack_memory_context
|
|
2631
2627
|
selected, body_text = pack_memory_context(retained, limit=5,
|
|
2632
2628
|
max_chars=max(0, min(max_chars, 24000)))
|
|
2633
2629
|
if body_text:
|
|
@@ -11288,7 +11284,7 @@ async def enriched_context(
|
|
|
11288
11284
|
and (_p8_runtime is None or _enriched_p8_viewer is not None):
|
|
11289
11285
|
async def _shared_facts():
|
|
11290
11286
|
try:
|
|
11291
|
-
from apsimo.
|
|
11287
|
+
from apsimo.memory.recall import contact_fact_candidates, pack_memory_context
|
|
11292
11288
|
from apsimo.turns.source_annotations import expand, current_candidates
|
|
11293
11289
|
store = _p8_runtime.facts_store if _p8_runtime is not None else _facts_store
|
|
11294
11290
|
view = (_p8_runtime.projected_facts_view(_enriched_p8_viewer,
|
|
@@ -11729,8 +11725,8 @@ def _memory_context_selector():
|
|
|
11729
11725
|
"""Keep one selector per active reranker, also usable without graph storage."""
|
|
11730
11726
|
global _context_recall_selector
|
|
11731
11727
|
if _context_recall_selector is None or _context_recall_selector[0] is not _reranker:
|
|
11732
|
-
from apsimo.
|
|
11733
|
-
from apsimo.
|
|
11728
|
+
from apsimo.memory.selection import RecallSelector
|
|
11729
|
+
from apsimo.memory.recall import provider_calibration_metadata
|
|
11734
11730
|
provider = _reranker
|
|
11735
11731
|
selector = RecallSelector(
|
|
11736
11732
|
provider.rerank if provider is not None else None,
|
|
@@ -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"),
|
|
@@ -470,7 +470,7 @@ class SourceClaimProjection:
|
|
|
470
470
|
Unknown, corrected, changed, multiple-input and cross-scope provenance
|
|
471
471
|
remains recallable. This transient hint never changes stored history.
|
|
472
472
|
"""
|
|
473
|
-
from apsimo.
|
|
473
|
+
from apsimo.memory.selection import current_work_query
|
|
474
474
|
from apsimo.turns.idempotency import canonical_turn_digest, source_message_hash
|
|
475
475
|
if message.get('role') != 'assistant' or source['scope'] != 'person':
|
|
476
476
|
return False
|
|
@@ -521,7 +521,7 @@ class SourceClaimProjection:
|
|
|
521
521
|
"""
|
|
522
522
|
from apsimo.turns.idempotency import source_message_hash
|
|
523
523
|
from apsimo.turns.audio import source_text
|
|
524
|
-
from apsimo.
|
|
524
|
+
from apsimo.memory.recall import source_candidates
|
|
525
525
|
turn_ids = list(dict.fromkeys(
|
|
526
526
|
[row["turn_id"] for row in source_hits] + [str(row["source_uri"])[5:] for row in beliefs
|
|
527
527
|
if str(row.get("source_uri") or "").startswith("turn:")]))
|
|
@@ -43,6 +43,7 @@ def main() -> None:
|
|
|
43
43
|
init_p.add_argument("--quiet-hours", help="Optional local follow-up quiet window, HH:MM-HH:MM; grants no outreach permission")
|
|
44
44
|
init_p.add_argument("--whatsapp-read-receipts", choices=["on", "off"], help="Set this Hermes profile's read receipts for accepted WhatsApp messages; omission preserves its setting")
|
|
45
45
|
init_p.add_argument("--preferences-only", action="store_true", help="Update only an existing Hermes config preference; skip instance and model setup")
|
|
46
|
+
init_p.add_argument("--skills-only", action="store_true", help="Install or explicitly refresh owned bundled skills in one Hermes profile; no instance or model setup")
|
|
46
47
|
init_p.add_argument("--preview", action="store_true", help="With --preferences-only, show changed preference paths without writing")
|
|
47
48
|
init_p.add_argument("--model-url", help="One local OpenAI-compatible API root")
|
|
48
49
|
init_p.add_argument("--model", help="Model identifier at that endpoint")
|
|
@@ -105,11 +106,6 @@ def main() -> None:
|
|
|
105
106
|
# --- generate-types ---
|
|
106
107
|
sub.add_parser("generate-types", help="Export OpenAPI spec (for TypeScript generation)")
|
|
107
108
|
|
|
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
109
|
# --- backfill ---
|
|
114
110
|
backfill_p = sub.add_parser("backfill", help="Re-embed all vectors with current model")
|
|
115
111
|
backfill_p.add_argument("--collection", default=None, help="Specific collection to backfill (default: all)")
|
|
@@ -318,7 +314,7 @@ def main() -> None:
|
|
|
318
314
|
code = run_init(root_dir=args.dir, args=args)
|
|
319
315
|
if code != 0:
|
|
320
316
|
sys.exit(code)
|
|
321
|
-
if args.preferences_only:
|
|
317
|
+
if args.preferences_only or args.skills_only:
|
|
322
318
|
return
|
|
323
319
|
|
|
324
320
|
# Initialize Apsimo identity if not already done
|
|
@@ -441,10 +437,6 @@ def main() -> None:
|
|
|
441
437
|
p = len(spec.get("paths", {}))
|
|
442
438
|
print(f"✅ OpenAPI spec written to {out} ({n} schemas, {p} paths)")
|
|
443
439
|
|
|
444
|
-
elif args.command == "seed":
|
|
445
|
-
from apsimo.seed import seed_self_knowledge_summary
|
|
446
|
-
print(seed_self_knowledge_summary())
|
|
447
|
-
|
|
448
440
|
elif args.command == "backfill":
|
|
449
441
|
_load_dotenv()
|
|
450
442
|
import httpx
|
|
@@ -2398,8 +2390,8 @@ def _cmd_validate(args) -> None:
|
|
|
2398
2390
|
if llm_ok and len(found) >= 2:
|
|
2399
2391
|
print(" ✅ Full sidecar pipeline working — context assembly + LLM router live")
|
|
2400
2392
|
elif llm_ok:
|
|
2401
|
-
print(" ⚠️ LLM live but cognitive context sections are thin —
|
|
2402
|
-
"
|
|
2393
|
+
print(" ⚠️ LLM live but cognitive context sections are thin — run a few "
|
|
2394
|
+
"ordinary turns and check their retained evidence")
|
|
2403
2395
|
else:
|
|
2404
2396
|
print(" ⚪ LLM not verified — context pipeline validated, reasoning not")
|
|
2405
2397
|
|
|
@@ -1260,7 +1260,7 @@ class ColonyGraph:
|
|
|
1260
1260
|
memories.append(mem)
|
|
1261
1261
|
|
|
1262
1262
|
if hybrid:
|
|
1263
|
-
from .recall import fuse_candidates
|
|
1263
|
+
from apsimo.memory.recall import fuse_candidates
|
|
1264
1264
|
candidate_limit = min(max(limit * 5, limit), max(100, limit))
|
|
1265
1265
|
lexical = await self._recall_lexical(
|
|
1266
1266
|
query, candidate_limit, min_strength, min_confidence,
|
|
@@ -1394,7 +1394,7 @@ class ColonyGraph:
|
|
|
1394
1394
|
content reaches Python/reranking. A missing/populating index degrades
|
|
1395
1395
|
to the existing vector/keyword path.
|
|
1396
1396
|
"""
|
|
1397
|
-
from .
|
|
1397
|
+
from .queries import FULLTEXT_INDEX, lexical_query
|
|
1398
1398
|
search_text = lexical_query(query)
|
|
1399
1399
|
if not search_text:
|
|
1400
1400
|
return []
|
|
@@ -1468,7 +1468,7 @@ class ColonyGraph:
|
|
|
1468
1468
|
self, query, memories, limit, *, strength_ranking=False,
|
|
1469
1469
|
):
|
|
1470
1470
|
# The same selector is used for mixed source/belief turn context.
|
|
1471
|
-
from .selection import RecallSelector
|
|
1471
|
+
from apsimo.memory.selection import RecallSelector
|
|
1472
1472
|
selector = getattr(self, "_recall_selector", None)
|
|
1473
1473
|
if selector is None:
|
|
1474
1474
|
selector = self._recall_selector = RecallSelector(
|
|
@@ -7,6 +7,16 @@ and makes it easy to test / review / optimise in one place.
|
|
|
7
7
|
Parameters are referenced with ``$param`` syntax for Neo4j driver binding.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
+
FULLTEXT_INDEX = "memory_content_fulltext"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def lexical_query(text: str, max_terms: int = 16) -> str:
|
|
14
|
+
"""Literal words/identifiers, not caller-supplied Lucene operators."""
|
|
15
|
+
from apsimo.memory.recall import lexical_terms
|
|
16
|
+
|
|
17
|
+
return " OR ".join(f'"{word}"' for word in lexical_terms(text, max_terms))
|
|
18
|
+
|
|
19
|
+
|
|
10
20
|
# ──────────────────────────────────────────────────────────────────────
|
|
11
21
|
# Memory operations
|
|
12
22
|
# ──────────────────────────────────────────────────────────────────────
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Shared evidence selection and rendering for Apsimo memory."""
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Shared source candidates, rank fusion and bounded memory rendering."""
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import re
|
|
@@ -7,7 +7,6 @@ import json
|
|
|
7
7
|
import os
|
|
8
8
|
from typing import Any
|
|
9
9
|
|
|
10
|
-
FULLTEXT_INDEX = "memory_content_fulltext"
|
|
11
10
|
_WORDS = re.compile(r"[^\W_]+(?:[-.][^\W_]+)*", re.UNICODE)
|
|
12
11
|
_STOP = frozenset("a an and are as at be by do does for from how i in is it me of on or that the this to was what when where which who with you".split())
|
|
13
12
|
|
|
@@ -209,11 +208,6 @@ def lexical_terms(text: str, max_terms: int = 16) -> list[str]:
|
|
|
209
208
|
return list(words)[:max_terms]
|
|
210
209
|
|
|
211
210
|
|
|
212
|
-
def lexical_query(text: str, max_terms: int = 16) -> str:
|
|
213
|
-
"""Literal words/identifiers, not caller-supplied Lucene operators."""
|
|
214
|
-
return " OR ".join(f'"{word}"' for word in lexical_terms(text, max_terms))
|
|
215
|
-
|
|
216
|
-
|
|
217
211
|
def contact_fact_candidates(query: str, facts: list[dict[str, Any]], *, limit: int = 25) -> list[dict[str, Any]]:
|
|
218
212
|
"""Lexical candidates from an authorized, current source-linked fact view.
|
|
219
213
|
|
|
@@ -13,7 +13,7 @@ from .records import CaseSpec
|
|
|
13
13
|
|
|
14
14
|
def _recollect(projection, query, *, contact, session, now, max_chars):
|
|
15
15
|
from apsimo.beliefs.source_time import interpret_time_query
|
|
16
|
-
from apsimo.
|
|
16
|
+
from apsimo.memory.recall import pack_memory_context
|
|
17
17
|
from apsimo.turns.source_annotations import expand, current_candidates
|
|
18
18
|
ledger = projection.ledger
|
|
19
19
|
hits = ledger.search_sources(query, contact_id=contact, session_id=session, limit=10)
|
|
@@ -1861,7 +1861,7 @@ async def lifespan(app: FastAPI):
|
|
|
1861
1861
|
# set_embed_fn wiring above). Registration alone changes
|
|
1862
1862
|
# nothing: use is gated by COLONY_RECALL_RERANK (default off).
|
|
1863
1863
|
if graph is not None and hasattr(graph, "set_rerank_fn"):
|
|
1864
|
-
from apsimo.
|
|
1864
|
+
from apsimo.memory.recall import provider_calibration_metadata
|
|
1865
1865
|
def recall_calibration_metadata():
|
|
1866
1866
|
return provider_calibration_metadata(reranker_provider)
|
|
1867
1867
|
graph.set_rerank_fn(
|
|
@@ -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 "
|
|
@@ -1947,7 +1946,7 @@ def run_init(root_dir: str | None = None, args=None) -> int:
|
|
|
1947
1946
|
root_dir: Root directory for config files
|
|
1948
1947
|
args: Parsed argparse Namespace for non-interactive mode
|
|
1949
1948
|
"""
|
|
1950
|
-
if (getattr(args, 'owner_handle', None) or getattr(args, 'preferences_only', False) or getattr(args, 'preview', False)
|
|
1949
|
+
if (getattr(args, 'owner_handle', None) or getattr(args, 'preferences_only', False) or getattr(args, 'skills_only', False) or getattr(args, 'preview', False)
|
|
1951
1950
|
or getattr(args, 'whatsapp_read_receipts', None) is not None):
|
|
1952
1951
|
if (getattr(args, 'no_harness', False) or getattr(args, 'mcp_harnesses', None)
|
|
1953
1952
|
or getattr(args, 'host_framework', None) not in (None, 'hermes')):
|
|
@@ -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')
|
|
@@ -576,14 +569,25 @@ def run(root_dir=None, args=None):
|
|
|
576
569
|
try:
|
|
577
570
|
receipt_choice = getattr(args, 'whatsapp_read_receipts', None)
|
|
578
571
|
preferences_only = bool(getattr(args, 'preferences_only', False))
|
|
572
|
+
skills_only = bool(getattr(args, 'skills_only', False))
|
|
579
573
|
preview = bool(getattr(args, 'preview', False))
|
|
580
|
-
if preferences_only:
|
|
574
|
+
if preferences_only or skills_only:
|
|
581
575
|
home = setup._resolve_hermes_home(getattr(args, 'hermes_home', None))
|
|
582
576
|
selected_python = None
|
|
583
577
|
else:
|
|
584
578
|
home, selected_python = _select_home(args, ask)
|
|
585
579
|
if preview and not preferences_only:
|
|
586
580
|
raise ValueError('--preview requires --preferences-only')
|
|
581
|
+
if skills_only:
|
|
582
|
+
if root_dir or receipt_choice or any(getattr(args, name, None) for name in (
|
|
583
|
+
'preferences_only', 'preview', 'start', 'refresh_adapter', 'replace_memory_provider',
|
|
584
|
+
'local_work', 'native_goals', 'native_reviews', 'model_url', 'model', 'agent_name',
|
|
585
|
+
'agent_values', 'timezone', 'quiet_hours', 'contact_name', 'owner_handle', 'encrypt',
|
|
586
|
+
'passphrase', 'claim_genesis', 'mcp_harnesses', 'no_harness')):
|
|
587
|
+
raise ValueError('--skills-only cannot be combined with instance or preference changes')
|
|
588
|
+
from .setup_skills import prepare, install
|
|
589
|
+
install(prepare(home, _adapter_resources(getattr(args, 'adapter_wheel', None)), refresh=True))
|
|
590
|
+
return 0
|
|
587
591
|
if preferences_only:
|
|
588
592
|
if receipt_choice is None:
|
|
589
593
|
raise ValueError('--preferences-only requires --whatsapp-read-receipts on or off')
|
|
@@ -680,6 +684,8 @@ def run(root_dir=None, args=None):
|
|
|
680
684
|
resources = _adapter_resources(getattr(args, 'adapter_wheel', None))
|
|
681
685
|
_preflight_outbox(home, resources)
|
|
682
686
|
binding = _adapter_binding(python, resources)
|
|
687
|
+
from .setup_skills import prepare as prepare_skills, install as install_skills
|
|
688
|
+
skill_updates = prepare_skills(home, resources)
|
|
683
689
|
owner_name = ask('Your name', getattr(args, 'contact_name', None) or os.environ.get('USER', 'Owner'), True)
|
|
684
690
|
owner_handles, owner_platforms = _owner_handles(args, ask, noninteractive)
|
|
685
691
|
agent_name = ask('Agent name', getattr(args, 'agent_name', None) or 'Assistant', True)
|
|
@@ -771,7 +777,7 @@ def run(root_dir=None, args=None):
|
|
|
771
777
|
'COLONY_PERSONA_NAME': agent_name, 'COLONY_CONTACTS_DB': str(state/'contacts.db'),
|
|
772
778
|
'COLONY_API_KEYRING_PATH': str(state/'api-keyring.json'), 'COLONY_API_KEY': '',
|
|
773
779
|
'COLONY_CLIENT_API_KEY': key, 'COLONY_GRAPH_ENABLED': 'false',
|
|
774
|
-
'COLONY_EMBED_PROVIDER': 'skip',
|
|
780
|
+
'COLONY_EMBED_PROVIDER': 'skip',
|
|
775
781
|
'COLONY_AUTONOMY_PRESET': 'passive', 'COLONY_EMBEDDED_WORKER_ENABLED': 'false',
|
|
776
782
|
'COLONY_SOURCE_CLAIMS': 'on'}
|
|
777
783
|
values.update({
|
|
@@ -865,6 +871,7 @@ def run(root_dir=None, args=None):
|
|
|
865
871
|
guiding = ('Guiding values: ' + ', '.join(agent_preferences['values']) + '.\n'
|
|
866
872
|
if agent_preferences['values'] else '')
|
|
867
873
|
create(home/'SOUL.md', f'# {agent_name}\n\nYou are {agent_name}, the personal assistant of {owner_name}.\n{guiding}Use retained evidence with its provenance; ask about uncertainty.\nYour opinions are revisable interpretations; distinguish them from facts and permissions.\nOwner consent is required for consequential external actions; an existing task-scoped consent covers only its stated scope.\n')
|
|
874
|
+
install_skills(skill_updates)
|
|
868
875
|
except Exception:
|
|
869
876
|
# Undo only this installation's exact bytes. Concurrent edits stay
|
|
870
877
|
# intact, with original files still retained in the private state.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Install owned bundled skills into one native Hermes catalog."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import hashlib
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
import re
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
SKILL_NAME = 'apsimo-deep-research'
|
|
11
|
+
BUNDLE_PREFIX = 'apsimo_hermes/bundled_skills/'
|
|
12
|
+
SKILL_RESOURCE = f'{BUNDLE_PREFIX}{SKILL_NAME}/SKILL.md'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _read_owned_path(path):
|
|
16
|
+
for parent in (path, *path.parents):
|
|
17
|
+
if parent.is_symlink():
|
|
18
|
+
raise ValueError('Bundled skill destination is symlinked; existing files were preserved')
|
|
19
|
+
return path.read_bytes() if path.exists() else None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def prepare(home, resources, *, refresh=False):
|
|
23
|
+
"""Validate all packaged skill preimages before any setup writes/probe."""
|
|
24
|
+
updates = []
|
|
25
|
+
for path, content in sorted(resources.items()):
|
|
26
|
+
if not path.startswith(BUNDLE_PREFIX) or not path.endswith('/SKILL.md'):
|
|
27
|
+
continue
|
|
28
|
+
name = path[len(BUNDLE_PREFIX):-len('/SKILL.md')]
|
|
29
|
+
if not re.fullmatch(r'apsimo-[a-z0-9-]{1,56}', name):
|
|
30
|
+
raise ValueError('Bundled skill must have a canonical apsimo- name')
|
|
31
|
+
updates.extend(_prepare_skill(home, name, content, refresh=refresh))
|
|
32
|
+
if not updates:
|
|
33
|
+
raise ValueError('Selected adapter has no bundled skills')
|
|
34
|
+
return updates
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _prepare_skill(home, name, content, *, refresh):
|
|
38
|
+
if not content:
|
|
39
|
+
raise ValueError('Selected adapter has an empty bundled skill')
|
|
40
|
+
directory = Path(home)/'skills'/name
|
|
41
|
+
skill, marker = directory/'SKILL.md', directory/'.apsimo-owned.json'
|
|
42
|
+
previous, recorded = _read_owned_path(skill), _read_owned_path(marker)
|
|
43
|
+
digest = hashlib.sha256(content).hexdigest()
|
|
44
|
+
if recorded is None:
|
|
45
|
+
if directory.exists():
|
|
46
|
+
raise ValueError('Unowned bundled skill destination was preserved; choose another profile or move your copy')
|
|
47
|
+
else:
|
|
48
|
+
try:
|
|
49
|
+
record = json.loads(recorded)
|
|
50
|
+
owned = (record['owner'] == 'apsimo-hermes' and record['version'] == 1
|
|
51
|
+
and previous is not None
|
|
52
|
+
and record['sha256'] == hashlib.sha256(previous).hexdigest())
|
|
53
|
+
except (ValueError, KeyError, TypeError):
|
|
54
|
+
owned = False
|
|
55
|
+
if not owned:
|
|
56
|
+
raise ValueError('Locally modified bundled skill was preserved; keep your copy or reconcile it before refreshing')
|
|
57
|
+
if previous != content and not refresh:
|
|
58
|
+
raise ValueError('Bundled skill update requires explicit apsimo init --skills-only')
|
|
59
|
+
after = (json.dumps({'owner': 'apsimo-hermes', 'version': 1, 'sha256': digest},
|
|
60
|
+
sort_keys=True, indent=2)+'\n').encode()
|
|
61
|
+
return [(skill, previous, content), (marker, recorded, after)]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def install(updates):
|
|
65
|
+
"""Replace only previously verified owned bytes; retain local edits on conflict."""
|
|
66
|
+
from .setup import _atomic_hermes_config_write
|
|
67
|
+
for path, before, _ in updates:
|
|
68
|
+
if _read_owned_path(path) != before:
|
|
69
|
+
raise ValueError('Bundled skill changed during installation; current files were preserved')
|
|
70
|
+
completed = []
|
|
71
|
+
try:
|
|
72
|
+
for path, before, after in updates:
|
|
73
|
+
if before != after:
|
|
74
|
+
path.parent.mkdir(parents=True, exist_ok=True, mode=0o700)
|
|
75
|
+
_atomic_hermes_config_write(path, before, after)
|
|
76
|
+
completed.append((path, before, after))
|
|
77
|
+
except Exception:
|
|
78
|
+
for path, before, after in reversed(completed):
|
|
79
|
+
if _read_owned_path(path) == after:
|
|
80
|
+
if before is None:
|
|
81
|
+
path.unlink()
|
|
82
|
+
else:
|
|
83
|
+
_atomic_hermes_config_write(path, after, before)
|
|
84
|
+
# A failed first installation leaves no false ownership claim.
|
|
85
|
+
for directory in {path.parent for path, _, _ in updates}:
|
|
86
|
+
if directory.is_dir() and not any(directory.iterdir()):
|
|
87
|
+
directory.rmdir()
|
|
88
|
+
raise
|
|
89
|
+
names = sorted({path.parent.name for path, _, _ in updates})
|
|
90
|
+
print('Bundled skills available: '+', '.join(names)+'. With this Apsimo adapter version active, ongoing conversations refresh skill discovery on their next request.')
|
|
@@ -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
|