apsimo 1.4.4__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.4 → apsimo-1.4.5}/PKG-INFO +2 -2
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/host.py +7 -7
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/source_projection.py +2 -2
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cli.py +2 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/client.py +3 -3
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/queries.py +10 -0
- apsimo-1.4.5/apsimo/memory/__init__.py +1 -0
- {apsimo-1.4.4/apsimo/intelligence/graph → apsimo-1.4.5/apsimo/memory}/recall.py +1 -7
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/memory_cases.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/server.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup_hermes.py +15 -1
- apsimo-1.4.5/apsimo/setup_skills.py +90 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/PKG-INFO +2 -2
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/SOURCES.txt +4 -2
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/requires.txt +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/pyproject.toml +2 -2
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_canonical_source_read.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_current_work_recall_selection.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_media_read_reference_presentation.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_setup.py +98 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_procedure_source_context.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_hybrid.py +3 -2
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_request_repetition.py +2 -2
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_source_presentation.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_unified_context.py +44 -2
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_short_source_context.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_annotations.py +5 -5
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_audio_claims.py +3 -3
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_projection.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_event_precision.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_excerpt_lineage.py +1 -1
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_vectors.py +5 -5
- {apsimo-1.4.4 → apsimo-1.4.5}/LICENSE +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/README.md +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/__main__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agent/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agent/client.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agent/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agents/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agents/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agents/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/agents/websocket.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/auth_telemetry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/authority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/contact_grants.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/middleware.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/commitment_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/context_gate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/executions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/followup_plans.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/governed_actions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/initiative_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/mining.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/observations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/social_state.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/task_queue.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/temporal_followups.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/transport.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/routers/transport_ingress_api.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/schemas/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/api/schemas/host.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/cli.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/condition_worker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/loop.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/registry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/scheduler.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/autonomy/synthesis.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/backup.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/contradictions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/decay.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/promotion.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/resolve.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/source_claims.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/source_time.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/beliefs/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/aggregators.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/composer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/delivery.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/engagement.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/enhancer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/scheduler.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/briefings/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/block.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/cli.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/genesis.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/identity.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/keys.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/local_keys.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/manager.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/node.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/plugin_transactions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/protocol.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/state_machine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/storage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/transactions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/chain/validation.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/manifest.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/migrations/001_channels_schema.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/phone_gateways.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/presence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/router.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/channels/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/charter.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/drive_governance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/evidence_pipeline.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/external_events.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/goal_spine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/introspection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/prompt.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/runtime.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/cognition/trigger.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/commitments/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/commitments/local_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/commitments/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/commitments/work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/compression/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/base.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/caldav_calendar.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/fs_documents.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/imap_email.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/manager.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/connectors/webhook_pull.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/comms.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/exporters/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/exporters/vcard.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/identity_links.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/importer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/importers/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/importers/batch.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/importers/macos_contacts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/001_contacts_schema.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/002_trust_scopes.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/003_open_gateway_enum.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/004_contact_provision_operations.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/migrations/005_identity_links.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/scoring.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/transport_ingress.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contacts/world_bridge.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/chunker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/estimate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/gate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/contextgate/retrieve.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/bridge.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/channels.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/classification.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/rate_limiter.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/delivery/reachout_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/audit.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/intake.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directed/service.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/evidence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/extractor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/guard.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/service.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/directives/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/doctor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/environment.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/broadcaster.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/bus.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/journal.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/stream.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/events/types.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/execution_results.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feedback/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feedback/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/cli.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/example-feed.yaml +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/hermes_cron.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/manager.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/spec.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/feeds/template.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/audit.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/communication_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/context_provenance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/env_risk.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/guard_audit.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/base.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l1_recipient.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l2_pii.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l3_cross_context.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l4_trust_tier.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l5_injection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l6_review.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/l7_delay.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/layers/tom2_epistemic.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/pending_dispatch.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/pipeline.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/rejection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/response_guard.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/rulesets/injection_v1.yaml +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/surface_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/gate/taint.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/genesis.json +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/decomposer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/inference.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/priority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/queue_bridge.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/replan.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/schema.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/goals/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/governed_actions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/harness_integration/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/harness_integration/context.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/harness_integration/skills.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity/participants.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity/resolver.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/builder.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/corpus.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/runner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/briefings.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/chain.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/goals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/memory.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/neo4j_cognition.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/relationship.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/sessions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/skills.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/task_queue.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/seeders/world_model.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/self_query.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/self_reflection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/skill.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/identity_bootstrap/verifier.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/action_registry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/approval_authority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/approval_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/assignment.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/backup_evidence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/context_freshness.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/native_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/standing_approvals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/initiatives/temporal_followup.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/gap_detector.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/metalearner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/metrics_collector.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/performance_index.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/registry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/strategy_adjuster.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/cognition/types.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/anomaly_detector.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/initiative_engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/preference_learner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/research_orchestrator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/self_directed_thinker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/self_reflector.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/session_continuity.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/task_planner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/components/tool_learner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/consolidator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/distiller.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/migrations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/reconciler.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/graph/schema.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/learning/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/learning/continuous_learner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/learning/feedback_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/mind_model/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/mind_model/graph_baseline.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/mind_model/signal_collector.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/profiler.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/scorer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/signal_floor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/relationships/trust_tiers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/connection_discoverer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/cross_domain_analyzer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_deliverer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/insight_validator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/synthesis/novelty_scorer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/turn_middleware/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/intelligence/turn_middleware/memory_sync.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mcp/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mcp/__main__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mcp/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mcp/server.py +0 -0
- {apsimo-1.4.4/apsimo/intelligence/graph → apsimo-1.4.5/apsimo/memory}/selection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/migrations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/corpus.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/escalations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/mining/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/memory.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/mesh.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/person.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/models/signal.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/observations/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/observations/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/patterns/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/patterns/extract.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/patterns/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/persona/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/persona/engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/persona/manifest.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/event_outbox.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/planner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/projects/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/proposals/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/proposals/engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/proposals/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/cases.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/cli.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/records.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/report.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/runner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/qualification/structured_cases.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/executor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/loop.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/native_tools/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/native_tools/calculate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/native_tools/file_ops.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/native_tools/web_search.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/reasoning/tool_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/redact/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/repos/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/repos/mirrors.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/artifact.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/gatherer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/pipeline.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/base.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/brave.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/cache.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/duckduckgo.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/orchestrator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/serpapi.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/search/tavily.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/research/synthesizer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/complexity_scorer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/endpoints.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/fallback.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/functions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/native_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/router.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/self_learning.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/router/tiers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sandbox/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sandbox/backend.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sandbox/manager.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/scope_bounds.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/base.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/env.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/keyring.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/backends/onepassword.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/cli.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/manager.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/migration.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/secrets/types.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/appraisals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/benchmark.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/brief.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/event_concerns.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/execution_forecasts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/expectations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/experiments.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/journal.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/judgments.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/native_outcomes.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/params.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/perspective.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/reconcile.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/reply_forecasts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/runtime_forecasts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/runtime_models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/settlement.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/situation.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/supervised.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/thinker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/trust.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/self_model/workspace.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/services/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/services/agent_bridge.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/services/initiative_executor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/services/instance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/context_loader.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/federation_session.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/isolated_session.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/reports.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/sessions/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup_local_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup_native_goals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/setup_native_reviews.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/base.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/budget.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/behavioral_correction.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/capability_gap.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/data_quality.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/knowledge_acquisition.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/operational_hygiene.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/executors/subsystem_health.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/hermes_export.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/index.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/learning/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/learning/novelty_detector.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/learning/pattern_extractor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/learning/triggers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/loader.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/migrations/002_progressive_loading.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/migrations/backfill_triggers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/packager.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/protocols.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/registry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/runtime.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/sandbox_runner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/scheduler.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/schema.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/security/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/security/guards.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills/security/scanner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/distill.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/retrieve.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/skills_memory/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/surprise/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/surprise/accumulation.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/surprise/scorer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/surprise/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/action_receipts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/approval_relay_canary.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/contract.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/events.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/governor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/base.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/inference.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/monitoring.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/registry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/subtask_handler.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/handlers/system_maintenance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/mesh_integration.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/models.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/queue_manager.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/routing.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/scheduler.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/schema.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/work_control.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/task_queue/worker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/telemetry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/affect.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/approvals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/arcs.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/asymmetry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/eligibility.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/engagement.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/exposure.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/extractor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/fact_adapters.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/facts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/integration.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/leveled.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/levels.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/recipient_audit.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/recipient_simulator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/source_lineage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/tom2.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/visibility.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tom/visibility_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tools/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tools/definitions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/tools/handlers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/authority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/integrity.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/miner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/toolsmith/registry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/audio.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/documents.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/executions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/hermes_history.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/hermes_kanban.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/hermes_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/history_references.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/idempotency.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/local_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/media.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/reported_workers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/source_annotations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/source_attribution.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/source_read.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/source_vectors.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/tool_observations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/turns/video.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/autonomy_preset.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/instance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/model_output.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/quiet_hours.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/session_safety.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/util/temporal.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/backfill.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/caption.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/collections.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/embedder.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/image_preprocess.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/image_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/indexes.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/migrate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/multimodal_provider.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/multimodal_types.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/openai_provider.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/query.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/reranker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/safety_image.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/scanner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/setup.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/vector/tiers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/work_orders.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/agent_bridge.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/colony_worker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/queue_worker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/workers/skills_sync.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/causal_maintenance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/causal_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/causal_query.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/confidence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/constants.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/entities.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/expectation_resolvers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/base.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/conversation_extractor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/detector.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/document_extractor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/csv_fmt.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/html_fmt.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/json_fmt.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/pdf.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/formats/text.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/llm_extractor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/extraction/pipeline.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/integrations/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/integrations/mind_model_bridge.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/integrations/social_intel_bridge.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/jobs/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/jobs/extraction_job.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/llm_extract.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/observations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/populator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/relationships.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/resolution/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/resolution/entity_resolver.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/resolution/merge_audit.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/resolution/merge_workflow.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/source_reports.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/sqlite/__init__.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/sqlite/backend.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/sqlite/schema.sql +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo/world_model/store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/dependency_links.txt +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/entry_points.txt +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/apsimo.egg-info/top_level.txt +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/setup.cfg +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_accepted_local_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_adaptive_params.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_affect.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_action_routing.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_api.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_bridge.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_bridge_service.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_sdk.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_sensor_loop.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_snapshot.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_agent_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_annotated_recall_reinforcement.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_answer_source_lineage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_appraisal_incident_decisions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_approval_gate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_approval_relay_canary.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_apsimo_compat.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_apsimo_harness_guidance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_assignment_engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_audit_cleanup.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_auth_coverage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_auth_migration_readiness.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_authz_scope_api.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_autonomy_preset.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_backup.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_backup_receipt_evidence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_beliefs.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_bind_auth_guard.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_boundary_fail_closed.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_bounded_approval_authority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_briefing_aggregators.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_canonical_scoped_context.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_extract.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_falsifiability.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_maintenance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_query.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_causal_query_only_guard.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_chain_keys.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_channel_preferences.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_channel_registry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_channel_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_evidence_pipeline.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_evidence_server_wiring.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_goal_spine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_observability.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_p4_controlled_learning.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_p4_server_integration.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_p6_p7_server_wiring.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_p7_drive_governance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_phase_b_runtime.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_phase_c_scheduler.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_cognition_server_wiring.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_colony_memory_provider.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitment_resolution.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitment_resolution_downgrade.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitment_resolution_schema.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitment_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_commitments.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_comms_source_erasure.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_competence_reconciliation.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_compression.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_concern_resolution_receipts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_condition_producer.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_connectors.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contact_fact_recall.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contact_policy_projection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contact_provisioning.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contact_timezone.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contacts_intro.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_contacts_persistence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_context_gate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_context_phase1.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_context_provenance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_context_skill_ownership.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_conversation_presence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_conversation_turn_concerns.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_delivery_bridge_503.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_delivery_gateway_identity.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_delivery_reachout_routing.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directed.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directed_envelope.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directed_reports.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directed_trust.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directive_sources.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_directives.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_distill.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_doctor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_document_memory_guard.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_duckduckgo_provider.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_embedding_generations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_enrolled_sender_turns.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_ensure_channel_id.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_env_risk.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_event_broadcasts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_event_bus_types.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_event_concerns.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_event_stream_reliability.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_execution_forecasts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_execution_input_purpose.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_execution_registry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_expectations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_expectations_v2.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_experiments.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_external_cognition_events.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_external_event_concerns.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_facts_backfill.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_feedback.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_followup_plans.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_forecast_learning.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_function_routing.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_gap_generators.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_genesis_manifest.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_global_pause.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_goal_dispatch_availability.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_goal_inference_provenance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_goal_reader_imports.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_governed_actions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_governed_research_handoff.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_graduated_approvals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_grant_envelope.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_graph_reindex_metadata.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_guard_audit.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_guard_chat_mode.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_guard_derive_context.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_guard_enforce_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_export.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_general_governance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_history_import.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_native_tool_authority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_contract.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_event_lifecycle.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_event_replay.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_guard_shadow.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_signals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_plugin_turn_id.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_queue_stats_projection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_setup.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_turn_outbox.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hermes_work_projection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_host_input_provenance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_hostworker_agreement.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_identity_continuity.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_identity_corrections.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_inference_context_gate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_engine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_evidence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_executor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_feedback.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_pipeline_v016.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_retry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_initiative_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_input_source_lineage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_insight_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_instance_service.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_instance_service_live.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_intelligence_components.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_intelligence_synthesis.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_introduction_initiatives.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_job_writeback.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_journal.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_legacy_fact_context.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_local_work_context.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_loop_stats_accuracy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_mcp_config.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_mcp_server.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_decay.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_formation.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_governance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_promotion.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_prune.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_read_hydration.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_memory_response_schemas.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_migrations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_mining.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_model_qualification_cli.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_model_qualification_memory.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_model_qualification_runner.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_model_qualification_structured.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_accepted_local_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_history_references.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_initiative_work.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_input_carrier.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_outcome_judgments.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_request_erasure.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_review_recurrence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_source_image_read.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_source_read.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_source_video_read.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_native_tool_observations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_operator_deck_read_truth.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_ordinary_context_briefings.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_owner_preferences.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_p2_wirings.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_partial_work_rendering.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_patterns.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_pending_work_coverage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_persona.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_persona_setup_result.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_phase_capability_check.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_preset_loop_coupling.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_project_event_outbox.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_project_result_reconciliation_phase.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_projects.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_prompt_evals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_proposals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_provenance_population.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_pseudo_agi_production_chain.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_queue_completed_filter.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_queue_contract.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_quiet_hours_and_reload.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reachout_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_person_boost.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_ranking.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recall_rerank.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_recency.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reflection_task_routing.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_rejection_loop.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_relationship_calendar_aggregators.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_relationship_score_refresh.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_relationship_signal_floor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_relationships.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reply_forecast_callback_order.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reply_forecast_stops.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reply_forecasts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_repo_tools.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reported_worker_status.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_request_capabilities.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_request_work_context.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_reranker_remote.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_research_orchestrator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_resolve_messaging_handle.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_response_guard.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_response_guard_communication_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_response_guard_endpoint.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_response_guard_surface_policy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_router_tiers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_runtime_model_observations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_sandbox.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_scoped_api_authority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_scoped_contact_resolution.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_secondary_review_contract.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_selected_autonomy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_directed_thinker.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_initiatives.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_judgment_opt_in.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_judgment_premises.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_judgments.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_model.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_self_perspective.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_selfhood_benchmark.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_session_reports.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_shared_facts.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_shared_local_undertaking.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_sidecar.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_signals_attribution.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_situation_spine.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_approval.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_attribution.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_sandbox.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_synthesis.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skill_synthesis_wiring.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_skills_memory.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_social_context_flow.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_social_transport.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_annotation_claim_survivors.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_appraisals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_attribution.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_audio.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_budget.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_diagnostics.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_media_eligibility.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_review.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_claim_subject_basis.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_document_read.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_documents.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_episode_admission.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_episode_memory.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_episode_revisions.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_image_read.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_media.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_memory_backup.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_time_query.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_source_video.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_sqlite_connection_ownership.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_supervised_rung.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_surprise.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_sweep_fixes.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_synthesis.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_telemetry_staleness.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_temporal.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_temporal_followups.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_temporal_index.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_test_environment_isolation.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_thinking_phase.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_thought_function_routing.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tick_phase_budget.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tier_endpoints.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_timeline.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_approvals.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_asymmetry.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_context.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_cross_gate.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_eligibility.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_epistemic_guard.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_exposure.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_kill_switch.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_level_coherence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_leveled.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_levels.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_source_corrections.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_taint.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom2_wiring.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_event_lineage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_extractor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_arcs.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_boundary_corpus.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_fact_adapters.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_outbound_integration.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_recipient_audit.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_recipient_simulator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_server_integration.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_visibility.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_p8_visibility_store.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tom_source_lineage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tool_handlers_graph.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tool_observation_reader.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tool_provenance.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_tool_surface.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_toolsmith.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_transport_ingress.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_transport_ingress_api.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_trust_configure.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_trust_scopes.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_trust_scopes_p2.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_idempotency_ledger.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_idempotency_v2.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_ner_entities.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_source_erasure.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_source_evidence.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_turn_survivor_delivery.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_validation_sweep_fixes.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_vector_vacuum.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_wizard_autonomy.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_ancestry_projection.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_control_production_blockers.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_control_v1.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_orders.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_read_surface_authority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_work_source_coverage.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_handler_boundaries.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_heartbeat_truth.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_http_authority.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_integration.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_worker_lifecycle_durability.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_workers_governor.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_workers_install.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_workspace.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_context_query.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_entity_reinforcement.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_llm_extract.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_model_prune.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_observations.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_populator.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_quality.py +0 -0
- {apsimo-1.4.4 → apsimo-1.4.5}/tests/test_world_store_api.py +0 -0
- {apsimo-1.4.4 → 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,7 +28,7 @@ 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
|
|
@@ -2516,7 +2516,7 @@ async def context_assemble(
|
|
|
2516
2516
|
|
|
2517
2517
|
# --- Memory: authorized candidates, one selection and one budget ---
|
|
2518
2518
|
if _canonical_person_allowed and query_text:
|
|
2519
|
-
from apsimo.
|
|
2519
|
+
from apsimo.memory.recall import source_candidates
|
|
2520
2520
|
beliefs, quotations, source_hits, semantic_media = [], [], [], []
|
|
2521
2521
|
source_ledger = None
|
|
2522
2522
|
if not _canonical_only and _graph is not None:
|
|
@@ -2581,7 +2581,7 @@ async def context_assemble(
|
|
|
2581
2581
|
contact_tz, body.context.timezone or ("UTC" if _canonical_only else None)))
|
|
2582
2582
|
if source_ledger is not None:
|
|
2583
2583
|
from apsimo.beliefs.source_projection import SourceClaimProjection
|
|
2584
|
-
from apsimo.
|
|
2584
|
+
from apsimo.memory.selection import current_work_query
|
|
2585
2585
|
beliefs, quotations = SourceClaimProjection(source_ledger).prepare_context(
|
|
2586
2586
|
beliefs, source_hits, contact_id=body.context.contact_id,
|
|
2587
2587
|
session_id=body.context.session_id, time_query=time_query,
|
|
@@ -2598,7 +2598,7 @@ async def context_assemble(
|
|
|
2598
2598
|
# The projected view preserves envelope and current-source
|
|
2599
2599
|
# checks. A fact needs query overlap before any fail-open
|
|
2600
2600
|
# reranker path; confidence alone never makes it relevant.
|
|
2601
|
-
from apsimo.
|
|
2601
|
+
from apsimo.memory.recall import contact_fact_candidates
|
|
2602
2602
|
fact_result = _tom_context_facts.list_facts(
|
|
2603
2603
|
contact_id=body.context.contact_id, limit=512)
|
|
2604
2604
|
facts = fact_result if isinstance(fact_result, list) else fact_result.get('facts', [])
|
|
@@ -2623,7 +2623,7 @@ async def context_assemble(
|
|
|
2623
2623
|
from apsimo.turns.source_annotations import current_candidates
|
|
2624
2624
|
retained = current_candidates(source_ledger, selected, **annotation_scope)
|
|
2625
2625
|
if len(retained) != len(selected):
|
|
2626
|
-
from apsimo.
|
|
2626
|
+
from apsimo.memory.recall import pack_memory_context
|
|
2627
2627
|
selected, body_text = pack_memory_context(retained, limit=5,
|
|
2628
2628
|
max_chars=max(0, min(max_chars, 24000)))
|
|
2629
2629
|
if body_text:
|
|
@@ -11284,7 +11284,7 @@ async def enriched_context(
|
|
|
11284
11284
|
and (_p8_runtime is None or _enriched_p8_viewer is not None):
|
|
11285
11285
|
async def _shared_facts():
|
|
11286
11286
|
try:
|
|
11287
|
-
from apsimo.
|
|
11287
|
+
from apsimo.memory.recall import contact_fact_candidates, pack_memory_context
|
|
11288
11288
|
from apsimo.turns.source_annotations import expand, current_candidates
|
|
11289
11289
|
store = _p8_runtime.facts_store if _p8_runtime is not None else _facts_store
|
|
11290
11290
|
view = (_p8_runtime.projected_facts_view(_enriched_p8_viewer,
|
|
@@ -11725,8 +11725,8 @@ def _memory_context_selector():
|
|
|
11725
11725
|
"""Keep one selector per active reranker, also usable without graph storage."""
|
|
11726
11726
|
global _context_recall_selector
|
|
11727
11727
|
if _context_recall_selector is None or _context_recall_selector[0] is not _reranker:
|
|
11728
|
-
from apsimo.
|
|
11729
|
-
from apsimo.
|
|
11728
|
+
from apsimo.memory.selection import RecallSelector
|
|
11729
|
+
from apsimo.memory.recall import provider_calibration_metadata
|
|
11730
11730
|
provider = _reranker
|
|
11731
11731
|
selector = RecallSelector(
|
|
11732
11732
|
provider.rerank if provider is not None else None,
|
|
@@ -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")
|
|
@@ -313,7 +314,7 @@ def main() -> None:
|
|
|
313
314
|
code = run_init(root_dir=args.dir, args=args)
|
|
314
315
|
if code != 0:
|
|
315
316
|
sys.exit(code)
|
|
316
|
-
if args.preferences_only:
|
|
317
|
+
if args.preferences_only or args.skills_only:
|
|
317
318
|
return
|
|
318
319
|
|
|
319
320
|
# Initialize Apsimo identity if not already done
|
|
@@ -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(
|
|
@@ -1946,7 +1946,7 @@ def run_init(root_dir: str | None = None, args=None) -> int:
|
|
|
1946
1946
|
root_dir: Root directory for config files
|
|
1947
1947
|
args: Parsed argparse Namespace for non-interactive mode
|
|
1948
1948
|
"""
|
|
1949
|
-
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)
|
|
1950
1950
|
or getattr(args, 'whatsapp_read_receipts', None) is not None):
|
|
1951
1951
|
if (getattr(args, 'no_harness', False) or getattr(args, 'mcp_harnesses', None)
|
|
1952
1952
|
or getattr(args, 'host_framework', None) not in (None, 'hermes')):
|
|
@@ -569,14 +569,25 @@ def run(root_dir=None, args=None):
|
|
|
569
569
|
try:
|
|
570
570
|
receipt_choice = getattr(args, 'whatsapp_read_receipts', None)
|
|
571
571
|
preferences_only = bool(getattr(args, 'preferences_only', False))
|
|
572
|
+
skills_only = bool(getattr(args, 'skills_only', False))
|
|
572
573
|
preview = bool(getattr(args, 'preview', False))
|
|
573
|
-
if preferences_only:
|
|
574
|
+
if preferences_only or skills_only:
|
|
574
575
|
home = setup._resolve_hermes_home(getattr(args, 'hermes_home', None))
|
|
575
576
|
selected_python = None
|
|
576
577
|
else:
|
|
577
578
|
home, selected_python = _select_home(args, ask)
|
|
578
579
|
if preview and not preferences_only:
|
|
579
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
|
|
580
591
|
if preferences_only:
|
|
581
592
|
if receipt_choice is None:
|
|
582
593
|
raise ValueError('--preferences-only requires --whatsapp-read-receipts on or off')
|
|
@@ -673,6 +684,8 @@ def run(root_dir=None, args=None):
|
|
|
673
684
|
resources = _adapter_resources(getattr(args, 'adapter_wheel', None))
|
|
674
685
|
_preflight_outbox(home, resources)
|
|
675
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)
|
|
676
689
|
owner_name = ask('Your name', getattr(args, 'contact_name', None) or os.environ.get('USER', 'Owner'), True)
|
|
677
690
|
owner_handles, owner_platforms = _owner_handles(args, ask, noninteractive)
|
|
678
691
|
agent_name = ask('Agent name', getattr(args, 'agent_name', None) or 'Assistant', True)
|
|
@@ -858,6 +871,7 @@ def run(root_dir=None, args=None):
|
|
|
858
871
|
guiding = ('Guiding values: ' + ', '.join(agent_preferences['values']) + '.\n'
|
|
859
872
|
if agent_preferences['values'] else '')
|
|
860
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)
|
|
861
875
|
except Exception:
|
|
862
876
|
# Undo only this installation's exact bytes. Concurrent edits stay
|
|
863
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.')
|
|
@@ -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,7 +28,7 @@ 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
|
|
@@ -18,6 +18,7 @@ apsimo/setup_hermes.py
|
|
|
18
18
|
apsimo/setup_local_work.py
|
|
19
19
|
apsimo/setup_native_goals.py
|
|
20
20
|
apsimo/setup_native_reviews.py
|
|
21
|
+
apsimo/setup_skills.py
|
|
21
22
|
apsimo/telemetry.py
|
|
22
23
|
apsimo/work_orders.py
|
|
23
24
|
apsimo.egg-info/PKG-INFO
|
|
@@ -285,10 +286,8 @@ apsimo/intelligence/graph/consolidator.py
|
|
|
285
286
|
apsimo/intelligence/graph/distiller.py
|
|
286
287
|
apsimo/intelligence/graph/migrations.py
|
|
287
288
|
apsimo/intelligence/graph/queries.py
|
|
288
|
-
apsimo/intelligence/graph/recall.py
|
|
289
289
|
apsimo/intelligence/graph/reconciler.py
|
|
290
290
|
apsimo/intelligence/graph/schema.py
|
|
291
|
-
apsimo/intelligence/graph/selection.py
|
|
292
291
|
apsimo/intelligence/learning/__init__.py
|
|
293
292
|
apsimo/intelligence/learning/continuous_learner.py
|
|
294
293
|
apsimo/intelligence/learning/feedback_store.py
|
|
@@ -313,6 +312,9 @@ apsimo/mcp/__init__.py
|
|
|
313
312
|
apsimo/mcp/__main__.py
|
|
314
313
|
apsimo/mcp/config.py
|
|
315
314
|
apsimo/mcp/server.py
|
|
315
|
+
apsimo/memory/__init__.py
|
|
316
|
+
apsimo/memory/recall.py
|
|
317
|
+
apsimo/memory/selection.py
|
|
316
318
|
apsimo/mining/__init__.py
|
|
317
319
|
apsimo/mining/corpus.py
|
|
318
320
|
apsimo/mining/escalations.py
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "apsimo"
|
|
7
|
-
version = "1.4.
|
|
7
|
+
version = "1.4.5"
|
|
8
8
|
description = "Persistent identity, memory and autonomy for AI agents"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -29,7 +29,7 @@ dependencies = [
|
|
|
29
29
|
graph = ["neo4j>=5.18"]
|
|
30
30
|
neo4j = ["neo4j>=5.18"]
|
|
31
31
|
vectors = ["sentence-transformers>=3.0", "pandas>=2.0", "pyarrow>=15.0", "lancedb>=0.10"]
|
|
32
|
-
hermes = ["apsimo-hermes>=1.4.
|
|
32
|
+
hermes = ["apsimo-hermes>=1.4.5,<2"]
|
|
33
33
|
mcp = ["mcp[cli]>=1.0,<2"]
|
|
34
34
|
lancedb = ["lancedb>=0.6", "pyarrow>=14.0", "pandas>=2.0"]
|
|
35
35
|
extraction = ["PyMuPDF>=1.24", "beautifulsoup4>=4.12"]
|
|
@@ -8,7 +8,7 @@ import pytest
|
|
|
8
8
|
from apsimo.api.middleware import ApiKeyMiddleware
|
|
9
9
|
from apsimo.beliefs.source_projection import SourceClaimProjection
|
|
10
10
|
from apsimo.beliefs.source_time import interpret_time_query
|
|
11
|
-
from apsimo.
|
|
11
|
+
from apsimo.memory.recall import pack_memory_context
|
|
12
12
|
from apsimo.turns import TurnIdempotencyLedger
|
|
13
13
|
from apsimo.turns.source_read import read
|
|
14
14
|
from test_scoped_api_authority import _principal, _write_keyring
|
|
@@ -11,7 +11,7 @@ from apsimo.api.authority import RequestAuthority
|
|
|
11
11
|
from apsimo.api.routers import executions
|
|
12
12
|
from apsimo.beliefs.source_projection import SourceClaimProjection
|
|
13
13
|
from apsimo.beliefs.source_time import MemoryTimeQuery
|
|
14
|
-
from apsimo.
|
|
14
|
+
from apsimo.memory.selection import RecallSelector, current_work_query
|
|
15
15
|
from apsimo.turns import TurnIdempotencyLedger
|
|
16
16
|
from apsimo.turns.idempotency import source_message_hash
|
|
17
17
|
from apsimo.turns.source_annotations import expand
|
|
@@ -9,7 +9,7 @@ import httpx
|
|
|
9
9
|
import pytest
|
|
10
10
|
import pytest_asyncio
|
|
11
11
|
|
|
12
|
-
from apsimo.
|
|
12
|
+
from apsimo.memory.recall import pack_memory_context, render_memory_context
|
|
13
13
|
from apsimo.turns import TurnIdempotencyLedger
|
|
14
14
|
from apsimo.turns.media import SourceMedia
|
|
15
15
|
from apsimo.turns.source_annotations import expand, current_candidates
|
|
@@ -139,6 +139,8 @@ def test_new_private_instance_uses_canonical_resources_and_scoped_authority(args
|
|
|
139
139
|
assert principal['credentials'][0]['secret'] not in (home/'config.yaml').read_text()
|
|
140
140
|
assert (home/'SOUL.md').read_text().startswith('# Orion')
|
|
141
141
|
assert (state/'adapter/apsimo_hermes/evidence.py').is_file()
|
|
142
|
+
from apsimo.setup_skills import SKILL_NAME, SKILL_RESOURCE
|
|
143
|
+
assert (home/'skills'/SKILL_NAME/'SKILL.md').read_bytes() == setup_hermes._adapter_resources(args.adapter_wheel)[SKILL_RESOURCE]
|
|
142
144
|
assert (state/'api-keyring.json').stat().st_mode & 0o777 == 0o600
|
|
143
145
|
# Same selected home finds this instance without a separate global pointer.
|
|
144
146
|
monkeypatch.delenv('APSIMO_STATE_DIR', raising=False)
|
|
@@ -153,6 +155,102 @@ def test_new_private_instance_uses_canonical_resources_and_scoped_authority(args
|
|
|
153
155
|
assert before == ((home/'config.yaml').read_bytes(), (state/'api-keyring.json').read_bytes())
|
|
154
156
|
|
|
155
157
|
|
|
158
|
+
def test_skills_only_installs_and_refreshes_owned_bytes_without_instance_or_model(args, monkeypatch):
|
|
159
|
+
from apsimo.setup_skills import SKILL_NAME, SKILL_RESOURCE
|
|
160
|
+
home = Path(args.hermes_home)
|
|
161
|
+
home.mkdir()
|
|
162
|
+
originals = {'config.yaml': b'model: {default: retained}\n', 'SOUL.md': b'Private identity',
|
|
163
|
+
'skills/personal/SKILL.md': b'User-authored instructions'}
|
|
164
|
+
for relative, content in originals.items():
|
|
165
|
+
path = home/relative; path.parent.mkdir(parents=True, exist_ok=True); path.write_bytes(content)
|
|
166
|
+
only = SimpleNamespace(skills_only=True, hermes_home=str(home), adapter_wheel=args.adapter_wheel)
|
|
167
|
+
monkeypatch.setattr(httpx, 'post', lambda *a, **k: pytest.fail('Skills setup called a model'))
|
|
168
|
+
monkeypatch.setattr(setup_hermes, '_interpreter', lambda *a: pytest.fail('Skills setup changed runtime selection'))
|
|
169
|
+
assert setup.run_init(None, only) == 0
|
|
170
|
+
skill = home/'skills'/SKILL_NAME/'SKILL.md'
|
|
171
|
+
original = skill.read_bytes()
|
|
172
|
+
current = setup_hermes._adapter_resources(args.adapter_wheel)
|
|
173
|
+
monkeypatch.setattr(setup_hermes, '_adapter_resources', lambda *a: {**current, SKILL_RESOURCE: original+b'\nA new bundled revision.\n'})
|
|
174
|
+
assert setup.run_init(None, only) == 0
|
|
175
|
+
assert skill.read_bytes() == original+b'\nA new bundled revision.\n'
|
|
176
|
+
before = {path: path.read_bytes() for path in skill.parent.iterdir() if path.is_file()}
|
|
177
|
+
assert setup.run_init(None, only) == 0
|
|
178
|
+
assert before == {path: path.read_bytes() for path in skill.parent.iterdir() if path.is_file()}
|
|
179
|
+
assert all((home/name).read_bytes() == content for name, content in originals.items())
|
|
180
|
+
assert not (home/'apsimo').exists() and not (home/'.env').exists()
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def test_skills_only_cli_does_not_continue_into_identity_setup(args, monkeypatch):
|
|
184
|
+
from apsimo import cli
|
|
185
|
+
monkeypatch.setattr(cli.sys, 'argv', ['apsimo', 'init', '--skills-only',
|
|
186
|
+
'--hermes-home', args.hermes_home, '--adapter-wheel', args.adapter_wheel])
|
|
187
|
+
monkeypatch.setattr(cli, '_load_dotenv', lambda: pytest.fail('Skills-only loaded instance environment'))
|
|
188
|
+
monkeypatch.setattr(cli, '_cmd_init', lambda *a: pytest.fail('Skills-only initialized identity'))
|
|
189
|
+
monkeypatch.setattr(httpx, 'post', lambda *a, **k: pytest.fail('Skills-only called a model'))
|
|
190
|
+
cli.main()
|
|
191
|
+
assert not (Path(args.hermes_home)/'apsimo').exists()
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
@pytest.mark.parametrize('collision', ['unowned', 'edited', 'symlink'])
|
|
195
|
+
def test_skills_install_preserves_user_owned_or_edited_destinations(args, collision):
|
|
196
|
+
from apsimo.setup_skills import SKILL_NAME
|
|
197
|
+
home = Path(args.hermes_home)
|
|
198
|
+
skill = home/'skills'/SKILL_NAME/'SKILL.md'
|
|
199
|
+
only = SimpleNamespace(skills_only=True, hermes_home=str(home), adapter_wheel=args.adapter_wheel)
|
|
200
|
+
if collision == 'edited':
|
|
201
|
+
assert setup.run_init(None, only) == 0
|
|
202
|
+
else:
|
|
203
|
+
skill.parent.mkdir(parents=True)
|
|
204
|
+
if collision == 'symlink':
|
|
205
|
+
target = home/'personal.md'; target.write_bytes(b'Keep my research workflow')
|
|
206
|
+
skill.symlink_to(target)
|
|
207
|
+
else:
|
|
208
|
+
skill.write_bytes(b'Keep my research workflow')
|
|
209
|
+
before = {path: path.read_bytes() for path in home.rglob('*') if path.is_file()}
|
|
210
|
+
assert setup.run_init(None, only) == 1
|
|
211
|
+
assert before == {path: path.read_bytes() for path in home.rglob('*') if path.is_file()}
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def test_new_setup_detects_skill_collision_before_model_or_attachment(args, monkeypatch):
|
|
215
|
+
from apsimo.setup_skills import SKILL_NAME
|
|
216
|
+
home = Path(args.hermes_home)
|
|
217
|
+
skill = home/'skills'/SKILL_NAME/'SKILL.md'
|
|
218
|
+
skill.parent.mkdir(parents=True); skill.write_text('My own skill')
|
|
219
|
+
monkeypatch.setattr(httpx, 'post', lambda *a, **k: pytest.fail('Collision must precede inference'))
|
|
220
|
+
assert setup.run_init(None, args) == 1
|
|
221
|
+
assert skill.read_text() == 'My own skill'
|
|
222
|
+
assert not (home/'apsimo').exists() and not (home/'config.yaml').exists()
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def test_skill_install_rolls_back_a_failed_ownership_write(args, monkeypatch):
|
|
226
|
+
from apsimo.setup_skills import SKILL_NAME
|
|
227
|
+
write = setup._atomic_hermes_config_write
|
|
228
|
+
def fail_marker(path, before, after):
|
|
229
|
+
if path.name == '.apsimo-owned.json':
|
|
230
|
+
raise OSError('Fixture ownership write failure')
|
|
231
|
+
write(path, before, after)
|
|
232
|
+
monkeypatch.setattr(setup, '_atomic_hermes_config_write', fail_marker)
|
|
233
|
+
only = SimpleNamespace(skills_only=True, hermes_home=args.hermes_home, adapter_wheel=args.adapter_wheel)
|
|
234
|
+
assert setup.run_init(None, only) == 1
|
|
235
|
+
assert not (Path(args.hermes_home)/'skills'/SKILL_NAME).exists()
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def test_multiple_bundled_skills_validate_all_destinations_before_any_write(tmp_path):
|
|
239
|
+
from apsimo.setup_skills import BUNDLE_PREFIX, prepare, install
|
|
240
|
+
home = tmp_path/'profile'
|
|
241
|
+
resources = {BUNDLE_PREFIX+name+'/SKILL.md': ('Instructions for '+name).encode()
|
|
242
|
+
for name in ('apsimo-first', 'apsimo-second')}
|
|
243
|
+
install(prepare(home, resources))
|
|
244
|
+
first, second = [home/'skills'/name/'SKILL.md' for name in ('apsimo-first', 'apsimo-second')]
|
|
245
|
+
second.write_bytes(b'My modified second skill')
|
|
246
|
+
before = {p: p.read_bytes() for p in home.rglob('*') if p.is_file()}
|
|
247
|
+
candidate = {path: content+b' updated' for path, content in resources.items()}
|
|
248
|
+
with pytest.raises(ValueError, match='Locally modified'):
|
|
249
|
+
prepare(home, candidate, refresh=True)
|
|
250
|
+
assert before == {p: p.read_bytes() for p in home.rglob('*') if p.is_file()}
|
|
251
|
+
assert first.read_bytes() == b'Instructions for apsimo-first'
|
|
252
|
+
|
|
253
|
+
|
|
156
254
|
def test_enrolled_owner_accounts_resolve_through_the_generated_scoped_api(args, monkeypatch):
|
|
157
255
|
from fastapi import FastAPI
|
|
158
256
|
from apsimo.api.middleware import ApiKeyMiddleware
|
|
@@ -8,7 +8,7 @@ import pytest
|
|
|
8
8
|
|
|
9
9
|
from apsimo.beliefs.source_projection import SourceClaimProjection
|
|
10
10
|
from apsimo.beliefs.source_time import interpret_time_query
|
|
11
|
-
from apsimo.
|
|
11
|
+
from apsimo.memory.recall import pack_memory_context
|
|
12
12
|
from apsimo.turns import TurnIdempotencyLedger
|
|
13
13
|
from apsimo.turns.source_read import read
|
|
14
14
|
from test_source_claim_projection import Model, claim
|
|
@@ -3,9 +3,10 @@ from unittest.mock import AsyncMock
|
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
5
|
|
|
6
|
-
from apsimo.
|
|
7
|
-
calibration_fingerprint,
|
|
6
|
+
from apsimo.memory.recall import (
|
|
7
|
+
calibration_fingerprint, render_memory_context,
|
|
8
8
|
)
|
|
9
|
+
from apsimo.intelligence.graph.queries import lexical_query
|
|
9
10
|
from test_recall_ranking import RecallFixture, _Hit, _node
|
|
10
11
|
from test_recall_rerank import _RecordingReranker
|
|
11
12
|
|
|
@@ -5,8 +5,8 @@ import json
|
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
|
|
8
|
-
from apsimo.
|
|
9
|
-
from apsimo.
|
|
8
|
+
from apsimo.memory.recall import source_candidates
|
|
9
|
+
from apsimo.memory.selection import RecallSelector
|
|
10
10
|
from apsimo.beliefs.source_projection import SourceClaimProjection
|
|
11
11
|
from apsimo.beliefs.source_time import interpret_time_query
|
|
12
12
|
from apsimo.turns.idempotency import TurnIdempotencyLedger, source_message_hash
|
|
@@ -6,7 +6,7 @@ from httpx import ASGITransport, AsyncClient
|
|
|
6
6
|
import pytest
|
|
7
7
|
|
|
8
8
|
from apsimo.beliefs.source_projection import SourceClaimProjection
|
|
9
|
-
from apsimo.
|
|
9
|
+
from apsimo.memory.recall import pack_memory_context, render_memory_context
|
|
10
10
|
from apsimo.turns import TurnIdempotencyLedger
|
|
11
11
|
from test_procedure_source_context import ProcedureModel, candidates
|
|
12
12
|
from test_source_claim_projection import claim
|