AbstractRuntime 0.10.2__tar.gz → 0.10.4__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.10.2 → abstractruntime-0.10.4}/CHANGELOG.md +29 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/PKG-INFO +1 -1
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/api.md +2 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/llms-full.txt +2 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/pyproject.toml +1 -1
- abstractruntime-0.10.4/release-notes.md +15 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +11 -41
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/llm_client.py +25 -1
- abstractruntime-0.10.4/tests/test_endpoint_profile_media_in_process.py +45 -0
- abstractruntime-0.10.4/tests/test_endpoint_profile_media_specs_keep_provider.py +153 -0
- abstractruntime-0.10.2/release-notes.md +0 -19
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/.gitignore +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/LICENSE +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/ROADMAP.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/SECURITY.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/adr/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/architecture.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/artifacts.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/automations.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_portability/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/email.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/entity-runtime.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/evidence.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/faq.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/getting-started.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/integrations/abstractcore.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/limits.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/manual_testing.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/proposal.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/provenance.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/snapshots.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/tool-approval.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/tools-comms.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/troubleshooting.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/examples/05_persistence.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/examples/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/llms.txt +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/mkdocs.yml +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/pytest.ini +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/scripts/backfill_diary_edges.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/scripts/generate_llms_full.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automation_queries.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/adapters.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/attention.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/bundle.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/commands.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/controller.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/ledger.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/models.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/automations/service.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/effect_cancellation.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/health.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/live_deltas.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/progress_channel.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/run_attribution.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/run_identity.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/tool_scope.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/documents/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/documents/charts.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/documents/docx.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/documents/pdf.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/email/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/email/actions.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/email/automations.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/email/binding.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/email/feeder.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/email/frame.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/email/inbox.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/act_only.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/chat.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/communities.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/diary.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/digest.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/entity_runtime.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/lease.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/life.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/memory_reader.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/night_voice.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/phase_graph.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/phase_spec.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/prelude.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/prompt_overlay.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/reflection.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/substrate.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/tool_effects.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/tool_policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/tools.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/identity/visit_workflow.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/scheduler/multi_store.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/session_history.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/session_turns.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/lease.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/ledger_slim.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/serialize.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/storage/steer_sidecar.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/triggers/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/triggers/email_received.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/triggers/manual.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/triggers/protocol.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/triggers/registry.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/triggers/schedule.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/turn_grounding.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/utils/atomic_files.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/README.md +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/automation_harness.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/conftest.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/email_wp2_support.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/fixtures/schedule_v1_corpus.json +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/live_email/conftest.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/live_email/live_email_support.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/live_email/test_email_live_runtime.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_abstractcore_server_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_abstractcore_structured_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_active_index.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_agora_agent_alias_identity.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_agora_tools_http.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_analyze_media_addressing_and_walling.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_calendar_schedule.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_commands.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_controller.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_controller_recovery.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_definition.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_discussion_isolation.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_email_results.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_growing_context.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_index.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_next_fire.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_occurrence_input_resolver.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_occurrence_recovery.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_replay_read_only.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_retry.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_session_turns.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_status.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_automation_tool_approval.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_browser_probe_target_walling.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_budget_law_no_unrequested_caps.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_capability_default_reasoning.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_code_node_imports.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_code_node_restricted_python.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_command_sandbox_host_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_command_store.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_compaction_summarizer_route.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_config_facade_models_engines.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_config_facade_voice_input_hint.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_controller_bundle_packaged.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_crash_ordering_inversions.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_create_if_absent.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_data_registry_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_default_tools_camera_gating.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_default_tools_include_skim_web.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_diary_capture.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_diary_write_rescue.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_directory_lease.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_disabled_toolsets_seam.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_discovery_survives_unbuildable_default.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_discovery_tts_unavailable_reason.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_discovery_voice_openai_api_key.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_discussion_session_anchor.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_document_markdown_tables.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_document_renderers_hr_quote.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_durable_write_discipline.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_effect_cancellation.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_effect_issuance_idempotency.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_effect_payload_stays_json_serializable.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_election_consequence_teaching.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_email_binding_and_refiner.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_email_gate_fixes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_email_inbox_and_trigger.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_email_regate_fixes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_email_review_fixes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_email_self_trigger_loop.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_email_toolset_and_walls.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_emergence_experiment.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_emit_event_uses_wait_index.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_endpoint_profile_route_context.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_awake_memory_fixes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_brain_effects.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_chat_driver.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_chat_tools_reflection.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_diary.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_execute_tool.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_fetch_url_tool.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_history_window.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_life_loop.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_memory_richness.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_phase_graph_conformance.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_react_visit_window.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_recent_memories.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_runtime.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_search_memory.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_substrate_resolution.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_visit_honesty.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_workspace_cap.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_entity_workspace_tools.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_event_wait_index.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_execute_command_output_offload.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_execution_capability_discovery.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_explicit_eject_other_clients.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_factory_default_retry_policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_format_repair_nudge.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_fresh_install_no_provider.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_gateway_facades_c4899.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_git_read_only_refiner.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_hf_process_residency_merge.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_history_window_multimodal.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_hot_path_store_reads.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_indexed_idempotency_lookup.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_json_run_cache_bound.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_json_store_scan_memo.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_ledger_record_slimming.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_live_token_deltas.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_payload_shape_refusal.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_text_phase_progress.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_client_grounding_tail.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_retry_classification.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_llm_streaming_on_token.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_local_helper_tool_exposure.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_local_residency_host_sweep.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_max_iterations_ceiling.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_media_capability_default_routing.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_media_only_requests_skip_text_client.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_media_subprocess.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_appraise_handler.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_communities.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_seam_handlers.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_seam_sqlite_durability.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_mlx_process_residency_merge.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_model_eject_cancel.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_model_residency_clean_switch.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_multi_store_scheduler.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_native_mlx_application_wiring.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_native_mlx_execution_controls_live.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_native_tool_channel.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_night_voice.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_no_default_provider_refusal_ux.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_offload_answer_chain_c4978.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_offloading.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_packaging_extras.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_parallel_readonly_tool_execution.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_pdf_unicode_rendering.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_personal_cycle.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_phantom_attachment_index.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_phase_graph_artifact_control.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_phase_graph_obedience.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_phase_vocabulary_migration.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_prompt_cache_posture_inheritance.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_prompt_overlay.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_provider_endpoint_profile_resolution.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_provider_pin_routing_isolation.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_r12_workspace_sandbox.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_read_idle_threading.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_readoption_experiment.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_realize_election.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_remote_client_cancel.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_remote_speculation_defaults.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_report_branding.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_resident_media_generation.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_resume_concurrent_same_wait.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_run_index_workspace_root.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_run_mutation_lock.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_run_scoped_tool_policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_run_tool_scope_ceiling.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_browser_session_boundary.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_default_provider_model_refresh.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_health_and_bounded_vars.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_runtime_tick_step_gate.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_schedule_v1_corpus.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_schedule_v2_calendar.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_send_email_refiner.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_send_email_self_default_policy.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_session_history.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_session_prompt_cache_attribution.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_session_prompt_cache_visibility.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_session_route_stamp.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_session_start_cost.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_shell_tool_exposure.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_speculation_inheritance.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_speculation_reaches_provider_construction.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_steer_sidecar.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_thinking_inheritance.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_approval_wait_key_identity.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_catalog.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_descriptor_registry.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_inventory_facade.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_invoke_effect.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_policy_and_mounts.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_topic_election_world_model.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_trigger_registry.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_trigger_schedule_math.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_turn_grounding_byte_stability.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_turn_grounding_carriers_a3.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visit_ab_fixture.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visit_midturn_elections.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visit_midturn_resume.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visit_workflow.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_entity_memory_nodes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_llm_call_partial_override.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_loop_back_out_of_body.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_loop_limit_on_wire.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_reroute_lowering.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_set_vars_pins.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_unknown_node_type_refuses.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_agora_react_agent.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_continue_on_error.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_file_nodes_workspace.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_function_library.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_get_var_node.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_pin_expressions.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_schema_enum_switch.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_voice_openai_api_key_path.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_voice_stream_is_not_a_wait.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_w4_feelings_lens.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_wait_event_deadline.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_wait_until_streak.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_wait_until_utc_normalization.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_builtin_deny.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_context_allowed_workspaces.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_prompt_context.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_read_only.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_workspace_writable_paths.py +0 -0
- {abstractruntime-0.10.2 → abstractruntime-0.10.4}/tests/test_write_chart.py +0 -0
|
@@ -5,6 +5,35 @@ All notable changes to AbstractRuntime will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.10.4] - 2026-10-18
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- An image, video or voice spec whose provider is an endpoint profile (`endpoint:<id>`) keeps that provider
|
|
13
|
+
all the way to the media plugin. The `LLM_CALL` handler resolved the first output spec's endpoint as if it
|
|
14
|
+
were the call's text provider: it rewrote the spec to the bare provider family and put the endpoint's URL
|
|
15
|
+
and key into text-client routing params that the media path never reads, so an image generation routed to
|
|
16
|
+
a gateway endpoint profile (the web console's sandbox, an image route set to an OpenAI-compatible relay
|
|
17
|
+
serving `gpt-image-2`) reached AbstractVision as a keyless `openai-compatible` request with no base URL
|
|
18
|
+
and failed with "Missing vision_base_url / OPENAI_BASE_URL" -- in the one-shot media subprocess, since
|
|
19
|
+
the spec no longer said `endpoint:`. Only the call's own `provider` (`_provider`) is resolved now; the
|
|
20
|
+
spec's endpoint is resolved by the media plugin through the host's resolver, in process. The pooled
|
|
21
|
+
client's media host (the client every media-only call runs on) now carries the host's endpoint-profile
|
|
22
|
+
resolver, whether it is built before or after `set_provider_endpoint_profile_resolver`. Affects every
|
|
23
|
+
host that attaches an endpoint-profile resolver (AbstractGateway). Tests:
|
|
24
|
+
`tests/test_endpoint_profile_media_specs_keep_provider.py`.
|
|
25
|
+
|
|
26
|
+
## [0.10.3] - 2026-10-18
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- Image and video specs whose provider is an endpoint profile (`endpoint:<id>`) run in process instead of in
|
|
31
|
+
the one-shot local media subprocess. The subprocess isolates local pipelines and has no host
|
|
32
|
+
endpoint-profile resolver, so a gateway profile (for example an OpenAI-compatible relay serving
|
|
33
|
+
`gpt-image-2` selected on the gateway's image route) could not be resolved there; in process,
|
|
34
|
+
AbstractVision resolves it through the resolver the host attached to the client. Tests:
|
|
35
|
+
`tests/test_endpoint_profile_media_in_process.py`.
|
|
36
|
+
|
|
8
37
|
## [0.10.2] - 2026-10-16
|
|
9
38
|
|
|
10
39
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.4
|
|
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
|
|
@@ -355,6 +355,8 @@ Multimodal support:
|
|
|
355
355
|
- with the pooled local client (`MultiLocalAbstractCoreLLMClient`), a request whose outputs are all non-text (image, video, voice, music, transcription) and that carries no tools never builds the text client: it runs on AbstractCore's capability host (`CapabilityHostProvider`, no text model), and so does streaming TTS. A text default that cannot be built (an engine not installed) therefore never blocks speech or image generation
|
|
356
356
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
357
357
|
- 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`)
|
|
358
|
+
- a media spec whose `provider` is an endpoint profile (`endpoint:<id>`) never uses the one-shot subprocess: it is an HTTP call to that endpoint, and the host's endpoint-profile resolver (`set_provider_endpoint_profile_resolver`) exists only in this process
|
|
359
|
+
- the `LLM_CALL` handler resolves only the call's own `provider` (`endpoint:<id>` on the effect payload) into Core routing params (`_provider`, `base_url`, `provider_api_key`); an endpoint profile named on an output spec stays on the spec, and the media plugin resolves it through the resolver the host attached to the client. The pooled client attaches that resolver to its media host too
|
|
358
360
|
- 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"`
|
|
359
361
|
- 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
|
|
360
362
|
|
|
@@ -1225,6 +1225,8 @@ Multimodal support:
|
|
|
1225
1225
|
- with the pooled local client (`MultiLocalAbstractCoreLLMClient`), a request whose outputs are all non-text (image, video, voice, music, transcription) and that carries no tools never builds the text client: it runs on AbstractCore's capability host (`CapabilityHostProvider`, no text model), and so does streaming TTS. A text default that cannot be built (an engine not installed) therefore never blocks speech or image generation
|
|
1226
1226
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
1227
1227
|
- 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`)
|
|
1228
|
+
- a media spec whose `provider` is an endpoint profile (`endpoint:<id>`) never uses the one-shot subprocess: it is an HTTP call to that endpoint, and the host's endpoint-profile resolver (`set_provider_endpoint_profile_resolver`) exists only in this process
|
|
1229
|
+
- the `LLM_CALL` handler resolves only the call's own `provider` (`endpoint:<id>` on the effect payload) into Core routing params (`_provider`, `base_url`, `provider_api_key`); an endpoint profile named on an output spec stays on the spec, and the media plugin resolves it through the resolver the host attached to the client. The pooled client attaches that resolver to its media host too
|
|
1228
1230
|
- 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"`
|
|
1229
1231
|
- 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
|
|
1230
1232
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
### Fixed
|
|
2
|
+
|
|
3
|
+
- An image, video or voice spec whose provider is an endpoint profile (`endpoint:<id>`) keeps that provider
|
|
4
|
+
all the way to the media plugin. The `LLM_CALL` handler resolved the first output spec's endpoint as if it
|
|
5
|
+
were the call's text provider: it rewrote the spec to the bare provider family and put the endpoint's URL
|
|
6
|
+
and key into text-client routing params that the media path never reads, so an image generation routed to
|
|
7
|
+
a gateway endpoint profile (the web console's sandbox, an image route set to an OpenAI-compatible relay
|
|
8
|
+
serving `gpt-image-2`) reached AbstractVision as a keyless `openai-compatible` request with no base URL
|
|
9
|
+
and failed with "Missing vision_base_url / OPENAI_BASE_URL" -- in the one-shot media subprocess, since
|
|
10
|
+
the spec no longer said `endpoint:`. Only the call's own `provider` (`_provider`) is resolved now; the
|
|
11
|
+
spec's endpoint is resolved by the media plugin through the host's resolver, in process. The pooled
|
|
12
|
+
client's media host (the client every media-only call runs on) now carries the host's endpoint-profile
|
|
13
|
+
resolver, whether it is built before or after `set_provider_endpoint_profile_resolver`. Affects every
|
|
14
|
+
host that attaches an endpoint-profile resolver (AbstractGateway). Tests:
|
|
15
|
+
`tests/test_endpoint_profile_media_specs_keep_provider.py`.
|
|
@@ -228,56 +228,28 @@ def _observability_params(params: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
228
228
|
_MISSING = object()
|
|
229
229
|
|
|
230
230
|
|
|
231
|
-
def _first_output_provider(value: Any) -> Optional[str]:
|
|
232
|
-
if isinstance(value, dict):
|
|
233
|
-
provider = value.get("provider")
|
|
234
|
-
if isinstance(provider, str) and provider.strip():
|
|
235
|
-
return provider.strip()
|
|
236
|
-
specs = value.get("specs")
|
|
237
|
-
if isinstance(specs, list):
|
|
238
|
-
for item in specs:
|
|
239
|
-
found = _first_output_provider(item)
|
|
240
|
-
if found:
|
|
241
|
-
return found
|
|
242
|
-
elif isinstance(value, list):
|
|
243
|
-
for item in value:
|
|
244
|
-
found = _first_output_provider(item)
|
|
245
|
-
if found:
|
|
246
|
-
return found
|
|
247
|
-
return None
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
def _replace_output_provider(value: Any, *, old_provider: str, new_provider: str) -> Any:
|
|
251
|
-
old_norm = str(old_provider or "").strip().lower()
|
|
252
|
-
if not old_norm or not isinstance(new_provider, str) or not new_provider.strip():
|
|
253
|
-
return value
|
|
254
|
-
if isinstance(value, dict):
|
|
255
|
-
out = dict(value)
|
|
256
|
-
provider = out.get("provider")
|
|
257
|
-
if isinstance(provider, str) and provider.strip().lower() == old_norm:
|
|
258
|
-
out["provider"] = new_provider.strip()
|
|
259
|
-
if isinstance(out.get("specs"), list):
|
|
260
|
-
out["specs"] = [_replace_output_provider(item, old_provider=old_provider, new_provider=new_provider) for item in out["specs"]]
|
|
261
|
-
return out
|
|
262
|
-
if isinstance(value, list):
|
|
263
|
-
return [_replace_output_provider(item, old_provider=old_provider, new_provider=new_provider) for item in value]
|
|
264
|
-
return value
|
|
265
|
-
|
|
266
|
-
|
|
267
231
|
def _apply_provider_endpoint_profile_resolution(*, llm: AbstractCoreLLMClient, params: Dict[str, Any]) -> None:
|
|
268
|
-
"""Resolve
|
|
232
|
+
"""Resolve the call's own `endpoint:<id>` text provider into Core routing params.
|
|
269
233
|
|
|
270
234
|
Hosts can attach `resolve_provider_endpoint_profile(provider_id)` to the LLM
|
|
271
235
|
client. Runtime keeps this as a generic optional hook so it does not import
|
|
272
236
|
Gateway, and only the transient `params` dict receives the raw provider key.
|
|
237
|
+
|
|
238
|
+
Only `_provider` (the text route of THIS call) is resolved here. An output
|
|
239
|
+
spec that names an `endpoint:<id>` provider (an image, video or voice
|
|
240
|
+
generation through a named endpoint connection) keeps it: the media
|
|
241
|
+
plugins resolve the profile themselves through the resolver the host
|
|
242
|
+
attached to the client, and the runtime keeps such a spec in process
|
|
243
|
+
(`_is_subprocess_safe_image_specs`). Rewriting it to the bare provider
|
|
244
|
+
family used to lose the endpoint -- the spec reached the media backend as
|
|
245
|
+
a keyless `openai-compatible` request with no base URL, while the URL and
|
|
246
|
+
key sat in text-client kwargs the media path never reads.
|
|
273
247
|
"""
|
|
274
248
|
|
|
275
249
|
resolver = getattr(llm, "resolve_provider_endpoint_profile", None)
|
|
276
250
|
if not callable(resolver):
|
|
277
251
|
return
|
|
278
252
|
provider = params.get("_provider")
|
|
279
|
-
if not (isinstance(provider, str) and provider.strip()):
|
|
280
|
-
provider = _first_output_provider(params.get("output"))
|
|
281
253
|
if not (isinstance(provider, str) and provider.strip()):
|
|
282
254
|
return
|
|
283
255
|
try:
|
|
@@ -292,8 +264,6 @@ def _apply_provider_endpoint_profile_resolution(*, llm: AbstractCoreLLMClient, p
|
|
|
292
264
|
raise RuntimeError(f"Provider endpoint profile {provider!r} did not resolve to a provider family.")
|
|
293
265
|
|
|
294
266
|
params["_provider"] = provider_family
|
|
295
|
-
if "output" in params:
|
|
296
|
-
params["output"] = _replace_output_provider(params.get("output"), old_provider=provider, new_provider=provider_family)
|
|
297
267
|
|
|
298
268
|
base_url = resolved.get("base_url")
|
|
299
269
|
if isinstance(base_url, str) and base_url.strip() and not str(params.get("base_url") or "").strip():
|
|
@@ -2141,6 +2141,20 @@ def _decode_subprocess_media_payload(payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
2141
2141
|
return out
|
|
2142
2142
|
|
|
2143
2143
|
|
|
2144
|
+
def _spec_routes_to_endpoint_profile(spec: Any) -> bool:
|
|
2145
|
+
"""True when a media spec names an `endpoint:<id>` provider.
|
|
2146
|
+
|
|
2147
|
+
Such a spec is an HTTP call to a named endpoint connection, not a local
|
|
2148
|
+
pipeline: the one-shot media subprocess has nothing to isolate for it, and
|
|
2149
|
+
it cannot resolve the profile -- the host's endpoint-profile resolver
|
|
2150
|
+
(`set_provider_endpoint_profile_resolver`) lives on THIS process's
|
|
2151
|
+
clients, and a per-user gateway profile has no AbstractCore config row
|
|
2152
|
+
the subprocess could read. So it runs in process, where AbstractVision
|
|
2153
|
+
resolves the profile through the owning provider's resolver.
|
|
2154
|
+
"""
|
|
2155
|
+
return isinstance(spec, dict) and str(spec.get("provider") or "").strip().lower().startswith("endpoint:")
|
|
2156
|
+
|
|
2157
|
+
|
|
2144
2158
|
def _is_subprocess_safe_image_specs(specs: List[Dict[str, Any]], media: Optional[List[Any]]) -> bool:
|
|
2145
2159
|
if not _env_flag_enabled("ABSTRACTRUNTIME_LOCAL_IMAGE_SUBPROCESS", default=True):
|
|
2146
2160
|
return False
|
|
@@ -2148,7 +2162,7 @@ def _is_subprocess_safe_image_specs(specs: List[Dict[str, Any]], media: Optional
|
|
|
2148
2162
|
return False
|
|
2149
2163
|
normalized_media = list(media or [])
|
|
2150
2164
|
for spec in specs:
|
|
2151
|
-
if not isinstance(spec, dict):
|
|
2165
|
+
if not isinstance(spec, dict) or _spec_routes_to_endpoint_profile(spec):
|
|
2152
2166
|
return False
|
|
2153
2167
|
modality = str(spec.get("modality") or "").strip().lower()
|
|
2154
2168
|
task = str(spec.get("task") or "").strip().lower()
|
|
@@ -2202,6 +2216,8 @@ def _is_subprocess_safe_video_specs(specs: List[Dict[str, Any]], media: Optional
|
|
|
2202
2216
|
if len(specs) != 1 or not isinstance(specs[0], dict):
|
|
2203
2217
|
return False
|
|
2204
2218
|
spec = specs[0]
|
|
2219
|
+
if _spec_routes_to_endpoint_profile(spec):
|
|
2220
|
+
return False
|
|
2205
2221
|
modality = str(spec.get("modality") or "").strip().lower()
|
|
2206
2222
|
task = str(spec.get("task") or "").strip().lower()
|
|
2207
2223
|
if modality != "video":
|
|
@@ -10753,6 +10769,11 @@ class MultiLocalAbstractCoreLLMClient:
|
|
|
10753
10769
|
core_config_file=self._core_config_file,
|
|
10754
10770
|
capability_defaults=self._capability_defaults if explicit else None,
|
|
10755
10771
|
)
|
|
10772
|
+
# A media spec naming an `endpoint:<id>` provider is resolved by the
|
|
10773
|
+
# media plugin through the resolver on ITS owner -- this client.
|
|
10774
|
+
resolver = getattr(self, "_provider_endpoint_profile_resolver", None)
|
|
10775
|
+
if resolver is not None:
|
|
10776
|
+
_attach_provider_endpoint_profile_resolver_to_client(client, resolver)
|
|
10756
10777
|
self._media_host = client
|
|
10757
10778
|
return client
|
|
10758
10779
|
|
|
@@ -10828,6 +10849,9 @@ class MultiLocalAbstractCoreLLMClient:
|
|
|
10828
10849
|
default_client = getattr(self, "_default_client", None)
|
|
10829
10850
|
if default_client is not None:
|
|
10830
10851
|
_attach_provider_endpoint_profile_resolver_to_client(default_client, resolver)
|
|
10852
|
+
media_host = self.__dict__.get("_media_host")
|
|
10853
|
+
if media_host is not None:
|
|
10854
|
+
_attach_provider_endpoint_profile_resolver_to_client(media_host, resolver)
|
|
10831
10855
|
self._llm = getattr(default_client, "_llm", None)
|
|
10832
10856
|
|
|
10833
10857
|
def get_provider_instance(self, *, provider: str, model: str) -> Any:
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Media specs routed to an `endpoint:<id>` profile run in process.
|
|
2
|
+
|
|
3
|
+
The one-shot media subprocess isolates LOCAL pipelines; it has no host
|
|
4
|
+
endpoint-profile resolver, so a gateway profile (e.g. an OpenAI-compatible
|
|
5
|
+
relay serving `gpt-image-2`) could not be resolved there. Regression for the
|
|
6
|
+
operator report of 2026-10-18.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
from abstractruntime.integrations.abstractcore.llm_client import (
|
|
14
|
+
_is_subprocess_safe_image_specs,
|
|
15
|
+
_is_subprocess_safe_video_specs,
|
|
16
|
+
_spec_routes_to_endpoint_profile,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_endpoint_spec_detection() -> None:
|
|
21
|
+
assert _spec_routes_to_endpoint_profile({"provider": "endpoint:relay"}) is True
|
|
22
|
+
assert _spec_routes_to_endpoint_profile({"provider": "Endpoint:Relay"}) is True
|
|
23
|
+
assert _spec_routes_to_endpoint_profile({"provider": "huggingface"}) is False
|
|
24
|
+
assert _spec_routes_to_endpoint_profile({}) is False
|
|
25
|
+
assert _spec_routes_to_endpoint_profile(None) is False
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_endpoint_image_specs_skip_the_subprocess(tmp_path: Path) -> None:
|
|
29
|
+
source = tmp_path / "source.png"
|
|
30
|
+
source.write_bytes(b"png")
|
|
31
|
+
media = [{"file_path": str(source), "type": "image", "role": "source"}]
|
|
32
|
+
|
|
33
|
+
assert _is_subprocess_safe_image_specs([{"modality": "image", "task": "text_to_image", "provider": "huggingface"}], None) is True
|
|
34
|
+
assert _is_subprocess_safe_image_specs(
|
|
35
|
+
[{"modality": "image", "task": "text_to_image", "provider": "endpoint:relay", "model": "gpt-image-2"}], None
|
|
36
|
+
) is False
|
|
37
|
+
assert _is_subprocess_safe_image_specs([{"modality": "image", "task": "image_edit", "provider": "huggingface"}], media) is True
|
|
38
|
+
assert _is_subprocess_safe_image_specs(
|
|
39
|
+
[{"modality": "image", "task": "image_edit", "provider": "endpoint:relay", "model": "gpt-image-2"}], media
|
|
40
|
+
) is False
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_endpoint_video_spec_skips_the_subprocess() -> None:
|
|
44
|
+
assert _is_subprocess_safe_video_specs([{"modality": "video", "task": "text_to_video"}], None) is True
|
|
45
|
+
assert _is_subprocess_safe_video_specs([{"modality": "video", "task": "text_to_video", "provider": "endpoint:relay"}], None) is False
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"""An output spec that names an `endpoint:<id>` provider keeps it.
|
|
2
|
+
|
|
3
|
+
The LLM_CALL handler resolves the call's OWN text provider (`_provider`) into
|
|
4
|
+
Core routing params. It used to fall back to the first output spec's provider
|
|
5
|
+
and rewrite that spec to the bare provider family, moving the endpoint's URL
|
|
6
|
+
and key into text-client kwargs the media path never reads: an image
|
|
7
|
+
generation routed to a gateway endpoint profile (the web console's sandbox,
|
|
8
|
+
the image route set to an OpenAI-compatible relay serving `gpt-image-2`)
|
|
9
|
+
reached AbstractVision as a keyless `openai-compatible` request with no base
|
|
10
|
+
URL and failed with "Missing vision_base_url / OPENAI_BASE_URL" -- in the
|
|
11
|
+
one-shot media subprocess, since the spec no longer said `endpoint:`.
|
|
12
|
+
Regression for the operator report of 2026-10-18.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import Any, Dict, List, Optional
|
|
18
|
+
|
|
19
|
+
from abstractruntime.core.models import Effect, EffectType, RunState
|
|
20
|
+
from abstractruntime.integrations.abstractcore.effect_handlers import make_llm_call_handler
|
|
21
|
+
from abstractruntime.storage.artifacts import InMemoryArtifactStore
|
|
22
|
+
|
|
23
|
+
_PROFILE = {
|
|
24
|
+
"id": "airelays",
|
|
25
|
+
"virtual_provider": "endpoint:airelays",
|
|
26
|
+
"display_name": "airelays",
|
|
27
|
+
"provider": "openai-compatible",
|
|
28
|
+
"base_url": "http://127.0.0.1:18921/v1",
|
|
29
|
+
"api_key": "relay-secret-key",
|
|
30
|
+
"scope": "gateway",
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class _ProfileResolvingLLM:
|
|
35
|
+
def __init__(self) -> None:
|
|
36
|
+
self.calls: list[dict[str, Any]] = []
|
|
37
|
+
self.resolved: list[str] = []
|
|
38
|
+
|
|
39
|
+
def resolve_provider_endpoint_profile(self, provider_id: str) -> dict[str, Any] | None:
|
|
40
|
+
self.resolved.append(provider_id)
|
|
41
|
+
return dict(_PROFILE) if provider_id == "endpoint:airelays" else None
|
|
42
|
+
|
|
43
|
+
def generate(
|
|
44
|
+
self,
|
|
45
|
+
*,
|
|
46
|
+
prompt: str,
|
|
47
|
+
messages: Optional[List[Dict[str, str]]] = None,
|
|
48
|
+
system_prompt: Optional[str] = None,
|
|
49
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
50
|
+
media: Optional[List[Any]] = None,
|
|
51
|
+
params: Optional[Dict[str, Any]] = None,
|
|
52
|
+
) -> Dict[str, Any]:
|
|
53
|
+
self.calls.append({"prompt": prompt, "media": media, "params": dict(params or {})})
|
|
54
|
+
return {"content": "", "metadata": {}}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _image_effect(*, provider: Optional[str] = None) -> Effect:
|
|
58
|
+
payload: Dict[str, Any] = {
|
|
59
|
+
"prompt": "a red circle",
|
|
60
|
+
"output": {
|
|
61
|
+
"modality": "image",
|
|
62
|
+
"task": "image_generation",
|
|
63
|
+
"format": "png",
|
|
64
|
+
"provider": "endpoint:airelays",
|
|
65
|
+
"model": "gpt-image-2",
|
|
66
|
+
},
|
|
67
|
+
}
|
|
68
|
+
if provider:
|
|
69
|
+
payload["provider"] = provider
|
|
70
|
+
return Effect(type=EffectType.LLM_CALL, payload=payload, result_key="llm")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _run() -> RunState:
|
|
74
|
+
run = RunState.new(workflow_id="wf", entry_node="node-1", vars={})
|
|
75
|
+
run.current_node = "node-1"
|
|
76
|
+
return run
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def test_media_spec_endpoint_provider_reaches_the_client_untouched() -> None:
|
|
80
|
+
llm = _ProfileResolvingLLM()
|
|
81
|
+
handler = make_llm_call_handler(llm=llm, artifact_store=InMemoryArtifactStore())
|
|
82
|
+
|
|
83
|
+
outcome = handler(_run(), _image_effect(), None)
|
|
84
|
+
|
|
85
|
+
assert outcome.status == "completed"
|
|
86
|
+
params = llm.calls[-1]["params"]
|
|
87
|
+
assert params["output"]["provider"] == "endpoint:airelays"
|
|
88
|
+
assert params["output"]["model"] == "gpt-image-2"
|
|
89
|
+
# The endpoint is the SPEC's, not the call's text route: no text routing
|
|
90
|
+
# params are minted from it, and nothing is resolved on its behalf.
|
|
91
|
+
assert "_provider" not in params
|
|
92
|
+
assert "base_url" not in params
|
|
93
|
+
assert "provider_api_key" not in params
|
|
94
|
+
assert "_provider_endpoint_profile" not in params
|
|
95
|
+
assert llm.resolved == []
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def test_text_endpoint_provider_is_resolved_while_the_media_spec_keeps_its_own() -> None:
|
|
99
|
+
llm = _ProfileResolvingLLM()
|
|
100
|
+
handler = make_llm_call_handler(llm=llm, artifact_store=InMemoryArtifactStore())
|
|
101
|
+
|
|
102
|
+
outcome = handler(_run(), _image_effect(provider="endpoint:airelays"), None)
|
|
103
|
+
|
|
104
|
+
assert outcome.status == "completed"
|
|
105
|
+
params = llm.calls[-1]["params"]
|
|
106
|
+
assert params["_provider"] == "openai-compatible"
|
|
107
|
+
assert params["base_url"] == "http://127.0.0.1:18921/v1"
|
|
108
|
+
assert params["provider_api_key"] == "relay-secret-key"
|
|
109
|
+
assert params["_provider_endpoint_profile"]["virtual_provider"] == "endpoint:airelays"
|
|
110
|
+
assert params["output"]["provider"] == "endpoint:airelays"
|
|
111
|
+
assert llm.resolved == ["endpoint:airelays"]
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def test_media_host_client_carries_the_endpoint_profile_resolver(monkeypatch) -> None:
|
|
115
|
+
"""The pooled client's media host serves every media-only call; the media
|
|
116
|
+
plugins resolve `endpoint:<id>` through the resolver on THAT client."""
|
|
117
|
+
from abstractruntime.integrations.abstractcore import llm_client as llm_client_mod
|
|
118
|
+
|
|
119
|
+
created: list[Any] = []
|
|
120
|
+
|
|
121
|
+
class FakeUnderlyingLLM:
|
|
122
|
+
pass
|
|
123
|
+
|
|
124
|
+
class FakeLocalClient:
|
|
125
|
+
def __init__(self, *, provider, model, llm_kwargs=None, **kwargs):
|
|
126
|
+
_ = provider, model, llm_kwargs, kwargs
|
|
127
|
+
self._llm = FakeUnderlyingLLM()
|
|
128
|
+
created.append(self)
|
|
129
|
+
|
|
130
|
+
def generate(self, *, prompt, messages=None, system_prompt=None, tools=None, media=None, params=None):
|
|
131
|
+
_ = prompt, messages, system_prompt, tools, media, params
|
|
132
|
+
return {"content": "ok"}
|
|
133
|
+
|
|
134
|
+
def get_model_capabilities(self, model_name=None):
|
|
135
|
+
_ = model_name
|
|
136
|
+
return {"max_tokens": 8192}
|
|
137
|
+
|
|
138
|
+
monkeypatch.setattr(llm_client_mod, "LocalAbstractCoreLLMClient", FakeLocalClient)
|
|
139
|
+
resolver = lambda provider_id: {"provider": "openai-compatible", "id": provider_id} # noqa: E731
|
|
140
|
+
|
|
141
|
+
# Resolver set BEFORE the media host is built (the gateway's boot order).
|
|
142
|
+
client = llm_client_mod.MultiLocalAbstractCoreLLMClient(provider="lmstudio", model="local-model")
|
|
143
|
+
client.set_provider_endpoint_profile_resolver(resolver)
|
|
144
|
+
media_host = client._media_host_client()
|
|
145
|
+
assert getattr(media_host, "resolve_provider_endpoint_profile") is resolver
|
|
146
|
+
assert getattr(media_host._llm, "resolve_provider_endpoint_profile") is resolver
|
|
147
|
+
|
|
148
|
+
# Resolver (re)set AFTER the media host exists (a profile refresh).
|
|
149
|
+
later = lambda provider_id: {"provider": "openai", "id": provider_id} # noqa: E731
|
|
150
|
+
client.set_provider_endpoint_profile_resolver(later)
|
|
151
|
+
assert client._media_host_client() is media_host
|
|
152
|
+
assert getattr(media_host, "resolve_provider_endpoint_profile") is later
|
|
153
|
+
assert getattr(media_host._llm, "resolve_provider_endpoint_profile") is later
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
### Changed
|
|
2
|
-
|
|
3
|
-
- **Code nodes can import Python's standard library.** In the `sandbox` permission mode, `import json`, `re`,
|
|
4
|
-
`datetime`, `math`, `collections`, `itertools`, `statistics`, `textwrap`, `hashlib`, `urllib.parse`… now
|
|
5
|
-
work, at the top of the code and inside functions, in both the RestrictedPython lane and the fallback lane, and
|
|
6
|
-
inside the function bodies of flow function libraries. The sandbox still refuses third-party packages, private
|
|
7
|
-
(`_`-prefixed) modules, and the standard-library modules that reach the machine or go around the sandbox's own
|
|
8
|
-
checks: processes and the operating system (`os`, `subprocess`, `threading`, `signal`, `ctypes`, `platform`…), files (`io`,
|
|
9
|
-
`pathlib`, `shutil`, `tempfile`, `glob`, `sqlite3`, `logging`, and the parsers that read a file by path: `xml`,
|
|
10
|
-
`configparser`, `argparse`…), the network (`socket`, `http`, `urllib.request`, `smtplib`…), code loading or
|
|
11
|
-
interpreter internals (`sys`, `importlib`, `pickle`, `types`, `inspect`…) and attribute access by name,
|
|
12
|
-
evaluated annotations or frames (`operator`, `typing`, `functools`, `traceback`). A refusal names the module
|
|
13
|
-
and the reason; `from x import *`, relative imports and the `__import__` call stay refused.
|
|
14
|
-
- **A Code node's return value must be JSON data.** `transform` returning a module, a function, a set, bytes or
|
|
15
|
-
any other value JSON cannot carry now fails with a sandbox error naming the value and where it sits
|
|
16
|
-
(`transform returned a value that cannot be sent as JSON: module 'time' at output[2]`), in every permission
|
|
17
|
-
mode, instead of a serializer crash later in the gateway's simulate reply or the run's persisted state. `full_access` (host policy) imports anything, as before.
|
|
18
|
-
The rule is applied twice: at compile time by `validate_code`, and at run time by the `__import__` bound into
|
|
19
|
-
the sandbox builtins. `get_code_execution_policy()` now lists `imports.denied_modules` for thin clients.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/001_runtime_kernel.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/003_wait_primitives.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/004_scheduler_driver.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/006_snapshots_bookmarks.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/009_artifact_store.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/completed/011_subworkflow_support.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/001_runtime_kernel.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.10.2 → abstractruntime-0.10.4}/docs/backlog/deprecated/002_snapshots_bookmarks.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|