AbstractRuntime 0.16.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.16.0 → abstractruntime-0.18.0}/CHANGELOG.md +138 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/PKG-INFO +45 -7
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/README.md +41 -3
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/README.md +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +1 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/api.md +5 -3
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/architecture.md +6 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/automations.md +6 -2
- abstractruntime-0.18.0/docs/backlog/proposed/0865_model_loaded_ledger_event.md +27 -0
- abstractruntime-0.18.0/docs/digital-identity.md +184 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/entity-runtime.md +3 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/getting-started.md +1 -1
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/integrations/abstractcore.md +5 -3
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/replay.md +5 -2
- abstractruntime-0.18.0/docs/track-record.md +176 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/troubleshooting.md +16 -1
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/workflow-bundles.md +12 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/llms-full.txt +476 -15
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/llms.txt +4 -2
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/mkdocs.yml +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/pyproject.toml +7 -4
- abstractruntime-0.18.0/release-notes.md +86 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/scripts/changelog.py +63 -1
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/scripts/generate_llms_full.py +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/skills/abstractruntime/SKILL.md +8 -2
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/__init__.py +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/attention.py +11 -1
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/effect_cancellation.py +15 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/live_deltas.py +1 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_attribution.py +12 -4
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/runtime.py +19 -1
- abstractruntime-0.18.0/src/abstractruntime/identity/__init__.py +86 -0
- abstractruntime-0.18.0/src/abstractruntime/identity/acquaintances.py +249 -0
- {abstractruntime-0.16.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.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/life.py +42 -1
- {abstractruntime-0.16.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.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/visit_workflow.py +10 -1
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +18 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +28 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +112 -3
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +1 -1
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +15 -3
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +4 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +1 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +1 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/view.py +8 -1
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/sqlite.py +31 -2
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/compiler.py +8 -1
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +101 -27
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +7 -1
- abstractruntime-0.18.0/tests/fixtures/visualflow/compare_text_operands.json +38 -0
- abstractruntime-0.18.0/tests/fixtures/visualflow/typed_literals_flow.json +223 -0
- abstractruntime-0.18.0/tests/fixtures/visualflow/typed_literals_flow.legacy.json +219 -0
- abstractruntime-0.18.0/tests/test_automation_occurrence_error.py +41 -0
- abstractruntime-0.18.0/tests/test_changelog_fragments.py +158 -0
- abstractruntime-0.18.0/tests/test_digital_identity.py +722 -0
- abstractruntime-0.18.0/tests/test_discovery_facade_model_errors.py +24 -0
- abstractruntime-0.18.0/tests/test_duck_typed_store_session_attribution.py +45 -0
- abstractruntime-0.18.0/tests/test_effect_interrupted.py +144 -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.16.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.16.0 → abstractruntime-0.18.0}/tests/test_packaging_extras.py +9 -3
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_replay_public_updates.py +8 -0
- {abstractruntime-0.16.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.18.0/tests/test_visual_compare_typed_values.py +117 -0
- abstractruntime-0.16.0/release-notes.md +0 -76
- abstractruntime-0.16.0/src/abstractruntime/identity/__init__.py +0 -17
- abstractruntime-0.16.0/tests/test_changelog_fragments.py +0 -78
- abstractruntime-0.16.0/tests/test_tool_executor_error_output_detection.py +0 -40
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/.github/workflows/changelog.yml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/.gitignore +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/LICENSE +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/ROADMAP.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/SECURITY.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/changelog.d/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0010_one_replay_many_views.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/adr/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/artifacts.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/completed/0864_facade_catalog_hub_search_pages.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0854_replay_view.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/0866_queued_state_in_the_ledger_and_pools_lend_never_build.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/email.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/evidence.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/faq.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/integrations/abstractmemory.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/limits.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/manual_testing.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/proposal.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/provenance.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/snapshots.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/tool-approval.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/docs/tools-comms.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/examples/05_persistence.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/examples/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/pytest.ini +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/scripts/backfill_diary_edges.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/scripts/regen_replay_conformance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automation_queries.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/adapters.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/commands.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/consumers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/controller.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/ledger.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/models.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/samples.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/service.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/wakes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/conversation_search.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/health.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/progress_channel.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/publish.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/questions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_identity.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_origin.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/step_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/tool_scope.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/charts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/docx.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/pdf.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/email/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/email/actions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/email/automations.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/email/binding.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/email/feeder.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/email/frame.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/email/inbox.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/act_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/communities.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/diary.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/digest.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/lease.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/memory_reader.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/night_voice.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/phase_graph.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/phase_spec.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/reflection.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/substrate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tool_effects.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/structured_output.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/mail_verbs.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/delta.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/executions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/multi_store.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/session_history.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/session_turns.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/change_ring.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/lease.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/serialize.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/session_tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/connection_events.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/connections.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/email_received.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/event_frame.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/feed.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/manual.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/protocol.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/schedule.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/webhook.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/turn_grounding.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/atomic_files.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/automation_harness.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/conftest.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/email_wp2_support.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/atom.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss1.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss2.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/live_email/conftest.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/live_email/live_email_support.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/live_email/test_email_live_runtime.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/media_endpoint_profile_probe.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_abstractcore_server_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_abstractcore_structured_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_active_consumers_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_active_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_agora_agent_alias_identity.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_agora_tools_http.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_artifact_session_candidates.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_calendar_schedule.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_commands.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_controller.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_controller_recovery.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_definition.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_discussion_isolation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_email_results.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_growing_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_list_reads.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_named_policy_compiler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_next_fire.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_occurrence_recovery.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_replay_read_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_retry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_session_turns.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_status.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_automation_tool_approval.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_browser_probe_target_walling.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_capability_default_reasoning.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_code_node_imports.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_code_node_restricted_python.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_command_sandbox_host_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_command_store.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_compaction_summarizer_route.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_config_facade_model_contexts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_config_facade_models_engines.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_config_facade_voice_input_hint.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_controller_bundle_packaged.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_conversation_search.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_conversational_questions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_crash_ordering_inversions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_create_if_absent.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_data_registry_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_decision_facade_and_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_decision_output.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_default_model_warmup_switch.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_default_tools_camera_gating.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_web.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_diary_capture.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_diary_write_rescue.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_directory_lease.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_disabled_toolsets_seam.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_discussion_session_anchor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_document_markdown_tables.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_document_renderers_hr_quote.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_durable_write_discipline.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_effect_cancellation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_effect_issuance_idempotency.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_election_consequence_teaching.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_binding_and_refiner.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_feeder_batched.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_feeder_flags.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_gate_fixes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_inbox_and_trigger.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_received_mailbox_id.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_regate_fixes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_review_fixes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_self_trigger_loop.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_stream_consumers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_email_toolset_and_walls.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_emergence_experiment.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_emit_event_uses_wait_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_route_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_awake_memory_fixes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_brain_effects.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_chat_driver.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_chat_tools_reflection.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_diary.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_execute_tool.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_fetch_url_tool.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_history_window.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_life_loop.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_memory_richness.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_phase_graph_conformance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_react_visit_window.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_recent_memories.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_runtime.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_search_memory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_substrate_resolution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_visit_honesty.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_workspace_cap.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_entity_workspace_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_event_index_cross_process.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_event_wait_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_execute_command_output_offload.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_execution_capability_discovery.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_explicit_eject_other_clients.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_factory_default_retry_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_format_repair_nudge.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_fresh_install_no_provider.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_gateway_facades_c4899.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_git_read_only_refiner.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_hf_process_residency_merge.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_history_window_multimodal.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_hot_path_store_reads.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_indexed_idempotency_lookup.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_change_token_after_build.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_index_build_race.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_json_run_cache_bound.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_json_store_scan_memo.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_jsonl_row_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_ledger_cursor_invariants.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_ledger_get_record.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_ledger_record_slimming.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_live_token_deltas.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_prefix_stability_contract.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_text_phase_progress.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_client_grounding_tail.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_retry_classification.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_llm_streaming_on_token.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_local_helper_tool_exposure.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_local_residency_host_sweep.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mail_verbs.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mailbox_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_max_iterations_ceiling.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_media_capability_default_routing.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_media_host_endpoint_resolver.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_media_subprocess.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_appraise_handler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_communities.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_revise.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_seam_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_step_provenance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_mlx_process_residency_merge.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_model_eject_cancel.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_model_residency_release_and_readable_holders.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_multi_store_scheduler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_native_mlx_application_wiring.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_native_tool_channel.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_night_voice.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_occurrence_named_inputs.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_occurrence_samples.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_offload_answer_chain_c4978.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_offloading.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_pdf_unicode_rendering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_personal_cycle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_phantom_attachment_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_phase_graph_artifact_control.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_phase_graph_obedience.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_phase_vocabulary_migration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_prompt_overlay.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_provider_pin_routing_isolation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_public_action_approval_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_publish_event.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_r12_workspace_sandbox.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_read_idle_threading.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_readoption_experiment.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_realize_election.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_remote_client_cancel.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_remote_speculation_defaults.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_replay_conformance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_replay_conformance_package.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_replay_cursor_token.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_replay_delta_cost.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_replay_invariants.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_replay_review_findings.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_replay_tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_report_branding.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_residency_fit_refusal_broadcast.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_resident_media_generation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_resume_concurrent_same_wait.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_run_index_workspace_root.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_run_mutation_lock.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_run_origin.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_run_scoped_tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_run_store_change_token.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_run_tool_scope_ceiling.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_browser_session_boundary.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_runtime_tick_step_gate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_schedule_run.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_schedule_v1_corpus.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_schedule_v2_calendar.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_send_email_refiner.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_send_email_self_default_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_session_history.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_session_prompt_cache_attribution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_session_prompt_cache_visibility.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_session_route_stamp.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_session_start_cost.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_session_tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_shell_tool_exposure.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_speculation_inheritance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_steer_sidecar.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_step_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_streamed_voice_namespace.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_structured_schema_execution_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_thinking_inheritance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_catalog.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_descriptor_registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_inventory_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_invoke_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_policy_and_mounts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_topic_election_world_model.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trigger_cloudevents.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trigger_connection_listening.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trigger_connections.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trigger_feed.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trigger_registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trigger_schedule_math.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trigger_webhook.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_trusted_run_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_turn_grounding_byte_stability.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visit_ab_fixture.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visit_live_guidance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visit_midturn_elections.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visit_midturn_resume.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visit_workflow.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_entity_memory_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_llm_call_partial_override.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_reroute_lowering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_set_vars_pins.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_agora_react_agent.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_continue_on_error.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_function_library.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_var_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_pin_expressions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_schema_enum_switch.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_voice_library_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_voice_openai_api_key_path.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_voice_projection_contract.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_w4_feelings_lens.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_wait_event_deadline.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_wait_until_streak.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_wait_until_utc_normalization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_builtin_deny.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_prompt_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_read_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_workspace_writable_paths.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.18.0}/tests/test_write_chart.py +0 -0
|
@@ -10,6 +10,144 @@ 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
|
+
|
|
102
|
+
## [0.17.0] - 2026-11-03
|
|
103
|
+
|
|
104
|
+
### Added
|
|
105
|
+
|
|
106
|
+
- **`EffectInterrupted`: a host stop interrupts an effect, it never fails it** (`core/effect_cancellation.py`,
|
|
107
|
+
exported as `abstractruntime.EffectInterrupted`; gateway backlog 1103). A host that stops on purpose (a gateway stop
|
|
108
|
+
or restart, a model-host restart for an update) raises it into the effect in flight. The runtime writes no terminal
|
|
109
|
+
record and re-raises: the ledger tail stays STARTED, the run stays RUNNING at its last durable step, and the next
|
|
110
|
+
tick (after the host is back) sends the effect again under the same idempotency key as attempt 1, so no retry is
|
|
111
|
+
consumed and nothing reaches an automation's outcome. A BaseException like `EffectKilled`, so no `except Exception`
|
|
112
|
+
on the way turns it into a failure. The interrupted call's live text ends `cancelled` with `detail: "interrupted"`.
|
|
113
|
+
- **Public updates carry their type in replay** (`replay/view.py`). A `public_update` message has
|
|
114
|
+
`update_kind`: `"finding"` when the actor typed the event `kind: "finding"` (a fact or piece of
|
|
115
|
+
evidence it established), otherwise `"progress"` (what it is doing), including events written
|
|
116
|
+
before the field existed. Clients use it as given, for example to list the findings of a
|
|
117
|
+
conversation. See [docs/replay.md](docs/replay.md#public-conversation-messages).
|
|
118
|
+
- **Hosts tell model errors apart through the discovery facade** (`integrations/abstractcore/discovery_facade.py`):
|
|
119
|
+
`ModelNotDownloadedError` and `ModelNotFoundError` are AbstractCore's own classes, so a host (the gateway's
|
|
120
|
+
"model not downloaded" sentence) catches exactly what Core raises and reads `model` / `provider` without importing
|
|
121
|
+
AbstractCore.
|
|
122
|
+
- **Replayed tool calls keep the model's call id** (`replay/view.py`). An `activities[].tool_calls[]`
|
|
123
|
+
row keyed by a runtime call id (`id`) also carries `call_id`, the model's own id, which is what a
|
|
124
|
+
public update's `source_call_ids` cite; a client can now resolve a finding to the results it cites.
|
|
125
|
+
|
|
126
|
+
### Changed
|
|
127
|
+
|
|
128
|
+
- **Compare reads text next to a number or true/false exactly** (`visual/builtins.py` `_exact_from_text`, ADR 0049 as
|
|
129
|
+
amended 2026-11-03: "we must have automatic conversion"). When one side is a number or true/false and the other is
|
|
130
|
+
text, the text is read as that type by the Flow editor's literal grammar (a decimal number, ASCII, no `_`, finite,
|
|
131
|
+
a whole number kept exact beyond 2**53; or `true`/`false` in any case), so `5 == "5"` and `"9" < 10` are true. This
|
|
132
|
+
covers flows saved by AbstractFlow 0.13.0 (a typed value stored as text next to a wired number) and text arriving at
|
|
133
|
+
run time from a form, an API input or a model, with no re-save. `"1_000"`, `"0x10"`, `"inf"`, `"nan"`, full-width
|
|
134
|
+
digits and empty text are refused. Text against text is never converted (`"10" > "9"` compares text). The table is
|
|
135
|
+
`tests/fixtures/visualflow/compare_text_operands.json`.
|
|
136
|
+
- **Compare refuses values it cannot compare instead of answering False** (`visual/builtins.py` `control_compare`,
|
|
137
|
+
ADR 0049). Text that is not a number next to a number, or not `true`/`false` next to true/false (`5 == "five"`,
|
|
138
|
+
every operator; text that is a number or true/false is read as one, see "Compare reads text next to a number or true/false exactly" above), and `<`/`<=`/`>`/`>=` between values Python cannot order
|
|
139
|
+
(`None > 3`, a list and a number), now fail the step with an error naming the node and pins: "Compare 'Is five'
|
|
140
|
+
(node same) ==: b is text ('five'), not a number; a is a number (5)." Before, these answered False silently.
|
|
141
|
+
Equality of same-type values and Python's equality across other types (`None == 5`) are unchanged; true/false
|
|
142
|
+
compares with numbers as Python's booleans do (`True == 1`).
|
|
143
|
+
- **AbstractCore floor 2.33.0** in the base install and the `apple` and `gpu` extras (was 2.32.0).
|
|
144
|
+
|
|
145
|
+
### Fixed
|
|
146
|
+
|
|
147
|
+
- **An automation occurrence whose agent completed with `success: false` names the agent's reason**
|
|
148
|
+
(`automations/attention.py`). The attention item and the `automation_failed` email said "completed" (the run's status
|
|
149
|
+
word); the reason is now read from the Agent node's `meta.error`, and when there is none it says so plainly.
|
|
150
|
+
|
|
13
151
|
## [0.16.0] - 2026-11-02
|
|
14
152
|
|
|
15
153
|
### 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,16 +55,54 @@ 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
|
+
|
|
84
|
+
## What's new in 0.17.0
|
|
85
|
+
|
|
86
|
+
- **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
|
|
87
|
+
the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
|
|
88
|
+
the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
|
|
89
|
+
- **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
|
|
90
|
+
piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
|
|
91
|
+
findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
|
|
92
|
+
- **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
|
|
93
|
+
a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
|
|
94
|
+
- **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
|
|
95
|
+
cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
|
|
96
|
+
text against text is never converted.
|
|
97
|
+
- **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
|
|
98
|
+
the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
|
|
99
|
+
|
|
62
100
|
## What's new in 0.16.0
|
|
63
101
|
|
|
64
102
|
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
65
103
|
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
66
104
|
durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
|
|
67
|
-
2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
105
|
+
2.32.0 or newer (AbstractRuntime 0.18.0 requires 2.34.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
68
106
|
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
69
107
|
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
70
108
|
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
@@ -145,7 +183,7 @@ Remote-light runtime:
|
|
|
145
183
|
pip install abstractruntime
|
|
146
184
|
```
|
|
147
185
|
|
|
148
|
-
The base install includes AbstractCore 2.
|
|
186
|
+
The base install includes AbstractCore 2.34.0 or newer (its light install:
|
|
149
187
|
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
150
188
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
151
189
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -4,16 +4,54 @@
|
|
|
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
|
+
|
|
33
|
+
## What's new in 0.17.0
|
|
34
|
+
|
|
35
|
+
- **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
|
|
36
|
+
the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
|
|
37
|
+
the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
|
|
38
|
+
- **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
|
|
39
|
+
piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
|
|
40
|
+
findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
|
|
41
|
+
- **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
|
|
42
|
+
a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
|
|
43
|
+
- **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
|
|
44
|
+
cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
|
|
45
|
+
text against text is never converted.
|
|
46
|
+
- **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
|
|
47
|
+
the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
|
|
48
|
+
|
|
11
49
|
## What's new in 0.16.0
|
|
12
50
|
|
|
13
51
|
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
14
52
|
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
15
53
|
durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
|
|
16
|
-
2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
54
|
+
2.32.0 or newer (AbstractRuntime 0.18.0 requires 2.34.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
17
55
|
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
18
56
|
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
19
57
|
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
@@ -94,7 +132,7 @@ Remote-light runtime:
|
|
|
94
132
|
pip install abstractruntime
|
|
95
133
|
```
|
|
96
134
|
|
|
97
|
-
The base install includes AbstractCore 2.
|
|
135
|
+
The base install includes AbstractCore 2.34.0 or newer (its light install:
|
|
98
136
|
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
99
137
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
100
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
|
|
@@ -30,6 +30,7 @@ effect payloads, client construction arguments, or Runtime-owned environment var
|
|
|
30
30
|
- Thin-mode clients can run the workflow logic while delegating inference to a server.
|
|
31
31
|
- Remote mode supports AbstractCore per-request `base_url` routing (dynamic endpoint selection).
|
|
32
32
|
- Tool execution can be gated by trust/sandbox policy outside the router.
|
|
33
|
+
- In every mode, a host stop interrupts an effect (`EffectInterrupted`: no terminal record, re-issued on the next tick); only a failure the effect itself met is recorded as failed.
|
|
33
34
|
|
|
34
35
|
### See Also
|
|
35
36
|
- Implementation: [`backlog/completed/005_abstractcore_integration.md`](../backlog/completed/005_abstractcore_integration.md)
|
|
@@ -139,8 +139,9 @@ tool-approval waits retain their own contracts.
|
|
|
139
139
|
An opt-in actor may inherit `_runtime.conversation: {enabled: true}` through native child
|
|
140
140
|
workflows and VisualFlow Agent nodes. This flag does not create an extra inference call.
|
|
141
141
|
Public updates enter replay only through an explicit completed `EMIT_EVENT` named
|
|
142
|
-
`public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration
|
|
143
|
-
`source_call_ids
|
|
142
|
+
`public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration`,
|
|
143
|
+
`source_call_ids` and optional `kind` (`"progress"` or `"finding"`, replayed as the message's
|
|
144
|
+
`update_kind`). The event's owner must match `run_id`; private diary/thinking fences are
|
|
144
145
|
excluded. See [replay.md](replay.md#public-conversation-messages).
|
|
145
146
|
|
|
146
147
|
Actors may attach `public_action` to a proposed `TOOL_CALLS` payload with `text`,
|
|
@@ -458,13 +459,14 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
|
|
|
458
459
|
|
|
459
460
|
### AbstractCore (LLM + tools)
|
|
460
461
|
|
|
461
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.
|
|
462
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.34.0 or newer is part of the base install).
|
|
462
463
|
|
|
463
464
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
464
465
|
|
|
465
466
|
Entry points:
|
|
466
467
|
- `create_local_runtime(...)`, `create_remote_runtime(...)`, `create_hybrid_runtime(...)` (`src/abstractruntime/integrations/abstractcore/factory.py`)
|
|
467
468
|
- public discovery facade: `AbstractCoreDiscoveryFacade`, `get_abstractcore_discovery_facade(...)` (`src/abstractruntime/integrations/abstractcore/discovery_facade.py`)
|
|
469
|
+
- model errors a host tells apart, AbstractCore's own classes: `from abstractruntime.integrations.abstractcore.discovery_facade import ModelNotDownloadedError, ModelNotFoundError` (`ModelNotDownloadedError` is a `ModelNotFoundError` whose `model` and `provider` name what to download); a host never imports `abstractcore` for them
|
|
468
470
|
- public host facade: `AbstractCoreHostFacade`, `get_abstractcore_host_facade(...)` (`src/abstractruntime/integrations/abstractcore/host_facade.py`)
|
|
469
471
|
- public voice library facade: `AbstractCoreVoiceFacade`, `get_abstractcore_voice_facade(...)`, `VoiceLibraryError` (`src/abstractruntime/integrations/abstractcore/voice_facade.py`): languages, cloned voices (list by language, read, rename or replace the transcript, delete), cloning from a recording, voice design, the capability catalog; local in process, remote over the AbstractCore server's `/v1` voice routes (see [Voice library](integrations/abstractcore.md#voice-library))
|
|
470
472
|
- email facade: `email_facade` (AbstractCore's mail library for hosts; see [Email](#email))
|
|
@@ -259,6 +259,12 @@ ONE ordering law ([backlog 0045](backlog/planned/runtime_systemic_reliability/00
|
|
|
259
259
|
completion/resume path increments `RuntimeHealth` (`record_error`) and
|
|
260
260
|
logs a warning. Best-effort observability records (progress events,
|
|
261
261
|
status events) may stay quiet; records that replay depends on may not.
|
|
262
|
+
4. **A requested host stop is a crash the host announces: identical replay, no terminal record.**
|
|
263
|
+
A host that stops on purpose (a gateway stop or restart, a model-host restart for an update)
|
|
264
|
+
raises `EffectInterrupted` (`core/effect_cancellation.py`) into the effect in flight. The
|
|
265
|
+
runtime appends nothing terminal and re-raises; the run stays RUNNING, and the next tick sends
|
|
266
|
+
the effect again under the same idempotency key as attempt 1 (no retry consumed). Only a
|
|
267
|
+
failure the effect itself met is recorded as failed.
|
|
262
268
|
|
|
263
269
|
Kill-and-replay coverage for this law lives in the crash harness
|
|
264
270
|
(`tests/harness.py`, backlog 0045): for every persistence point, kill →
|
|
@@ -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,27 @@
|
|
|
1
|
+
# 0865 — A `model_loaded` ledger event with the reserved context
|
|
2
|
+
|
|
3
|
+
> Package: AbstractRuntime (with AbstractCore residency claims)
|
|
4
|
+
> Type: task
|
|
5
|
+
> Created: 2026-10-29
|
|
6
|
+
> Priority: normal
|
|
7
|
+
> Labels: residency, ledger, observability
|
|
8
|
+
|
|
9
|
+
## Summary
|
|
10
|
+
|
|
11
|
+
Operator ruling (2026-10-29): when a model loads it reserves the maximum context that fits (AbstractCore ADR 0010
|
|
12
|
+
point 8), and "never silently: the choice is written to the ledger (a model_loaded event with model, advertised context,
|
|
13
|
+
reserved context, free memory, buffer, reason) and to the log". AbstractCore already logs it and carries it on the
|
|
14
|
+
provider's residency claim (`context_reservation`: advertised, reserved, free_bytes, buffer, reason). The ledger event
|
|
15
|
+
is not written yet: a load happens inside a client build, outside any run's effect, so there is no step record to
|
|
16
|
+
attach it to.
|
|
17
|
+
|
|
18
|
+
## Scope
|
|
19
|
+
|
|
20
|
+
- When a pooled client is built for a local model (`MultiLocalAbstractCoreLLMClient._get_client`), read the provider's
|
|
21
|
+
`context_reservation` and append one `model_loaded` record to the ledger of the run that triggered the build (or a
|
|
22
|
+
host-level ledger when no run did), with model, advertised context, reserved context, free memory, buffer, reason.
|
|
23
|
+
- The replay view and Observer show it as one readable line.
|
|
24
|
+
|
|
25
|
+
## Acceptance criteria
|
|
26
|
+
|
|
27
|
+
- A chat that loads the default model leaves one `model_loaded` record with the numbers; a test is red without it.
|
|
@@ -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,
|