AbstractRuntime 0.17.0__tar.gz → 0.18.0__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.
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/CHANGELOG.md +89 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/PKG-INFO +29 -7
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/README.md +25 -3
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/README.md +2 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/api.md +1 -1
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/automations.md +6 -2
- abstractruntime-0.18.0/docs/digital-identity.md +184 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/entity-runtime.md +3 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/getting-started.md +1 -1
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/integrations/abstractcore.md +4 -2
- abstractruntime-0.18.0/docs/track-record.md +176 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/troubleshooting.md +1 -1
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/llms-full.txt +417 -10
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/llms.txt +4 -2
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/mkdocs.yml +2 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/pyproject.toml +6 -4
- abstractruntime-0.18.0/release-notes.md +86 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/scripts/generate_llms_full.py +2 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/skills/abstractruntime/SKILL.md +2 -2
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_attribution.py +12 -4
- abstractruntime-0.18.0/src/abstractruntime/identity/__init__.py +86 -0
- abstractruntime-0.18.0/src/abstractruntime/identity/acquaintances.py +249 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/chat.py +6 -1
- abstractruntime-0.18.0/src/abstractruntime/identity/digital_identity.py +854 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/life.py +42 -1
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/prelude.py +28 -1
- abstractruntime-0.18.0/src/abstractruntime/identity/track_record.py +735 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/visit_workflow.py +10 -1
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +28 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +112 -3
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +1 -1
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +15 -3
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/sqlite.py +31 -2
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/compiler.py +8 -1
- abstractruntime-0.18.0/tests/test_digital_identity.py +722 -0
- abstractruntime-0.18.0/tests/test_duck_typed_store_session_attribution.py +45 -0
- abstractruntime-0.18.0/tests/test_identity_acquaintances.py +181 -0
- abstractruntime-0.18.0/tests/test_identity_track_record.py +473 -0
- abstractruntime-0.18.0/tests/test_model_idle_unload_relay.py +114 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_residency_clean_switch.py +3 -1
- abstractruntime-0.18.0/tests/test_model_residency_lock_set.py +85 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_packaging_extras.py +9 -3
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_sqlite_ledger_store.py +3 -1
- abstractruntime-0.18.0/tests/test_tool_executor_error_output_detection.py +129 -0
- abstractruntime-0.17.0/release-notes.md +0 -46
- abstractruntime-0.17.0/src/abstractruntime/identity/__init__.py +0 -17
- abstractruntime-0.17.0/tests/test_tool_executor_error_output_detection.py +0 -40
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/.github/workflows/changelog.yml +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/.gitignore +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/LICENSE +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/ROADMAP.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/SECURITY.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/changelog.d/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0010_one_replay_many_views.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/architecture.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/artifacts.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0864_facade_catalog_hub_search_pages.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0854_replay_view.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0866_queued_state_in_the_ledger_and_pools_lend_never_build.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0865_model_loaded_ledger_event.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/email.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/evidence.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/faq.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/integrations/abstractmemory.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/limits.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/manual_testing.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/proposal.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/provenance.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/replay.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/snapshots.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/tool-approval.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/tools-comms.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/05_persistence.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/pytest.ini +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/scripts/backfill_diary_edges.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/scripts/changelog.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/scripts/regen_replay_conformance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automation_queries.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/adapters.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/attention.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundle.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/commands.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/consumers.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/controller.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/ledger.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/models.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/samples.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/service.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/wakes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/conversation_search.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/effect_cancellation.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/health.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/live_deltas.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/progress_channel.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/publish.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/questions.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_identity.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_origin.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/step_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/tool_scope.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/charts.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/docx.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/pdf.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/actions.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/automations.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/binding.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/feeder.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/frame.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/inbox.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/act_only.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/communities.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/diary.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/digest.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/lease.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/memory_reader.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/night_voice.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/phase_graph.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/phase_spec.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/reflection.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/substrate.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tool_effects.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tool_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tools.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/structured_output.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/mail_verbs.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/delta.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/executions.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/view.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/multi_store.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/session_history.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/session_turns.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/change_ring.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/lease.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/serialize.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/session_tool_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/connection_events.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/connections.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/email_received.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/event_frame.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/feed.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/manual.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/protocol.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/registry.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/schedule.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/webhook.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/turn_grounding.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/atomic_files.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/README.md +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/automation_harness.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/conftest.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/email_wp2_support.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/atom.xml +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss1.xml +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss2.xml +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/visualflow/compare_text_operands.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/visualflow/typed_literals_flow.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/visualflow/typed_literals_flow.legacy.json +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/live_email/conftest.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/live_email/live_email_support.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/live_email/test_email_live_runtime.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/media_endpoint_profile_probe.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_server_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_structured_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_active_consumers_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_active_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_agora_agent_alias_identity.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_agora_tools_http.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_artifact_session_candidates.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_calendar_schedule.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_commands.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_controller.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_controller_recovery.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_definition.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_discussion_isolation.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_email_results.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_growing_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_list_reads.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_named_policy_compiler.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_next_fire.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_occurrence_error.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_occurrence_recovery.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_replay_read_only.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_retry.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_session_turns.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_status.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_tool_approval.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_browser_probe_target_walling.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_capability_default_reasoning.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_changelog_fragments.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_code_node_imports.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_code_node_restricted_python.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_command_sandbox_host_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_command_store.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_compaction_summarizer_route.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_config_facade_model_contexts.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_config_facade_models_engines.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_config_facade_voice_input_hint.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_controller_bundle_packaged.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_conversation_search.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_conversational_questions.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_crash_ordering_inversions.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_create_if_absent.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_data_registry_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_decision_facade_and_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_decision_output.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_model_warmup_switch.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_camera_gating.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_web.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_diary_capture.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_diary_write_rescue.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_directory_lease.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_disabled_toolsets_seam.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discovery_facade_model_errors.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discussion_session_anchor.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_document_markdown_tables.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_document_renderers_hr_quote.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_durable_write_discipline.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_effect_cancellation.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_effect_interrupted.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_effect_issuance_idempotency.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_election_consequence_teaching.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_binding_and_refiner.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_feeder_batched.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_feeder_flags.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_gate_fixes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_inbox_and_trigger.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_received_mailbox_id.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_regate_fixes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_review_fixes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_self_trigger_loop.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_stream_consumers.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_toolset_and_walls.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_emergence_experiment.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_emit_event_uses_wait_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_route_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_awake_memory_fixes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_brain_effects.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_chat_driver.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_chat_tools_reflection.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_diary.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_execute_tool.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_fetch_url_tool.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_history_window.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_life_loop.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_memory_richness.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_phase_graph_conformance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_react_visit_window.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_recent_memories.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_runtime.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_search_memory.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_substrate_resolution.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_visit_honesty.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_workspace_cap.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_workspace_tools.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_event_index_cross_process.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_event_wait_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_execute_command_output_offload.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_execution_capability_discovery.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_explicit_eject_other_clients.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_factory_default_retry_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_format_repair_nudge.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_fresh_install_no_provider.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_gateway_facades_c4899.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_git_read_only_refiner.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_hf_process_residency_merge.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_history_window_multimodal.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_hot_path_store_reads.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_indexed_idempotency_lookup.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_change_token_after_build.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_index_build_race.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_run_cache_bound.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_store_scan_memo.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_jsonl_row_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_cursor_invariants.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_get_record.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_record_slimming.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_live_token_deltas.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_prefix_stability_contract.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_text_phase_progress.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_client_grounding_tail.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_retry_classification.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_streaming_on_token.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_local_helper_tool_exposure.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_local_residency_host_sweep.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mail_verbs.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mailbox_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_max_iterations_ceiling.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_capability_default_routing.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_host_endpoint_resolver.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_subprocess.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_appraise_handler.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_communities.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_revise.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_seam_handlers.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_step_provenance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mlx_process_residency_merge.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_eject_cancel.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_residency_release_and_readable_holders.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_multi_store_scheduler.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_native_mlx_application_wiring.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_native_tool_channel.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_night_voice.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_occurrence_named_inputs.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_occurrence_samples.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_offload_answer_chain_c4978.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_offloading.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_pdf_unicode_rendering.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_personal_cycle.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_phantom_attachment_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_phase_graph_artifact_control.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_phase_graph_obedience.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_phase_vocabulary_migration.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_overlay.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_provider_pin_routing_isolation.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_public_action_approval_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_publish_event.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_r12_workspace_sandbox.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_read_idle_threading.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_readoption_experiment.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_realize_election.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_remote_client_cancel.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_remote_speculation_defaults.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_conformance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_conformance_package.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_cursor_token.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_delta_cost.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_invariants.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_public_updates.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_review_findings.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_tool_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_report_branding.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_residency_fit_refusal_broadcast.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_resident_media_generation.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_resume_concurrent_same_wait.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_index_workspace_root.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_mutation_lock.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_origin.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_scoped_tool_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_store_change_token.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_tool_scope_ceiling.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_browser_session_boundary.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_tick_step_gate.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_schedule_run.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_schedule_v1_corpus.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_schedule_v2_calendar.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_send_email_refiner.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_send_email_self_default_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_history.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_prompt_cache_attribution.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_prompt_cache_visibility.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_route_stamp.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_start_cost.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_tool_policy.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_shell_tool_exposure.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_speculation_inheritance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_steer_sidecar.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_step_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_streamed_voice_namespace.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_structured_schema_execution_client.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_thinking_inheritance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_catalog.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_descriptor_registry.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_inventory_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_invoke_effect.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_policy_and_mounts.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_topic_election_world_model.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_cloudevents.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_connection_listening.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_connections.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_feed.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_registry.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_schedule_math.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_webhook.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trusted_run_index.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_turn_grounding_byte_stability.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_ab_fixture.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_live_guidance.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_midturn_elections.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_midturn_resume.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_workflow.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_compare_typed_values.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_entity_memory_nodes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_llm_call_partial_override.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_reroute_lowering.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_set_vars_pins.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_agora_react_agent.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_continue_on_error.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_function_library.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_var_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_pin_expressions.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_schema_enum_switch.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_voice_library_facade.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_voice_openai_api_key_path.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_voice_projection_contract.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_w4_feelings_lens.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_wait_event_deadline.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_wait_until_streak.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_wait_until_utc_normalization.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_builtin_deny.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_prompt_context.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_read_only.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_writable_paths.py +0 -0
- {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_write_chart.py +0 -0
|
@@ -10,6 +10,95 @@ Unreleased changes live in [`changelog.d/`](changelog.d/README.md), one file per
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.18.0] - 2026-11-04
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **Acquaintances of an entity or a session** (`identity/acquaintances.py`, framework backlog 1119):
|
|
18
|
+
`entity_acquaintances(home_dir, run_store)` and `session_acquaintances(session_id, run_store)` answer two
|
|
19
|
+
lists, the other entities and the humans it interacted with, each with first and last seen, the number of
|
|
20
|
+
interactions and the task kinds. Computed from existing records, never stored: the participants the
|
|
21
|
+
gateway stamps on visit, summon and meet runs, the person who started a run (`_meta.origin`), and who left
|
|
22
|
+
a task in the task inbox. Identifiers only; interactions with no usable identifier (an `agent:` participant,
|
|
23
|
+
a participant without a namespace, a person-started run without an actor) are listed under `not_counted`,
|
|
24
|
+
never guessed. See `docs/track-record.md#acquaintances`.
|
|
25
|
+
- **An entity's digital identity: its look and its voice, one record in its home**
|
|
26
|
+
(`abstractruntime.identity.digital_identity`, framework ADR 0052 draft, backlog 1119; `docs/digital-identity.md`).
|
|
27
|
+
`<home>/identity.json` holds the avatar design, its colour and the voice (`schema_version` 1). `write_identity` checks
|
|
28
|
+
every bound (`IdentityInvalid` names the field), runs the gateway's `check` hook, appends an `identity_changed` row to
|
|
29
|
+
`state_history.jsonl` (the `phase_changed` field names) before the file is replaced atomically, and never gives a
|
|
30
|
+
`rev` twice: one write at a time per home (`<home>/.identity.lock`, held from the read to the file replace). A
|
|
31
|
+
file it cannot read in full raises `IdentityUnreadable` on read and on write, never "no identity".
|
|
32
|
+
`default_identity` is the recorded default anyone can recompute (SHA-256 of the entity id, eight engraved Watch
|
|
33
|
+
designs, an HSL colour, the gateway's default voice as a value); `record_default_identity` writes it once and never
|
|
34
|
+
overwrites. `identity_at_rev` answers an old rev from the biography. The reference `entity:castor#3` rides
|
|
35
|
+
`vars._runtime.identity_ref` beside the signed entity stamp (`stamp_run_identity_ref`, `read_run_identity_ref`,
|
|
36
|
+
`parse_identity_ref`). `identity_fingerprint` derives the individual's `actor_id` from the manifest, with the diary's
|
|
37
|
+
chain head. Homes without `identity.json` are untouched.
|
|
38
|
+
- **The summon tells the entity when its look or voice changed**: one sentence ("Your voice changed on 4 November (by
|
|
39
|
+
laurent): now fr-male-rene.") in the summon prelude, after the identity core, when the change is newer than the
|
|
40
|
+
previous summon (`render_summon_prelude(home_dir=, identity_since=)`, `ChatSession(identity_since=)`,
|
|
41
|
+
`build_visit_workflow(identity_since=)` or `_visit.identity_since` seeded by the door).
|
|
42
|
+
- **The idle unload reaches the host: `set_model_idle_unload(seconds)`** (host facade, `LocalAbstractCoreLLMClient`,
|
|
43
|
+
`MultiLocalAbstractCoreLLMClient`; framework backlog 1115). It relays AbstractCore's process-wide idle-unload time
|
|
44
|
+
(ADR 0012, default 60 minutes): a model no call has used for that long is unloaded, a locked model never is, and a
|
|
45
|
+
running call is never interrupted. `None` or `0` turns it off; a refused value answers `ok: false`. Local residency
|
|
46
|
+
rows of in-process text models carry `idle_unload_s`, `last_used_at` and `idle_unload_at`, and pass through Core's
|
|
47
|
+
`in_use` and `locked_by`, so a host can show a model that is in use, or kept loaded by another account.
|
|
48
|
+
- **`set_model_residency_locks(locks)`**: the locked models become exactly the listed ones (resident ones locked,
|
|
49
|
+
missing ones loaded then locked, the others unlocked), each pair with its own outcome. A lock names a provider and a
|
|
50
|
+
model; the `base_url` of a configured endpoint is not part of the key. A host stores its "Keep loaded" set and
|
|
51
|
+
replays it at start; as a `set_` name it is replayed when the gateway's model host rebuilds a client.
|
|
52
|
+
- **Track record and reputation of an entity or a session** (`identity/track_record.py`, ADR 0052 §5-§6,
|
|
53
|
+
framework backlog 1119). `entity_track_record(home_dir, run_store, ledger_store, *, book_head)` and
|
|
54
|
+
`session_track_record(session_id, run_store, ledger_store)` answer sessions, runs, successes, failures,
|
|
55
|
+
cancelled, in progress and tokens (input, output, total), per task kind (`<phase or role>/<workflow_id>`,
|
|
56
|
+
from ids only) and overall; `compute_reputation(record)` gives trust per task kind,
|
|
57
|
+
`(successes + 1) / (successes + failures + 2)` with its support, the support-weighted overall, and the
|
|
58
|
+
last 20 outcomes as evidence ("no experience yet" when there is none). Everything is computed from
|
|
59
|
+
existing records; nothing is stored. Only work from outside counts: turn roots a person or a trigger
|
|
60
|
+
started and automation occurrences (once each, however many attempts); sub-runs, controllers, the
|
|
61
|
+
session memory run and runs another run or the system started never do. Outcomes come from the run
|
|
62
|
+
status, the occurrence's `automation.completed` decision, an entity task marked `done`, and the work
|
|
63
|
+
order verdicts (`done:` / `blocked:`). Feedback from people and agents (`feedback_user`,
|
|
64
|
+
`feedback_agent`) is typed but has no source yet, so every answer says `basis: "completion-rate only"`.
|
|
65
|
+
Each answer names its subject's `identity_ref` and, for an entity, its `identity_fingerprint`.
|
|
66
|
+
See `docs/track-record.md`.
|
|
67
|
+
- **`metrics_many` also returns `tokens_input` and `tokens_output`** (SQLite ledger): `usage.input_tokens`
|
|
68
|
+
(else `prompt_tokens`) and `output_tokens` (else `completion_tokens`) of completed `llm_call` records.
|
|
69
|
+
Existing keys are unchanged.
|
|
70
|
+
- **`identity.life.read_work_order_verdicts(home_dir)`**: the verdicts the work lane archived in
|
|
71
|
+
`work_order.done.md`, oldest first.
|
|
72
|
+
|
|
73
|
+
### Changed
|
|
74
|
+
|
|
75
|
+
- **AbstractCore 2.34.0 or newer** (base install, `apple` and `gpu` settings): the idle unload and its residency rows
|
|
76
|
+
come from it.
|
|
77
|
+
- **A load with `ttl_s` or `keep_alive` on an in-process model** still lists them under `unsupported_options`; its
|
|
78
|
+
warning now names the idle unload that applies instead ("the idle unload setting applies (60 min unused, never while
|
|
79
|
+
it is kept loaded)"), or says it is off.
|
|
80
|
+
|
|
81
|
+
### Fixed
|
|
82
|
+
|
|
83
|
+
- **A run store whose index cannot attribute a session is refused, never started as a plain chat**
|
|
84
|
+
(`core/run_attribution.py`, framework backlog 0938). A third-party store with `list_run_index` but no `session_kind`
|
|
85
|
+
in its rows (an index written before automations v1) used to report "no kinds" and let a `discussion-session:` start
|
|
86
|
+
through as an ordinary chat, skipping the discussion's read-only anchor. It now raises `SessionAttributionError`
|
|
87
|
+
naming the missing column; a store with no index at all names both methods it lacks. Built-in stores are unchanged.
|
|
88
|
+
Upgrading a custom store: add `session_kind` and `role` to its index rows, or implement `session_kinds(session_id)`
|
|
89
|
+
(see `docs/automations.md`, "Storage guarantees").
|
|
90
|
+
- **A tool that reports its failure as a JSON object keeps its explanation** (`integrations/abstractcore/tool_executor.py`,
|
|
91
|
+
framework backlog 1005). A failed result's `output` used to be emptied when the tool returned its failure as a JSON
|
|
92
|
+
string, so the agent and the run ledger saw only the error line (for a web search: "No results found", never the
|
|
93
|
+
backends tried, the bot-challenge status or the hint). The parsed object is now the result's `output`, as for a tool
|
|
94
|
+
that returns a dict; a plain text error (`Error: ...`) still keeps an empty output and its message in `error`.
|
|
95
|
+
- **The visual-flow Agent node shows the model that explanation** (`visualflow_compiler/compiler.py`). A failed call
|
|
96
|
+
whose `output` is an object is rendered as its error line followed by the object (`[web_search]: Error: No results
|
|
97
|
+
found` then the JSON), under the same `agent_observation_max_chars` limit; a plain text failure still shows its error
|
|
98
|
+
line alone.
|
|
99
|
+
- Failure payloads are now recorded in the run ledger and the history bundle like success payloads: whatever a tool puts
|
|
100
|
+
in its failure JSON (its parameters included) is stored with the run.
|
|
101
|
+
|
|
13
102
|
## [0.17.0] - 2026-11-03
|
|
14
103
|
|
|
15
104
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.18.0
|
|
4
4
|
Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
|
|
5
5
|
Project-URL: AbstractCore (website), https://www.abstractcore.ai/
|
|
6
6
|
Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
|
|
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
|
-
Requires-Dist: abstractcore>=2.
|
|
23
|
+
Requires-Dist: abstractcore>=2.34.0
|
|
24
24
|
Requires-Dist: abstractmemory>=0.4.0
|
|
25
25
|
Requires-Dist: abstractsemantics>=0.0.5
|
|
26
26
|
Requires-Dist: anyio<5.0.0,>=4.12.1
|
|
@@ -35,14 +35,14 @@ Requires-Dist: reportlab<5.0.0,>=4.0.0
|
|
|
35
35
|
Requires-Dist: restrictedpython>=7.0
|
|
36
36
|
Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
|
|
37
37
|
Provides-Extra: apple
|
|
38
|
-
Requires-Dist: abstractcore[apple]>=2.
|
|
38
|
+
Requires-Dist: abstractcore[apple]>=2.34.0; extra == 'apple'
|
|
39
39
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
|
|
40
40
|
Provides-Extra: docs
|
|
41
41
|
Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
|
|
42
42
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
43
43
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
44
44
|
Provides-Extra: gpu
|
|
45
|
-
Requires-Dist: abstractcore[gpu]>=2.
|
|
45
|
+
Requires-Dist: abstractcore[gpu]>=2.34.0; extra == 'gpu'
|
|
46
46
|
Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
|
|
47
47
|
Provides-Extra: test
|
|
48
48
|
Requires-Dist: aiosmtpd<2.0.0,>=1.4.4; extra == 'test'
|
|
@@ -55,10 +55,32 @@ Description-Content-Type: text/markdown
|
|
|
55
55
|
|
|
56
56
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
57
57
|
|
|
58
|
-
**Version:** 0.
|
|
58
|
+
**Version:** 0.18.0 • **Python:** 3.10+
|
|
59
59
|
|
|
60
60
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
61
61
|
|
|
62
|
+
## What's new in 0.18.0
|
|
63
|
+
|
|
64
|
+
- **Models unload after being idle**: a host sets how long a local model may sit unused (`set_model_idle_unload`,
|
|
65
|
+
AbstractCore's default 60 minutes; off with `None` or `0`); a running call is never interrupted and a model kept
|
|
66
|
+
loaded never unloads. `set_model_residency_locks` relays the host's "Keep loaded" set, and both come back after a
|
|
67
|
+
model-host restart. Loaded-model rows say when a model was last used, whether it is in use, who keeps it loaded
|
|
68
|
+
and when it unloads. Requires AbstractCore 2.34.0 or newer.
|
|
69
|
+
- **A failed tool keeps its explanation**: a tool that reports its failure as a JSON object (a web search's backends,
|
|
70
|
+
bot-challenge status and hint) keeps it in the result, the run ledger and what the visual-flow Agent node shows
|
|
71
|
+
the model, after the error line.
|
|
72
|
+
- **A store that cannot attribute a session is refused**: a custom run store whose index rows lack `session_kind`
|
|
73
|
+
no longer lets a discussion start as a plain chat; it raises `SessionAttributionError` naming what to add.
|
|
74
|
+
- **An entity has a recorded look and voice**: one record in its home holds its avatar and its voice, with a default
|
|
75
|
+
from birth and every change remembered (the entity is told when its look or voice changed). See
|
|
76
|
+
[docs/digital-identity.md](docs/digital-identity.md).
|
|
77
|
+
- **An entity has a track record and a first reputation**: both are computed from what it has done (runs, outcomes,
|
|
78
|
+
tokens per kind of task); until feedback from people and agents exists, the reputation is the completion rate
|
|
79
|
+
only. See [docs/track-record.md](docs/track-record.md).
|
|
80
|
+
- **An entity knows its acquaintances**: the entities and people it has interacted with are listed from its own
|
|
81
|
+
records, with when they first and last met. See [docs/track-record.md](docs/track-record.md#acquaintances). Full
|
|
82
|
+
list: [CHANGELOG.md](CHANGELOG.md).
|
|
83
|
+
|
|
62
84
|
## What's new in 0.17.0
|
|
63
85
|
|
|
64
86
|
- **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
|
|
@@ -80,7 +102,7 @@ It is designed for long-running workflows that must survive restarts and explici
|
|
|
80
102
|
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
81
103
|
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
82
104
|
durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
|
|
83
|
-
2.32.0 or newer (AbstractRuntime 0.
|
|
105
|
+
2.32.0 or newer (AbstractRuntime 0.18.0 requires 2.34.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
84
106
|
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
85
107
|
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
86
108
|
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
@@ -161,7 +183,7 @@ Remote-light runtime:
|
|
|
161
183
|
pip install abstractruntime
|
|
162
184
|
```
|
|
163
185
|
|
|
164
|
-
The base install includes AbstractCore 2.
|
|
186
|
+
The base install includes AbstractCore 2.34.0 or newer (its light install:
|
|
165
187
|
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
166
188
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
167
189
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -4,10 +4,32 @@
|
|
|
4
4
|
|
|
5
5
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
6
6
|
|
|
7
|
-
**Version:** 0.
|
|
7
|
+
**Version:** 0.18.0 • **Python:** 3.10+
|
|
8
8
|
|
|
9
9
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
10
10
|
|
|
11
|
+
## What's new in 0.18.0
|
|
12
|
+
|
|
13
|
+
- **Models unload after being idle**: a host sets how long a local model may sit unused (`set_model_idle_unload`,
|
|
14
|
+
AbstractCore's default 60 minutes; off with `None` or `0`); a running call is never interrupted and a model kept
|
|
15
|
+
loaded never unloads. `set_model_residency_locks` relays the host's "Keep loaded" set, and both come back after a
|
|
16
|
+
model-host restart. Loaded-model rows say when a model was last used, whether it is in use, who keeps it loaded
|
|
17
|
+
and when it unloads. Requires AbstractCore 2.34.0 or newer.
|
|
18
|
+
- **A failed tool keeps its explanation**: a tool that reports its failure as a JSON object (a web search's backends,
|
|
19
|
+
bot-challenge status and hint) keeps it in the result, the run ledger and what the visual-flow Agent node shows
|
|
20
|
+
the model, after the error line.
|
|
21
|
+
- **A store that cannot attribute a session is refused**: a custom run store whose index rows lack `session_kind`
|
|
22
|
+
no longer lets a discussion start as a plain chat; it raises `SessionAttributionError` naming what to add.
|
|
23
|
+
- **An entity has a recorded look and voice**: one record in its home holds its avatar and its voice, with a default
|
|
24
|
+
from birth and every change remembered (the entity is told when its look or voice changed). See
|
|
25
|
+
[docs/digital-identity.md](docs/digital-identity.md).
|
|
26
|
+
- **An entity has a track record and a first reputation**: both are computed from what it has done (runs, outcomes,
|
|
27
|
+
tokens per kind of task); until feedback from people and agents exists, the reputation is the completion rate
|
|
28
|
+
only. See [docs/track-record.md](docs/track-record.md).
|
|
29
|
+
- **An entity knows its acquaintances**: the entities and people it has interacted with are listed from its own
|
|
30
|
+
records, with when they first and last met. See [docs/track-record.md](docs/track-record.md#acquaintances). Full
|
|
31
|
+
list: [CHANGELOG.md](CHANGELOG.md).
|
|
32
|
+
|
|
11
33
|
## What's new in 0.17.0
|
|
12
34
|
|
|
13
35
|
- **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
|
|
@@ -29,7 +51,7 @@ It is designed for long-running workflows that must survive restarts and explici
|
|
|
29
51
|
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
30
52
|
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
31
53
|
durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
|
|
32
|
-
2.32.0 or newer (AbstractRuntime 0.
|
|
54
|
+
2.32.0 or newer (AbstractRuntime 0.18.0 requires 2.34.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
33
55
|
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
34
56
|
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
35
57
|
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
@@ -110,7 +132,7 @@ Remote-light runtime:
|
|
|
110
132
|
pip install abstractruntime
|
|
111
133
|
```
|
|
112
134
|
|
|
113
|
-
The base install includes AbstractCore 2.
|
|
135
|
+
The base install includes AbstractCore 2.34.0 or newer (its light install:
|
|
114
136
|
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
115
137
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
116
138
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -44,6 +44,8 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
|
|
|
44
44
|
|
|
45
45
|
- `automations.md` — automations: a workflow run on a schedule, on an event or on request as a durable controller run; triggers (`schedule@1`, `schedule@2` calendar rules in a time zone, `manual@1`, `email.received@1`, `feed.item@1` RSS 2.0 / RSS 1.0 / Atom, `webhook.received@1` Standard Webhooks, entry-point sources), per-user trigger connections, the CloudEvents envelope (`input_data.event`), run origin (`_meta.origin`), wakes (`SCHEDULE_RUN`: work later in the same session, with at most the caller's tools), Publish to channel (`PUBLISH_EVENT`, alerts with `recipient` and `channels`), commands, independent or growing context, discussions forked at any occurrence (own writable workspace, the automation's workspace mounted read-only), tool approval, typed waits, notifications and retries, and the storage guarantees (create-if-absent, per-run lock, turn roots, session kinds, one writer process per store)
|
|
46
46
|
- `entity-runtime.md` — per-entity runtimes for summoned entities: homes, the one-writer lease, act-only diary privacy (`$act_only` refs), durable visit waits with deadlines
|
|
47
|
+
- `digital-identity.md` — an entity's look and voice: `identity.json` in the home, the recorded default, the `identity_changed` biography row, the identity reference on runs, the fingerprint, the summon cue
|
|
48
|
+
- `track-record.md` — an entity's or a session's track record (sessions, runs, successes, failures, tokens) and reputation (trust per task kind with its evidence), computed from existing records; completion rates until feedback exists; and its acquaintances (the entities and humans it met)
|
|
47
49
|
- `evidence.md` — artifact-backed evidence capture for external-boundary tools
|
|
48
50
|
- `mcp-worker.md` — MCP worker CLI (`abstractruntime-mcp-worker`)
|
|
49
51
|
- `replay.md` — the replay view: one reconstruction of a run tree (status, the interaction to answer, messages, one activity per execution, artifacts, usage, the workflow it executes) that every client renders; the durable cursor (`seq`, `list_after`); conformance fixtures
|
|
@@ -459,7 +459,7 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
|
|
|
459
459
|
|
|
460
460
|
### AbstractCore (LLM + tools)
|
|
461
461
|
|
|
462
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.
|
|
462
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.34.0 or newer is part of the base install).
|
|
463
463
|
|
|
464
464
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
465
465
|
|
|
@@ -1020,8 +1020,12 @@ Automations rely on four store guarantees. Hosts that bring their own store must
|
|
|
1020
1020
|
chat. The JSON store also removes run temp files older than 10 minutes, left behind by a crash, when it opens.
|
|
1021
1021
|
- **A run index for sessions.** `Runtime.start` checks the attribution of every root run that names a session. A
|
|
1022
1022
|
store without a run index (no `session_kinds` and no `list_run_index`) cannot answer, and the start is refused with
|
|
1023
|
-
`SessionAttributionError` rather than risk starting an unanchored run in a discussion session.
|
|
1024
|
-
|
|
1023
|
+
`SessionAttributionError` rather than risk starting an unanchored run in a discussion session. A store whose
|
|
1024
|
+
`list_run_index` rows do not carry `session_kind` (an index written before automations v1) cannot tell a discussion
|
|
1025
|
+
from a chat either: its session-bearing starts are refused the same way, never started as a plain chat. To upgrade
|
|
1026
|
+
a custom store, add `session_kind` and `role` to its index rows, or implement `session_kinds(session_id)`. The
|
|
1027
|
+
built-in stores already do. Strict history reads and `latest_occurrence` (which uses the store's
|
|
1028
|
+
`latest_occurrence_row`) need the index too.
|
|
1025
1029
|
|
|
1026
1030
|
### Crash safety
|
|
1027
1031
|
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Digital identity (an entity's look and voice)
|
|
2
|
+
|
|
3
|
+
Every entity has one digital identity: the avatar design the apps draw for it, the colour of that
|
|
4
|
+
design, and the voice it speaks with. AbstractRuntime keeps it as one small file in the entity's
|
|
5
|
+
home, `identity.json`, and owns its format and its writer
|
|
6
|
+
(`abstractruntime.identity.digital_identity`). AbstractGateway checks what only it can check (the
|
|
7
|
+
design is in the avatar catalog it loaded, the voice is offered and downloaded, the home is not
|
|
8
|
+
held for maintenance) and then calls the runtime writer. Apps read the identity through the
|
|
9
|
+
gateway. This page documents the runtime half; the decision record is the framework's ADR 0052.
|
|
10
|
+
|
|
11
|
+
Identity says WHO the entity is. What it is doing right now (activity, poses) is a separate
|
|
12
|
+
subject.
|
|
13
|
+
|
|
14
|
+
## The record
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"schema_version": 1,
|
|
19
|
+
"rev": 2,
|
|
20
|
+
"avatar": {"style": "watch-vortex", "color": "#3a7bd5", "source": "chosen"},
|
|
21
|
+
"voice": {"provider": "abstractvoice", "model": "qwen3-tts", "voice": "fr-male-rene", "source": "chosen"},
|
|
22
|
+
"set_at": "2026-11-04T09:00:00+00:00",
|
|
23
|
+
"set_by": "user:laurent"
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
| Field | Rule |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `schema_version` | exactly 1 |
|
|
30
|
+
| `rev` | 1 for the first record, one more for each write, never reused |
|
|
31
|
+
| `avatar.style` | an abstractavatar design id: a lowercase letter, then up to 63 lowercase letters, digits or dashes |
|
|
32
|
+
| `avatar.color` | `#rrggbb`, lowercase hex |
|
|
33
|
+
| `avatar.source`, `voice.source` | `default` (the recorded default) or `chosen` |
|
|
34
|
+
| `voice` | `provider`, `model` and `voice` together (each non-empty, at most 128 printable characters), optional `speed` (above 0, at most 4) and `quality_preset` (at most 32 characters); or `null` |
|
|
35
|
+
| `set_at` | UTC time with its offset, set by the writer's clock |
|
|
36
|
+
| `set_by` | `namespace:name` (for example `user:laurent`), `operator`, or `default` |
|
|
37
|
+
|
|
38
|
+
`voice: null` is allowed only on the recorded default of a gateway that had no default voice
|
|
39
|
+
(`set_by: default`, `avatar.source: default`). Such an entity has no voice and says so; it never
|
|
40
|
+
borrows one. The whole file is at most 4096 bytes.
|
|
41
|
+
|
|
42
|
+
A file the runtime cannot read in full raises `IdentityUnreadable`, on read and on write: a newer
|
|
43
|
+
`schema_version`, broken JSON, a missing field, an unknown field, or a value out of bounds. It is
|
|
44
|
+
never treated as "no identity", and the writer never overwrites it. A home without
|
|
45
|
+
`identity.json` reads as `None`: its older `voice.yaml` and `appearance.json` are the gateway's to
|
|
46
|
+
read, and the runtime never touches them.
|
|
47
|
+
|
|
48
|
+
## Writing it
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from abstractruntime.identity import AvatarChoice, VoiceChoice, write_identity
|
|
52
|
+
|
|
53
|
+
record = write_identity(
|
|
54
|
+
home_dir,
|
|
55
|
+
avatar=AvatarChoice(style="watch-vortex", color="#3a7bd5", source="chosen"),
|
|
56
|
+
voice=VoiceChoice(provider="abstractvoice", model="qwen3-tts", voice="fr-male-rene", source="chosen"),
|
|
57
|
+
set_by="user:laurent",
|
|
58
|
+
cause="chosen",
|
|
59
|
+
provenance="PUT /entities/castor/identity",
|
|
60
|
+
check=gateway_checks, # optional: raise to refuse (catalog, offered voice, downloaded model)
|
|
61
|
+
)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
In this order: the current file is read; the new record gets the next `rev` and `set_at`; every
|
|
65
|
+
bound is checked (`IdentityInvalid`, whose `field` names the bad value, for example
|
|
66
|
+
`voice.speed`); `check(record)` runs; one row is appended to the home's biography; then the file
|
|
67
|
+
is replaced atomically. A refusal before the row writes nothing.
|
|
68
|
+
|
|
69
|
+
The biography is `<home>/state_history.jsonl`, the same append-only file and field names as the
|
|
70
|
+
`phase_changed` rows, so one reader handles both:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{"marker": "identity_changed", "rev": 2, "from": {...rev 1...}, "to": {...rev 2...},
|
|
74
|
+
"written_by": "user:laurent", "cause": "chosen", "at": "2026-11-04T09:00:00+00:00",
|
|
75
|
+
"provenance": "PUT /entities/castor/identity"}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The row is on disk before the file moves. If the file then fails to move, the old identity stays,
|
|
79
|
+
the row stays, and the next write takes the rev after it: a rev is never given twice.
|
|
80
|
+
`identity_at_rev(home_dir, n)` answers what the identity was at rev `n` from the current file or
|
|
81
|
+
from these rows (a rev whose file never landed raises `LookupError`), so a copied home knows every
|
|
82
|
+
look and voice it ever had. `life_sleep_stats` skips these rows like every other marker row.
|
|
83
|
+
|
|
84
|
+
One write at a time per home: every write holds `<home>/.identity.lock` from its first read to
|
|
85
|
+
the file replace, and a second writer (another thread, another process, the gateway's start-up
|
|
86
|
+
pass racing a change from an app) waits its turn. Two writers never read the same rev, so a rev
|
|
87
|
+
is never given twice, and two default passes racing on one home write it once. The check hook
|
|
88
|
+
runs under the lock: keep it short. The lock file is never removed.
|
|
89
|
+
|
|
90
|
+
## The recorded default
|
|
91
|
+
|
|
92
|
+
Every entity has a look and, when the gateway has a default voice, a voice from day one. The
|
|
93
|
+
default is recorded, never computed again at read time: once written it does not change when the
|
|
94
|
+
gateway's default voice changes.
|
|
95
|
+
|
|
96
|
+
`default_identity(entity_id, gateway_default_voice)` returns `(avatar, voice)`; it is pure (no
|
|
97
|
+
clock, no randomness), so anyone can recompute it:
|
|
98
|
+
|
|
99
|
+
- seed = SHA-256 of the entity id exactly as the manifest records it (`entity:castor`, or the
|
|
100
|
+
older `entity:castor@<home_id>`);
|
|
101
|
+
- design = `DEFAULT_STYLE_POOL[seed[0] % 8]`, the pool being, in this order: `watch-halo`,
|
|
102
|
+
`watch-vortex`, `watch-nebula`, `watch-rings`, `watch-galaxy`, `watch-lotus`, `watch-crystal`,
|
|
103
|
+
`watch-aurora` (all eight have a Watch drawing in abstractavatar 0.1.1);
|
|
104
|
+
- colour = HSL(hue = (seed[1] × 256 + seed[2]) mod 360, saturation 62 %, lightness 52 %), each RGB
|
|
105
|
+
channel = floor(c × 255 + 0.5), written `#rrggbb`;
|
|
106
|
+
- voice = the gateway's default voice `{provider, model, voice, speed?, quality_preset?}` as a
|
|
107
|
+
value, or `None` when it has none;
|
|
108
|
+
- `source: default` on both parts.
|
|
109
|
+
|
|
110
|
+
Worked example: for `entity:castor` the seed starts `0x1a 0x92 0x51`, so the design is
|
|
111
|
+
`26 % 8 = 2` → `watch-nebula` and the hue is `(146 × 256 + 81) % 360 = 17` → `#d06439`.
|
|
112
|
+
|
|
113
|
+
`record_default_identity(home_dir, entity_id=..., gateway_default_voice=..., provenance=...)`
|
|
114
|
+
writes it as the home's first record (`set_by: default`, biography `cause: recorded_default`) and
|
|
115
|
+
returns `(record, True)`; on a home that already has a record it returns `(record, False)` and
|
|
116
|
+
writes nothing. The gateway calls it at birth, once per existing home when it starts, and on the
|
|
117
|
+
first read of a home that start skipped.
|
|
118
|
+
|
|
119
|
+
## The reference
|
|
120
|
+
|
|
121
|
+
Apps name an identity by reference, never by a copy of its values: `{"of": <subject>, "rev": <n>}`,
|
|
122
|
+
string form `<subject>#<n>`.
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
from abstractruntime.identity import identity_ref, parse_identity_ref
|
|
126
|
+
|
|
127
|
+
ref = identity_ref("entity:castor", 3)
|
|
128
|
+
str(ref) # "entity:castor#3"
|
|
129
|
+
parse_identity_ref("session:sess_9f2a#1") # a regular agent's identity rides its session
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`parse_identity_ref` refuses anything else (`castor`, `entity:castor`, `entity:castor#0`,
|
|
133
|
+
`entity:castor#03`). On a run the reference rides `vars["_runtime"]["identity_ref"]` as
|
|
134
|
+
`{"of", "rev"}`, beside the signed entity stamp (`vars["_runtime"]["entity"]`) and never inside
|
|
135
|
+
it: presentation is not authority. `stamp_run_identity_ref(vars, ref)` puts it there;
|
|
136
|
+
`read_run_identity_ref(vars)` returns it, or `None` when the run carries none (a reference is never
|
|
137
|
+
made up). An old rev resolves through `identity_at_rev`.
|
|
138
|
+
|
|
139
|
+
## The fingerprint
|
|
140
|
+
|
|
141
|
+
`identity_fingerprint(manifest, book_head=diary.head())` names the individual:
|
|
142
|
+
`actor_id = ActorFingerprint.from_metadata(kind="entity", display_name=<slug>,
|
|
143
|
+
metadata={entity_id, home_id, spark_hash}).actor_id` (`ar_` + 24 hex), served with the continuity
|
|
144
|
+
receipts the home already has: `spark_hash` (the seed), `home_id` (the individual) and `book_head`
|
|
145
|
+
(the diary's chain head). It is derived on every read and stored nowhere. A copy of a home with a
|
|
146
|
+
new `home_id` is a different individual with a different `actor_id`. There are no keys and no
|
|
147
|
+
signatures.
|
|
148
|
+
|
|
149
|
+
## The summon cue
|
|
150
|
+
|
|
151
|
+
At a summon the entity is told, in one sentence, about the change that made its current identity:
|
|
152
|
+
|
|
153
|
+
- "You were given your look and voice today." (the first record)
|
|
154
|
+
- "You were given your look today; you have no voice yet." (a first record without a voice)
|
|
155
|
+
- "Your voice changed on 4 November (by laurent): now fr-male-rene."
|
|
156
|
+
- "Your look changed today (by the operator): now watch-lotus in #aa3344."
|
|
157
|
+
- "Your look and voice changed today (by laurent): now watch-vortex in #3a7bd5, voice en-female-amy."
|
|
158
|
+
|
|
159
|
+
`identity_change_cue(home_dir, since=...)` returns that sentence, or `None`. It speaks of the
|
|
160
|
+
biography row of the current rev (never of a row whose file did not land), and only when that row
|
|
161
|
+
is newer than `since`, the previous summon's time; with `since=None` (the caller knows no previous
|
|
162
|
+
summon) it is always told. Dates are UTC.
|
|
163
|
+
|
|
164
|
+
`render_summon_prelude(..., home_dir=..., identity_since=...)` puts the sentence after the
|
|
165
|
+
identity core and before the diary tail, as a section that may be dropped to fit the budget (it is
|
|
166
|
+
fitted first). The prelude stays a pure read. The chat driver (`ChatSession(...,
|
|
167
|
+
identity_since=...)`) and the durable visit workflow (`build_visit_workflow(...,
|
|
168
|
+
identity_since=...)`, or `_visit.identity_since` seeded by the door at run creation, which wins)
|
|
169
|
+
pass the summon's home. An unreadable identity is named in the prelude's warnings; it does not
|
|
170
|
+
stop the summon.
|
|
171
|
+
|
|
172
|
+
The diary stays the entity's own record: nothing here writes a diary entry. The entity may write
|
|
173
|
+
one itself after hearing the cue.
|
|
174
|
+
|
|
175
|
+
## Tests
|
|
176
|
+
|
|
177
|
+
`tests/test_digital_identity.py` (`-m basic`): the round trip and the row shape, every bound
|
|
178
|
+
naming its field, unreadable files refused on read and on write, the row before the file, the rev
|
|
179
|
+
never reused, the default rule against an independent HSL computation and a worked value, the pool
|
|
180
|
+
order, purity over 1000 calls, two homes of one spark getting different colours, the pool checked
|
|
181
|
+
against abstractavatar's catalog (skipped when the package is not installed), idempotent default
|
|
182
|
+
writes, the reference format and its place beside the stamp, the fingerprint formula, the cue
|
|
183
|
+
sentences and the `since` rule, and the cue in place in the prelude, the chat driver and the visit
|
|
184
|
+
workflow.
|
|
@@ -15,6 +15,9 @@ entities/castor/
|
|
|
15
15
|
manifest.json # entity_id (birth marker — never a lookup key)
|
|
16
16
|
spark.yaml # the attested seed
|
|
17
17
|
substrate.yaml # operator's ONE mind choice (provider+model)
|
|
18
|
+
identity.json # look and voice (digital-identity.md)
|
|
19
|
+
.identity.lock # one identity write at a time
|
|
20
|
+
state_history.jsonl # biography: state, phase_changed and identity_changed rows
|
|
18
21
|
memory.sqlite3 # graph + journal (abstractmemory)
|
|
19
22
|
home.sqlite3 # diary book + command inbox
|
|
20
23
|
runtime_castor.sqlite3 # run store + ledger (THIS page)
|
|
@@ -12,7 +12,7 @@ Remote-light runtime:
|
|
|
12
12
|
pip install abstractruntime
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
This installs AbstractCore 2.
|
|
15
|
+
This installs AbstractCore 2.34.0 or newer with remote provider, vision,
|
|
16
16
|
voice, audio, music, decision, tool, and MCP-worker support. The base install is
|
|
17
17
|
remote-light: it can route multimodal workflows to hosted or OpenAI-compatible
|
|
18
18
|
endpoints, but it does not select local inferencer stacks such as MLX, vLLM,
|
|
@@ -16,7 +16,7 @@ Implementation pointers (this repo):
|
|
|
16
16
|
pip install abstractruntime
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
The base install includes AbstractCore 2.
|
|
19
|
+
The base install includes AbstractCore 2.34.0 or newer. That is the supported baseline for the idle unload (`set_model_idle_unload`, residency rows with `last_used_at`, `in_use`, `locked_by`, `idle_unload_at`), the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
|
|
20
20
|
|
|
21
21
|
The base install also includes the remote-light media/capability plugins needed
|
|
22
22
|
for AbstractCore's multimodal `generate(..., output=...)` path. Local
|
|
@@ -922,7 +922,9 @@ except core.HostActionRefused as refused:
|
|
|
922
922
|
- Chat compaction summarizes a run with the model the run uses. Only a run with no model of its own is summarized with the current default model; the summarizer does not keep the model that was the default at startup.
|
|
923
923
|
- A load with `ttl_s` or `keep_alive` for an in-process model, or for a model that is already loaded, lists them under `unsupported_options` with a warning. A load that fails part-way unloads what it loaded.
|
|
924
924
|
- Changing a capability default (image, voice, music) unloads the models the old capability routes had loaded before the new routes take effect.
|
|
925
|
-
- MLX has no
|
|
925
|
+
- An in-process model (MLX, transformers, GGUF) has no per-load TTL: a load with `ttl_s` or `keep_alive` reports them under `unsupported_options`, with a warning. AbstractCore's idle unload applies instead (ADR 0012): a model no call has used for the idle-unload time (60 minutes by default) is unloaded; a locked model never is, and a running call is never interrupted. The next call loads it again.
|
|
926
|
+
- `set_model_idle_unload(seconds)` (host facade and both local clients) sets that time for the process; `None` or `0` turns it off. A refused value (negative, not a number) answers `ok: false` and leaves the setting unchanged. Local residency rows of in-process text models carry `idle_unload_s`, `last_used_at` and `idle_unload_at` (epoch seconds; `None` when the setting is off, the model is locked or a call is running), and Core's `in_use` (a call is running on it) and `locked_by` (the owners whose lock keeps it loaded, other accounts included), passed through unchanged.
|
|
927
|
+
- `set_model_residency_locks(locks)` makes the locked models exactly `locks` (`[{"provider", "model"}]`): listed models that are resident are locked, missing ones are loaded then locked, the others are unlocked; each pair reports its own outcome. A lock names a provider and a model; the `base_url` of a configured endpoint is not part of the key. A host stores its "Keep loaded" set and calls it at start. Both setters are `set_` names, so a host that rebuilds its client (the gateway's model host after a restart) replays them.
|
|
926
928
|
|
|
927
929
|
## Model residency locks and context estimates
|
|
928
930
|
|