AbstractRuntime 0.4.23__tar.gz → 0.4.24__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.4.23 → abstractruntime-0.4.24}/.github/workflows/ci.yml +3 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/.github/workflows/release.yml +3 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/CHANGELOG.md +16 -1
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/PKG-INFO +12 -12
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/README.md +4 -4
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/README.md +1 -1
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/api.md +7 -7
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/architecture.md +3 -3
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/faq.md +6 -3
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/getting-started.md +1 -1
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/integrations/abstractcore.md +71 -8
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/troubleshooting.md +2 -3
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/llms-full.txt +6 -6
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/llms.txt +7 -7
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/pyproject.toml +8 -8
- abstractruntime-0.4.24/release-notes.md +11 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/runtime.py +190 -1
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -1
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +15 -2
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/llm_client.py +335 -3
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/output_specs.py +2 -2
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/run_facade.py +47 -1
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/compiler.py +16 -1
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/visual/executor.py +113 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_abstractcore_run_facade.py +137 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_model_residency_control_plane.py +6 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_multimodal_abstractcore_integration.py +248 -7
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_packaging_extras.py +7 -7
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_media_nodes.py +60 -0
- abstractruntime-0.4.23/release-notes.md +0 -9
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/.gitignore +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/LICENSE +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/ROADMAP.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/SECURITY.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/README.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/evidence.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/limits.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/proposal.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/provenance.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/tools-comms.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/examples/README.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/mkdocs.yml +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/pytest.ini +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/README.md +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/conftest.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.23 → abstractruntime-0.4.24}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -40,6 +40,9 @@ jobs:
|
|
|
40
40
|
tests/test_remote_llm_client.py \
|
|
41
41
|
tests/test_prompt_cache_modules.py \
|
|
42
42
|
tests/test_multimodal_abstractcore_integration.py \
|
|
43
|
+
tests/test_abstractcore_run_facade.py \
|
|
44
|
+
tests/test_visualflow_media_nodes.py \
|
|
45
|
+
tests/test_model_residency_control_plane.py \
|
|
43
46
|
tests/test_visualflow_llm_call_multimodal_output.py \
|
|
44
47
|
tests/test_visual_multi_entry_loop_overrides.py \
|
|
45
48
|
tests/test_control_adapter_while.py \
|
|
@@ -55,6 +55,9 @@ jobs:
|
|
|
55
55
|
tests/test_remote_llm_client.py \
|
|
56
56
|
tests/test_prompt_cache_modules.py \
|
|
57
57
|
tests/test_multimodal_abstractcore_integration.py \
|
|
58
|
+
tests/test_abstractcore_run_facade.py \
|
|
59
|
+
tests/test_visualflow_media_nodes.py \
|
|
60
|
+
tests/test_model_residency_control_plane.py \
|
|
58
61
|
tests/test_visualflow_llm_call_multimodal_output.py \
|
|
59
62
|
tests/test_visual_multi_entry_loop_overrides.py \
|
|
60
63
|
tests/test_control_adapter_while.py \
|
|
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.24] - 2026-05-26
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Runtime now surfaces AbstractCore/AbstractVision video generation through the existing generated-media boundary:
|
|
14
|
+
- `LLM_CALL` output selectors for `{"modality":"video","task":"text_to_video"}` and `{"modality":"video","task":"image_to_video"}`
|
|
15
|
+
- remote Core Server routing for `/v1/videos/generations` and `/v1/videos/edits`
|
|
16
|
+
- durable run-facade helpers `generate_video(...)` and `image_to_video(...)`
|
|
17
|
+
- VisualFlow node lowering for `generate_video` / `text_to_video` and `image_to_video`
|
|
18
|
+
- Provider progress callbacks are converted into JSON-safe `abstract.progress` ledger events during `LLM_CALL` execution without persisting Python callback objects.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- Minimum optional AbstractCore dependency floor is now `abstractcore>=2.13.29` (and matching `multimodal`, `mcp-worker`, and hardware-profile cascade extras), aligning Runtime with Core video endpoints, video residency tasks, and AbstractVision 0.3.16 progress-capable generation.
|
|
22
|
+
- Runtime docs and AI-readable `llms.txt` / `llms-full.txt` now document text-to-video, image-to-video, and generated-media progress events.
|
|
23
|
+
|
|
10
24
|
## [0.4.23] - 2026-05-26
|
|
11
25
|
|
|
12
26
|
### Added
|
|
@@ -544,7 +558,8 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
544
558
|
|
|
545
559
|
Initial development version with basic proof-of-concept features.
|
|
546
560
|
|
|
547
|
-
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.
|
|
561
|
+
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.24...HEAD
|
|
562
|
+
[0.4.24]: https://github.com/lpalbou/abstractruntime/compare/v0.4.23...v0.4.24
|
|
548
563
|
[0.4.23]: https://github.com/lpalbou/abstractruntime/compare/v0.4.22...v0.4.23
|
|
549
564
|
[0.4.22]: https://github.com/lpalbou/abstractruntime/compare/v0.4.21...v0.4.22
|
|
550
565
|
[0.4.21]: https://github.com/lpalbou/abstractruntime/compare/v0.4.20...v0.4.21
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.24
|
|
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
|
|
@@ -23,24 +23,24 @@ Requires-Python: >=3.10
|
|
|
23
23
|
Requires-Dist: abstractmemory>=0.2.6
|
|
24
24
|
Requires-Dist: abstractsemantics>=0.0.3
|
|
25
25
|
Provides-Extra: abstractcore
|
|
26
|
-
Requires-Dist: abstractcore>=2.13.
|
|
26
|
+
Requires-Dist: abstractcore>=2.13.29; extra == 'abstractcore'
|
|
27
27
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'abstractcore'
|
|
28
28
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'abstractcore'
|
|
29
29
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'abstractcore'
|
|
30
30
|
Provides-Extra: all-apple
|
|
31
|
-
Requires-Dist: abstractcore[all-apple]>=2.13.
|
|
31
|
+
Requires-Dist: abstractcore[all-apple]>=2.13.29; extra == 'all-apple'
|
|
32
32
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'all-apple'
|
|
33
33
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'all-apple'
|
|
34
34
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'all-apple'
|
|
35
35
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'all-apple'
|
|
36
36
|
Provides-Extra: all-gpu
|
|
37
|
-
Requires-Dist: abstractcore[all-gpu]>=2.13.
|
|
37
|
+
Requires-Dist: abstractcore[all-gpu]>=2.13.29; extra == 'all-gpu'
|
|
38
38
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'all-gpu'
|
|
39
39
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'all-gpu'
|
|
40
40
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'all-gpu'
|
|
41
41
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'all-gpu'
|
|
42
42
|
Provides-Extra: apple
|
|
43
|
-
Requires-Dist: abstractcore[apple]>=2.13.
|
|
43
|
+
Requires-Dist: abstractcore[apple]>=2.13.29; extra == 'apple'
|
|
44
44
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'apple'
|
|
45
45
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'apple'
|
|
46
46
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'apple'
|
|
@@ -50,18 +50,18 @@ Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
|
|
|
50
50
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
51
51
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
52
52
|
Provides-Extra: gpu
|
|
53
|
-
Requires-Dist: abstractcore[gpu]>=2.13.
|
|
53
|
+
Requires-Dist: abstractcore[gpu]>=2.13.29; extra == 'gpu'
|
|
54
54
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'gpu'
|
|
55
55
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'gpu'
|
|
56
56
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'gpu'
|
|
57
57
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'gpu'
|
|
58
58
|
Provides-Extra: mcp-worker
|
|
59
|
-
Requires-Dist: abstractcore[tools]>=2.13.
|
|
59
|
+
Requires-Dist: abstractcore[tools]>=2.13.29; extra == 'mcp-worker'
|
|
60
60
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'mcp-worker'
|
|
61
61
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'mcp-worker'
|
|
62
62
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'mcp-worker'
|
|
63
63
|
Provides-Extra: multimodal
|
|
64
|
-
Requires-Dist: abstractcore[audio,music,remote,vision,voice]>=2.13.
|
|
64
|
+
Requires-Dist: abstractcore[audio,music,remote,vision,voice]>=2.13.29; extra == 'multimodal'
|
|
65
65
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'multimodal'
|
|
66
66
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'multimodal'
|
|
67
67
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'multimodal'
|
|
@@ -81,7 +81,7 @@ Description-Content-Type: text/markdown
|
|
|
81
81
|
|
|
82
82
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
83
83
|
|
|
84
|
-
**Version:** 0.4.
|
|
84
|
+
**Version:** 0.4.24 • **Python:** 3.10+
|
|
85
85
|
|
|
86
86
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
87
87
|
|
|
@@ -115,7 +115,7 @@ AbstractCore integration (LLM + tools):
|
|
|
115
115
|
pip install "abstractruntime[abstractcore]"
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
-
The `abstractcore` extra installs AbstractCore 2.13.
|
|
118
|
+
The `abstractcore` extra installs AbstractCore 2.13.29 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, task-aware model residency for text/image/video/TTS/STT, video generation endpoints, and the public local vision-cache catalog helper used by Runtime discovery remain aligned. Use `abstractruntime[multimodal]` when you need common media dependencies and capability plugins (installs `abstractcore[remote,vision,voice,audio,music]>=2.13.29`, including `abstractmusic>=0.1.12`).
|
|
119
119
|
|
|
120
120
|
Hardware profile cascades are available for native Python installs:
|
|
121
121
|
`abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
|
|
@@ -169,7 +169,7 @@ state = rt.resume(
|
|
|
169
169
|
assert state.status.value == "completed"
|
|
170
170
|
```
|
|
171
171
|
|
|
172
|
-
## What’s included (v0.4.
|
|
172
|
+
## What’s included (v0.4.24)
|
|
173
173
|
|
|
174
174
|
Kernel (dependency-light):
|
|
175
175
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -193,7 +193,7 @@ Drivers + distribution:
|
|
|
193
193
|
- run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
|
|
194
194
|
|
|
195
195
|
Optional integrations:
|
|
196
|
-
- AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/voice/music outputs, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
196
|
+
- AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
197
197
|
- For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
|
|
198
198
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
199
199
|
depends on the light AbstractMemory contract; hosts choose storage backends
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
6
6
|
|
|
7
|
-
**Version:** 0.4.
|
|
7
|
+
**Version:** 0.4.24 • **Python:** 3.10+
|
|
8
8
|
|
|
9
9
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
10
10
|
|
|
@@ -38,7 +38,7 @@ AbstractCore integration (LLM + tools):
|
|
|
38
38
|
pip install "abstractruntime[abstractcore]"
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
The `abstractcore` extra installs AbstractCore 2.13.
|
|
41
|
+
The `abstractcore` extra installs AbstractCore 2.13.29 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, task-aware model residency for text/image/video/TTS/STT, video generation endpoints, and the public local vision-cache catalog helper used by Runtime discovery remain aligned. Use `abstractruntime[multimodal]` when you need common media dependencies and capability plugins (installs `abstractcore[remote,vision,voice,audio,music]>=2.13.29`, including `abstractmusic>=0.1.12`).
|
|
42
42
|
|
|
43
43
|
Hardware profile cascades are available for native Python installs:
|
|
44
44
|
`abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
|
|
@@ -92,7 +92,7 @@ state = rt.resume(
|
|
|
92
92
|
assert state.status.value == "completed"
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
-
## What’s included (v0.4.
|
|
95
|
+
## What’s included (v0.4.24)
|
|
96
96
|
|
|
97
97
|
Kernel (dependency-light):
|
|
98
98
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -116,7 +116,7 @@ Drivers + distribution:
|
|
|
116
116
|
- run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
|
|
117
117
|
|
|
118
118
|
Optional integrations:
|
|
119
|
-
- AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/voice/music outputs, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
119
|
+
- AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
120
120
|
- For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
|
|
121
121
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
122
122
|
depends on the light AbstractMemory contract; hosts choose storage backends
|
|
@@ -26,7 +26,7 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
|
|
|
26
26
|
- `faq.md` — common questions (recommended)
|
|
27
27
|
- `troubleshooting.md` — symptom-oriented setup, runtime, and integration fixes
|
|
28
28
|
- `manual_testing.md` — manual smoke tests and how to run the test suite
|
|
29
|
-
- `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions, durable bloc prompt-cache control, media inputs, generated media outputs, and tool approval waits via AbstractCore
|
|
29
|
+
- `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
|
|
30
30
|
- `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
|
|
31
31
|
|
|
32
32
|
## Features (reference)
|
|
@@ -125,7 +125,7 @@ Key types:
|
|
|
125
125
|
Artifacts are used by:
|
|
126
126
|
- offloading wrappers (`src/abstractruntime/storage/offloading.py`)
|
|
127
127
|
- evidence capture (`docs/evidence.md`, `src/abstractruntime/evidence/recorder.py`)
|
|
128
|
-
- AbstractCore media integration: input artifact refs can be materialized for LLM calls, and generated image/voice/music/audio outputs are stored as artifact refs
|
|
128
|
+
- AbstractCore media integration: input artifact refs can be materialized for LLM calls, and generated image/video/voice/music/audio outputs are stored as artifact refs
|
|
129
129
|
|
|
130
130
|
## Snapshots / bookmarks
|
|
131
131
|
|
|
@@ -157,7 +157,7 @@ VisualFlow compiler helpers are available from `abstractruntime.visualflow_compi
|
|
|
157
157
|
- `compile_visualflow(...)` and `compile_visualflow_tree(...)` compile VisualFlow JSON into executable `WorkflowSpec` objects.
|
|
158
158
|
|
|
159
159
|
VisualFlow authoring note (media nodes):
|
|
160
|
-
- Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
|
|
160
|
+
- Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
|
|
161
161
|
- Generated-media and transcription nodes lower to a durable `EffectType.LLM_CALL` with an `output` selector (for example `{"modality":"music","task":"music_generation"}`), while `listen_voice` lowers to `WAIT_EVENT`. Hosts should persist the authoring node type rather than pre-lowering to `llm_call`.
|
|
162
162
|
|
|
163
163
|
Public bundle APIs are exported from `src/abstractruntime/workflow_bundle/__init__.py` and re-exported in `src/abstractruntime/__init__.py`:
|
|
@@ -180,7 +180,7 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
|
|
|
180
180
|
|
|
181
181
|
### AbstractCore (LLM + tools)
|
|
182
182
|
|
|
183
|
-
Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.
|
|
183
|
+
Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.29 or newer).
|
|
184
184
|
|
|
185
185
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
186
186
|
|
|
@@ -197,7 +197,7 @@ Entry points:
|
|
|
197
197
|
- host-facade client delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `get_model_residency_capabilities`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
|
|
198
198
|
- host-local prompt-cache export/import admin also lives on the host facade and client delegation layer (`list_prompt_cache_exports`, `prompt_cache_export`, `prompt_cache_import`) and is intentionally local-only
|
|
199
199
|
- host-facade email helpers delegate to Runtime's host-local comms facade/export layer (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
|
|
200
|
-
- run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
|
|
200
|
+
- run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
|
|
201
201
|
|
|
202
202
|
`LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
|
|
203
203
|
- `prompt`, `messages`, `system_prompt`, and convenience `text`
|
|
@@ -208,11 +208,11 @@ Entry points:
|
|
|
208
208
|
Multimodal support:
|
|
209
209
|
- install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, audio, and music dependencies
|
|
210
210
|
- local clients call AbstractCore's unified `generate(..., media=..., output=...)`
|
|
211
|
-
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
211
|
+
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, text-to-video, image-to-video, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
212
212
|
- remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
|
|
213
|
-
- generated image/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
213
|
+
- generated image/video/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
214
214
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
215
|
-
- optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; unsupported local media warmup for `image_generation`, `tts`, `stt`, and `music_generation` reports `requires_long_lived_server=true`, and image
|
|
215
|
+
- optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; unsupported local media warmup for `image_generation`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, and `music_generation` reports `requires_long_lived_server=true`, and generated image/video tasks also report `execution_mode="local_one_shot_subprocess"`
|
|
216
216
|
- Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected Core/capability install profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
|
|
217
217
|
|
|
218
218
|
Prompt cache / cached sessions:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AbstractRuntime — Architecture
|
|
2
2
|
|
|
3
3
|
> Updated: 2026-05-23
|
|
4
|
-
> Version: 0.4.
|
|
4
|
+
> Version: 0.4.24
|
|
5
5
|
> Scope: this describes **what is implemented in this repository**.
|
|
6
6
|
|
|
7
7
|
AbstractRuntime is a **durable workflow runtime**: it executes workflow graphs as a persisted state machine with explicit waits (user, time, events, jobs, subworkflows). A run can pause for hours/days and resume **without** keeping Python stacks/coroutines alive.
|
|
@@ -28,7 +28,7 @@ Key invariants (enforced by code, not convention):
|
|
|
28
28
|
|
|
29
29
|
## AbstractCore capability boundary
|
|
30
30
|
|
|
31
|
-
AbstractRuntime's job is persistence and orchestration. AbstractCore owns model/provider capability execution: chat, structured output, cached sessions/prompt cache, media input analysis, image generation, voice/audio generation, music generation,
|
|
31
|
+
AbstractRuntime's job is persistence and orchestration. AbstractCore owns model/provider capability execution: chat, structured output, cached sessions/prompt cache, media input analysis, image generation, video generation, voice/audio generation, music generation, and transcription.
|
|
32
32
|
|
|
33
33
|
The boundary is intentionally narrow:
|
|
34
34
|
- Workflow nodes request model work with `EffectType.LLM_CALL`; the runtime persists the request/result and delegates execution to the configured AbstractCore client.
|
|
@@ -169,7 +169,7 @@ Registered in `Runtime._register_builtin_handlers()` (`src/abstractruntime/core/
|
|
|
169
169
|
|
|
170
170
|
### Host-wired effects
|
|
171
171
|
The kernel defines the protocol; concrete integrations provide handlers:
|
|
172
|
-
- `LLM_CALL`, `TOOL_CALLS`, `MODEL_RESIDENCY`: provided by AbstractCore integration (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`). The integration supports local/remote/hybrid execution, cached sessions/prompt-cache control, discovery/catalog snapshots, model residency, durable run-scoped media child runs, media inputs, generated media outputs, provider-key header routing for remote servers, passthrough tools, and approval-gated local tool execution.
|
|
172
|
+
- `LLM_CALL`, `TOOL_CALLS`, `MODEL_RESIDENCY`: provided by AbstractCore integration (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`). The integration supports local/remote/hybrid execution, cached sessions/prompt-cache control, discovery/catalog snapshots, model residency, durable run-scoped media child runs, media inputs, generated media outputs, provider progress callbacks as ledger events, provider-key header routing for remote servers, passthrough tools, and approval-gated local tool execution.
|
|
173
173
|
- `MEMORY_KG_*`: provided by the AbstractMemory bridge (`src/abstractruntime/integrations/abstractmemory/effect_handlers.py`)
|
|
174
174
|
|
|
175
175
|
### Reliability: retries + idempotency
|
|
@@ -90,21 +90,22 @@ Yes, when the configured AbstractCore provider/model supports the media. Pass `p
|
|
|
90
90
|
Install `abstractruntime[multimodal]` for common media/vision/audio/music dependencies.
|
|
91
91
|
Docs: `integrations/abstractcore.md`. Code: `src/abstractruntime/integrations/abstractcore/effect_handlers.py`, `src/abstractruntime/integrations/abstractcore/llm_client.py`.
|
|
92
92
|
|
|
93
|
-
## How do I generate images, voice/audio, or music?
|
|
93
|
+
## How do I generate images, video, voice/audio, or music?
|
|
94
94
|
|
|
95
95
|
Use `LLM_CALL` with AbstractCore's `output` selector:
|
|
96
96
|
|
|
97
97
|
```python
|
|
98
98
|
{"text": "A red cube on a white table", "output": {"modality": "image", "format": "png"}}
|
|
99
|
+
{"text": "A logo reveal", "output": {"modality": "video", "task": "text_to_video", "provider": "mlx-gen", "model": "Wan-AI/Wan2.2-TI2V-5B-Diffusers", "format": "mp4"}}
|
|
99
100
|
{"text": "Hello from Runtime", "output": {"modality": "voice", "voice": "alloy", "format": "wav"}}
|
|
100
101
|
{"text": "Warm lo-fi piano with brushed drums", "output": {"modality": "music", "provider": "acemusic", "model": "ace-step", "format": "wav"}}
|
|
101
102
|
```
|
|
102
103
|
|
|
103
|
-
Generated bytes require a runtime `ArtifactStore`. The durable result contains `artifact_id` / `artifact_ref`, not inline binary data. Remote and hybrid runtimes support common AbstractCore Server endpoints for image generation, image edits, speech, music generation, transcription, and chat media. Local runtimes can use richer AbstractCore capability plugins for voice cloning, reference-guided generation,
|
|
104
|
+
Generated bytes require a runtime `ArtifactStore`. The durable result contains `artifact_id` / `artifact_ref`, not inline binary data. Remote and hybrid runtimes support common AbstractCore Server endpoints for image generation, image edits, text-to-video, image-to-video, speech, music generation, transcription, and chat media. Local runtimes can use richer AbstractCore capability plugins for voice cloning, reference-guided generation, local text-to-music, and local video generation when those AbstractCore capabilities are installed.
|
|
104
105
|
|
|
105
106
|
## Does AbstractRuntime implement image, voice, music, or video engines?
|
|
106
107
|
|
|
107
|
-
No. AbstractRuntime provides the durable graph runner, checkpoint/ledger model, waits, and artifact boundary. AbstractCore provides the LLM/media generation and analysis capabilities.
|
|
108
|
+
No. AbstractRuntime provides the durable graph runner, checkpoint/ledger model, waits, and artifact boundary. AbstractCore provides the LLM/media generation and analysis capabilities. Image, video, voice, transcription, and music all flow through the same JSON-safe `output` selector plus artifact-backed result shape; Runtime does not implement provider engines itself.
|
|
108
109
|
|
|
109
110
|
## Where should cached session or prompt-cache state live?
|
|
110
111
|
|
|
@@ -283,6 +284,8 @@ Docs: `provenance.md`. Code: `src/abstractruntime/storage/ledger_chain.py`.
|
|
|
283
284
|
If your `LedgerStore` supports subscriptions (or is wrapped with `ObservableLedgerStore`), you can subscribe in-process:
|
|
284
285
|
- `Runtime.subscribe_ledger(callback, run_id=...)`
|
|
285
286
|
|
|
287
|
+
Long-running generated media uses the same ledger stream. Runtime converts provider progress callbacks into `EMIT_EVENT` ledger records named `abstract.progress` with JSON-safe payloads such as `phase`, `step`, `total_steps`, `frame`, `total_frames`, and `progress`.
|
|
288
|
+
|
|
286
289
|
Docs: `architecture.md`. Code: `src/abstractruntime/core/runtime.py` (`subscribe_ledger`), `src/abstractruntime/storage/observable.py`.
|
|
287
290
|
|
|
288
291
|
## What is “evidence capture”?
|
|
@@ -18,7 +18,7 @@ Optional (LLM + tools via AbstractCore):
|
|
|
18
18
|
pip install "abstractruntime[abstractcore]"
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
This installs AbstractCore 2.13.
|
|
21
|
+
This installs AbstractCore 2.13.29 or newer, which matches the documented server auth, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool behavior, public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, and the public local vision-cache catalog helper used by Runtime discovery. Use `abstractruntime[multimodal]` when your workflows need common media dependencies and capability plugins (installs `abstractcore[remote,vision,voice,audio,music]>=2.13.29`, including `abstractmusic>=0.1.12`).
|
|
22
22
|
|
|
23
23
|
## Mental model (source of truth)
|
|
24
24
|
|
|
@@ -16,7 +16,7 @@ Implementation pointers (this repo):
|
|
|
16
16
|
pip install "abstractruntime[abstractcore]"
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
This extra installs AbstractCore 2.13.
|
|
19
|
+
This extra installs AbstractCore 2.13.29 or newer. That is the supported baseline for the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, capability catalog, prompt-cache control-plane endpoints, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, and the public local vision-cache catalog helper used by Runtime discovery.
|
|
20
20
|
|
|
21
21
|
For AbstractCore's multimodal `generate(..., output=...)` path, use the newer baseline and optional media packages:
|
|
22
22
|
|
|
@@ -24,7 +24,7 @@ For AbstractCore's multimodal `generate(..., output=...)` path, use the newer ba
|
|
|
24
24
|
pip install "abstractruntime[multimodal]"
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
This installs `abstractcore[remote,vision,voice,audio,music]>=2.13.
|
|
27
|
+
This installs `abstractcore[remote,vision,voice,audio,music]>=2.13.29`. Local image/video/voice/music generation still depends on the configured AbstractCore capability backends (for example AbstractVision, AbstractVoice, and AbstractMusic, or OpenAI/OpenAI-compatible remote engines). With `abstractmusic>=0.1.12`, the base music extra includes the lightweight remote ACE Music backend without local model-runtime extras.
|
|
28
28
|
|
|
29
29
|
The MCP worker entrypoint uses the `mcp-worker` extra:
|
|
30
30
|
|
|
@@ -101,7 +101,7 @@ print(state.output)
|
|
|
101
101
|
"messages": [{"role": "user", "content": "..."}],
|
|
102
102
|
"system_prompt": "...",
|
|
103
103
|
"media": ["path/or/artifact-ref"],
|
|
104
|
-
"output": {"modality": "text|image|voice|music", "task": "optional"},
|
|
104
|
+
"output": {"modality": "text|image|video|voice|music", "task": "optional"},
|
|
105
105
|
"tools": [{"name": "...", "description": "...", "parameters": {...}}],
|
|
106
106
|
"params": {
|
|
107
107
|
"temperature": 0.0,
|
|
@@ -178,6 +178,48 @@ Effect(
|
|
|
178
178
|
)
|
|
179
179
|
```
|
|
180
180
|
|
|
181
|
+
Generate video:
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
Effect(
|
|
185
|
+
type=EffectType.LLM_CALL,
|
|
186
|
+
payload={
|
|
187
|
+
"prompt": "Glowing data streams converge into a geometric logo.",
|
|
188
|
+
"output": {
|
|
189
|
+
"modality": "video",
|
|
190
|
+
"task": "text_to_video",
|
|
191
|
+
"provider": "mlx-gen",
|
|
192
|
+
"model": "Wan-AI/Wan2.2-TI2V-5B-Diffusers",
|
|
193
|
+
"format": "mp4",
|
|
194
|
+
"num_frames": 41,
|
|
195
|
+
"fps": 24,
|
|
196
|
+
"steps": 10,
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
result_key="video_result",
|
|
200
|
+
)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Image to video:
|
|
204
|
+
|
|
205
|
+
```python
|
|
206
|
+
Effect(
|
|
207
|
+
type=EffectType.LLM_CALL,
|
|
208
|
+
payload={
|
|
209
|
+
"prompt": "Add a slow camera orbit.",
|
|
210
|
+
"media": {"$artifact": "source_image_artifact_id", "type": "image", "role": "source"},
|
|
211
|
+
"output": {
|
|
212
|
+
"modality": "video",
|
|
213
|
+
"task": "image_to_video",
|
|
214
|
+
"provider": "mlx-gen",
|
|
215
|
+
"model": "Wan-AI/Wan2.2-TI2V-5B-Diffusers",
|
|
216
|
+
"format": "mp4",
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
result_key="video_result",
|
|
220
|
+
)
|
|
221
|
+
```
|
|
222
|
+
|
|
181
223
|
Transcribe/analyze audio:
|
|
182
224
|
|
|
183
225
|
```python
|
|
@@ -211,21 +253,23 @@ Generated binary media requires a runtime `ArtifactStore` and is stored there. T
|
|
|
211
253
|
Media-only normalized results now distinguish orchestration identity from the actual media backend:
|
|
212
254
|
|
|
213
255
|
- `runtime_provider` / `runtime_model`: the runtime-side orchestration identity, when relevant
|
|
214
|
-
- `media_provider` / `media_model`: the actual image/voice/music backend identity surfaced from the generated output
|
|
256
|
+
- `media_provider` / `media_model`: the actual image/video/voice/music backend identity surfaced from the generated output
|
|
215
257
|
|
|
216
258
|
For local one-shot subprocess image generation, runtime metadata also records `execution_mode="local_one_shot_subprocess"`.
|
|
217
259
|
|
|
218
|
-
|
|
260
|
+
Long-running generated media may expose provider progress callbacks. Runtime injects a transient `on_progress` callback during `LLM_CALL` execution and persists each callback as an `EMIT_EVENT` ledger record named `abstract.progress`. The callback itself is never stored in the effect payload or run vars.
|
|
261
|
+
|
|
262
|
+
Remote runtimes support chat media by sending OpenAI-compatible data URL content arrays to AbstractCore Server. They also support image generation (`/v1/images/generations`), image edits (`/v1/images/edits` or `/{provider}/v1/images/edits`), text-to-video (`/v1/videos/generations`), image-to-video (`/v1/videos/edits` or `/{provider}/v1/videos/edits`), TTS (`/v1/audio/speech`), music generation (`/v1/audio/music`), and STT (`/v1/audio/transcriptions`) with the same artifact-backed result shape. Remote media endpoint calls do not inherit the chat model by default; pass an output-specific `model` only when you want a remote provider/model instead of the server's configured capability default. Remote STT requires exactly one audio media item that resolves to a local file path or artifact-backed temporary file. Remote image edits and image-to-video require one source image media item resolving to a local path or artifact-backed temporary file. For voice clone/register or reference-guided TTS, use local execution so AbstractCore can use its in-process capability dispatcher. Runtime does not import `abstractmusic` directly; local music support comes through the configured AbstractCore capability stack.
|
|
219
263
|
|
|
220
264
|
Remote multimodal generation currently supports one `output` selector per `LLM_CALL`. Hybrid runtimes use the same remote LLM/media path as remote mode while executing tools locally. Local runtimes can use AbstractCore's in-process multimodal dispatcher for richer capability plugin behavior.
|
|
221
265
|
|
|
222
|
-
Local media residency is intentionally explicit when unsupported. `MODEL_RESIDENCY` results for local `image_generation`, `tts`, `stt`, and `music_generation` return:
|
|
266
|
+
Local media residency is intentionally explicit when unsupported. `MODEL_RESIDENCY` results for local `image_generation`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, and `music_generation` return:
|
|
223
267
|
|
|
224
268
|
- `code="model_residency_unsupported"`
|
|
225
269
|
- `requires_long_lived_server=true`
|
|
226
270
|
- `config_hint` pointing to `ABSTRACTCORE_SERVER_BASE_URL`
|
|
227
271
|
|
|
228
|
-
Image-generation residency responses also include `execution_mode="local_one_shot_subprocess"` because local
|
|
272
|
+
Image/video-generation residency responses also include `execution_mode="local_one_shot_subprocess"` because local generated media can be isolated into one-shot workers unless a long-lived Core server owns the media backend.
|
|
229
273
|
|
|
230
274
|
When the workflow marks residency as optional (`required=false`), the effect still completes durably but includes `status_hint="warning"` and `degraded=true` so hosts can render the no-op honestly.
|
|
231
275
|
|
|
@@ -665,6 +709,8 @@ Public durable entry points:
|
|
|
665
709
|
- `resume_tool_calls(...)`
|
|
666
710
|
- `generate_image(...)`
|
|
667
711
|
- `edit_image(...)`
|
|
712
|
+
- `generate_video(...)`
|
|
713
|
+
- `image_to_video(...)`
|
|
668
714
|
- `generate_voice(...)`
|
|
669
715
|
- `generate_music(...)`
|
|
670
716
|
- `transcribe_audio(...)`
|
|
@@ -687,7 +733,7 @@ facade = get_abstractcore_run_facade(rt)
|
|
|
687
733
|
child = facade.generate_image(
|
|
688
734
|
"existing-parent-run-id",
|
|
689
735
|
prompt="A red mug on a white table.",
|
|
690
|
-
output={"provider": "mlx-gen", "model": "
|
|
736
|
+
output={"provider": "mlx-gen", "model": "AbstractFramework/flux.2-klein-4b-4bit", "format": "png"},
|
|
691
737
|
)
|
|
692
738
|
|
|
693
739
|
assert child.status.value == "completed"
|
|
@@ -695,6 +741,23 @@ result = child.output["result"]
|
|
|
695
741
|
print(child.run_id, result["media_model"], result["outputs"]["image"][0]["artifact_id"])
|
|
696
742
|
```
|
|
697
743
|
|
|
744
|
+
For video, use the same child-run boundary:
|
|
745
|
+
|
|
746
|
+
```python
|
|
747
|
+
child = facade.generate_video(
|
|
748
|
+
"existing-parent-run-id",
|
|
749
|
+
prompt="Glowing data streams converge into a geometric logo.",
|
|
750
|
+
output={
|
|
751
|
+
"provider": "mlx-gen",
|
|
752
|
+
"model": "Wan-AI/Wan2.2-TI2V-5B-Diffusers",
|
|
753
|
+
"format": "mp4",
|
|
754
|
+
"num_frames": 41,
|
|
755
|
+
},
|
|
756
|
+
)
|
|
757
|
+
|
|
758
|
+
print(child.run_id, child.output["result"]["outputs"]["video"][0]["artifact_id"])
|
|
759
|
+
```
|
|
760
|
+
|
|
698
761
|
Outbound comms sends that belong to a run should use the same durable child-run surface:
|
|
699
762
|
|
|
700
763
|
```python
|
|
@@ -21,7 +21,7 @@ Fix:
|
|
|
21
21
|
- `abstractruntime[abstractcore]` for LLM/tools integration.
|
|
22
22
|
- `abstractruntime[multimodal]` for common image, voice, audio, and music dependencies.
|
|
23
23
|
- `abstractruntime[mcp-worker]` for the MCP worker entry point.
|
|
24
|
-
- The current AbstractCore integration expects `abstractcore>=2.13.
|
|
24
|
+
- The current AbstractCore integration expects `abstractcore>=2.13.29`.
|
|
25
25
|
|
|
26
26
|
Verify:
|
|
27
27
|
|
|
@@ -84,7 +84,7 @@ Docs:
|
|
|
84
84
|
## Local media residency returns `model_residency_unsupported`
|
|
85
85
|
|
|
86
86
|
Symptom:
|
|
87
|
-
- A local `MODEL_RESIDENCY` load for `image_generation`, `tts`, `stt`, or `music_generation` returns `ok=false` with
|
|
87
|
+
- A local `MODEL_RESIDENCY` load for `image_generation`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, or `music_generation` returns `ok=false` with
|
|
88
88
|
`code="model_residency_unsupported"`.
|
|
89
89
|
|
|
90
90
|
Meaning:
|
|
@@ -133,4 +133,3 @@ abstractruntime-mcp-worker --help
|
|
|
133
133
|
|
|
134
134
|
Docs:
|
|
135
135
|
- `mcp-worker.md`
|
|
136
|
-
|
|
@@ -10,11 +10,11 @@ This file is an **agent-oriented build guide** for the AbstractRuntime *library*
|
|
|
10
10
|
|
|
11
11
|
Quick facts:
|
|
12
12
|
- Python: 3.10+ (`pyproject.toml`)
|
|
13
|
-
- Version: 0.4.
|
|
13
|
+
- Version: 0.4.24
|
|
14
14
|
- Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella; pairs with [AbstractCore](https://github.com/lpalbou/abstractcore)
|
|
15
15
|
- Public export surface (source of truth): `src/abstractruntime/__init__.py`
|
|
16
|
-
- Optional AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.
|
|
17
|
-
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[remote,vision,voice,audio,music]>=2.13.
|
|
16
|
+
- Optional AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.29`
|
|
17
|
+
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[remote,vision,voice,audio,music]>=2.13.29`
|
|
18
18
|
- Config boundary: Runtime does not read `ABSTRACTGATEWAY_*`; Gateway-owned env/config should be translated into explicit Runtime inputs or Runtime-owned env names.
|
|
19
19
|
|
|
20
20
|
```mermaid
|
|
@@ -204,7 +204,7 @@ What you get:
|
|
|
204
204
|
- prompt-cache control methods and durable bloc/KV helpers on local/multi-local/remote LLM clients
|
|
205
205
|
- cached-session/prompt-cache routing through stable runtime keys; provider cache objects stay inside AbstractCore clients
|
|
206
206
|
- media input analysis and transcription via `LLM_CALL.media`
|
|
207
|
-
- generated image, voice/audio, and music outputs via AbstractCore's unified `generate(..., output=...)` selector
|
|
207
|
+
- generated image, video, voice/audio, and music outputs via AbstractCore's unified `generate(..., output=...)` selector
|
|
208
208
|
- generated binary outputs require a runtime ArtifactStore and are normalized to ArtifactStore refs instead of inline bytes
|
|
209
209
|
- hardened remote provider-key routing: server auth uses `Authorization`, provider overrides use `X-AbstractCore-Provider-API-Key`
|
|
210
210
|
- optional MCP worker entrypoint (`abstractruntime-mcp-worker`)
|
|
@@ -304,7 +304,7 @@ Result shape for generated media is JSON-safe:
|
|
|
304
304
|
}
|
|
305
305
|
```
|
|
306
306
|
|
|
307
|
-
Boundary rule: AbstractRuntime is the durable graph runner. It does not implement image, voice, music, or
|
|
307
|
+
Boundary rule: AbstractRuntime is the durable graph runner. It does not implement image, video, voice, music, or transcription model engines. AbstractCore owns provider capability plugins and server endpoints; Runtime carries JSON-safe requests, persists checkpoints/ledger entries, materializes input artifact refs for provider calls, stores generated bytes as artifacts, and records provider progress callbacks as `abstract.progress` ledger events.
|
|
308
308
|
|
|
309
309
|
Remote multimodal guardrails:
|
|
310
310
|
- remote/hybrid media generation uses AbstractCore Server endpoints, not the local AbstractCore capability dispatcher
|
|
@@ -383,7 +383,7 @@ Durability and distribution:
|
|
|
383
383
|
- `docs/evidence.md`: artifact-backed evidence capture for boundary tools
|
|
384
384
|
- `docs/snapshots.md`: snapshot/bookmark model
|
|
385
385
|
- `docs/workflow-bundles.md`: `.flow` bundle format, VisualFlow distribution, and concrete multi-entry fan-in metadata
|
|
386
|
-
- VisualFlow media nodes (`generate_image`, `edit_image`/`image_to_image`, `generate_voice`, `generate_music`, `transcribe_audio`) compile to `LLM_CALL` with an `output` selector, while `listen_voice` compiles to `WAIT_EVENT` (persist the authoring node type; no client-side lowering required).
|
|
386
|
+
- VisualFlow media nodes (`generate_image`, `edit_image`/`image_to_image`, `generate_video`/`text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`) compile to `LLM_CALL` with an `output` selector, while `listen_voice` compiles to `WAIT_EVENT` (persist the authoring node type; no client-side lowering required).
|
|
387
387
|
- VisualFlow multi-entry fan-in is lowered into internal `join_exec` and `path_mux` nodes when authoring JSON uses `entryRoutes` and `inputRouteOverrides`.
|
|
388
388
|
|
|
389
389
|
## VisualFlow multi-entry fan-in (LLM authoring note)
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
> Durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
|
|
4
4
|
|
|
5
5
|
- Python: 3.10+ (see `pyproject.toml`)
|
|
6
|
-
- Version: 0.4.
|
|
6
|
+
- Version: 0.4.24
|
|
7
7
|
- Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella, integrates with [AbstractCore](https://github.com/lpalbou/abstractcore)
|
|
8
8
|
- Hard invariant: `RunState.vars` must be JSON-serializable (`src/abstractruntime/core/models.py`)
|
|
9
|
-
- Current AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.
|
|
10
|
-
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[remote,vision,voice,audio,music]>=2.13.
|
|
9
|
+
- Current AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.29`
|
|
10
|
+
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[remote,vision,voice,audio,music]>=2.13.29`
|
|
11
11
|
- Config boundary: Runtime does not read `ABSTRACTGATEWAY_*`; Gateway-owned config should be translated into explicit Runtime inputs or Runtime-owned env names.
|
|
12
12
|
|
|
13
13
|
## Start here
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
|
|
36
36
|
## Integrations
|
|
37
37
|
|
|
38
|
-
- [AbstractCore integration](docs/integrations/abstractcore.md): `LLM_CALL` / `TOOL_CALLS` / `MODEL_RESIDENCY`, local/remote/hybrid, prompt-cache and residency host controls, local-only prompt-cache export/import admin, durable bloc/KV prompt-cache controls, discovery snapshot queries, durable run-scoped image/edit-image/voice/music/STT execution, media inputs, generated media outputs, provider-key headers, and tool approval waits
|
|
39
|
-
- Prompt-cache tracks: use `LLM_CALL.params.prompt_cache_key`, `run.vars["_runtime"]["prompt_cache"]`, or `ABSTRACTRUNTIME_PROMPT_CACHE` for best-effort text/chat session reuse; use `LLM_CALL.params.prompt_cache_binding` for durable exact bloc-backed reuse; and use `get_abstractcore_host_facade(runtime).list_prompt_cache_exports(...)`, `prompt_cache_export(...)`, and `prompt_cache_import(...)` only for host-local operator/admin export-import workflows around live local provider caches. Runtime does not auto-derive prompt-cache keys for image/voice/music/STT output selectors. Local Runtime stores one content-addressed bloc per root plus provider/model-specific derived KV artifacts. Gateway prompt-cache env belongs in Gateway.
|
|
38
|
+
- [AbstractCore integration](docs/integrations/abstractcore.md): `LLM_CALL` / `TOOL_CALLS` / `MODEL_RESIDENCY`, local/remote/hybrid, prompt-cache and residency host controls, local-only prompt-cache export/import admin, durable bloc/KV prompt-cache controls, discovery snapshot queries, durable run-scoped image/edit-image/text-to-video/image-to-video/voice/music/STT execution, media inputs, generated media outputs, progress ledger events, provider-key headers, and tool approval waits
|
|
39
|
+
- Prompt-cache tracks: use `LLM_CALL.params.prompt_cache_key`, `run.vars["_runtime"]["prompt_cache"]`, or `ABSTRACTRUNTIME_PROMPT_CACHE` for best-effort text/chat session reuse; use `LLM_CALL.params.prompt_cache_binding` for durable exact bloc-backed reuse; and use `get_abstractcore_host_facade(runtime).list_prompt_cache_exports(...)`, `prompt_cache_export(...)`, and `prompt_cache_import(...)` only for host-local operator/admin export-import workflows around live local provider caches. Runtime does not auto-derive prompt-cache keys for image/video/voice/music/STT output selectors. Local Runtime stores one content-addressed bloc per root plus provider/model-specific derived KV artifacts. Gateway prompt-cache env belongs in Gateway.
|
|
40
40
|
- Durable bloc lifecycle: Runtime exposes `list_blocs(...)`, `list_bloc_kv_artifacts(...)`, `delete_bloc_kv_artifact(...)`, `prune_bloc_kv_artifacts(...)`, and `delete_bloc(...)`, with `dry_run`, `clear_loaded`, and `force` safety controls on the host facade.
|
|
41
41
|
- Runtime-owned Core surfaces: `get_abstractcore_discovery_facade(...)`, `get_abstractcore_host_facade(...)`, and `get_abstractcore_run_facade(...)`
|
|
42
42
|
- Host-local operator wrappers: the host facade and `abstractruntime.integrations.abstractcore.comms_facade` expose email helpers (`list_email_accounts`, `list_emails`, `read_email`, `send_email`), and `abstractruntime.integrations.abstractcore.telegram_facade` exposes Telegram bootstrap/global-client/send wrappers without requiring hosts to import AbstractCore directly.
|
|
43
43
|
- Durable outbound comms: when an email or Telegram send belongs to a run, use `get_abstractcore_run_facade(...).send_email(...)` or `send_telegram_message(...)` so Runtime records the request and outcome in a child run; replay should show the recorded result, not resend the message. If the child run waits for approval or passthrough execution, resume it through `resume_tool_calls(...)`.
|
|
44
44
|
- [Artifacts](docs/api.md#artifacts-store-by-reference): JSON-safe refs for large payloads; generated images/audio/voice/music are stored here rather than embedded in `RunState.vars`
|
|
45
|
-
- Remote multimodal guardrail: remote/hybrid media generation uses AbstractCore Server endpoints, does not inherit the chat model for media endpoints, routes image edits through Core `/images/edits`, rejects unsupported input media and non-file STT inputs instead of ignoring them, and redacts data URLs from persisted provider-request metadata
|
|
45
|
+
- Remote multimodal guardrail: remote/hybrid media generation uses AbstractCore Server endpoints, does not inherit the chat model for media endpoints, routes image edits through Core `/images/edits`, routes video generation through Core `/videos/*`, rejects unsupported input media and non-file STT inputs instead of ignoring them, and redacts data URLs from persisted provider-request metadata
|
|
46
46
|
- [MCP worker](docs/mcp-worker.md): `abstractruntime-mcp-worker` CLI (stdio/HTTP)
|
|
47
47
|
- [Comms toolset](docs/tools-comms.md): opt-in email/WhatsApp/Telegram gating
|
|
48
48
|
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
## Distribution
|
|
56
56
|
|
|
57
57
|
- [WorkflowBundles](docs/workflow-bundles.md): `.flow` bundle format, VisualFlow compilation, concrete multi-entry fan-in metadata, and shared/framework registry directory resolution
|
|
58
|
-
- VisualFlow media nodes: `generate_image`, `edit_image`/`image_to_image`, `generate_voice`, `generate_music`, and `transcribe_audio` compile to `LLM_CALL` with an `output` selector; `listen_voice` compiles to `WAIT_EVENT` (no client-side lowering required)
|
|
58
|
+
- VisualFlow media nodes: `generate_image`, `edit_image`/`image_to_image`, `generate_video`/`text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, and `transcribe_audio` compile to `LLM_CALL` with an `output` selector; `listen_voice` compiles to `WAIT_EVENT` (no client-side lowering required)
|
|
59
59
|
- [VisualFlow compiler](docs/architecture.md): lowers multi-entry `entryRoutes` / `inputRouteOverrides` into internal `join_exec` / `path_mux` nodes
|
|
60
60
|
|
|
61
61
|
## Maintainers
|