AbstractRuntime 0.15.2__tar.gz → 0.16.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/.github/workflows/changelog.yml +23 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/CHANGELOG.md +99 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/CONTRIBUTING.md +4 -2
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/PKG-INFO +40 -8
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/README.md +36 -4
- abstractruntime-0.16.0/changelog.d/README.md +21 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/README.md +5 -1
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/api.md +115 -8
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/architecture.md +39 -4
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/README.md +1 -0
- abstractruntime-0.16.0/docs/backlog/completed/0864_facade_catalog_hub_search_pages.md +27 -0
- abstractruntime-0.16.0/docs/backlog/planned/0866_queued_state_in_the_ledger_and_pools_lend_never_build.md +55 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/entity-runtime.md +15 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/faq.md +1 -1
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/getting-started.md +2 -2
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/integrations/abstractcore.md +153 -5
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/replay.md +31 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/troubleshooting.md +30 -1
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/llms-full.txt +431 -28
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/llms.txt +12 -4
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/pyproject.toml +6 -4
- abstractruntime-0.16.0/release-notes.md +76 -0
- abstractruntime-0.16.0/scripts/changelog.py +148 -0
- abstractruntime-0.16.0/skills/abstractruntime/SKILL.md +267 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/conversation_search.py +3 -1
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/models.py +4 -1
- abstractruntime-0.16.0/src/abstractruntime/core/questions.py +54 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/runtime.py +296 -19
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/history_bundle.py +40 -6
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/visit_workflow.py +74 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +75 -3
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +98 -115
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +516 -35
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +1 -1
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +43 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +11 -0
- abstractruntime-0.16.0/src/abstractruntime/integrations/abstractcore/structured_output.py +152 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/view.py +90 -4
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/multi_store.py +3 -2
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/in_memory.py +2 -2
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/json_files.py +77 -14
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/sqlite.py +3 -2
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +6 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/compiler.py +65 -1
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +121 -7
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +6 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_abstractcore_server_facade.py +29 -0
- abstractruntime-0.16.0/tests/test_changelog_fragments.py +78 -0
- abstractruntime-0.16.0/tests/test_config_facade_model_contexts.py +44 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_config_facade_models_engines.py +34 -0
- abstractruntime-0.16.0/tests/test_conversational_questions.py +234 -0
- abstractruntime-0.16.0/tests/test_decision_facade_and_node.py +878 -0
- abstractruntime-0.16.0/tests/test_decision_output.py +466 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_execution_capability_discovery.py +6 -2
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_hf_process_residency_merge.py +16 -0
- abstractruntime-0.16.0/tests/test_json_file_run_store_change_token_after_build.py +131 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_kg_learn_and_recall_contract.py +2 -2
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_response_schema_normalization.py +19 -29
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_structured_output_fallback.py +2 -2
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_retry_classification.py +33 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_model_residency_clean_switch.py +5 -2
- abstractruntime-0.16.0/tests/test_model_residency_release_and_readable_holders.py +207 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_packaging_extras.py +3 -3
- abstractruntime-0.16.0/tests/test_public_action_approval_context.py +89 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_remote_llm_client.py +32 -0
- abstractruntime-0.16.0/tests/test_replay_public_updates.py +136 -0
- abstractruntime-0.16.0/tests/test_residency_fit_refusal_broadcast.py +80 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_run_history_bundle.py +56 -0
- abstractruntime-0.16.0/tests/test_structured_schema_execution_client.py +206 -0
- abstractruntime-0.16.0/tests/test_visit_live_guidance.py +81 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_schema_enum_switch.py +3 -14
- abstractruntime-0.16.0/tests/test_voice_projection_contract.py +216 -0
- abstractruntime-0.15.2/release-notes.md +0 -11
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/.gitignore +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/LICENSE +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/ROADMAP.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/SECURITY.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0010_one_replay_many_views.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/adr/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/artifacts.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/automations.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0854_replay_view.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/email.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/evidence.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/integrations/abstractmemory.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/limits.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/manual_testing.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/proposal.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/provenance.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/snapshots.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/tool-approval.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/tools-comms.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/examples/05_persistence.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/examples/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/mkdocs.yml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/pytest.ini +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/scripts/backfill_diary_edges.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/scripts/generate_llms_full.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/scripts/regen_replay_conformance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automation_queries.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/adapters.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/attention.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/bundle.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/commands.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/consumers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/controller.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/ledger.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/models.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/samples.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/service.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/automations/wakes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/effect_cancellation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/health.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/live_deltas.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/progress_channel.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/publish.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/run_attribution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/run_identity.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/run_origin.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/step_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/tool_scope.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/documents/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/documents/charts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/documents/docx.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/documents/pdf.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/email/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/email/actions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/email/automations.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/email/binding.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/email/feeder.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/email/frame.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/email/inbox.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/act_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/chat.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/communities.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/diary.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/digest.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/lease.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/life.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/memory_reader.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/night_voice.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/phase_graph.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/phase_spec.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/prelude.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/reflection.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/substrate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/tool_effects.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/identity/tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/mail_verbs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/delta.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/replay/executions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/session_history.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/session_turns.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/change_ring.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/lease.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/serialize.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/session_tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/connection_events.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/connections.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/email_received.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/event_frame.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/feed.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/manual.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/protocol.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/schedule.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/triggers/webhook.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/turn_grounding.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/utils/atomic_files.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/automation_harness.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/conftest.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/email_wp2_support.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/fixtures/feeds/atom.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/fixtures/feeds/rss1.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/fixtures/feeds/rss2.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/live_email/conftest.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/live_email/live_email_support.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/live_email/test_email_live_runtime.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/media_endpoint_profile_probe.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_abstractcore_structured_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_active_consumers_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_active_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_agora_agent_alias_identity.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_agora_tools_http.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_artifact_session_candidates.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_calendar_schedule.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_commands.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_controller.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_controller_recovery.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_definition.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_discussion_isolation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_email_results.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_growing_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_list_reads.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_named_policy_compiler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_next_fire.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_occurrence_recovery.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_replay_read_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_retry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_session_turns.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_status.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_automation_tool_approval.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_browser_probe_target_walling.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_capability_default_reasoning.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_code_node_imports.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_code_node_restricted_python.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_command_sandbox_host_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_command_store.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_compaction_summarizer_route.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_config_facade_voice_input_hint.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_controller_bundle_packaged.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_conversation_search.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_crash_ordering_inversions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_create_if_absent.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_data_registry_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_default_model_warmup_switch.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_default_tools_camera_gating.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_default_tools_include_skim_web.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_diary_capture.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_diary_write_rescue.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_directory_lease.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_disabled_toolsets_seam.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_discussion_session_anchor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_document_markdown_tables.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_document_renderers_hr_quote.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_durable_write_discipline.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_effect_cancellation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_effect_issuance_idempotency.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_election_consequence_teaching.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_binding_and_refiner.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_feeder_batched.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_feeder_flags.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_gate_fixes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_inbox_and_trigger.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_received_mailbox_id.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_regate_fixes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_review_fixes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_self_trigger_loop.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_stream_consumers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_email_toolset_and_walls.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_emergence_experiment.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_emit_event_uses_wait_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_endpoint_profile_route_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_awake_memory_fixes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_brain_effects.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_chat_driver.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_chat_tools_reflection.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_diary.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_execute_tool.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_fetch_url_tool.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_history_window.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_life_loop.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_memory_richness.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_phase_graph_conformance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_react_visit_window.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_recent_memories.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_runtime.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_search_memory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_substrate_resolution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_visit_honesty.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_workspace_cap.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_entity_workspace_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_event_index_cross_process.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_event_wait_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_execute_command_output_offload.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_explicit_eject_other_clients.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_factory_default_retry_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_format_repair_nudge.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_fresh_install_no_provider.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_gateway_facades_c4899.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_git_read_only_refiner.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_history_window_multimodal.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_hot_path_store_reads.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_indexed_idempotency_lookup.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_json_file_run_store_index_build_race.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_json_run_cache_bound.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_json_store_scan_memo.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_jsonl_row_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_ledger_cursor_invariants.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_ledger_get_record.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_ledger_record_slimming.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_live_token_deltas.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_prefix_stability_contract.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_text_phase_progress.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_client_grounding_tail.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_llm_streaming_on_token.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_local_helper_tool_exposure.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_local_residency_host_sweep.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mail_verbs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mailbox_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_max_iterations_ceiling.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_media_capability_default_routing.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_media_host_endpoint_resolver.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_media_subprocess.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_appraise_handler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_communities.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_revise.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_seam_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_step_provenance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_mlx_process_residency_merge.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_model_eject_cancel.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_multi_store_scheduler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_native_mlx_application_wiring.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_native_tool_channel.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_night_voice.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_occurrence_named_inputs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_occurrence_samples.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_offload_answer_chain_c4978.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_offloading.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_pdf_unicode_rendering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_personal_cycle.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_phantom_attachment_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_phase_graph_artifact_control.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_phase_graph_obedience.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_phase_vocabulary_migration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_prompt_overlay.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_provider_pin_routing_isolation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_publish_event.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_r12_workspace_sandbox.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_read_idle_threading.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_readoption_experiment.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_realize_election.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_remote_client_cancel.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_remote_speculation_defaults.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_replay_conformance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_replay_conformance_package.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_replay_cursor_token.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_replay_delta_cost.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_replay_invariants.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_replay_review_findings.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_replay_tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_report_branding.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_resident_media_generation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_resume_concurrent_same_wait.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_run_index_workspace_root.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_run_mutation_lock.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_run_origin.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_run_scoped_tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_run_store_change_token.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_run_tool_scope_ceiling.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_browser_session_boundary.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_runtime_tick_step_gate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_schedule_run.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_schedule_v1_corpus.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_schedule_v2_calendar.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_send_email_refiner.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_send_email_self_default_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_session_history.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_session_prompt_cache_attribution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_session_prompt_cache_visibility.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_session_route_stamp.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_session_start_cost.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_session_tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_shell_tool_exposure.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_speculation_inheritance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_steer_sidecar.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_step_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_streamed_voice_namespace.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_thinking_inheritance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_catalog.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_descriptor_registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_inventory_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_invoke_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_policy_and_mounts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_topic_election_world_model.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trigger_cloudevents.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trigger_connection_listening.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trigger_connections.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trigger_feed.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trigger_registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trigger_schedule_math.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trigger_webhook.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_trusted_run_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_turn_grounding_byte_stability.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visit_ab_fixture.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visit_midturn_elections.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visit_midturn_resume.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visit_workflow.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_entity_memory_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_llm_call_partial_override.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_reroute_lowering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_set_vars_pins.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_agora_react_agent.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_continue_on_error.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_function_library.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_get_var_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_pin_expressions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_voice_library_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_voice_openai_api_key_path.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_w4_feelings_lens.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_wait_event_deadline.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_wait_until_streak.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_wait_until_utc_normalization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_builtin_deny.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_prompt_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_read_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_workspace_writable_paths.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.16.0}/tests/test_write_chart.py +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Changelog
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
changelog:
|
|
11
|
+
# A pull request that changes src/ adds a fragment, changelog.d/<pr-or-slug>.md, instead of
|
|
12
|
+
# editing CHANGELOG.md (scripts/changelog.py; changelog.d/README.md).
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
timeout-minutes: 5
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
- name: Fragment present and well formed
|
|
23
|
+
run: python scripts/changelog.py check --base "origin/${{ github.base_ref }}"
|
|
@@ -5,8 +5,107 @@ All notable changes to AbstractRuntime will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
Unreleased changes live in [`changelog.d/`](changelog.d/README.md), one file per pull request;
|
|
9
|
+
`python scripts/changelog.py assemble X.Y.Z` writes them here at release.
|
|
10
|
+
|
|
8
11
|
## [Unreleased]
|
|
9
12
|
|
|
13
|
+
## [0.16.0] - 2026-11-02
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- A package agent skill documents operating durable workflows, waits, storage and structured execution through the public Python API.
|
|
18
|
+
|
|
19
|
+
- **`config_facade.model_catalog(..., hub_page=, hub_page_size=)`** (backlog 0864) passes a page of Hugging Face search
|
|
20
|
+
results through to AbstractCore, which reports it in `hub.search`. It is passed only when asked. An AbstractCore
|
|
21
|
+
whose catalog has no `hub_page` raises `AbstractCoreTooOld` in words instead of answering page 1.
|
|
22
|
+
`AbstractCoreTooOld` accepts a `required=` description. `extended=True` (every quant of a row's own GGUF repos,
|
|
23
|
+
AbstractCore 0865) is passed the same way and refused in words on an AbstractCore without it.
|
|
24
|
+
- **Fit refusals (AbstractCore ADR 0010) reach every surface.** A load refused with `ModelDoesNotFitError` (the model
|
|
25
|
+
does not fit even after evicting what is not locked) is never retried (a retry would only evict more); its
|
|
26
|
+
sentence is the effect error, its fields (needed/free bytes, kept models, suggestions) are kept on the ledger
|
|
27
|
+
record (`result.error_details`, `EffectOutcome.error_details`) and in the residency diagnostics (`refusals`, the
|
|
28
|
+
last five), and the default pair keeps the sentence instead of the configuration hint.
|
|
29
|
+
- Opt-in public actor updates and explicit human-guidance acceptance messages share durable replay history, with host-origin checks and exact original human words.
|
|
30
|
+
- Conversational ASK_USER policies distinguish indefinite essential questions from 120–300 second clarifications with predeclared safe fallbacks. Fresh question keys, strict server cutoffs, durable outcomes, retained late replies and pause/restart behavior reuse the existing due-wait indexes.
|
|
31
|
+
- Participant-checked live entity-visit corrections use the existing durable sidecar and fresh attributed recall before the next actor reasoning boundary.
|
|
32
|
+
- The package agent skill documents these question and guidance contracts.
|
|
33
|
+
- **A decision is an `LLM_CALL` whose output spec says `modality: "decision"`** (`integrations/abstractcore/llm_client.py`, `effect_handlers.py`). Payload `{"prompt": <state>, "output": {"modality": "decision", "questions": {...}, "truncate"?, "model"?}}`; the result is the usual normalized shape plus `decision` (the System One body: `model`, `answers`, `usage`, `latency_ms`[, `truncated`]) and `answers` (= `decision.answers`), with `content` the answers as JSON, `outputs`/`resources` empty and `provider`/`model` the decision model that answered. No artifact, no store, no `generated_media` tag; the resolved action id is `decision`. Local: the resolved spec (the `output.decision` capability default, or the spec's own route) reaches `generate(prompt, output=[spec])` and core runs it through its decision pool on any text provider; the pooled client serves a decision-only request on the capability host without building the text model. Remote: `POST {core}/v1/decisions` with `model` = `provider/model`, `state`, `questions`, `truncate`; the server's body maps to the same result.
|
|
34
|
+
- **`decide`: a calibrated decision as a durable child run and a VisualFlow node** (`integrations/abstractcore/run_facade.py`, `visualflow_compiler/visual/executor.py`, `visualflow_compiler/compiler.py`). `run_facade.decide(run_id, state=..., questions=..., model=None, truncate=None)` starts a child `LLM_CALL` whose output spec is `{"modality": "decision", "questions": ...}` (plus `truncate` and `model` when given); a `model` written as `provider/model` (`mlx/jaredpalmer/kev-4b`) travels whole and AbstractCore splits it. The `decide` VisualFlow node asks one typed question (inputs `state`, `question`, `question_type` = `choice` | `noul` | `score`, `options` / `levels`, `provider`, `model`, `truncate`) and fills that type's output pins (`answer`, then `choice`/`confidence`/`probabilities`, `noul`/`verdict`, or `score`/`level`/`confidence`/`probabilities`, plus `model`, `success`); a wired `questions` object asks several System One questions at once and fills `answers`. It lowers to the same `LLM_CALL`; the result sync also carries `decision` (the System One body), `content` and `meta` (`abstractflow.decide.v1.meta`).
|
|
35
|
+
- **A local model's loaded context, through the config facade** (`integrations/abstractcore/config_facade.py`).
|
|
36
|
+
`configured_model_context(provider, model)` and `set_model_context(provider, model, tokens)` read and set the
|
|
37
|
+
per-model context AbstractCore loads a model with (AbstractCore ADR 0010 point 8: a set context is a pin, loaded
|
|
38
|
+
as is or refused, never shrunk). The gateway's Resources page "Set context" calls them instead of importing
|
|
39
|
+
AbstractCore. On a Core without `abstractcore.config.model_contexts` (every release up to 2.31.1) they raise
|
|
40
|
+
`AbstractCoreTooOld` naming what is missing.
|
|
41
|
+
- Tool approval waits can carry optional `details.public_action` (`text`, `update_id`, `run_id`,
|
|
42
|
+
`iteration`, `call_ids`) supplied by an actor adapter alongside its proposed effect batch.
|
|
43
|
+
Runtime validates its owning run and exact call identities, narrows it to the actual gated
|
|
44
|
+
subset, and withholds mismatched or private-fenced context. The canonical replay preserves
|
|
45
|
+
this public explanation; approval decisions and policies are unchanged.
|
|
46
|
+
- Hosts can start Core's independently authenticated HTTP listener through a lazy Runtime lifecycle facade; unused server dependencies stay unloaded.
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
|
|
50
|
+
- **Changelog entries are fragments** (`changelog.d/`, `scripts/changelog.py`). A pull request adds
|
|
51
|
+
`changelog.d/<pr-or-slug>.md` instead of editing `CHANGELOG.md`'s `[Unreleased]` section, which conflicted on every
|
|
52
|
+
merge of main; the release assembles the fragments (`python scripts/changelog.py assemble X.Y.Z`) and CI fails a pull
|
|
53
|
+
request that changes `src/` without one.
|
|
54
|
+
- **AbstractCore floor `>=2.32.0`** (`pyproject.toml`, `integrations/abstractcore/output_specs.py`): the `decision` output modality (`output.decision` route, `/v1/decisions`, `MultimodalGenerateResponse.decision`, `output_has_generated_media` False for it).
|
|
55
|
+
- **Voice transport is not a conversation attachment** (`history_bundle.py`, `conversation_search.py`). A session turn in
|
|
56
|
+
a history bundle no longer lists the recording of a spoken question or the read-aloud audio of an answer among its
|
|
57
|
+
`attachments` and `artifacts`; `is_voice_transport(tags)` recognizes them (`purpose` `voice_playback` or
|
|
58
|
+
`voice_dictation`, `artifact_space` `voice`, a `voice/` or `client:voice/` path). The bundle's own `artifacts`
|
|
59
|
+
section still lists every artifact. Clients that showed voice recordings as turn attachments stop doing so.
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- **A console change to a non-text default no longer reloads the text model, and a runtime never
|
|
64
|
+
leaves a dropped copy resident.** Found on the Linux test server (two accounts, a 9B GGUF):
|
|
65
|
+
changing the embedding default evicted the admin runtime's whole text pool; the boot-warmed copy
|
|
66
|
+
was dropped, its eject skipped because both accounts' runtimes named the same default, and the
|
|
67
|
+
copy stayed in memory with no pool holding it ("resident ~5.4 GiB + 8.3 GiB cache ... still in
|
|
68
|
+
use by runtime client 70a5b844f350, runtime client 70a72f833890; not ejected"), with nothing
|
|
69
|
+
running. Now: (1) a capability-only refresh keeps every pooled text client and hands it the new
|
|
70
|
+
routes in place (a move of the `input.text` route itself still rebuilds); (2) a configured default
|
|
71
|
+
the client has not built is no longer a residency claim (a loaded one is its `pool` claim, one
|
|
72
|
+
loading is `building`); (3) when another runtime really keeps its own copy, the dropping runtime
|
|
73
|
+
still unloads its OWN HuggingFace copy (`released_own_copies`; MLX shares weights and is left to
|
|
74
|
+
the process-wide eject); (4) holders are named in words: `MultiLocalAbstractCoreLLMClient
|
|
75
|
+
.residency_owner_label` (hosts set it; the gateway: "the runtime of account default/bob"), claims
|
|
76
|
+
carry `owner_label`, residency records carry `held_by`, and the skip reason reads "the runtime of
|
|
77
|
+
account default/bob (loaded) still uses it". HuggingFace process rows also carry the loaded
|
|
78
|
+
`context_length` and `kv_cache_bytes` (AbstractCore 2.31.1).
|
|
79
|
+
- **A standalone `LocalAbstractCoreLLMClient` claims the model it holds** (ROOT backlog 0897): another
|
|
80
|
+
client's default switch or a server unload no longer ejects weights it still uses (its next call
|
|
81
|
+
silently reloaded them). A pool unregisters the clients it adopts (its own claims cover them).
|
|
82
|
+
A dropped HuggingFace copy is never lent to another request again, a copy a call just started on
|
|
83
|
+
is freed when that call ends, and one waiter per model frees every copy a later switch drops.
|
|
84
|
+
- Conversational answer and retained-reply replay preserves original human whitespace and the actual question generation identity, including after another question has opened.
|
|
85
|
+
- Completed flows with an explicit structured `result` and no prose now retain a final JSON message in replay. Generic agent envelopes are not serialized; internal-bearing results are withheld from the public projection while their technical run output remains available.
|
|
86
|
+
- **A pin expression that is a single bare word explains how to pass text** (`visualflow_compiler/visual/pin_expressions.py`).
|
|
87
|
+
`hello` is read as a Python name; its `NameError` now says to write `'hello'` with quotes or to set the pin's value
|
|
88
|
+
instead of an expression.
|
|
89
|
+
- **The residency listing carries the model's slot pool** (`integrations/abstractcore/llm_client.py`, core ADR 0011, OVH 8080 pass four). A GGUF row now carries `slots`, `slots_max`, `active`, `queued`, `copies`, `slot_bytes`, `shared_weights` and `slot_refusal_reason`, folded from Core's process row. Before, only the gateway's `/host/state` showed them, so the Resources table could not say that requests were waiting, or why another slot is not built. A row whose holders share one weights instance no longer says "each a full copy of the weights".
|
|
90
|
+
- Structured generation carries JSON schemas across execution-client boundaries and creates validators where inference runs, preserving nested validation and defaults without serializing Python classes. Remote Core calls forward their structured response format and explicitly refuse Python validator classes that cannot cross HTTP. Local explicit validator classes remain supported. Request serialization failures are not retried, and execution diagnostics include the actual ledger step identity.
|
|
91
|
+
|
|
92
|
+
## [0.15.3] - 2026-10-29
|
|
93
|
+
|
|
94
|
+
### Fixed
|
|
95
|
+
|
|
96
|
+
- **An index build no longer announces its journal replay as changes** (`JsonFileRunStore`; a 0.15.2 regression).
|
|
97
|
+
0.15.2's first sync after a build re-applies the journal tail before the build's mark (backlog 0863) and noted every
|
|
98
|
+
replayed record on the change ring: a plain read (`list_run_index`, `warm_session_index`) moved `change_token` and
|
|
99
|
+
`changed_run_ids` then named every run in the tail as changed, so a change-driven consumer re-read every run after
|
|
100
|
+
each build (the gateway's mail notification check loaded all 400 finished runs of its index test on every full
|
|
101
|
+
pass: AbstractGateway backlog 0965, red CI since 0.15.2). Replayed records are still filed into the session,
|
|
102
|
+
children and active indexes (the 0863 guarantee stands). A replay is quiet only when it says nothing new: its file
|
|
103
|
+
was known to the store at the build's mark (the scan memo, the sidecar included) and is unchanged since; a file
|
|
104
|
+
that landed or changed during the build (the record precedes the file, J53-1), a known run now gone, and every
|
|
105
|
+
record after the mark are announced as before, so a consumer whose token already covers the record still learns
|
|
106
|
+
of it; a store with no sidecar announces its first replay (a bounded one-off). Tests:
|
|
107
|
+
`tests/test_json_file_run_store_change_token_after_build.py` (red on 0.15.2).
|
|
108
|
+
|
|
10
109
|
## [0.15.2] - 2026-10-28
|
|
11
110
|
|
|
12
111
|
### Fixed
|
|
@@ -81,7 +81,8 @@ When behavior changes, update:
|
|
|
81
81
|
- `docs/api.md` (public API surface + imports)
|
|
82
82
|
- `docs/getting-started.md` (onboarding examples)
|
|
83
83
|
- `docs/architecture.md` (semantics/invariants)
|
|
84
|
-
- `
|
|
84
|
+
- a changelog fragment, `changelog.d/<pr-or-slug>.md` (user-visible changes; never an edit of
|
|
85
|
+
`CHANGELOG.md`: [changelog.d/README.md](changelog.d/README.md), checked by CI)
|
|
85
86
|
|
|
86
87
|
List every `docs/*.md` page in `docs/README.md`. Keep `llms.txt` (the hand-curated index) and
|
|
87
88
|
`llms-full.txt` in step with the documentation in the same change. `llms-full.txt` is generated:
|
|
@@ -92,4 +93,5 @@ is stale). Add a page to the script's `DOCUMENTS` list when it joins the core se
|
|
|
92
93
|
## Releases
|
|
93
94
|
|
|
94
95
|
- Bump `version` in `pyproject.toml`
|
|
95
|
-
-
|
|
96
|
+
- Assemble the changelog: `python scripts/changelog.py assemble X.Y.Z` (the dated section from
|
|
97
|
+
`changelog.d/`, fragments deleted)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.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.32.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.32.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.32.0; extra == 'gpu'
|
|
46
46
|
Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
|
|
47
47
|
Provides-Extra: test
|
|
48
48
|
Requires-Dist: aiosmtpd<2.0.0,>=1.4.4; extra == 'test'
|
|
@@ -55,10 +55,34 @@ 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.16.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.16.0
|
|
63
|
+
|
|
64
|
+
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
65
|
+
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
66
|
+
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).
|
|
68
|
+
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
69
|
+
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
70
|
+
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
71
|
+
- **Model residency in words**: fit refusals are never retried and keep their typed fields on the ledger, residency
|
|
72
|
+
rows carry the slot pool (`slots`, `active`, `queued`, ...) and name who holds a model, and the config facade reads
|
|
73
|
+
and sets a local model's loaded context (`configured_model_context`, `set_model_context`).
|
|
74
|
+
- **Structured output across process boundaries**: JSON schemas travel as data and validators are built where
|
|
75
|
+
inference runs, for local, remote and hybrid clients alike.
|
|
76
|
+
- **Voice transport is not a turn attachment** in history bundles and conversation search. Full list:
|
|
77
|
+
[CHANGELOG.md](CHANGELOG.md#0160---2026-11-02).
|
|
78
|
+
|
|
79
|
+
## What's new in 0.15.3
|
|
80
|
+
|
|
81
|
+
- **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
|
|
82
|
+
`warm_session_index`) leaves `change_token` and `changed_run_ids` untouched, so a change-driven consumer (the
|
|
83
|
+
gateway's mail notification check) no longer re-reads every finished run after each build (a 0.15.2 regression;
|
|
84
|
+
AbstractGateway backlog 0965). A file that landed during the build and a known run that vanished are still announced.
|
|
85
|
+
|
|
62
86
|
## What's new in 0.15.2
|
|
63
87
|
|
|
64
88
|
- **Run index builds never lose a run created during them**: a run another process (or store object) wrote while
|
|
@@ -121,8 +145,8 @@ Remote-light runtime:
|
|
|
121
145
|
pip install abstractruntime
|
|
122
146
|
```
|
|
123
147
|
|
|
124
|
-
The base install includes AbstractCore 2.
|
|
125
|
-
remote providers, tools, vision, voice, audio, and
|
|
148
|
+
The base install includes AbstractCore 2.32.0 or newer (its light install:
|
|
149
|
+
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
126
150
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
127
151
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
128
152
|
sentence-transformer embeddings are not selected unless you choose a hardware
|
|
@@ -231,7 +255,7 @@ Drivers + distribution:
|
|
|
231
255
|
- run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
|
|
232
256
|
|
|
233
257
|
Runtime-owned integrations:
|
|
234
|
-
- AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
258
|
+
- AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, calibrated decisions (`decide`), host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
235
259
|
- AbstractCore models and engines for hosts: `config_facade` passes through the host profile, local-engine status and installs, the model catalog with fit verdicts, installed models, deletes, host jobs (with who-cancelled attribution) and the embeddable console screens: `docs/integrations/abstractcore.md#models-engines-and-host-jobs-config-facade`
|
|
236
260
|
- For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
|
|
237
261
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
@@ -267,6 +291,14 @@ sr = create_scheduled_runtime(
|
|
|
267
291
|
)
|
|
268
292
|
```
|
|
269
293
|
|
|
294
|
+
## For AI agents
|
|
295
|
+
|
|
296
|
+
Register and use the [`abstractruntime` agent skill](https://github.com/lpalbou/AbstractRuntime/tree/main/skills/abstractruntime)
|
|
297
|
+
to operate durable workflows, waits, storage and AbstractCore integration. Copy
|
|
298
|
+
`skills/abstractruntime/` from the checkout matching your package version into
|
|
299
|
+
your agent's skills directory. Start with its install verification, then use the
|
|
300
|
+
linked documentation for the installed version.
|
|
301
|
+
|
|
270
302
|
## Documentation
|
|
271
303
|
|
|
272
304
|
| Document | Description |
|
|
@@ -4,10 +4,34 @@
|
|
|
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.16.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.16.0
|
|
12
|
+
|
|
13
|
+
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
14
|
+
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
15
|
+
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).
|
|
17
|
+
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
18
|
+
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
19
|
+
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
20
|
+
- **Model residency in words**: fit refusals are never retried and keep their typed fields on the ledger, residency
|
|
21
|
+
rows carry the slot pool (`slots`, `active`, `queued`, ...) and name who holds a model, and the config facade reads
|
|
22
|
+
and sets a local model's loaded context (`configured_model_context`, `set_model_context`).
|
|
23
|
+
- **Structured output across process boundaries**: JSON schemas travel as data and validators are built where
|
|
24
|
+
inference runs, for local, remote and hybrid clients alike.
|
|
25
|
+
- **Voice transport is not a turn attachment** in history bundles and conversation search. Full list:
|
|
26
|
+
[CHANGELOG.md](CHANGELOG.md#0160---2026-11-02).
|
|
27
|
+
|
|
28
|
+
## What's new in 0.15.3
|
|
29
|
+
|
|
30
|
+
- **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
|
|
31
|
+
`warm_session_index`) leaves `change_token` and `changed_run_ids` untouched, so a change-driven consumer (the
|
|
32
|
+
gateway's mail notification check) no longer re-reads every finished run after each build (a 0.15.2 regression;
|
|
33
|
+
AbstractGateway backlog 0965). A file that landed during the build and a known run that vanished are still announced.
|
|
34
|
+
|
|
11
35
|
## What's new in 0.15.2
|
|
12
36
|
|
|
13
37
|
- **Run index builds never lose a run created during them**: a run another process (or store object) wrote while
|
|
@@ -70,8 +94,8 @@ Remote-light runtime:
|
|
|
70
94
|
pip install abstractruntime
|
|
71
95
|
```
|
|
72
96
|
|
|
73
|
-
The base install includes AbstractCore 2.
|
|
74
|
-
remote providers, tools, vision, voice, audio, and
|
|
97
|
+
The base install includes AbstractCore 2.32.0 or newer (its light install:
|
|
98
|
+
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
75
99
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
76
100
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
77
101
|
sentence-transformer embeddings are not selected unless you choose a hardware
|
|
@@ -180,7 +204,7 @@ Drivers + distribution:
|
|
|
180
204
|
- run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
|
|
181
205
|
|
|
182
206
|
Runtime-owned integrations:
|
|
183
|
-
- AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
207
|
+
- AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, calibrated decisions (`decide`), host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
184
208
|
- AbstractCore models and engines for hosts: `config_facade` passes through the host profile, local-engine status and installs, the model catalog with fit verdicts, installed models, deletes, host jobs (with who-cancelled attribution) and the embeddable console screens: `docs/integrations/abstractcore.md#models-engines-and-host-jobs-config-facade`
|
|
185
209
|
- For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
|
|
186
210
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
@@ -216,6 +240,14 @@ sr = create_scheduled_runtime(
|
|
|
216
240
|
)
|
|
217
241
|
```
|
|
218
242
|
|
|
243
|
+
## For AI agents
|
|
244
|
+
|
|
245
|
+
Register and use the [`abstractruntime` agent skill](https://github.com/lpalbou/AbstractRuntime/tree/main/skills/abstractruntime)
|
|
246
|
+
to operate durable workflows, waits, storage and AbstractCore integration. Copy
|
|
247
|
+
`skills/abstractruntime/` from the checkout matching your package version into
|
|
248
|
+
your agent's skills directory. Start with its install verification, then use the
|
|
249
|
+
linked documentation for the installed version.
|
|
250
|
+
|
|
219
251
|
## Documentation
|
|
220
252
|
|
|
221
253
|
| Document | Description |
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Changelog fragments
|
|
2
|
+
|
|
3
|
+
Each pull request that changes `src/` adds ONE file here instead of editing `CHANGELOG.md`:
|
|
4
|
+
`changelog.d/<pr-number-or-slug>.md` (for example `changelog.d/123.md` or `changelog.d/a-short-slug.md`). A new file never
|
|
5
|
+
conflicts with another branch; the `[Unreleased]` section did on every merge.
|
|
6
|
+
|
|
7
|
+
A fragment is Keep a Changelog markdown: one or more of `### Added`, `### Changed`, `### Deprecated`,
|
|
8
|
+
`### Removed`, `### Fixed`, `### Security`, each followed by its entries, written as before:
|
|
9
|
+
|
|
10
|
+
```markdown
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **A stop signal is what a reader needs** (`module.py`). What was wrong, what is true now,
|
|
14
|
+
and how to use it ...
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- CI (`changelog` job): a pull request that changes `src/` without adding a fragment fails, and so does a
|
|
18
|
+
malformed fragment. `python scripts/changelog.py check` runs the same check locally.
|
|
19
|
+
- `python scripts/changelog.py preview` prints what the next release section will say.
|
|
20
|
+
- Release: `python scripts/changelog.py assemble X.Y.Z` writes `## [X.Y.Z] - <date>` from every fragment
|
|
21
|
+
(sections in Keep a Changelog order) and deletes the fragments; commit that with the version bump.
|
|
@@ -23,10 +23,14 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
|
|
|
23
23
|
|
|
24
24
|
## Guides
|
|
25
25
|
|
|
26
|
+
- [AbstractRuntime agent skill](../skills/abstractruntime/SKILL.md) — a self-contained operating guide for agents using workflows, durable waits, stores and AbstractCore execution
|
|
27
|
+
- [Structured responses](integrations/abstractcore.md#structured-responses) — JSON schemas across execution boundaries, local and remote validation, and streaming behavior
|
|
28
|
+
- [Host-managed serving](integrations/abstractcore.md#host-managed-serving) — optional Core-owned HTTP lifecycle and host-admitted ASGI requests
|
|
29
|
+
|
|
26
30
|
- `faq.md` — common questions (recommended)
|
|
27
31
|
- `manual_testing.md` — manual smoke tests and how to run the test suite
|
|
28
32
|
- `artifacts.md` — Runtime artifact identity, descriptors, provenance, catalog search, and access stats
|
|
29
|
-
- `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, the `config_facade` models/engines/host-jobs passthroughs for hosts, the `structured_facade` response_format check for hosts, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, model-residency listings, locks and model switching, live token streaming, workspace-scoped tools, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
|
|
33
|
+
- `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, the `config_facade` models/engines/host-jobs passthroughs for hosts, the `structured_facade` response_format check for hosts, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, model-residency listings, locks and model switching, live token streaming, workspace-scoped tools, durable bloc prompt-cache control, media inputs, generated media outputs, calibrated decisions (`output.modality: "decision"`, `run_facade.decide`, the `decide` node), video progress events, and tool approval waits via AbstractCore
|
|
30
34
|
- `integrations/abstractmemory.md` — the AbstractMemory memory facade (ADR 0011): open a mind, stamp provenance from the step context, reconstruct a source from the ledger (`get_record`), history and revisions, and the `MEMORY_REVISE` effect / `memory_revise` node
|
|
31
35
|
- `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
|
|
32
36
|
- `email.md` — email for each user: run-scoped account binding and the host resolver, sending without asking (self and pre-authorised recipients), the durable event inbox and mail feeder, the `email.received@1` trigger on the primary or any other mailbox of the user, mail verbs for flows (changes and sends only on a Read and write mailbox: `email_mailbox_read_only`, `email_mailbox_cannot_send`), and the send-email action
|
|
@@ -71,7 +71,7 @@ Implementation: `src/abstractruntime/core/runtime.py`.
|
|
|
71
71
|
- optional `step_gate()` is consulted at every step boundary; when it returns `False` the tick returns the persisted state and the run stays `RUNNING` (a later tick continues where it stopped)
|
|
72
72
|
- `Runtime.resume(workflow, run_id, wait_key, payload, max_steps=...) -> RunState`
|
|
73
73
|
- validates the `wait_key`, writes `payload` to `WaitState.result_key` (if set), and continues from `WaitState.resume_to_node`
|
|
74
|
-
- a wait is resumed at most once: a resume of a run that is no longer waiting, or that waits on another key, raises `StaleResumeError` (a `ValueError`)
|
|
74
|
+
- a wait is resumed at most once: a resume of a run that is no longer waiting, or that waits on another key, raises `StaleResumeError` (a `ValueError`); replies to recognized conversational questions are instead retained without answering or resuming another question (below)
|
|
75
75
|
- the check and the commit run under a per-run lock, and tools approved with `{"approved": true}` execute while that lock is held, so a long tool delays a competing resume of the same run, which is then refused
|
|
76
76
|
- `run_mutation_lock(run_id)` (package root): the per-run, per-process, re-entrant lock that `tick` holds for the whole tick and `resume` for its commit; take it around your own read-modify-save of a run so a tick cannot overwrite your change
|
|
77
77
|
- `Runtime.get_state(run_id) -> RunState` and `Runtime.get_ledger(run_id) -> list[dict]`
|
|
@@ -89,6 +89,95 @@ Effect cancellation helpers (`src/abstractruntime/core/effect_cancellation.py`):
|
|
|
89
89
|
- `request_model_effects_cancel(provider, model, cancelled_by="model_eject")` stops the effects using a model before it is unloaded; local `unload_model_residency` calls it for you
|
|
90
90
|
- `kill_inflight_effect(step_id, killed_by=...)` is an in-process hard stop for a call that ignores its cancel event (it cannot interrupt a thread blocked inside one native call)
|
|
91
91
|
|
|
92
|
+
### Conversational questions and deadlines
|
|
93
|
+
|
|
94
|
+
`ASK_USER` retains its indefinite legacy behavior when `payload.question` is absent.
|
|
95
|
+
For a conversational question, add exactly one of these policies alongside the existing
|
|
96
|
+
`prompt`, `choices` and `allow_free_text` fields:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{"importance": "essential"}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{"importance": "clarification", "timeout_s": 120, "fallback": "Compare both options before choosing."}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Essential questions have no deadline or fallback. Clarifications require a numeric duration
|
|
107
|
+
from 120 through 300 seconds and a nonempty, predeclared safe fallback. Extra policy fields
|
|
108
|
+
are refused. Time passing never grants tool approval or permission to perform an action.
|
|
109
|
+
Flows may supply the same object through the AskUser `question` input or `effectConfig.question`.
|
|
110
|
+
|
|
111
|
+
Every logical issuance has a fresh `wait_key` (`question:<id>`). Its persisted
|
|
112
|
+
`waiting.details.question` contains `id`, `purpose: "conversation"`, `importance`,
|
|
113
|
+
`published_at`, `deadline` and `fallback` (the last two are null for essential questions).
|
|
114
|
+
The existing `waiting.prompt` remains the question text. Resume with the exact key and
|
|
115
|
+
`{"response": "the person's words"}`. Empty responses and approval payloads are refused.
|
|
116
|
+
|
|
117
|
+
The server arbitrates at commit time: a response before the deadline wins; at or after it,
|
|
118
|
+
expiry wins even if the due scan has not run. An answer result carries
|
|
119
|
+
`question: {id, outcome: "answered"}`. Expiry produces
|
|
120
|
+
`{timed_out: true, fallback: "...", question: {id, outcome: "expired"}}` with no `response`.
|
|
121
|
+
Hosts and actors must present this as a host-authored continuation, never as human speech.
|
|
122
|
+
Cancellation records a `cancelled` outcome and does not continue the workflow.
|
|
123
|
+
|
|
124
|
+
Explicit pause suppresses timeout continuation. The original deadline survives pause and
|
|
125
|
+
restart; after explicit resume, an overdue question resolves before further work. A reply to
|
|
126
|
+
a paused, expired or already resolved recognized question is retained in the ledger, with
|
|
127
|
+
its reason, and does not answer a newer question. The small outcome index retains 64 entries;
|
|
128
|
+
full outcomes and retained replies remain in the ledger. Outcome receipts are authoritative
|
|
129
|
+
across a crash before the following checkpoint save.
|
|
130
|
+
|
|
131
|
+
Memory, JSON and SQLite run stores index these USER deadlines through their existing due-wait
|
|
132
|
+
queries. The existing scheduler/host runner advances them; Runtime does not install a timer
|
|
133
|
+
service. Resolution uses process-local locks and the existing single-writer authority for
|
|
134
|
+
the store; it is not a distributed multi-writer transaction. Legacy EVENT deadlines and
|
|
135
|
+
tool-approval waits retain their own contracts.
|
|
136
|
+
|
|
137
|
+
### Public conversation and accepted guidance
|
|
138
|
+
|
|
139
|
+
An opt-in actor may inherit `_runtime.conversation: {enabled: true}` through native child
|
|
140
|
+
workflows and VisualFlow Agent nodes. This flag does not create an extra inference call.
|
|
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` and
|
|
143
|
+
`source_call_ids`. The event's owner must match `run_id`; private diary/thinking fences are
|
|
144
|
+
excluded. See [replay.md](replay.md#public-conversation-messages).
|
|
145
|
+
|
|
146
|
+
Actors may attach `public_action` to a proposed `TOOL_CALLS` payload with `text`,
|
|
147
|
+
`update_id`, `run_id`, positive integer `iteration` and `call_ids`. The text is the
|
|
148
|
+
actor's public stated purpose (nonblank, at most 600 characters), not execution
|
|
149
|
+
proof. The adapter owns its binding to an accepted public update and unchanged
|
|
150
|
+
proposed calls. Runtime checks the owning run and exact effect call IDs, then
|
|
151
|
+
narrows the metadata to the actual calls requiring approval. Mismatched targets,
|
|
152
|
+
unknown or duplicate IDs, malformed metadata and private fences withhold the
|
|
153
|
+
explanation without changing the approval policy. Valid context appears at
|
|
154
|
+
`waiting.details.public_action` and the canonical replay interaction's `details`.
|
|
155
|
+
Clients verify its run and exact pending IDs before presenting it. An absent
|
|
156
|
+
explanation must not be replaced with private reasoning or a guessed purpose.
|
|
157
|
+
Hosts with an earlier approval boundary can share
|
|
158
|
+
`abstractruntime.integrations.abstractcore.effect_handlers.approval_public_action(run, payload, host_calls, waiting_calls)`.
|
|
159
|
+
Pass the original effect payload and host calls plus the exact gated subset. The return
|
|
160
|
+
value is validated narrowed metadata or `None`; compute it before replacing a delegated
|
|
161
|
+
payload's `tool_calls`, and carry only that returned context forward. This helper grants
|
|
162
|
+
no permission and changes no approval policy.
|
|
163
|
+
|
|
164
|
+
For human input during work, `Runtime.steer(run_id, message, display_text=words, speaker=...)`
|
|
165
|
+
keeps the existing durable guidance path and adds a public acceptance receipt only when
|
|
166
|
+
`display_text` is explicitly supplied. `message` may contain quoted context; `display_text`
|
|
167
|
+
preserves the person's exact original words (nonblank, at most 65,536 characters).
|
|
168
|
+
Operational steering without this field does not become public human history.
|
|
169
|
+
Hosts may supply `client_message_id` for correlation; it is preserved on the reserved
|
|
170
|
+
receipt and replay message, independently of the sidecar sequence and message id.
|
|
171
|
+
An accepted receipt means the words were durably queued; the actor's later response is the
|
|
172
|
+
evidence that it considered or adopted them. It does not undo an action already performed.
|
|
173
|
+
|
|
174
|
+
If the sidecar append succeeds and the public-receipt append fails, admission still succeeds:
|
|
175
|
+
the exact words remain in the sidecar and the host logs a repair warning. Delivery repairs
|
|
176
|
+
the receipt before acknowledging that source. A terminal run does not promise another actor
|
|
177
|
+
boundary; its retained sidecar remains recoverable rather than being reported as refused.
|
|
178
|
+
Entity visits use the narrower participant-checked visit door and fresh attributed recall,
|
|
179
|
+
described in [entity-runtime.md](entity-runtime.md#live-visit-corrections).
|
|
180
|
+
|
|
92
181
|
Tool scope: an explicit `allowed_tools` list in `run.vars["_runtime"]`, in a child run's `_runtime`, or in a `TOOL_CALLS` payload is a ceiling intersected across the run tree (`src/abstractruntime/core/tool_scope.py`). Approval policy can remove a prompt but can never grant a tool outside it; a missing key means unrestricted and an empty list denies every tool.
|
|
93
182
|
|
|
94
183
|
For the execution model (ledger records, effect outcomes, waits), see `architecture.md`.
|
|
@@ -187,6 +276,13 @@ Implementation: `src/abstractruntime/core/policy.py`.
|
|
|
187
276
|
- `EffectPolicy` protocol and implementations: `DefaultEffectPolicy`, `RetryPolicy`, `NoRetryPolicy`
|
|
188
277
|
- `compute_idempotency_key(...)` helper
|
|
189
278
|
|
|
279
|
+
The AbstractCore runtime factories default to three total LLM attempts and one
|
|
280
|
+
tool attempt, with exponential backoff starting at one second and capped at
|
|
281
|
+
30 seconds. Supply `effect_policy=NoRetryPolicy()` to disable Runtime retries;
|
|
282
|
+
the provider may have its own retry policy. Deterministic structured-request
|
|
283
|
+
and serialization refusals are nonretryable. Inspect a returned run's status
|
|
284
|
+
and error even when `tick(...)` itself returns normally.
|
|
285
|
+
|
|
190
286
|
Docs: `architecture.md` (reliability section).
|
|
191
287
|
|
|
192
288
|
## WorkflowBundles (`.flow`) and VisualFlow distribution
|
|
@@ -201,8 +297,8 @@ VisualFlow compiler helpers are available from `abstractruntime.visualflow_compi
|
|
|
201
297
|
- `compile_visualflow(...)` and `compile_visualflow_tree(...)` compile VisualFlow JSON into executable `WorkflowSpec` objects.
|
|
202
298
|
|
|
203
299
|
VisualFlow authoring note (media and document nodes):
|
|
204
|
-
- Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `upscale_image`, `image_upscale`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
|
|
205
|
-
- Generated-media and transcription nodes lower to a durable `EffectType.LLM_CALL` with an `output` selector (for example `{"modality":"music","task":"music_generation"}`), while `listen_voice` lowers to `WAIT_EVENT`. Hosts should persist the authoring node type rather than pre-lowering to `llm_call`.
|
|
300
|
+
- Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `upscale_image`, `image_upscale`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `decide`, `transcribe_audio`, and `listen_voice`.
|
|
301
|
+
- Generated-media and transcription nodes lower to a durable `EffectType.LLM_CALL` with an `output` selector (for example `{"modality":"music","task":"music_generation"}`), while `listen_voice` lowers to `WAIT_EVENT`. The `decide` node asks ONE question about a state (inputs `state`, `question`, `question_type` = `choice` | `noul` | `score`, `options` for a choice, `levels` for a score, `provider`, `model`, `truncate`) and fills the typed output pins of that type (`answer` plus `choice`/`confidence`/`probabilities`, `noul`/`verdict`, or `score`/`level`/`confidence`/`probabilities`, with `model` and `success`); a wired `questions` object (several System One questions) replaces the single question and fills `answers`. It lowers to the same `LLM_CALL` with `{"modality":"decision","questions":{...}}` and the state as the prompt; see [decisions](integrations/abstractcore.md#decisions). Hosts should persist the authoring node type rather than pre-lowering to `llm_call`.
|
|
206
302
|
- Runtime also recognizes file/document nodes. `read_file` and `write_file`
|
|
207
303
|
handle UTF-8 text/JSON workspace paths. In Gateway-hosted runs, those paths
|
|
208
304
|
follow the shared canonical contract: `rel/path` for the main workspace root
|
|
@@ -332,6 +428,13 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
|
|
|
332
428
|
When available, it also includes `resolved_actions`: bounded capability/action summaries derived
|
|
333
429
|
from Core route resolution and persisted from `LLM_CALL` results.
|
|
334
430
|
|
|
431
|
+
Voice transport is never part of a conversation turn: the recording of a spoken question and the
|
|
432
|
+
read-aloud audio synthesized from an answer are left out of each session turn's `attachments` and
|
|
433
|
+
`artifacts`. `is_voice_transport(tags)` (in `abstractruntime.history_bundle`) recognizes them:
|
|
434
|
+
`purpose` `voice_playback` or `voice_dictation`, `artifact_space` `voice`, or a `voice/` or
|
|
435
|
+
`client:voice/` path. The bundle's own `artifacts` section stays complete, and conversation search
|
|
436
|
+
applies the same rule.
|
|
437
|
+
|
|
335
438
|
## Replay view (one reconstruction of a run, every client)
|
|
336
439
|
|
|
337
440
|
Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](replay.md).
|
|
@@ -355,7 +458,7 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
|
|
|
355
458
|
|
|
356
459
|
### AbstractCore (LLM + tools)
|
|
357
460
|
|
|
358
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.
|
|
461
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.32.0 or newer is part of the base install).
|
|
359
462
|
|
|
360
463
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
361
464
|
|
|
@@ -379,7 +482,7 @@ Entry points:
|
|
|
379
482
|
- local `list_model_residency` merges AbstractCore's host-wide loaded-model sweep into text-generation listings (sweep-only rows carry `source: "provider_server"` and no `task` label), and residency rows normalize provider size extras to `size_bytes` / `size_vram_bytes` while keeping the originals; local text rows also carry registry-declared `modalities` (omitted on a registry miss), host identity (`host_id` / `host_name`), and runtime-owned lock truth (`locked` / `lockable`, with `pinned` a truthful alias of `locked` — never the default-identity flag, which `default` alone carries), while remote listings keep the Core server's row identity
|
|
380
483
|
- host-local prompt-cache export/import admin also lives on the host facade and client delegation layer (`list_prompt_cache_exports`, `prompt_cache_export`, `prompt_cache_import`) and is intentionally local-only
|
|
381
484
|
- host-facade email helpers (`list_email_accounts`, `list_emails`, `read_email`, `send_email`) use the process's own AbstractCore account (single-user installs)
|
|
382
|
-
- run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `upscale_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
|
|
485
|
+
- run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `upscale_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `decide`, `transcribe_audio`, `send_email`, `send_telegram_message`)
|
|
383
486
|
- task-specific image/video helpers preserve batch and adapter controls such as
|
|
384
487
|
`count`/`n`, `seeds`, ordered `lora_adapters`, and video `flow_shift`; local
|
|
385
488
|
subprocess isolation stays within the same public contract.
|
|
@@ -396,15 +499,17 @@ Execution controls and cancellation:
|
|
|
396
499
|
- `media`: a media path, artifact ref (`{"$artifact": "..."}` or `{"artifact_id": "..."}`), media dict, or list of those
|
|
397
500
|
- `output`: AbstractCore output selector; top-level `outputs` is accepted as a runtime alias
|
|
398
501
|
- `params`: provider/model routing, generation controls, prompt-cache keys or `prompt_cache_binding`, structured-output schema options, and tracing metadata
|
|
502
|
+
- `response_schema` / `response_schema_name`: JSON schema data and name for a structured result at `result.data`; local execution creates the validator at the provider boundary. Structured calls do not stream tokens. Remote/hybrid clients forward an OpenAI JSON-schema response format; Python validator classes cannot cross HTTP. See [structured responses](integrations/abstractcore.md#structured-responses).
|
|
399
503
|
|
|
400
504
|
Multimodal support:
|
|
401
505
|
- common remote-light AbstractCore media, vision, voice, audio, and music dependencies are part of the base Runtime install
|
|
402
506
|
- local clients call AbstractCore's unified `generate(..., media=..., output=...)`
|
|
403
|
-
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, image upscaling, text-to-video, image-to-video, speech, music generation, and
|
|
507
|
+
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, image upscaling, text-to-video, image-to-video, speech, music generation, transcription, and decision (`POST /v1/decisions`) endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
404
508
|
- remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
|
|
405
509
|
- generated image/video/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
510
|
+
- a decision (`output: {"modality": "decision", "questions": {...}}`, the state as the prompt) is typed answers, not bytes: no `ArtifactStore` is needed, and the result carries `content` (the answers as JSON), `decision` (`model`, `answers`, `usage`, `latency_ms`, optional `truncated`), `answers`, and the `provider` / `model` of the decision model; the resolved action id is `decision`. Without a `model` the call uses the `output.decision` capability default, so a text runtime on any provider can answer decisions once that default is set (see [decisions](integrations/abstractcore.md#decisions))
|
|
406
511
|
- streamed TTS playback artifacts carry `purpose=voice_playback`, `artifact_space=voice` and a logical `voice/tts-<id>.wav` path in their tags; hosts can separate read-aloud recordings from user attachments while retaining their artifact refs and provenance
|
|
407
|
-
- with the pooled local client (`MultiLocalAbstractCoreLLMClient`), a request whose outputs are all non-text (image, video, voice, music, transcription) and that carries no tools never builds the text client: it runs on AbstractCore's capability host (`CapabilityHostProvider`, no text model), and so does streaming TTS. A text default that cannot be built (an engine not installed) therefore never blocks speech or image generation
|
|
512
|
+
- with the pooled local client (`MultiLocalAbstractCoreLLMClient`), a request whose outputs are all non-text (image, video, voice, music, transcription, decision) and that carries no tools never builds the text client: it runs on AbstractCore's capability host (`CapabilityHostProvider`, no text model), and so does streaming TTS. A text default that cannot be built (an engine not installed) therefore never blocks speech or image generation
|
|
408
513
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
409
514
|
- local image/video generation runs in a one-shot subprocess (`execution_mode="local_one_shot_subprocess"`) unless every requested media model is resident (explicitly loaded with `load_model_residency`), in which case it runs in-process on the loaded pipeline (`execution_mode="resident_in_process"`, `resident_load_ids`)
|
|
410
515
|
- a media spec whose `provider` is an endpoint profile (`endpoint:<id>`) never uses the one-shot subprocess: it is an HTTP call to that endpoint, and the host's endpoint-profile resolver (`set_provider_endpoint_profile_resolver`) exists only in this process
|
|
@@ -416,7 +521,7 @@ Prompt cache / cached sessions:
|
|
|
416
521
|
- LLM clients expose cache control methods listed above for host-side preparation and inspection
|
|
417
522
|
- `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]` or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default
|
|
418
523
|
- `LLM_CALL.params.prompt_cache_binding` is the durable exact-reuse input for bloc-backed prompt caching; if a binding includes `key`, Runtime adopts it as the effective prompt-cache key and refuses mismatches before provider execution
|
|
419
|
-
- Runtime only auto-derives session prompt-cache keys for text/chat calls; non-text output selectors such as image, voice, music, and transcription keep explicit `prompt_cache_binding` support but do not receive an inferred cache key
|
|
524
|
+
- Runtime only auto-derives session prompt-cache keys for text/chat calls; non-text output selectors such as image, voice, music, decision, and transcription keep explicit `prompt_cache_binding` support but do not receive an inferred cache key
|
|
420
525
|
- when Runtime injects the derived session key, the client stamps session attribution (`session_id`, `run_id`, `workflow_id`, `node_id`, `namespace`) into the cache entry's metadata after each generate; caller-supplied `prompt_cache_key`s and binding keys are never stamped, so session-scoped clearing cannot destroy caches shared across sessions
|
|
421
526
|
- `get_abstractcore_host_facade(...)` exposes `get_memory_snapshot()`, `list_session_prompt_caches(session_id=None)`, and `clear_session_prompt_caches(session_id)`; session caches persist until a host clears them, the owning model is unloaded, or the provider evicts them — completing a run does not clear them
|
|
422
527
|
- `get_abstractcore_host_facade(...)` also exposes durable bloc helpers (`upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`)
|
|
@@ -474,6 +579,8 @@ inside an effect handler. Details: [integrations/abstractmemory.md](integrations
|
|
|
474
579
|
|
|
475
580
|
### Host ASGI serving
|
|
476
581
|
|
|
582
|
+
`abstractruntime.integrations.abstractcore.server_facade.start_core_server(*, host=None, port=None)` starts Core's optional listener in the calling execution process. It returns a Core-owned handle with `url`, `is_running`, `status()` and `stop()`. Core owns configuration, credentials and HTTP request handling; stopping the listener does not unload resident providers. Omitted bind arguments use Core server settings; explicit port `0` selects an ephemeral port. Startup errors raise to the caller. Importing the facade starts nothing. See [host-managed serving](integrations/abstractcore.md#host-managed-serving).
|
|
583
|
+
|
|
477
584
|
`abstractruntime.integrations.abstractcore.server_facade.serve_core_request(scope, receive, send, *, token: str, allow_unauthenticated: bool = False)` delegates host-admitted ASGI requests with request-scoped Core authentication. See [host-managed serving](integrations/abstractcore.md#host-managed-serving) for network and credential responsibilities.
|
|
478
585
|
|
|
479
586
|
### Structured-output checks
|