AbstractRuntime 0.7.2__tar.gz → 0.7.3__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.7.2 → abstractruntime-0.7.3}/ACKNOWLEDGMENTS.md +1 -1
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/CHANGELOG.md +36 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/PKG-INFO +7 -7
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/README.md +3 -3
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/api.md +3 -2
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/architecture.md +1 -1
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/automations.md +11 -1
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/faq.md +8 -4
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/integrations/abstractcore.md +5 -3
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/troubleshooting.md +1 -1
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/llms-full.txt +33 -16
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/llms.txt +2 -2
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/pyproject.toml +7 -5
- abstractruntime-0.7.3/release-notes.md +33 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/controller.py +29 -2
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/llm_client.py +142 -1
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_tool_approval.py +100 -3
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_packaging_extras.py +3 -3
- abstractruntime-0.7.3/tests/test_resident_media_generation.py +310 -0
- abstractruntime-0.7.2/release-notes.md +0 -24
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/.gitignore +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/LICENSE +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/ROADMAP.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/SECURITY.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/adr/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/artifacts.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_portability/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/entity-runtime.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/evidence.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/getting-started.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/limits.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/manual_testing.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/proposal.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/provenance.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/snapshots.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/tool-approval.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/tools-comms.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/emails.config.example.yaml +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/examples/05_persistence.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/examples/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/mkdocs.yml +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/pytest.ini +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/scripts/backfill_diary_edges.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/scripts/generate_llms_full.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automation_queries.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/adapters.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/attention.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/bundle.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/commands.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/ledger.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/models.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/service.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/effect_cancellation.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/health.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/live_deltas.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/progress_channel.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/run_attribution.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/run_identity.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/tool_scope.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/documents/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/documents/charts.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/documents/docx.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/documents/pdf.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/act_only.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/chat.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/communities.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/diary.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/digest.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/entity_runtime.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/lease.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/life.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/memory_reader.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/night_voice.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/phase_graph.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/phase_spec.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/prelude.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/prompt_overlay.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/reflection.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/substrate.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/tool_effects.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/tool_policy.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/tools.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/identity/visit_workflow.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/scheduler/multi_store.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/session_history.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/session_turns.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/lease.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/ledger_slim.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/serialize.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/storage/steer_sidecar.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/triggers/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/triggers/manual.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/triggers/protocol.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/triggers/registry.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/triggers/schedule.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/turn_grounding.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/utils/atomic_files.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/README.md +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/automation_harness.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/conftest.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_agora_agent_alias_identity.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_agora_tools_http.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_analyze_media_addressing_and_walling.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_commands.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_controller.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_controller_recovery.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_definition.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_discussion_isolation.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_growing_context.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_index.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_next_fire.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_occurrence_recovery.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_replay_read_only.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_retry.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_session_turns.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_automation_status.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_browser_probe_target_walling.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_budget_law_no_unrequested_caps.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_capability_default_reasoning.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_code_node_restricted_python.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_command_store.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_compaction_summarizer_route.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_config_facade_models_engines.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_controller_bundle_packaged.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_crash_ordering_inversions.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_create_if_absent.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_data_registry_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_default_tools_camera_gating.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_default_tools_include_skim_web.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_diary_capture.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_diary_write_rescue.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_directory_lease.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_disabled_toolsets_seam.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_discovery_survives_unbuildable_default.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_discovery_tts_unavailable_reason.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_discovery_voice_openai_api_key.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_discussion_session_anchor.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_document_markdown_tables.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_document_renderers_hr_quote.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_durable_write_discipline.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_effect_cancellation.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_effect_issuance_idempotency.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_effect_payload_stays_json_serializable.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_election_consequence_teaching.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_emergence_experiment.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_emit_event_uses_wait_index.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_endpoint_profile_route_context.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_awake_memory_fixes.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_brain_effects.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_chat_driver.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_chat_tools_reflection.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_diary.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_execute_tool.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_fetch_url_tool.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_history_window.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_life_loop.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_memory_richness.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_phase_graph_conformance.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_react_visit_window.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_recent_memories.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_runtime.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_search_memory.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_substrate_resolution.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_visit_honesty.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_workspace_cap.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_entity_workspace_tools.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_event_wait_index.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_execute_command_output_offload.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_execution_capability_discovery.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_explicit_eject_other_clients.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_factory_default_retry_policy.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_format_repair_nudge.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_fresh_install_no_provider.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_gateway_facades_c4899.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_git_read_only_refiner.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_hf_process_residency_merge.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_history_window_multimodal.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_hot_path_store_reads.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_indexed_idempotency_lookup.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_json_run_cache_bound.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_json_store_scan_memo.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_ledger_record_slimming.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_live_token_deltas.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_payload_shape_refusal.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_text_phase_progress.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_client_grounding_tail.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_retry_classification.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_llm_streaming_on_token.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_local_helper_tool_exposure.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_local_residency_host_sweep.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_max_iterations_ceiling.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_media_capability_default_routing.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_media_subprocess.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_appraise_handler.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_communities.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_seam_handlers.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_seam_sqlite_durability.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_mlx_process_residency_merge.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_model_eject_cancel.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_model_residency_clean_switch.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_multi_store_scheduler.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_native_mlx_application_wiring.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_native_mlx_execution_controls_live.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_native_tool_channel.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_night_voice.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_no_default_provider_refusal_ux.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_offload_answer_chain_c4978.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_offloading.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_parallel_readonly_tool_execution.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_pdf_unicode_rendering.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_personal_cycle.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_phantom_attachment_index.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_phase_graph_artifact_control.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_phase_graph_obedience.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_phase_vocabulary_migration.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_prompt_cache_posture_inheritance.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_prompt_overlay.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_provider_endpoint_profile_resolution.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_provider_pin_routing_isolation.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_read_idle_threading.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_readoption_experiment.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_realize_election.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_remote_client_cancel.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_remote_speculation_defaults.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_report_branding.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_resume_concurrent_same_wait.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_run_index_workspace_root.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_run_mutation_lock.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_run_scoped_tool_policy.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_run_tool_scope_ceiling.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_browser_session_boundary.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_default_provider_model_refresh.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_health_and_bounded_vars.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_runtime_tick_step_gate.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_send_email_refiner.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_session_history.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_session_prompt_cache_attribution.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_session_prompt_cache_visibility.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_session_route_stamp.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_session_start_cost.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_shell_tool_exposure.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_speculation_inheritance.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_speculation_reaches_provider_construction.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_steer_sidecar.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_thinking_inheritance.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_approval_wait_key_identity.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_catalog.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_descriptor_registry.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_inventory_facade.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_invoke_effect.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_policy_and_mounts.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_topic_election_world_model.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_trigger_registry.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_trigger_schedule_math.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_turn_grounding_byte_stability.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_turn_grounding_carriers_a3.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visit_ab_fixture.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visit_midturn_elections.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visit_midturn_resume.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visit_workflow.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_entity_memory_nodes.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_llm_call_partial_override.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_unknown_node_type_refuses.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_agora_react_agent.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_continue_on_error.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_file_nodes_workspace.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_function_library.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_get_var_node.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_pin_expressions.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_schema_enum_switch.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_voice_openai_api_key_path.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_w4_feelings_lens.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_wait_event_deadline.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_wait_until_streak.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_wait_until_utc_normalization.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_workspace_builtin_deny.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_workspace_prompt_context.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_workspace_read_only.py +0 -0
- {abstractruntime-0.7.2 → abstractruntime-0.7.3}/tests/test_write_chart.py +0 -0
|
@@ -11,7 +11,7 @@ The canonical dependency list lives in `pyproject.toml`.
|
|
|
11
11
|
- **AbstractMemory** (`>=0.3.0`) — TripleStore models and store contract used by Runtime's `MEMORY_KG_*` effects. Durable/vector backend dependencies such as LanceDB remain selected by hosts.
|
|
12
12
|
|
|
13
13
|
## Runtime integrations
|
|
14
|
-
- **abstractcore** (`abstractcore>=2.19.
|
|
14
|
+
- **abstractcore** (`abstractcore>=2.19.2`) — LLM, tools, media, and capability integration used by the base `abstractruntime` install (AbstractCore's light install); the `apple` and `gpu` extras select `abstractcore[apple]` / `abstractcore[gpu]` at the same floor (declared in `pyproject.toml`, implementation under `src/abstractruntime/integrations/abstractcore/*`, docs: `docs/integrations/abstractcore.md`).
|
|
15
15
|
- The AbstractCore integration uses **httpx** for remote mode (`src/abstractruntime/integrations/abstractcore/llm_client.py`) and **pydantic** for structured validation (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`). These are provided by AbstractCore’s dependency set.
|
|
16
16
|
- The `tools` extra of AbstractCore backs the base Runtime toolset and the `abstractruntime-mcp-worker` entry point.
|
|
17
17
|
- **RestrictedPython** (`>=7.0`, core install) — sandbox for VisualFlow “Code” nodes and pin expressions (`src/abstractruntime/visualflow_compiler/visual/code_executor.py`).
|
|
@@ -7,6 +7,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.7.3] - 2026-09-29
|
|
11
|
+
|
|
12
|
+
### Security
|
|
13
|
+
|
|
14
|
+
- **An automation's tool grant no longer pre-approves sending messages** (framework backlog 0992
|
|
15
|
+
WP0). With the default `policy.tool_approval: "auto"`, the grant listed every tool the runtime
|
|
16
|
+
classifies, `send_email` included, and an explicit name in the grant overrides the
|
|
17
|
+
`model_controlled_destination` belt: an occurrence that read an inbound email or a web page could
|
|
18
|
+
mail data to any address that text named. The grant now withholds every tool whose inventory row
|
|
19
|
+
carries `comms_send` (`send_email`, `send_whatsapp_message`, `send_telegram_message`,
|
|
20
|
+
`send_telegram_artifact`), even when the target's `allowed_tools` names it, and lists them in
|
|
21
|
+
`tool_policy.withheld_tools`. Their calls take the normal approval point: a `send_email` whose
|
|
22
|
+
every recipient is the registered user's address (`_runtime.operator_email`) still runs
|
|
23
|
+
unattended; any other recipient parks the occurrence on a `tool_approval` wait until a person
|
|
24
|
+
approves or refuses it (the behaviour of `"ask"`). Recipients named in an automation's definition
|
|
25
|
+
are not auto-approved yet; that allowlist is part of backlog 0992.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- **A resident image/video model serves generation.** After `load_model_residency(task="image_generation")`
|
|
30
|
+
(the Gateway's `POST /models/load`, the console Load button, a flow's model residency node), a local
|
|
31
|
+
image or video request whose every media output names a resident model runs in-process on the loaded
|
|
32
|
+
pipeline (`execution_mode="resident_in_process"`, `resident_load_ids`) instead of loading the model
|
|
33
|
+
again in a one-shot subprocess. Measured through AbstractGateway with FLUX.2 [klein] 4B on a 16 GB
|
|
34
|
+
NVIDIA card: 17-19 s per image on the resident pipeline against 54-59 s with a reload per request, and
|
|
35
|
+
no second copy of the weights on the GPU. Pooled clients of `create_local_runtime(...)` use their pool's residency core. Models that
|
|
36
|
+
were not explicitly loaded keep the isolated subprocess (crash isolation for native Metal/CUDA
|
|
37
|
+
failures), so the explicit load is the opt-in.
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
- **Requires AbstractCore 2.19.2 or newer** (`abstractcore`, `abstractcore[apple]`, `abstractcore[gpu]`).
|
|
42
|
+
It brings AbstractVision 0.3.33, whose loads report `loaded_new` (a fresh image-model load reads as
|
|
43
|
+
`loaded`, not `already_loaded`) and whose unload frees the model's memory, which the resident path
|
|
44
|
+
above relies on.
|
|
45
|
+
|
|
10
46
|
## [0.7.2] - 2026-09-29
|
|
11
47
|
|
|
12
48
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.3
|
|
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.19.
|
|
23
|
+
Requires-Dist: abstractcore>=2.19.2
|
|
24
24
|
Requires-Dist: abstractmemory>=0.3.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.19.
|
|
38
|
+
Requires-Dist: abstractcore[apple]>=2.19.2; 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.19.
|
|
45
|
+
Requires-Dist: abstractcore[gpu]>=2.19.2; extra == 'gpu'
|
|
46
46
|
Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
|
|
47
47
|
Provides-Extra: test
|
|
48
48
|
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
@@ -54,7 +54,7 @@ Description-Content-Type: text/markdown
|
|
|
54
54
|
|
|
55
55
|
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.
|
|
56
56
|
|
|
57
|
-
**Version:** 0.7.
|
|
57
|
+
**Version:** 0.7.3 • **Python:** 3.10+
|
|
58
58
|
|
|
59
59
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
60
60
|
|
|
@@ -82,7 +82,7 @@ Remote-light runtime:
|
|
|
82
82
|
pip install abstractruntime
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
The base install includes AbstractCore 2.19.
|
|
85
|
+
The base install includes AbstractCore 2.19.2 or newer (its light install:
|
|
86
86
|
remote providers, tools, vision, voice, audio, and music integration), plus the
|
|
87
87
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
88
88
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -146,7 +146,7 @@ state = rt.resume(
|
|
|
146
146
|
assert state.status.value == "completed"
|
|
147
147
|
```
|
|
148
148
|
|
|
149
|
-
## What’s included (v0.7.
|
|
149
|
+
## What’s included (v0.7.3)
|
|
150
150
|
|
|
151
151
|
Kernel (import-light):
|
|
152
152
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -4,7 +4,7 @@
|
|
|
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.
|
|
7
|
+
**Version:** 0.7.3 • **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
|
|
|
@@ -32,7 +32,7 @@ Remote-light runtime:
|
|
|
32
32
|
pip install abstractruntime
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
The base install includes AbstractCore 2.19.
|
|
35
|
+
The base install includes AbstractCore 2.19.2 or newer (its light install:
|
|
36
36
|
remote providers, tools, vision, voice, audio, and music integration), plus the
|
|
37
37
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
38
38
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -96,7 +96,7 @@ state = rt.resume(
|
|
|
96
96
|
assert state.status.value == "completed"
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
## What’s included (v0.7.
|
|
99
|
+
## What’s included (v0.7.3)
|
|
100
100
|
|
|
101
101
|
Kernel (import-light):
|
|
102
102
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -277,7 +277,7 @@ from Core route resolution and persisted from `LLM_CALL` results.
|
|
|
277
277
|
|
|
278
278
|
### AbstractCore (LLM + tools)
|
|
279
279
|
|
|
280
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.19.
|
|
280
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.19.2 or newer is part of the base install).
|
|
281
281
|
|
|
282
282
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
283
283
|
|
|
@@ -324,7 +324,8 @@ Multimodal support:
|
|
|
324
324
|
- remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
|
|
325
325
|
- generated image/video/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
326
326
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
327
|
-
-
|
|
327
|
+
- 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`)
|
|
328
|
+
- optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; local media warmup that no capability plugin can serve (`image_generation`, `image_upscale`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, `music_generation`) reports `requires_long_lived_server=true`, and image/video tasks also report `execution_mode="local_one_shot_subprocess"`
|
|
328
329
|
- Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected local-inference profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
|
|
329
330
|
|
|
330
331
|
Prompt cache / cached sessions:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AbstractRuntime — Architecture
|
|
2
2
|
|
|
3
3
|
> Updated: 2026-09-29
|
|
4
|
-
> Version: 0.7.
|
|
4
|
+
> Version: 0.7.3
|
|
5
5
|
> Scope: this describes **what is implemented in this repository**.
|
|
6
6
|
|
|
7
7
|
AbstractRuntime is a **durable workflow runtime**: it executes workflow graphs as a persisted state machine with explicit waits (user, time, events, jobs, subworkflows). A run can pause for hours/days and resume **without** keeping Python stacks/coroutines alive.
|
|
@@ -26,7 +26,8 @@ sources), `abstractruntime.automation_queries` (listing), `abstractruntime.sessi
|
|
|
26
26
|
- **Automations are quiet.** An occurrence asks for attention only when its output says `notify`, when it still
|
|
27
27
|
fails after its last retry, or while it waits on a person.
|
|
28
28
|
- **Creating an automation is consent for its tools.** With the default `tool_approval: "auto"` an occurrence's tools
|
|
29
|
-
run without asking; set `"ask"` to
|
|
29
|
+
run without asking, except messages to anyone but the registered user (those wait for approval); set `"ask"` to
|
|
30
|
+
approve every batch.
|
|
30
31
|
- **Everything is recorded.** Every admission, dispatch, retry, completion and command is an `automation.*` record in
|
|
31
32
|
the controller's ledger. A crash at any point never loses an occurrence and never starts one twice.
|
|
32
33
|
|
|
@@ -413,6 +414,15 @@ returns the refusal message for a tool, or `None` when it is allowed.
|
|
|
413
414
|
- A name outside the run's tool ceiling (`allowed_tools`) grants nothing: approval never widens the ceiling.
|
|
414
415
|
- A tool outside `TOOL_EFFECT_CLASSES` (a third-party MCP tool, for example) is not in the grant and still asks.
|
|
415
416
|
- A `tool_policy` that the target's own `input_data._runtime` already carries is left as it is.
|
|
417
|
+
- **Tools that message model-chosen recipients are never granted** (framework backlog 0992 WP0): every tool
|
|
418
|
+
whose inventory row carries `comms_send` (`send_email`, `send_whatsapp_message`, `send_telegram_message`,
|
|
419
|
+
`send_telegram_artifact`), even when `allowed_tools` names it. They are listed in the grant's
|
|
420
|
+
`withheld_tools` and go through the normal approval point: a `send_email` whose every recipient is the
|
|
421
|
+
registered user's address (`_runtime.operator_email`, set by the host; the gateway freezes it into the
|
|
422
|
+
target's inputs) runs; any other recipient parks the occurrence on a `tool_approval` wait, as under `"ask"`,
|
|
423
|
+
until a person approves or refuses it. An occurrence that reads untrusted text (an inbound email, a fetched
|
|
424
|
+
page) therefore cannot mail data to an address that text names. When the inventory cannot be read, every
|
|
425
|
+
`comms` tool is withheld.
|
|
416
426
|
- **`"ask"`.** No grant. A tool call that needs approval waits on a `tool_approval` wait, as in a chat.
|
|
417
427
|
|
|
418
428
|
The grant is frozen with the rest of the occurrence's inputs: a revision of `tool_approval` applies from the next
|
|
@@ -79,8 +79,12 @@ Docs: `automations.md#runs-sessions-and-history`, `api.md#sessions-and-history`.
|
|
|
79
79
|
|
|
80
80
|
Not by default. With `policy.tool_approval: "auto"`, creating the automation is the consent: each occurrence gets a
|
|
81
81
|
frozen grant for the target's tools (its `allowed_tools`, or every tool the runtime classifies). Tools the runtime
|
|
82
|
-
does not classify, such as third-party MCP tools, still ask, and `ask_user` questions still wait for a person.
|
|
83
|
-
|
|
82
|
+
does not classify, such as third-party MCP tools, still ask, and `ask_user` questions still wait for a person.
|
|
83
|
+
Tools that send messages to recipients the model chooses (`send_email`, `send_whatsapp_message`,
|
|
84
|
+
`send_telegram_*`) are never in the grant: a `send_email` to the registered user's own address runs, any other
|
|
85
|
+
recipient waits for approval, so text an occurrence reads (an inbound email, a web page) cannot make it mail data
|
|
86
|
+
elsewhere. Use `"ask"` to approve each tool batch; pending approvals appear in `pending_waits` as `tool_approval`
|
|
87
|
+
waits.
|
|
84
88
|
|
|
85
89
|
Docs: `automations.md#tool-approval`, `automations.md#waits-on-a-person`.
|
|
86
90
|
|
|
@@ -282,9 +286,9 @@ Docs: `integrations/abstractcore.md`. Code: `src/abstractruntime/integrations/ab
|
|
|
282
286
|
|
|
283
287
|
## Why can local media residency return `ok:false` without failing the run?
|
|
284
288
|
|
|
285
|
-
Because local media
|
|
289
|
+
Because a local media load can fail or have nothing to load into: no capability plugin serves the task, or the plugin refused the model. Runtime reports that explicitly instead of pretending success. A load that succeeds is used: local image and video requests normally run in a one-shot subprocess (crash isolation, one model load per request), but a request whose model is resident runs in-process on the loaded pipeline (`execution_mode="resident_in_process"`).
|
|
286
290
|
|
|
287
|
-
For optional residency (`required=false`), the effect still completes durably but includes `status_hint="warning"` and `degraded=true`. Unsupported local media responses also report `requires_long_lived_server=true` and a `config_hint` that points at `ABSTRACTCORE_SERVER_BASE_URL`; image generation additionally reports `execution_mode="local_one_shot_subprocess"
|
|
291
|
+
For optional residency (`required=false`), the effect still completes durably but includes `status_hint="warning"` and `degraded=true`. Unsupported local media responses also report `requires_long_lived_server=true` and a `config_hint` that points at `ABSTRACTCORE_SERVER_BASE_URL`; image generation additionally reports `execution_mode="local_one_shot_subprocess"`, the path those requests then take.
|
|
288
292
|
Docs: `integrations/abstractcore.md`. Code: `src/abstractruntime/integrations/abstractcore/effect_handlers.py`, `src/abstractruntime/integrations/abstractcore/llm_client.py`.
|
|
289
293
|
|
|
290
294
|
## What are “local / remote / hybrid” execution modes?
|
|
@@ -301,7 +301,9 @@ Media-only normalized results distinguish orchestration identity from the actual
|
|
|
301
301
|
- `runtime_provider` / `runtime_model`: the runtime-side orchestration identity, when relevant
|
|
302
302
|
- `media_provider` / `media_model`: the actual image/video/voice/music backend identity surfaced from the generated output
|
|
303
303
|
|
|
304
|
-
|
|
304
|
+
Local image and video generation runs in a one-shot subprocess by default: a native backend failure (a Metal abort, a CUDA crash) ends the worker, not the Gateway/Runtime process, and the worker's memory is returned when it exits. The price is a full model load per request. Runtime metadata records `execution_mode="local_one_shot_subprocess"`.
|
|
305
|
+
|
|
306
|
+
A model you load explicitly (`load_model_residency(task="image_generation", provider=..., model=...)`, the Gateway's `POST /models/load`, the console Load button, a flow's model residency node) is the exception: when every media output of a request names a model resident in the client's capability residency core, the request runs in-process on that loaded pipeline, with no subprocess and no second copy of the weights. The metadata then records `execution_mode="resident_in_process"` and `resident_load_ids`. A pooled client of `create_local_runtime(...)` uses its pool's residency core. Unloading the model (`unload_model_residency`, `POST /models/unload`) returns generation to the subprocess. Requests for a model that is not resident keep the subprocess, so an explicit load is how you opt into in-process execution for that model.
|
|
305
307
|
|
|
306
308
|
Long-running generated media may expose provider progress callbacks. Runtime offers a transient `on_progress` callback during `LLM_CALL` execution and persists each callback as an `EMIT_EVENT` ledger record named `abstract.progress`. The callback itself is never stored in the effect payload or run vars.
|
|
307
309
|
|
|
@@ -335,13 +337,13 @@ Remote runtimes support chat media by sending OpenAI-compatible data URL content
|
|
|
335
337
|
|
|
336
338
|
Remote multimodal generation currently supports one `output` selector per `LLM_CALL`. Hybrid runtimes use the same remote LLM/media path as remote mode while executing tools locally. Local runtimes can use AbstractCore's in-process multimodal dispatcher for richer capability plugin behavior.
|
|
337
339
|
|
|
338
|
-
Local media residency
|
|
340
|
+
Local media residency goes through the installed AbstractCore capability plugins (AbstractVision for image/upscale/video, AbstractVoice for TTS/STT, AbstractMusic for music): `load_model_residency` preloads the model in-process and `list_model_residency` lists it. When no plugin can serve the task, the result is explicit rather than a pretend success:
|
|
339
341
|
|
|
340
342
|
- `code="model_residency_unsupported"`
|
|
341
343
|
- `requires_long_lived_server=true`
|
|
342
344
|
- `config_hint` pointing to `ABSTRACTCORE_SERVER_BASE_URL`
|
|
343
345
|
|
|
344
|
-
Image/video-generation
|
|
346
|
+
Image/video-generation unsupported responses also include `execution_mode="local_one_shot_subprocess"`, the path those requests then take.
|
|
345
347
|
|
|
346
348
|
When the workflow marks residency as optional (`required=false`), the effect still completes durably but includes `status_hint="warning"` and `degraded=true` so hosts can render the no-op honestly.
|
|
347
349
|
|
|
@@ -20,7 +20,7 @@ Fix:
|
|
|
20
20
|
- Install or upgrade the base Runtime package. LLM/tools integration, common
|
|
21
21
|
remote-light multimodal dependencies, and the MCP worker entry point are part
|
|
22
22
|
of the base install.
|
|
23
|
-
- The current AbstractCore integration expects `abstractcore>=2.19.
|
|
23
|
+
- The current AbstractCore integration expects `abstractcore>=2.19.2`.
|
|
24
24
|
|
|
25
25
|
Verify:
|
|
26
26
|
|
|
@@ -52,7 +52,7 @@ See llms.txt for the linked index.
|
|
|
52
52
|
|
|
53
53
|
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.
|
|
54
54
|
|
|
55
|
-
**Version:** 0.7.
|
|
55
|
+
**Version:** 0.7.3 • **Python:** 3.10+
|
|
56
56
|
|
|
57
57
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
58
58
|
|
|
@@ -80,7 +80,7 @@ Remote-light runtime:
|
|
|
80
80
|
pip install abstractruntime
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
The base install includes AbstractCore 2.19.
|
|
83
|
+
The base install includes AbstractCore 2.19.2 or newer (its light install:
|
|
84
84
|
remote providers, tools, vision, voice, audio, and music integration), plus the
|
|
85
85
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
86
86
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -144,7 +144,7 @@ state = rt.resume(
|
|
|
144
144
|
assert state.status.value == "completed"
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
## What’s included (v0.7.
|
|
147
|
+
## What’s included (v0.7.3)
|
|
148
148
|
|
|
149
149
|
Kernel (import-light):
|
|
150
150
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -430,7 +430,7 @@ rt = create_local_runtime(provider="ollama", model="qwen3:4b")
|
|
|
430
430
|
# AbstractRuntime — Architecture
|
|
431
431
|
|
|
432
432
|
> Updated: 2026-09-29
|
|
433
|
-
> Version: 0.7.
|
|
433
|
+
> Version: 0.7.3
|
|
434
434
|
> Scope: this describes **what is implemented in this repository**.
|
|
435
435
|
|
|
436
436
|
AbstractRuntime is a **durable workflow runtime**: it executes workflow graphs as a persisted state machine with explicit waits (user, time, events, jobs, subworkflows). A run can pause for hours/days and resume **without** keeping Python stacks/coroutines alive.
|
|
@@ -1132,7 +1132,7 @@ from Core route resolution and persisted from `LLM_CALL` results.
|
|
|
1132
1132
|
|
|
1133
1133
|
### AbstractCore (LLM + tools)
|
|
1134
1134
|
|
|
1135
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.19.
|
|
1135
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.19.2 or newer is part of the base install).
|
|
1136
1136
|
|
|
1137
1137
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
1138
1138
|
|
|
@@ -1179,7 +1179,8 @@ Multimodal support:
|
|
|
1179
1179
|
- remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
|
|
1180
1180
|
- generated image/video/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
1181
1181
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
1182
|
-
-
|
|
1182
|
+
- 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`)
|
|
1183
|
+
- optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; local media warmup that no capability plugin can serve (`image_generation`, `image_upscale`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, `music_generation`) reports `requires_long_lived_server=true`, and image/video tasks also report `execution_mode="local_one_shot_subprocess"`
|
|
1183
1184
|
- Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected local-inference profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
|
|
1184
1185
|
|
|
1185
1186
|
Prompt cache / cached sessions:
|
|
@@ -1306,8 +1307,12 @@ Docs: `automations.md#runs-sessions-and-history`, `api.md#sessions-and-history`.
|
|
|
1306
1307
|
|
|
1307
1308
|
Not by default. With `policy.tool_approval: "auto"`, creating the automation is the consent: each occurrence gets a
|
|
1308
1309
|
frozen grant for the target's tools (its `allowed_tools`, or every tool the runtime classifies). Tools the runtime
|
|
1309
|
-
does not classify, such as third-party MCP tools, still ask, and `ask_user` questions still wait for a person.
|
|
1310
|
-
|
|
1310
|
+
does not classify, such as third-party MCP tools, still ask, and `ask_user` questions still wait for a person.
|
|
1311
|
+
Tools that send messages to recipients the model chooses (`send_email`, `send_whatsapp_message`,
|
|
1312
|
+
`send_telegram_*`) are never in the grant: a `send_email` to the registered user's own address runs, any other
|
|
1313
|
+
recipient waits for approval, so text an occurrence reads (an inbound email, a web page) cannot make it mail data
|
|
1314
|
+
elsewhere. Use `"ask"` to approve each tool batch; pending approvals appear in `pending_waits` as `tool_approval`
|
|
1315
|
+
waits.
|
|
1311
1316
|
|
|
1312
1317
|
Docs: `automations.md#tool-approval`, `automations.md#waits-on-a-person`.
|
|
1313
1318
|
|
|
@@ -1509,9 +1514,9 @@ Docs: `integrations/abstractcore.md`. Code: `src/abstractruntime/integrations/ab
|
|
|
1509
1514
|
|
|
1510
1515
|
## Why can local media residency return `ok:false` without failing the run?
|
|
1511
1516
|
|
|
1512
|
-
Because local media
|
|
1517
|
+
Because a local media load can fail or have nothing to load into: no capability plugin serves the task, or the plugin refused the model. Runtime reports that explicitly instead of pretending success. A load that succeeds is used: local image and video requests normally run in a one-shot subprocess (crash isolation, one model load per request), but a request whose model is resident runs in-process on the loaded pipeline (`execution_mode="resident_in_process"`).
|
|
1513
1518
|
|
|
1514
|
-
For optional residency (`required=false`), the effect still completes durably but includes `status_hint="warning"` and `degraded=true`. Unsupported local media responses also report `requires_long_lived_server=true` and a `config_hint` that points at `ABSTRACTCORE_SERVER_BASE_URL`; image generation additionally reports `execution_mode="local_one_shot_subprocess"
|
|
1519
|
+
For optional residency (`required=false`), the effect still completes durably but includes `status_hint="warning"` and `degraded=true`. Unsupported local media responses also report `requires_long_lived_server=true` and a `config_hint` that points at `ABSTRACTCORE_SERVER_BASE_URL`; image generation additionally reports `execution_mode="local_one_shot_subprocess"`, the path those requests then take.
|
|
1515
1520
|
Docs: `integrations/abstractcore.md`. Code: `src/abstractruntime/integrations/abstractcore/effect_handlers.py`, `src/abstractruntime/integrations/abstractcore/llm_client.py`.
|
|
1516
1521
|
|
|
1517
1522
|
## What are “local / remote / hybrid” execution modes?
|
|
@@ -1633,7 +1638,7 @@ Fix:
|
|
|
1633
1638
|
- Install or upgrade the base Runtime package. LLM/tools integration, common
|
|
1634
1639
|
remote-light multimodal dependencies, and the MCP worker entry point are part
|
|
1635
1640
|
of the base install.
|
|
1636
|
-
- The current AbstractCore integration expects `abstractcore>=2.19.
|
|
1641
|
+
- The current AbstractCore integration expects `abstractcore>=2.19.2`.
|
|
1637
1642
|
|
|
1638
1643
|
Verify:
|
|
1639
1644
|
|
|
@@ -2217,7 +2222,9 @@ Media-only normalized results distinguish orchestration identity from the actual
|
|
|
2217
2222
|
- `runtime_provider` / `runtime_model`: the runtime-side orchestration identity, when relevant
|
|
2218
2223
|
- `media_provider` / `media_model`: the actual image/video/voice/music backend identity surfaced from the generated output
|
|
2219
2224
|
|
|
2220
|
-
|
|
2225
|
+
Local image and video generation runs in a one-shot subprocess by default: a native backend failure (a Metal abort, a CUDA crash) ends the worker, not the Gateway/Runtime process, and the worker's memory is returned when it exits. The price is a full model load per request. Runtime metadata records `execution_mode="local_one_shot_subprocess"`.
|
|
2226
|
+
|
|
2227
|
+
A model you load explicitly (`load_model_residency(task="image_generation", provider=..., model=...)`, the Gateway's `POST /models/load`, the console Load button, a flow's model residency node) is the exception: when every media output of a request names a model resident in the client's capability residency core, the request runs in-process on that loaded pipeline, with no subprocess and no second copy of the weights. The metadata then records `execution_mode="resident_in_process"` and `resident_load_ids`. A pooled client of `create_local_runtime(...)` uses its pool's residency core. Unloading the model (`unload_model_residency`, `POST /models/unload`) returns generation to the subprocess. Requests for a model that is not resident keep the subprocess, so an explicit load is how you opt into in-process execution for that model.
|
|
2221
2228
|
|
|
2222
2229
|
Long-running generated media may expose provider progress callbacks. Runtime offers a transient `on_progress` callback during `LLM_CALL` execution and persists each callback as an `EMIT_EVENT` ledger record named `abstract.progress`. The callback itself is never stored in the effect payload or run vars.
|
|
2223
2230
|
|
|
@@ -2251,13 +2258,13 @@ Remote runtimes support chat media by sending OpenAI-compatible data URL content
|
|
|
2251
2258
|
|
|
2252
2259
|
Remote multimodal generation currently supports one `output` selector per `LLM_CALL`. Hybrid runtimes use the same remote LLM/media path as remote mode while executing tools locally. Local runtimes can use AbstractCore's in-process multimodal dispatcher for richer capability plugin behavior.
|
|
2253
2260
|
|
|
2254
|
-
Local media residency
|
|
2261
|
+
Local media residency goes through the installed AbstractCore capability plugins (AbstractVision for image/upscale/video, AbstractVoice for TTS/STT, AbstractMusic for music): `load_model_residency` preloads the model in-process and `list_model_residency` lists it. When no plugin can serve the task, the result is explicit rather than a pretend success:
|
|
2255
2262
|
|
|
2256
2263
|
- `code="model_residency_unsupported"`
|
|
2257
2264
|
- `requires_long_lived_server=true`
|
|
2258
2265
|
- `config_hint` pointing to `ABSTRACTCORE_SERVER_BASE_URL`
|
|
2259
2266
|
|
|
2260
|
-
Image/video-generation
|
|
2267
|
+
Image/video-generation unsupported responses also include `execution_mode="local_one_shot_subprocess"`, the path those requests then take.
|
|
2261
2268
|
|
|
2262
2269
|
When the workflow marks residency as optional (`required=false`), the effect still completes durably but includes `status_hint="warning"` and `degraded=true` so hosts can render the no-op honestly.
|
|
2263
2270
|
|
|
@@ -3495,7 +3502,8 @@ sources), `abstractruntime.automation_queries` (listing), `abstractruntime.sessi
|
|
|
3495
3502
|
- **Automations are quiet.** An occurrence asks for attention only when its output says `notify`, when it still
|
|
3496
3503
|
fails after its last retry, or while it waits on a person.
|
|
3497
3504
|
- **Creating an automation is consent for its tools.** With the default `tool_approval: "auto"` an occurrence's tools
|
|
3498
|
-
run without asking; set `"ask"` to
|
|
3505
|
+
run without asking, except messages to anyone but the registered user (those wait for approval); set `"ask"` to
|
|
3506
|
+
approve every batch.
|
|
3499
3507
|
- **Everything is recorded.** Every admission, dispatch, retry, completion and command is an `automation.*` record in
|
|
3500
3508
|
the controller's ledger. A crash at any point never loses an occurrence and never starts one twice.
|
|
3501
3509
|
|
|
@@ -3882,6 +3890,15 @@ returns the refusal message for a tool, or `None` when it is allowed.
|
|
|
3882
3890
|
- A name outside the run's tool ceiling (`allowed_tools`) grants nothing: approval never widens the ceiling.
|
|
3883
3891
|
- A tool outside `TOOL_EFFECT_CLASSES` (a third-party MCP tool, for example) is not in the grant and still asks.
|
|
3884
3892
|
- A `tool_policy` that the target's own `input_data._runtime` already carries is left as it is.
|
|
3893
|
+
- **Tools that message model-chosen recipients are never granted** (framework backlog 0992 WP0): every tool
|
|
3894
|
+
whose inventory row carries `comms_send` (`send_email`, `send_whatsapp_message`, `send_telegram_message`,
|
|
3895
|
+
`send_telegram_artifact`), even when `allowed_tools` names it. They are listed in the grant's
|
|
3896
|
+
`withheld_tools` and go through the normal approval point: a `send_email` whose every recipient is the
|
|
3897
|
+
registered user's address (`_runtime.operator_email`, set by the host; the gateway freezes it into the
|
|
3898
|
+
target's inputs) runs; any other recipient parks the occurrence on a `tool_approval` wait, as under `"ask"`,
|
|
3899
|
+
until a person approves or refuses it. An occurrence that reads untrusted text (an inbound email, a fetched
|
|
3900
|
+
page) therefore cannot mail data to an address that text names. When the inventory cannot be read, every
|
|
3901
|
+
`comms` tool is withheld.
|
|
3885
3902
|
- **`"ask"`.** No grant. A tool call that needs approval waits on a `tool_approval` wait, as in a chat.
|
|
3886
3903
|
|
|
3887
3904
|
The grant is frozen with the rest of the occurrence's inputs: a revision of `tool_approval` applies from the next
|
|
@@ -5266,7 +5283,7 @@ The canonical dependency list lives in `pyproject.toml`.
|
|
|
5266
5283
|
- **AbstractMemory** (`>=0.3.0`) — TripleStore models and store contract used by Runtime's `MEMORY_KG_*` effects. Durable/vector backend dependencies such as LanceDB remain selected by hosts.
|
|
5267
5284
|
|
|
5268
5285
|
## Runtime integrations
|
|
5269
|
-
- **abstractcore** (`abstractcore>=2.19.
|
|
5286
|
+
- **abstractcore** (`abstractcore>=2.19.2`) — LLM, tools, media, and capability integration used by the base `abstractruntime` install (AbstractCore's light install); the `apple` and `gpu` extras select `abstractcore[apple]` / `abstractcore[gpu]` at the same floor (declared in `pyproject.toml`, implementation under `src/abstractruntime/integrations/abstractcore/*`, docs: `docs/integrations/abstractcore.md`).
|
|
5270
5287
|
- The AbstractCore integration uses **httpx** for remote mode (`src/abstractruntime/integrations/abstractcore/llm_client.py`) and **pydantic** for structured validation (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`). These are provided by AbstractCore’s dependency set.
|
|
5271
5288
|
- The `tools` extra of AbstractCore backs the base Runtime toolset and the `abstractruntime-mcp-worker` entry point.
|
|
5272
5289
|
- **RestrictedPython** (`>=7.0`, core install) — sandbox for VisualFlow “Code” nodes and pin expressions (`src/abstractruntime/visualflow_compiler/visual/code_executor.py`).
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
> Durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
|
|
4
4
|
|
|
5
5
|
- Python: 3.10+ (see `pyproject.toml`)
|
|
6
|
-
- Version: 0.7.
|
|
6
|
+
- Version: 0.7.3
|
|
7
7
|
- Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella, integrates with [AbstractCore](https://github.com/lpalbou/abstractcore)
|
|
8
8
|
- Hard invariant: `RunState.vars` must be JSON-serializable (`src/abstractruntime/core/models.py`)
|
|
9
|
-
- Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.19.
|
|
9
|
+
- Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.19.2 or newer with its light install (remote providers, tools and the MCP worker, media routing); `abstractruntime[apple]` and `abstractruntime[gpu]` require AbstractCore's `apple` and `gpu` settings (`pyproject.toml`)
|
|
10
10
|
- Install profiles: base `abstractruntime` is remote-light with MCP, generated media routing, and Runtime-owned permissive PDF read/write nodes; `abstractruntime[apple]` and `abstractruntime[gpu]` add local inferencer stacks.
|
|
11
11
|
- Config boundary: Runtime does not read `ABSTRACTGATEWAY_*`; Gateway-owned config should be translated into explicit Runtime inputs or Runtime-owned env names. Hosts can attach `resolve_provider_endpoint_profile(provider_id)` to the LLM client; Runtime treats it as an optional resolver hook, injects transient provider/base URL/key params for the call, and redacts secret-like params from persisted observability.
|
|
12
12
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "AbstractRuntime"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.3"
|
|
8
8
|
description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -50,8 +50,10 @@ dependencies = [
|
|
|
50
50
|
# Runtime's base install is the remote-light workflow host: LLM/tool effects,
|
|
51
51
|
# MCP worker support, and multimodal routing come with AbstractCore's light
|
|
52
52
|
# install (remote providers, built-in tools, media inputs, voice/vision/music
|
|
53
|
-
# plugins) without selecting local inference engines.
|
|
54
|
-
|
|
53
|
+
# plugins) without selecting local inference engines. 2.19.2 floors
|
|
54
|
+
# abstractvision>=0.3.33, whose resident loads report `loaded_new` and whose
|
|
55
|
+
# unload frees the pipeline (the resident media path relies on both).
|
|
56
|
+
"abstractcore>=2.19.2",
|
|
55
57
|
"openai<3.0.0,>=1.109.1",
|
|
56
58
|
"httpx<1.0.0,>=0.28.1",
|
|
57
59
|
"anyio<5.0.0,>=4.12.1",
|
|
@@ -68,12 +70,12 @@ dependencies = [
|
|
|
68
70
|
|
|
69
71
|
[project.optional-dependencies]
|
|
70
72
|
apple = [
|
|
71
|
-
"abstractcore[apple]>=2.19.
|
|
73
|
+
"abstractcore[apple]>=2.19.2",
|
|
72
74
|
"setuptools<82.0.0,>=80.10.2",
|
|
73
75
|
]
|
|
74
76
|
|
|
75
77
|
gpu = [
|
|
76
|
-
"abstractcore[gpu]>=2.19.
|
|
78
|
+
"abstractcore[gpu]>=2.19.2",
|
|
77
79
|
# vLLM 0.9-0.19 caps setuptools below 80; 77.0.3 is still a modern floor.
|
|
78
80
|
"setuptools<82.0.0,>=77.0.3",
|
|
79
81
|
]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
### Security
|
|
2
|
+
|
|
3
|
+
- **An automation's tool grant no longer pre-approves sending messages** (framework backlog 0992
|
|
4
|
+
WP0). With the default `policy.tool_approval: "auto"`, the grant listed every tool the runtime
|
|
5
|
+
classifies, `send_email` included, and an explicit name in the grant overrides the
|
|
6
|
+
`model_controlled_destination` belt: an occurrence that read an inbound email or a web page could
|
|
7
|
+
mail data to any address that text named. The grant now withholds every tool whose inventory row
|
|
8
|
+
carries `comms_send` (`send_email`, `send_whatsapp_message`, `send_telegram_message`,
|
|
9
|
+
`send_telegram_artifact`), even when the target's `allowed_tools` names it, and lists them in
|
|
10
|
+
`tool_policy.withheld_tools`. Their calls take the normal approval point: a `send_email` whose
|
|
11
|
+
every recipient is the registered user's address (`_runtime.operator_email`) still runs
|
|
12
|
+
unattended; any other recipient parks the occurrence on a `tool_approval` wait until a person
|
|
13
|
+
approves or refuses it (the behaviour of `"ask"`). Recipients named in an automation's definition
|
|
14
|
+
are not auto-approved yet; that allowlist is part of backlog 0992.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **A resident image/video model serves generation.** After `load_model_residency(task="image_generation")`
|
|
19
|
+
(the Gateway's `POST /models/load`, the console Load button, a flow's model residency node), a local
|
|
20
|
+
image or video request whose every media output names a resident model runs in-process on the loaded
|
|
21
|
+
pipeline (`execution_mode="resident_in_process"`, `resident_load_ids`) instead of loading the model
|
|
22
|
+
again in a one-shot subprocess. Measured through AbstractGateway with FLUX.2 [klein] 4B on a 16 GB
|
|
23
|
+
NVIDIA card: 17-19 s per image on the resident pipeline against 54-59 s with a reload per request, and
|
|
24
|
+
no second copy of the weights on the GPU. Pooled clients of `create_local_runtime(...)` use their pool's residency core. Models that
|
|
25
|
+
were not explicitly loaded keep the isolated subprocess (crash isolation for native Metal/CUDA
|
|
26
|
+
failures), so the explicit load is the opt-in.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **Requires AbstractCore 2.19.2 or newer** (`abstractcore`, `abstractcore[apple]`, `abstractcore[gpu]`).
|
|
31
|
+
It brings AbstractVision 0.3.33, whose loads report `loaded_new` (a fresh image-model load reads as
|
|
32
|
+
`loaded`, not `already_loaded`) and whose unload frees the model's memory, which the resident path
|
|
33
|
+
above relies on.
|
{abstractruntime-0.7.2 → abstractruntime-0.7.3}/src/abstractruntime/automations/controller.py
RENAMED
|
@@ -193,6 +193,24 @@ def _render_prompt(input_data: Dict[str, Any], *, envelope: Dict[str, Any], inde
|
|
|
193
193
|
AUTOMATION_GRANT_SOURCE = "automation-policy"
|
|
194
194
|
|
|
195
195
|
|
|
196
|
+
def _grant_excludes(name: str) -> bool:
|
|
197
|
+
"""True for a tool the automation grant never pre-approves: one that sends a message people
|
|
198
|
+
receive to recipients the MODEL chooses (the served row's `comms_send` fact: `send_email`,
|
|
199
|
+
`send_whatsapp_message`, `send_telegram_*`). Framework backlog 0992 WP0: an unattended
|
|
200
|
+
occurrence reading untrusted input (an inbound email, a fetched page) must not be able to mail
|
|
201
|
+
data to an address that input names. Decided on the row's typed facts, never on the name; an
|
|
202
|
+
unreadable inventory withholds every `comms` tool (fail closed)."""
|
|
203
|
+
try:
|
|
204
|
+
from ..integrations.abstractcore.effect_handlers import _risk_row_for_tool
|
|
205
|
+
|
|
206
|
+
row = _risk_row_for_tool(name)
|
|
207
|
+
except Exception: # noqa: BLE001 - no facts: withhold the whole comms class
|
|
208
|
+
from ..integrations.abstractcore.tool_effects import COMMS, TOOL_EFFECT_CLASSES
|
|
209
|
+
|
|
210
|
+
return TOOL_EFFECT_CLASSES.get(name) == COMMS
|
|
211
|
+
return bool(row is not None and row.get("comms_send"))
|
|
212
|
+
|
|
213
|
+
|
|
196
214
|
def grant_tool_approval(input_data: Dict[str, Any]) -> None:
|
|
197
215
|
"""`policy.tool_approval == "auto"`: pre-approve the target's tools for this occurrence.
|
|
198
216
|
|
|
@@ -204,6 +222,13 @@ def grant_tool_approval(input_data: Dict[str, Any]) -> None:
|
|
|
204
222
|
outside the run's tool ceiling grants nothing. A tool_policy the target
|
|
205
223
|
already carries is the target author's word and is left untouched.
|
|
206
224
|
`ask_user` questions are not tool approvals and still wait for a person.
|
|
225
|
+
|
|
226
|
+
Never granted (listed in `withheld_tools`): tools that send messages to
|
|
227
|
+
model-chosen recipients (`_grant_excludes`). Their calls go through the
|
|
228
|
+
normal approval point: the per-call refiner still auto-approves a
|
|
229
|
+
`send_email` whose every recipient is the registered user's own address
|
|
230
|
+
(`_runtime.operator_email`, set by the host); any other recipient parks the
|
|
231
|
+
occurrence on a `tool_approval` wait, exactly as under `"ask"`.
|
|
207
232
|
"""
|
|
208
233
|
from ..integrations.abstractcore.tool_effects import TOOL_EFFECT_CLASSES
|
|
209
234
|
|
|
@@ -212,10 +237,12 @@ def grant_tool_approval(input_data: Dict[str, Any]) -> None:
|
|
|
212
237
|
return
|
|
213
238
|
allowed = runtime_ns.get("allowed_tools")
|
|
214
239
|
names = allowed if isinstance(allowed, list) else list(TOOL_EFFECT_CLASSES)
|
|
215
|
-
|
|
240
|
+
candidates = sorted({n.strip() for n in names if isinstance(n, str) and n.strip()})
|
|
241
|
+
withheld = [n for n in candidates if _grant_excludes(n)]
|
|
242
|
+
tools = [n for n in candidates if n not in withheld]
|
|
216
243
|
input_data["_runtime"] = {
|
|
217
244
|
**runtime_ns,
|
|
218
|
-
"tool_policy": {"auto_approve_tools": tools, "source": AUTOMATION_GRANT_SOURCE},
|
|
245
|
+
"tool_policy": {"auto_approve_tools": tools, "withheld_tools": withheld, "source": AUTOMATION_GRANT_SOURCE},
|
|
219
246
|
}
|
|
220
247
|
|
|
221
248
|
|