AbstractRuntime 0.4.15__tar.gz → 0.4.17__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.15 → abstractruntime-0.4.17}/CHANGELOG.md +30 -1
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/PKG-INFO +12 -12
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/README.md +4 -4
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/README.md +1 -1
- abstractruntime-0.4.17/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +104 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/adr/README.md +2 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/api.md +12 -9
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/architecture.md +3 -3
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/README.md +20 -2
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +2 -2
- abstractruntime-0.4.17/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +177 -0
- abstractruntime-0.4.17/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +145 -0
- abstractruntime-0.4.17/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +178 -0
- abstractruntime-0.4.17/docs/backlog/planned/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +165 -0
- abstractruntime-0.4.17/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +86 -0
- abstractruntime-0.4.17/docs/backlog/proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md +192 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/faq.md +48 -11
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/getting-started.md +2 -2
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/integrations/abstractcore.md +146 -9
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/llms-full.txt +14 -10
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/llms.txt +7 -6
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/pyproject.toml +10 -10
- abstractruntime-0.4.17/release-notes.md +10 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/__init__.py +1 -1
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +56 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +165 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +32 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/factory.py +4 -0
- abstractruntime-0.4.17/src/abstractruntime/integrations/abstractcore/host_facade.py +665 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/llm_client.py +1994 -25
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/run_facade.py +23 -1
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_abstractcore_discovery_facade.py +176 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_abstractcore_host_facade.py +465 -1
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_abstractcore_run_facade.py +75 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_multimodal_abstractcore_integration.py +54 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_packaging_extras.py +7 -7
- abstractruntime-0.4.17/tests/test_prompt_cache_modules.py +1293 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_remote_llm_client.py +58 -0
- abstractruntime-0.4.15/docs/backlog/proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md +0 -74
- abstractruntime-0.4.15/release-notes.md +0 -12
- abstractruntime-0.4.15/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -324
- abstractruntime-0.4.15/tests/test_prompt_cache_modules.py +0 -462
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/.gitignore +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/LICENSE +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/ROADMAP.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/SECURITY.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/backlog/proposed/2026-05-20_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/evidence.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/limits.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/proposal.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/provenance.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/tools-comms.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/examples/README.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/mkdocs.yml +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/pytest.ini +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/README.md +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/conftest.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.15 → abstractruntime-0.4.17}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.17] - 2026-05-21
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Runtime now surfaces AbstractCore-backed music through the same durable boundary as other generated artifacts:
|
|
14
|
+
- host discovery snapshot methods for music providers/models
|
|
15
|
+
- durable run-scoped `generate_music(...)`
|
|
16
|
+
- artifact-backed normalized music outputs for local and remote Runtime paths
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Minimum optional AbstractCore dependency floor is now `abstractcore>=2.13.24`.
|
|
20
|
+
- The `multimodal` extra now installs `abstractcore[remote,vision,voice,audio,music]>=2.13.24`, which includes AbstractMusic's lightweight remote ACE backend path via `abstractmusic>=0.1.4`.
|
|
21
|
+
- Runtime docs and AI-readable `llms.txt` / `llms-full.txt` now describe the shipped music boundary and the current `0030` Gateway cleanup scope more accurately.
|
|
22
|
+
|
|
23
|
+
## [0.4.16] - 2026-05-21
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- Public durable AbstractCore bloc lifecycle operations on `get_abstractcore_host_facade(...)` across local, remote, and hybrid runtimes:
|
|
27
|
+
- `list_blocs(...)`
|
|
28
|
+
- `list_bloc_kv_artifacts(...)`
|
|
29
|
+
- `delete_bloc_kv_artifact(...)`
|
|
30
|
+
- `prune_bloc_kv_artifacts(...)`
|
|
31
|
+
- `delete_bloc(...)`
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- Minimum optional AbstractCore dependency floor is now `abstractcore>=2.13.23`.
|
|
35
|
+
- Runtime's public docs and AI-readable `llms.txt` / `llms-full.txt` now describe the shipped durable bloc prompt-cache lifecycle boundary, including per-model KV artifacts and explicit cleanup controls.
|
|
36
|
+
|
|
10
37
|
## [0.4.15] - 2026-05-20
|
|
11
38
|
|
|
12
39
|
### Added
|
|
@@ -434,7 +461,9 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
434
461
|
|
|
435
462
|
Initial development version with basic proof-of-concept features.
|
|
436
463
|
|
|
437
|
-
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.
|
|
464
|
+
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.17...HEAD
|
|
465
|
+
[0.4.17]: https://github.com/lpalbou/abstractruntime/compare/v0.4.16...v0.4.17
|
|
466
|
+
[0.4.16]: https://github.com/lpalbou/abstractruntime/compare/v0.4.15...v0.4.16
|
|
438
467
|
[0.4.15]: https://github.com/lpalbou/abstractruntime/compare/v0.4.14...v0.4.15
|
|
439
468
|
[0.4.14]: https://github.com/lpalbou/abstractruntime/compare/v0.4.13...v0.4.14
|
|
440
469
|
[0.4.13]: https://github.com/lpalbou/abstractruntime/compare/v0.4.12...v0.4.13
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.17
|
|
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.24; 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.24; 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.24; 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.24; 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.24; 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.24; 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,remote,vision,voice]>=2.13.
|
|
64
|
+
Requires-Dist: abstractcore[audio,music,remote,vision,voice]>=2.13.24; 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.17 • **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.24 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, and lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, the public local vision-cache catalog helper used by Runtime discovery, and the lightweight `abstractmusic>=0.1.4` ACE-remote path used by Runtime music generation are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, audio, and music dependencies.
|
|
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.17)
|
|
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
|
|
196
|
+
- AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, durable bloc prompt-cache controls, bindings, and lifecycle operations, media inputs, generated image/voice/music outputs, tool approval waits): `docs/integrations/abstractcore.md`
|
|
197
197
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
198
198
|
depends on the light AbstractMemory contract; hosts choose storage backends
|
|
199
199
|
such as LanceDB, SQLite, or in-memory stores.
|
|
@@ -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.17 • **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.24 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, and lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, the public local vision-cache catalog helper used by Runtime discovery, and the lightweight `abstractmusic>=0.1.4` ACE-remote path used by Runtime music generation are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, audio, and music dependencies.
|
|
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.17)
|
|
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
|
|
119
|
+
- AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, durable bloc prompt-cache controls, bindings, and lifecycle operations, media inputs, generated image/voice/music outputs, tool approval waits): `docs/integrations/abstractcore.md`
|
|
120
120
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
121
121
|
depends on the light AbstractMemory contract; hosts choose storage backends
|
|
122
122
|
such as LanceDB, SQLite, or in-memory stores.
|
|
@@ -24,7 +24,7 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
|
|
|
24
24
|
|
|
25
25
|
- `faq.md` — common questions (recommended)
|
|
26
26
|
- `manual_testing.md` — manual smoke tests and how to run the test suite
|
|
27
|
-
- `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions
|
|
27
|
+
- `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
|
|
28
28
|
- `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
|
|
29
29
|
|
|
30
30
|
## Features (reference)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
## ADR 0006: Runtime owns durable AbstractCore bloc prompt-cache control
|
|
2
|
+
|
|
3
|
+
### Status
|
|
4
|
+
Accepted (2026-05-20)
|
|
5
|
+
|
|
6
|
+
### Context
|
|
7
|
+
AbstractCore `2.13.22` added a public durable prompt-cache contract for local
|
|
8
|
+
backends:
|
|
9
|
+
|
|
10
|
+
- text/file blocs as durable source-of-truth content,
|
|
11
|
+
- provider/model-specific KV artifacts,
|
|
12
|
+
- request-time `prompt_cache_binding` proof for exact reuse.
|
|
13
|
+
|
|
14
|
+
Before this decision, Runtime only owned:
|
|
15
|
+
|
|
16
|
+
- best-effort session prompt-cache controls,
|
|
17
|
+
- model-residency controls,
|
|
18
|
+
- discovery/query snapshots,
|
|
19
|
+
- durable run-scoped media execution.
|
|
20
|
+
|
|
21
|
+
That left a real gap for app-facing durable prompt caching:
|
|
22
|
+
|
|
23
|
+
- hosts had no public Runtime path for bloc/KV control operations;
|
|
24
|
+
- remote Runtime execution dropped `prompt_cache_binding`;
|
|
25
|
+
- `LLM_CALL` key injection could derive a competing session key even when a
|
|
26
|
+
durable binding was present;
|
|
27
|
+
- local Runtime had no explicit bloc-store root policy and would otherwise
|
|
28
|
+
inherit Core defaults implicitly.
|
|
29
|
+
|
|
30
|
+
### Decision
|
|
31
|
+
AbstractRuntime owns the host-facing durable AbstractCore bloc prompt-cache
|
|
32
|
+
boundary.
|
|
33
|
+
|
|
34
|
+
Specifically:
|
|
35
|
+
|
|
36
|
+
- Hosts should use the existing `AbstractCoreHostFacade` for durable bloc/KV
|
|
37
|
+
prompt-cache controls rather than adding a fourth public facade.
|
|
38
|
+
- The public host surface includes:
|
|
39
|
+
- `upsert_text_bloc(...)`
|
|
40
|
+
- `get_bloc_record(...)`
|
|
41
|
+
- `list_blocs(...)`
|
|
42
|
+
- `get_bloc_kv_manifest(...)`
|
|
43
|
+
- `ensure_bloc_kv_artifact(...)`
|
|
44
|
+
- `load_bloc_kv_artifact(...)`
|
|
45
|
+
- `list_bloc_kv_artifacts(...)`
|
|
46
|
+
- `delete_bloc_kv_artifact(...)`
|
|
47
|
+
- `prune_bloc_kv_artifacts(...)`
|
|
48
|
+
- `delete_bloc(...)`
|
|
49
|
+
- Runtime mirrors Core's public bloc request/response model instead of
|
|
50
|
+
inventing a Gateway-local save/load vocabulary.
|
|
51
|
+
- `LLM_CALL.payload.params.prompt_cache_binding` is the public Runtime binding
|
|
52
|
+
input. Runtime may also accept the local Python alias
|
|
53
|
+
`expected_prompt_cache_binding`, but it must normalize to
|
|
54
|
+
`prompt_cache_binding`.
|
|
55
|
+
- When a binding is present:
|
|
56
|
+
- `binding.key` becomes the effective `prompt_cache_key` when no explicit key
|
|
57
|
+
was supplied;
|
|
58
|
+
- mismatched `prompt_cache_key` and `binding.key` fail before provider or
|
|
59
|
+
server execution;
|
|
60
|
+
- Runtime must not auto-derive a competing session key;
|
|
61
|
+
- local session prompt-cache preparation must not mutate the bound key before
|
|
62
|
+
generation.
|
|
63
|
+
- Local Runtime owns an explicit bloc-root policy:
|
|
64
|
+
- default local root: `~/.abstractruntime/blocs`
|
|
65
|
+
- default file-runtime root: `<base_dir>/blocs`
|
|
66
|
+
- explicit `bloc_root_dir=` overrides are allowed for hosts such as Gateway
|
|
67
|
+
|
|
68
|
+
### Consequences
|
|
69
|
+
- Runtime becomes the public Python boundary for three distinct prompt-cache
|
|
70
|
+
tracks:
|
|
71
|
+
- session prompt-cache reuse,
|
|
72
|
+
- durable bloc/KV/binding reuse,
|
|
73
|
+
- local-admin snapshot save/load/list work if promoted later
|
|
74
|
+
- Hosts can expose durable bloc caching without reaching into Core or provider
|
|
75
|
+
internals.
|
|
76
|
+
- Hosts can also reclaim durable bloc/KV storage through the same Runtime
|
|
77
|
+
boundary instead of manual filesystem deletion or private Core hooks.
|
|
78
|
+
- Runtime does not silently inherit Core's default `~/.abstractcore/blocs`
|
|
79
|
+
layout.
|
|
80
|
+
- Provider-private prompt-cache snapshot save/load remains a separate local-admin
|
|
81
|
+
concern and is not promoted by this decision.
|
|
82
|
+
|
|
83
|
+
### Enforcement
|
|
84
|
+
- New host adoption work should use `get_abstractcore_host_facade(runtime)` for
|
|
85
|
+
durable bloc/KV operations.
|
|
86
|
+
- Runtime docs and AI-readable docs must describe the durable bloc track
|
|
87
|
+
separately from session prompt caching.
|
|
88
|
+
- Runtime code review should reject any new auto-derived prompt-cache behavior
|
|
89
|
+
that competes with `prompt_cache_binding`.
|
|
90
|
+
|
|
91
|
+
### Validation
|
|
92
|
+
- Host-facade tests cover delegation and remote route shaping for bloc/KV
|
|
93
|
+
operations.
|
|
94
|
+
- `LLM_CALL` tests cover binding-only adoption, alias normalization, and
|
|
95
|
+
mismatch fail-fast behavior.
|
|
96
|
+
- Regression coverage includes local/root-policy tests and the broader
|
|
97
|
+
AbstractCore Runtime facade suite.
|
|
98
|
+
|
|
99
|
+
### See Also
|
|
100
|
+
- Implementation: [`../backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md`](../backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md)
|
|
101
|
+
- Core binding contract: `../abstractcore/docs/adr/0007-durable-memory-bloc-cache-binding.md`
|
|
102
|
+
- Related Runtime ADRs:
|
|
103
|
+
- [`0004_runtime_owns_run_scoped_media_execution_truth.md`](0004_runtime_owns_run_scoped_media_execution_truth.md)
|
|
104
|
+
- [`0005_runtime_owns_abstractcore_host_discovery_queries.md`](0005_runtime_owns_abstractcore_host_discovery_queries.md)
|
|
@@ -18,6 +18,7 @@ When you ask "why is it designed this way?", the answer is in an ADR. ADRs are:
|
|
|
18
18
|
| 0003 | [Provenance Hash Chain](0003_provenance_tamper_evident_hash_chain.md) | Accepted | 2025-12-11 | Tamper-evident ledger first; cryptographic signatures deferred |
|
|
19
19
|
| 0004 | [Runtime Owns Run-Scoped Media Execution Truth](0004_runtime_owns_run_scoped_media_execution_truth.md) | Accepted | 2026-05-20 | Hosts must route run-scoped media execution through Runtime |
|
|
20
20
|
| 0005 | [Runtime Owns AbstractCore Host Discovery Queries](0005_runtime_owns_abstractcore_host_discovery_queries.md) | Accepted | 2026-05-20 | Hosts should ask Runtime for Core discovery/catalog snapshots |
|
|
21
|
+
| 0006 | [Runtime Owns Durable AbstractCore Bloc Prompt-Cache Control](0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md) | Accepted | 2026-05-20 | Hosts should use Runtime for durable bloc/KV controls and binding-aware execution |
|
|
21
22
|
|
|
22
23
|
## Relationship to Backlog
|
|
23
24
|
|
|
@@ -30,6 +31,7 @@ ADRs explain *why*. Backlog items explain *what* and *how*.
|
|
|
30
31
|
| 0003 | `backlog/completed/007_provenance_hash_chain.md`, `backlog/planned/008_signatures_and_keys.md` |
|
|
31
32
|
| 0004 | `backlog/completed/023_truthful_local_media_residency_boundaries.md`, `backlog/completed/024_runtime_owned_run_scoped_media_execution.md` |
|
|
32
33
|
| 0005 | `backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md` |
|
|
34
|
+
| 0006 | `backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md` |
|
|
33
35
|
|
|
34
36
|
## Adding New ADRs
|
|
35
37
|
|
|
@@ -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/audio outputs are stored as artifact refs
|
|
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
|
|
129
129
|
|
|
130
130
|
## Snapshots / bookmarks
|
|
131
131
|
|
|
@@ -176,7 +176,7 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
|
|
|
176
176
|
|
|
177
177
|
### AbstractCore (LLM + tools)
|
|
178
178
|
|
|
179
|
-
Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.
|
|
179
|
+
Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.24 or newer).
|
|
180
180
|
|
|
181
181
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
182
182
|
|
|
@@ -187,22 +187,22 @@ Entry points:
|
|
|
187
187
|
- public durable run facade: `AbstractCoreRunFacade`, `get_abstractcore_run_facade(...)` (`src/abstractruntime/integrations/abstractcore/run_facade.py`)
|
|
188
188
|
- effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
|
|
189
189
|
- tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
|
|
190
|
-
- discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_vision_provider_models`, `list_cached_vision_models`)
|
|
191
|
-
- host-facade 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`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
|
|
192
|
-
- run-facade helpers create durable child runs for existing runs (`execute_llm_call`, `generate_image`, `generate_voice`, `transcribe_audio`)
|
|
190
|
+
- discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`)
|
|
191
|
+
- host-facade 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`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
|
|
192
|
+
- run-facade helpers create durable child runs for existing runs (`execute_llm_call`, `generate_image`, `generate_voice`, `generate_music`, `transcribe_audio`)
|
|
193
193
|
|
|
194
194
|
`LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
|
|
195
195
|
- `prompt`, `messages`, `system_prompt`, and convenience `text`
|
|
196
196
|
- `media`: a media path, artifact ref (`{"$artifact": "..."}` or `{"artifact_id": "..."}`), media dict, or list of those
|
|
197
197
|
- `output`: AbstractCore output selector; top-level `outputs` is accepted as a runtime alias
|
|
198
|
-
- `params`: provider/model routing, generation controls, prompt-cache keys
|
|
198
|
+
- `params`: provider/model routing, generation controls, prompt-cache keys or `prompt_cache_binding`, structured-output schema options, and tracing metadata
|
|
199
199
|
|
|
200
200
|
Multimodal support:
|
|
201
|
-
- install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, and
|
|
201
|
+
- install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, audio, and music dependencies
|
|
202
202
|
- local clients call AbstractCore's unified `generate(..., media=..., output=...)`
|
|
203
|
-
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, speech, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
203
|
+
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, 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
|
|
204
204
|
- remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
|
|
205
|
-
- generated image/voice/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
205
|
+
- generated image/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
206
206
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
207
207
|
- optional local media residency failures complete with `status_hint="warning"` and `degraded=true`, while unsupported local media warmup also reports `execution_mode="local_one_shot_subprocess"` and `requires_long_lived_server=true`
|
|
208
208
|
- 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
|
|
@@ -210,6 +210,9 @@ Multimodal support:
|
|
|
210
210
|
Prompt cache / cached sessions:
|
|
211
211
|
- LLM clients expose cache control methods listed above for host-side preparation and inspection
|
|
212
212
|
- `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]` or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default
|
|
213
|
+
- `LLM_CALL.params.prompt_cache_binding` is the durable exact-reuse input for bloc-backed prompt caching; if a binding includes `key`, Runtime adopts it as the effective prompt-cache key and refuses mismatches before provider execution
|
|
214
|
+
- `get_abstractcore_host_facade(...)` also exposes durable bloc helpers (`upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`)
|
|
215
|
+
- local Runtime owns the bloc root policy: `~/.abstractruntime/blocs` by default, `<base_dir>/blocs` for `create_local_file_runtime(...)`, and explicit `bloc_root_dir=...` overrides when needed
|
|
213
216
|
- provider cache/session handles are not durable runtime state and should not be stored in `RunState.vars`
|
|
214
217
|
|
|
215
218
|
Attachment registration limits:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AbstractRuntime — Architecture
|
|
2
2
|
|
|
3
|
-
> Updated: 2026-05-
|
|
4
|
-
> Version: 0.4.
|
|
3
|
+
> Updated: 2026-05-21
|
|
4
|
+
> Version: 0.4.17
|
|
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, transcription, and future modalities such as
|
|
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, transcription, and future modalities such as video.
|
|
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.
|
|
@@ -10,6 +10,19 @@ This folder contains a structured backlog used during development. Items are gro
|
|
|
10
10
|
|
|
11
11
|
If you are new to the project, start with `../README.md` and `../architecture.md` instead.
|
|
12
12
|
|
|
13
|
+
## Next recommended work
|
|
14
|
+
|
|
15
|
+
1. `planned/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md`
|
|
16
|
+
This is the narrow Runtime work that unblocks the last high-pressure direct
|
|
17
|
+
`abstractcore` imports in Gateway for comms/email and Telegram without
|
|
18
|
+
reopening the already-completed media/discovery boundary work.
|
|
19
|
+
2. `planned/018_workspace_access_policy_for_media_and_tools.md`
|
|
20
|
+
Keep workspace and tool policy explicit while Gateway extracts its local
|
|
21
|
+
workspace helpers.
|
|
22
|
+
3. `planned/014_remote_tool_worker_executor.md`
|
|
23
|
+
The public ToolExecutor path is still the larger follow-on after the current
|
|
24
|
+
Gateway boundary cleanup.
|
|
25
|
+
|
|
13
26
|
## Completed
|
|
14
27
|
|
|
15
28
|
| ID | Item |
|
|
@@ -34,6 +47,9 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
34
47
|
| 023 | `completed/023_truthful_local_media_residency_boundaries.md` |
|
|
35
48
|
| 024 | `completed/024_runtime_owned_run_scoped_media_execution.md` |
|
|
36
49
|
| 026 | `completed/026_runtime_host_discovery_facade_for_core_catalogs.md` |
|
|
50
|
+
| 027 | `completed/027_runtime_durable_bloc_prompt_cache_facade.md` |
|
|
51
|
+
| 028 | `completed/028_runtime_bloc_kv_lifecycle_and_pruning.md` |
|
|
52
|
+
| 029 | `completed/029_runtime_music_generation_and_discovery_via_abstractcore.md` |
|
|
37
53
|
|
|
38
54
|
## Planned
|
|
39
55
|
|
|
@@ -44,13 +60,15 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
44
60
|
| 017 | `planned/017_limit_warnings_and_observability.md` |
|
|
45
61
|
| 018 | `planned/018_workspace_access_policy_for_media_and_tools.md` |
|
|
46
62
|
| 025 | `planned/025_runtime_retention_and_purge_contract.md` |
|
|
63
|
+
| 0030 | `planned/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md` |
|
|
47
64
|
|
|
48
65
|
## Proposed
|
|
49
66
|
|
|
50
|
-
|
|
|
51
|
-
|
|
67
|
+
| ID | Item |
|
|
68
|
+
|----|------|
|
|
52
69
|
| 2026-05-20 | `proposed/2026-05-20_agent_runtime_convenience_constructor.md` |
|
|
53
70
|
| 2026-05-20 | `proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md` |
|
|
71
|
+
| 0031 | `proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md` |
|
|
54
72
|
|
|
55
73
|
## Deprecated
|
|
56
74
|
|
|
@@ -18,7 +18,7 @@ the base package, while still exposing explicit extras and profile cascades for
|
|
|
18
18
|
`abstractruntime[multimodal]`.
|
|
19
19
|
- Runtime now exposes explicit profile-cascade extras (`apple`, `gpu`, `all-apple`, `all-gpu`) instead of requiring
|
|
20
20
|
hosts to guess how to align local-engine install profiles.
|
|
21
|
-
- The package metadata floor has since advanced to `abstractcore>=2.13.
|
|
21
|
+
- The package metadata floor has since advanced to `abstractcore>=2.13.23`; the original completion landed on an older
|
|
22
22
|
2.13.12-aligned floor and was later tightened without changing the boundary itself.
|
|
23
23
|
- Regression tests cover package metadata, optional-stack imports, and the rule that Gateway env/auth does not leak
|
|
24
24
|
into Runtime's remote AbstractCore client boundary.
|
|
@@ -79,7 +79,7 @@ through extras, and tests prove the packaging/import boundary.
|
|
|
79
79
|
|
|
80
80
|
### Residual risks
|
|
81
81
|
|
|
82
|
-
- Version-floor references in historical backlog text had drifted behind the current `abstractcore>=2.13.
|
|
82
|
+
- Version-floor references in historical backlog text had drifted behind the current `abstractcore>=2.13.23` baseline.
|
|
83
83
|
That drift is now explicit here, but other historical backlog notes may still mention `2.13.12`.
|
|
84
84
|
- This item validates the package/import boundary, not every higher-level deployment profile that Gateway may choose.
|
|
85
85
|
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# 027 Runtime Durable Bloc Prompt-Cache Facade
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
- Created: 2026-05-20
|
|
5
|
+
- Status: Completed
|
|
6
|
+
- Completed: 2026-05-20
|
|
7
|
+
- Origin: promoted from `proposed/2026-05-20_runtime_durable_bloc_prompt_cache_facade.md`
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Give hosts a public Runtime-owned path for durable AbstractCore bloc/KV
|
|
12
|
+
prompt-cache operations and make normal Runtime `LLM_CALL` execution binding
|
|
13
|
+
aware, so apps can use exact prompt-cache reuse across restarts without
|
|
14
|
+
reaching into Core or provider internals.
|
|
15
|
+
|
|
16
|
+
## What Shipped
|
|
17
|
+
|
|
18
|
+
- Extended `AbstractCoreHostFacade` with durable bloc/KV methods:
|
|
19
|
+
- `upsert_text_bloc(...)`
|
|
20
|
+
- `get_bloc_record(...)`
|
|
21
|
+
- `get_bloc_kv_manifest(...)`
|
|
22
|
+
- `ensure_bloc_kv_artifact(...)`
|
|
23
|
+
- `load_bloc_kv_artifact(...)`
|
|
24
|
+
- Wired those methods through local, multi-local, remote, and hybrid
|
|
25
|
+
AbstractCore Runtime clients.
|
|
26
|
+
- Forwarded `prompt_cache_binding` through remote Runtime execution.
|
|
27
|
+
- Made Runtime `LLM_CALL` key injection binding-aware:
|
|
28
|
+
- normalize `expected_prompt_cache_binding` to `prompt_cache_binding`
|
|
29
|
+
- adopt `binding.key` when no explicit key is supplied
|
|
30
|
+
- fail fast on mismatched explicit key vs binding key
|
|
31
|
+
- skip derived session-key injection when a binding is present
|
|
32
|
+
- Added an explicit local Runtime bloc-root policy:
|
|
33
|
+
- default local root: `~/.abstractruntime/blocs`
|
|
34
|
+
- default file-runtime root: `<base_dir>/blocs`
|
|
35
|
+
- optional `bloc_root_dir=...` override
|
|
36
|
+
- Raised the AbstractCore dependency floor to `2.13.22`.
|
|
37
|
+
|
|
38
|
+
## Current Code Pointers
|
|
39
|
+
|
|
40
|
+
- `src/abstractruntime/integrations/abstractcore/host_facade.py`
|
|
41
|
+
- `src/abstractruntime/integrations/abstractcore/llm_client.py`
|
|
42
|
+
- `src/abstractruntime/integrations/abstractcore/effect_handlers.py`
|
|
43
|
+
- `src/abstractruntime/integrations/abstractcore/factory.py`
|
|
44
|
+
- `tests/test_abstractcore_host_facade.py`
|
|
45
|
+
- `tests/test_prompt_cache_modules.py`
|
|
46
|
+
- `tests/test_remote_llm_client.py`
|
|
47
|
+
- `tests/test_packaging_extras.py`
|
|
48
|
+
- `docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md`
|
|
49
|
+
|
|
50
|
+
## Validation
|
|
51
|
+
|
|
52
|
+
Focused validation run on 2026-05-20:
|
|
53
|
+
|
|
54
|
+
- `pytest -q tests/test_abstractcore_host_facade.py tests/test_remote_llm_client.py tests/test_prompt_cache_modules.py tests/test_packaging_extras.py`
|
|
55
|
+
- Result: `40 passed in 0.16s`
|
|
56
|
+
|
|
57
|
+
Broader regression slice:
|
|
58
|
+
|
|
59
|
+
- `pytest -q tests/test_abstractcore_discovery_facade.py tests/test_abstractcore_host_facade.py tests/test_abstractcore_run_facade.py tests/test_model_residency_control_plane.py tests/test_multimodal_abstractcore_integration.py tests/test_remote_llm_client.py tests/test_prompt_cache_modules.py tests/test_packaging_extras.py tests/test_runtime_install_boundary.py`
|
|
60
|
+
- Result: `108 passed in 0.37s`
|
|
61
|
+
|
|
62
|
+
Additional validation:
|
|
63
|
+
|
|
64
|
+
- `python -m py_compile src/abstractruntime/integrations/abstractcore/llm_client.py src/abstractruntime/integrations/abstractcore/host_facade.py src/abstractruntime/integrations/abstractcore/factory.py src/abstractruntime/integrations/abstractcore/effect_handlers.py tests/test_abstractcore_host_facade.py tests/test_prompt_cache_modules.py tests/test_remote_llm_client.py tests/test_packaging_extras.py`
|
|
65
|
+
- Result: clean
|
|
66
|
+
|
|
67
|
+
Practical proof points from the shipped tests:
|
|
68
|
+
|
|
69
|
+
- Remote Runtime now forwards `prompt_cache_binding` in chat-generation
|
|
70
|
+
requests and preserves the exact binding payload.
|
|
71
|
+
- Remote Runtime omits local loaded-runtime selectors when bloc/KV calls are
|
|
72
|
+
explicitly proxied with `base_url=...`.
|
|
73
|
+
- Local Runtime bloc helpers use the Runtime-owned bloc root and return
|
|
74
|
+
structured artifact metadata including `prompt_cache_binding`.
|
|
75
|
+
- Binding-aware execution accepts binding-only requests, preserves matching
|
|
76
|
+
explicit keys, rejects mismatches before provider execution, and does not
|
|
77
|
+
derive a competing session key for keyless bindings.
|
|
78
|
+
|
|
79
|
+
## Completion report
|
|
80
|
+
|
|
81
|
+
### Date
|
|
82
|
+
|
|
83
|
+
2026-05-20
|
|
84
|
+
|
|
85
|
+
### Summary
|
|
86
|
+
|
|
87
|
+
Runtime now owns the app-facing durable bloc prompt-cache boundary for
|
|
88
|
+
AbstractCore-backed hosts. Hosts can create or read durable blocs, ensure or
|
|
89
|
+
load KV artifacts, and then execute ordinary `LLM_CALL`s with a
|
|
90
|
+
`prompt_cache_binding` through Runtime rather than relying on provider-private
|
|
91
|
+
snapshot hacks.
|
|
92
|
+
|
|
93
|
+
### Behavior changes
|
|
94
|
+
|
|
95
|
+
- `get_abstractcore_host_facade(runtime)` is now the public Runtime surface for
|
|
96
|
+
durable bloc/KV prompt-cache operations in addition to normal prompt-cache
|
|
97
|
+
control and model residency.
|
|
98
|
+
- Remote Runtime no longer drops `prompt_cache_binding`.
|
|
99
|
+
- Local Runtime no longer injects or mutates a competing session cache key when
|
|
100
|
+
a durable binding is present.
|
|
101
|
+
- File-backed local runtimes now default bloc storage under `<base_dir>/blocs`
|
|
102
|
+
instead of implicitly inheriting Core defaults.
|
|
103
|
+
|
|
104
|
+
### Review and refinement cycles
|
|
105
|
+
|
|
106
|
+
- Cycle 1: design review pushed three improvements before closeout:
|
|
107
|
+
- keep the work inside the existing host facade instead of adding a fourth
|
|
108
|
+
public facade
|
|
109
|
+
- define an explicit Runtime-owned bloc root policy instead of inheriting
|
|
110
|
+
Core defaults silently
|
|
111
|
+
- make `LLM_CALL` execution binding-aware, not just host-control aware
|
|
112
|
+
- Refinements shipped:
|
|
113
|
+
- extended `AbstractCoreHostFacade`
|
|
114
|
+
- added explicit local/file-runtime bloc-root defaults
|
|
115
|
+
- normalized and enforced binding precedence in effect handling
|
|
116
|
+
- Cycle 2: broader regression and compatibility review found one meaningful
|
|
117
|
+
issue:
|
|
118
|
+
- `MultiLocalAbstractCoreLLMClient` could break monkeypatched or older test
|
|
119
|
+
doubles that do not accept the new `bloc_root_dir` constructor kwarg
|
|
120
|
+
- Final refinement shipped:
|
|
121
|
+
- added a narrow compatibility fallback in `_get_client(...)` for local
|
|
122
|
+
client call sites that reject only the new `bloc_root_dir` kwarg
|
|
123
|
+
- Cycle 3: independent implementation review found one real remote-path
|
|
124
|
+
blocker plus two coverage gaps:
|
|
125
|
+
- remote bloc/KV proxy calls must not carry local selector fields when
|
|
126
|
+
`base_url` is supplied
|
|
127
|
+
- the direct-client `expected_prompt_cache_binding` alias path needed its own
|
|
128
|
+
regression
|
|
129
|
+
- the primary `MultiLocal` local deployment path and keyless-binding
|
|
130
|
+
precedence needed direct coverage
|
|
131
|
+
- Final refinements shipped:
|
|
132
|
+
- `base_url` now wins cleanly for remote bloc/KV proxy calls
|
|
133
|
+
- direct client binding-alias normalization is covered and aligned with
|
|
134
|
+
Runtime semantics
|
|
135
|
+
- tests now cover the factory/local `MultiLocal` durable-bloc path and the
|
|
136
|
+
keyless-binding no-derived-key rule
|
|
137
|
+
- Final blocker-only review reported no blockers.
|
|
138
|
+
|
|
139
|
+
### Tests
|
|
140
|
+
|
|
141
|
+
- `tests/test_abstractcore_host_facade.py`
|
|
142
|
+
- `tests/test_prompt_cache_modules.py`
|
|
143
|
+
- `tests/test_remote_llm_client.py`
|
|
144
|
+
- `tests/test_packaging_extras.py`
|
|
145
|
+
- regression coverage alongside:
|
|
146
|
+
- `tests/test_abstractcore_discovery_facade.py`
|
|
147
|
+
- `tests/test_abstractcore_run_facade.py`
|
|
148
|
+
- `tests/test_model_residency_control_plane.py`
|
|
149
|
+
- `tests/test_multimodal_abstractcore_integration.py`
|
|
150
|
+
- `tests/test_runtime_install_boundary.py`
|
|
151
|
+
|
|
152
|
+
### Docs
|
|
153
|
+
|
|
154
|
+
- `README.md`
|
|
155
|
+
- `docs/README.md`
|
|
156
|
+
- `docs/getting-started.md`
|
|
157
|
+
- `docs/integrations/abstractcore.md`
|
|
158
|
+
- `docs/api.md`
|
|
159
|
+
- `docs/faq.md`
|
|
160
|
+
- `llms.txt`
|
|
161
|
+
- `llms-full.txt`
|
|
162
|
+
- `docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md`
|
|
163
|
+
|
|
164
|
+
### Residual risks
|
|
165
|
+
|
|
166
|
+
- This repo now provides the Runtime-side durable bloc contract, but sibling
|
|
167
|
+
hosts still need to adopt it instead of provider-private snapshot flows where
|
|
168
|
+
those still exist.
|
|
169
|
+
- Provider-native snapshot save/load remains a separate local-admin concern and
|
|
170
|
+
should not be confused with the primary durable bloc contract.
|
|
171
|
+
|
|
172
|
+
### Follow-ups
|
|
173
|
+
|
|
174
|
+
- Evaluate whether Gateway should expose app-facing durable bloc routes on top
|
|
175
|
+
of this Runtime surface.
|
|
176
|
+
- Keep the separate local-admin snapshot item proposed until there is a real
|
|
177
|
+
operator need beyond durable bloc/KV/binding reuse.
|