AbstractRuntime 0.4.19__tar.gz → 0.4.20__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.19 → abstractruntime-0.4.20}/CHANGELOG.md +18 -1
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/PKG-INFO +4 -4
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/README.md +3 -3
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/api.md +1 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/architecture.md +1 -1
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/README.md +11 -2
- abstractruntime-0.4.20/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +184 -0
- abstractruntime-0.4.20/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +85 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/DEPRECATED_README.md +3 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/faq.md +23 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/integrations/abstractcore.md +38 -1
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/llms-full.txt +2 -1
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/llms.txt +3 -3
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/pyproject.toml +1 -1
- abstractruntime-0.4.20/release-notes.md +13 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/factory.py +8 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/host_facade.py +91 -1
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/llm_client.py +624 -7
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_abstractcore_host_facade.py +156 -3
- abstractruntime-0.4.20/tests/test_prompt_cache_export_import.py +342 -0
- abstractruntime-0.4.19/docs/backlog/proposed/2026-05-20_agent_runtime_convenience_constructor.md +0 -37
- abstractruntime-0.4.19/docs/backlog/proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md +0 -192
- abstractruntime-0.4.19/release-notes.md +0 -8
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/.gitignore +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/LICENSE +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/ROADMAP.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/SECURITY.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/README.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/evidence.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/getting-started.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/limits.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/proposal.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/provenance.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/tools-comms.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/examples/README.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/mkdocs.yml +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/pytest.ini +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/README.md +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/conftest.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_packaging_extras.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.19 → abstractruntime-0.4.20}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.20] - 2026-05-21
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Runtime now exposes a public host-local prompt-cache export/import admin surface on `get_abstractcore_host_facade(...)`:
|
|
14
|
+
- `list_prompt_cache_exports(...)`
|
|
15
|
+
- `prompt_cache_export(...)`
|
|
16
|
+
- `prompt_cache_import(...)`
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Local Runtime now owns the prompt-cache export root/catalog policy:
|
|
20
|
+
- `~/.abstractruntime/prompt_cache_exports` by default
|
|
21
|
+
- `<base_dir>/prompt_cache_exports` for `create_local_file_runtime(...)`
|
|
22
|
+
- exact provider/model partitioning with Runtime-managed metadata sidecars
|
|
23
|
+
- Remote and hybrid runtimes now fail honestly for prompt-cache export/import admin with a structured local-only response instead of implying server-side support.
|
|
24
|
+
- Runtime docs and AI-readable `llms.txt` / `llms-full.txt` now document the secondary host-local export/import contract distinctly from the primary durable bloc/binding prompt-cache path.
|
|
25
|
+
|
|
10
26
|
## [0.4.19] - 2026-05-21
|
|
11
27
|
|
|
12
28
|
### Added
|
|
@@ -489,7 +505,8 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
489
505
|
|
|
490
506
|
Initial development version with basic proof-of-concept features.
|
|
491
507
|
|
|
492
|
-
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.
|
|
508
|
+
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.20...HEAD
|
|
509
|
+
[0.4.20]: https://github.com/lpalbou/abstractruntime/compare/v0.4.19...v0.4.20
|
|
493
510
|
[0.4.19]: https://github.com/lpalbou/abstractruntime/compare/v0.4.18...v0.4.19
|
|
494
511
|
[0.4.18]: https://github.com/lpalbou/abstractruntime/compare/v0.4.17...v0.4.18
|
|
495
512
|
[0.4.17]: https://github.com/lpalbou/abstractruntime/compare/v0.4.16...v0.4.17
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.20
|
|
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
|
|
@@ -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.20 • **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
|
|
|
@@ -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.20)
|
|
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, 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/voice/music outputs, 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.20 • **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
|
|
|
@@ -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.20)
|
|
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, 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/voice/music outputs, 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
|
|
@@ -191,6 +191,7 @@ Entry points:
|
|
|
191
191
|
- tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
|
|
192
192
|
- 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`)
|
|
193
193
|
- 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`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
|
|
194
|
+
- 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
|
|
194
195
|
- host-facade email helpers delegate to Runtime's host-local comms facade/export layer (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
|
|
195
196
|
- run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
|
|
196
197
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AbstractRuntime — Architecture
|
|
2
2
|
|
|
3
3
|
> Updated: 2026-05-21
|
|
4
|
-
> Version: 0.4.
|
|
4
|
+
> Version: 0.4.20
|
|
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.
|
|
@@ -10,6 +10,14 @@ 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
|
+
## Counts
|
|
14
|
+
|
|
15
|
+
- Planned: 5
|
|
16
|
+
- Proposed: 1
|
|
17
|
+
- Completed: 26
|
|
18
|
+
- Deprecated: 13
|
|
19
|
+
- Recurrent: 0
|
|
20
|
+
|
|
13
21
|
## Next recommended work
|
|
14
22
|
|
|
15
23
|
1. `planned/018_workspace_access_policy_for_media_and_tools.md`
|
|
@@ -52,6 +60,7 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
52
60
|
| 029 | `completed/029_runtime_music_generation_and_discovery_via_abstractcore.md` |
|
|
53
61
|
| 0030 | `completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md` |
|
|
54
62
|
| 0032 | `completed/0032_runtime_durable_outbound_comms_truth.md` |
|
|
63
|
+
| 0033 | `completed/0033_runtime_host_local_prompt_cache_export_import_surface.md` |
|
|
55
64
|
|
|
56
65
|
## Planned
|
|
57
66
|
|
|
@@ -67,10 +76,10 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
67
76
|
|
|
68
77
|
| ID | Item |
|
|
69
78
|
|----|------|
|
|
70
|
-
| 2026-05-20 | `proposed/2026-05-20_agent_runtime_convenience_constructor.md` |
|
|
71
|
-
| 2026-05-20 | `proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md` |
|
|
72
79
|
| 0031 | `proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md` |
|
|
73
80
|
|
|
74
81
|
## Deprecated
|
|
75
82
|
|
|
76
83
|
See `deprecated/DEPRECATED_README.md` for context on the deprecated backlog set.
|
|
84
|
+
Recent deprecation:
|
|
85
|
+
- `deprecated/0034_agent_runtime_convenience_constructor.md`
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# 0033 Runtime Host-Local Prompt-Cache Export/Import Surface
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
- Created: 2026-05-20
|
|
5
|
+
- Status: Completed
|
|
6
|
+
- Completed: 2026-05-21
|
|
7
|
+
- Origin: implemented from repository backlog and user request
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Remove the remaining Gateway prompt-cache export/import bypass by giving Runtime
|
|
12
|
+
a public host-facing surface for:
|
|
13
|
+
|
|
14
|
+
- listing host-local prompt-cache exports
|
|
15
|
+
- exporting one live local provider cache to disk
|
|
16
|
+
- importing one previously exported local provider cache
|
|
17
|
+
|
|
18
|
+
without confusing that admin workflow with Runtime's durable bloc/binding
|
|
19
|
+
memory model.
|
|
20
|
+
|
|
21
|
+
## What Shipped
|
|
22
|
+
|
|
23
|
+
- Extended `AbstractCoreHostFacade` with:
|
|
24
|
+
- `list_prompt_cache_exports(...)`
|
|
25
|
+
- `prompt_cache_export(...)`
|
|
26
|
+
- `prompt_cache_import(...)`
|
|
27
|
+
- Implemented the local behavior in Runtime's AbstractCore clients on top of
|
|
28
|
+
Core's existing **public** provider hooks:
|
|
29
|
+
- `prompt_cache_save(...)`
|
|
30
|
+
- `prompt_cache_load(...)`
|
|
31
|
+
- `prompt_cache_artifact_extension()`
|
|
32
|
+
- `prompt_cache_artifact_format()`
|
|
33
|
+
- prompt-cache capability flags
|
|
34
|
+
- Kept the surface honest:
|
|
35
|
+
- **local-only** for local/file runtimes
|
|
36
|
+
- remote and hybrid return structured `prompt_cache_local_only` payloads and
|
|
37
|
+
do not issue HTTP requests
|
|
38
|
+
- Added a Runtime-owned export root policy:
|
|
39
|
+
- default local root: `~/.abstractruntime/prompt_cache_exports`
|
|
40
|
+
- default file-runtime root: `<base_dir>/prompt_cache_exports`
|
|
41
|
+
- explicit `prompt_cache_export_root_dir=...` overrides are supported
|
|
42
|
+
- Added Runtime-owned listing/catalog metadata so hosts no longer need a
|
|
43
|
+
Gateway-local `saved/` directory convention
|
|
44
|
+
- Kept per-provider/model separation exact by partitioning export directories
|
|
45
|
+
with reversible encoded provider/model ids instead of lossy slugs
|
|
46
|
+
- Preserved the broader prompt-cache boundary:
|
|
47
|
+
- durable app-facing exact reuse is still `bloc + KV artifact + prompt_cache_binding`
|
|
48
|
+
- host-local export/import remains secondary operator/admin tooling around
|
|
49
|
+
live local provider cache state
|
|
50
|
+
|
|
51
|
+
## Current Code Pointers
|
|
52
|
+
|
|
53
|
+
- `src/abstractruntime/integrations/abstractcore/host_facade.py`
|
|
54
|
+
- `src/abstractruntime/integrations/abstractcore/llm_client.py`
|
|
55
|
+
- `src/abstractruntime/integrations/abstractcore/factory.py`
|
|
56
|
+
- `tests/test_prompt_cache_export_import.py`
|
|
57
|
+
- `tests/test_abstractcore_host_facade.py`
|
|
58
|
+
- `tests/test_remote_llm_client.py`
|
|
59
|
+
- `docs/integrations/abstractcore.md`
|
|
60
|
+
- `docs/api.md`
|
|
61
|
+
- `docs/faq.md`
|
|
62
|
+
- `README.md`
|
|
63
|
+
|
|
64
|
+
Related accepted prompt-cache policy still lives in:
|
|
65
|
+
- `docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md`
|
|
66
|
+
|
|
67
|
+
No new ADR was added. This item extends the existing host-surface boundary
|
|
68
|
+
without changing the durable app contract.
|
|
69
|
+
|
|
70
|
+
## Validation
|
|
71
|
+
|
|
72
|
+
Focused validation run on 2026-05-21:
|
|
73
|
+
|
|
74
|
+
- `pytest -q tests/test_prompt_cache_export_import.py tests/test_abstractcore_host_facade.py tests/test_remote_llm_client.py`
|
|
75
|
+
- Result: `29 passed in 0.24s`
|
|
76
|
+
|
|
77
|
+
Broader regression and packaging-adjacent sanity:
|
|
78
|
+
|
|
79
|
+
- `pytest -q tests/test_prompt_cache_export_import.py tests/test_abstractcore_host_facade.py tests/test_remote_llm_client.py tests/test_prompt_cache_modules.py tests/test_packaging_extras.py`
|
|
80
|
+
- Result: `48 passed in 0.21s`
|
|
81
|
+
|
|
82
|
+
Syntax/import sanity:
|
|
83
|
+
|
|
84
|
+
- `python -m compileall src/abstractruntime/integrations/abstractcore`
|
|
85
|
+
- Result: clean
|
|
86
|
+
|
|
87
|
+
Documentation build sanity:
|
|
88
|
+
|
|
89
|
+
- `mkdocs build -q --site-dir /tmp/abstractruntime-0033-docs`
|
|
90
|
+
- Result: build passed; upstream Material for MkDocs emitted its current
|
|
91
|
+
non-blocking MkDocs 2.0 warning
|
|
92
|
+
|
|
93
|
+
Practical proof covered by the shipped tests:
|
|
94
|
+
|
|
95
|
+
- local/multi-local Runtime can export, list, and import prompt-cache
|
|
96
|
+
artifacts through Runtime's public host facade and local client path
|
|
97
|
+
- the same logical export name can coexist for distinct provider/model ids
|
|
98
|
+
without directory collisions
|
|
99
|
+
- local listing no longer requires loading the target provider/model client to
|
|
100
|
+
exist on disk
|
|
101
|
+
- remote Runtime returns `prompt_cache_local_only` for list/export/import and
|
|
102
|
+
does not emit HTTP traffic
|
|
103
|
+
- `create_local_file_runtime(...)` now wires the default export root to
|
|
104
|
+
`<base_dir>/prompt_cache_exports`
|
|
105
|
+
|
|
106
|
+
## Completion Report
|
|
107
|
+
|
|
108
|
+
### Date
|
|
109
|
+
|
|
110
|
+
2026-05-21
|
|
111
|
+
|
|
112
|
+
### Summary
|
|
113
|
+
|
|
114
|
+
Runtime now owns the last prompt-cache admin surface that Gateway was still
|
|
115
|
+
handling through private provider/runtime internals.
|
|
116
|
+
|
|
117
|
+
Hosts can keep manual provider-native export/import when they genuinely need
|
|
118
|
+
it, but the contract is now:
|
|
119
|
+
|
|
120
|
+
- public Runtime boundary
|
|
121
|
+
- Core public hooks underneath
|
|
122
|
+
- local-only filesystem semantics made explicit
|
|
123
|
+
- clean separation from durable bloc/binding workflow memory
|
|
124
|
+
|
|
125
|
+
### Behavior Changes
|
|
126
|
+
|
|
127
|
+
- `get_abstractcore_host_facade(runtime)` now exposes:
|
|
128
|
+
- `list_prompt_cache_exports(...)`
|
|
129
|
+
- `prompt_cache_export(...)`
|
|
130
|
+
- `prompt_cache_import(...)`
|
|
131
|
+
- Local/file runtimes store host-local prompt-cache exports under a Runtime
|
|
132
|
+
root rather than letting Gateway or another host invent its own unmanaged
|
|
133
|
+
directory contract.
|
|
134
|
+
- Listing is now Runtime-owned and returns catalog metadata for one
|
|
135
|
+
provider/model partition.
|
|
136
|
+
- `prompt_cache_import(clear_existing=True)` now validates the artifact before
|
|
137
|
+
clearing live cache state, then performs the clear/load sequence so a corrupt
|
|
138
|
+
file does not wipe the old cache first.
|
|
139
|
+
- When the caller omits `key` on import, Runtime now surfaces the effective
|
|
140
|
+
loaded key returned by the provider instead of dropping it.
|
|
141
|
+
|
|
142
|
+
### Contract Notes
|
|
143
|
+
|
|
144
|
+
- This is intentionally a **host-local admin** contract. It is not a durable
|
|
145
|
+
workflow effect and it is not replayed like `LLM_CALL`.
|
|
146
|
+
- Runtime currently returns `root_dir`, `artifact_path`, and `meta_path` in the
|
|
147
|
+
public payload because this is a host/operator surface and Gateway still
|
|
148
|
+
needs a real listing/catalog replacement. That path exposure is intentional
|
|
149
|
+
for this local admin surface, not the general durable app contract.
|
|
150
|
+
- Remote/hybrid runtimes do not proxy or fake host-local export roots. They
|
|
151
|
+
fail honestly with `prompt_cache_local_only`.
|
|
152
|
+
|
|
153
|
+
### Tests
|
|
154
|
+
|
|
155
|
+
- `tests/test_prompt_cache_export_import.py`
|
|
156
|
+
- `tests/test_abstractcore_host_facade.py`
|
|
157
|
+
- regression support in:
|
|
158
|
+
- `tests/test_remote_llm_client.py`
|
|
159
|
+
|
|
160
|
+
### Docs
|
|
161
|
+
|
|
162
|
+
- `README.md`
|
|
163
|
+
- `docs/integrations/abstractcore.md`
|
|
164
|
+
- `docs/api.md`
|
|
165
|
+
- `docs/faq.md`
|
|
166
|
+
- `llms.txt`
|
|
167
|
+
- `llms-full.txt`
|
|
168
|
+
|
|
169
|
+
### Residual Risks
|
|
170
|
+
|
|
171
|
+
- This is still a secondary operator feature. The primary prompt-cache story
|
|
172
|
+
for durable apps remains bloc/KV artifacts plus `prompt_cache_binding`.
|
|
173
|
+
- Import/export support still depends on the local AbstractCore backend family
|
|
174
|
+
and the public `supports_save` / `supports_load` capability flags.
|
|
175
|
+
- Gateway adoption is still separate work in the sibling package before
|
|
176
|
+
`/prompt_cache/saved|save|load` is fully cleaned up end-to-end.
|
|
177
|
+
|
|
178
|
+
### Follow-Ups
|
|
179
|
+
|
|
180
|
+
- Gateway should adopt these Runtime host-facade methods and remove its
|
|
181
|
+
remaining private `/prompt_cache/saved|save|load` implementation.
|
|
182
|
+
- Keep AbstractCore item `0797` only as optional follow-up memory. Promote it
|
|
183
|
+
only if Runtime/Gateway later prove they need a narrower cross-provider
|
|
184
|
+
metadata/compatibility contract than the current public hooks provide.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Deprecated: Agent Runtime Convenience Constructor
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
- Created: 2026-05-20
|
|
5
|
+
- Status: Deprecated
|
|
6
|
+
- Completed: N/A
|
|
7
|
+
- Deprecated: 2026-05-21
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
The old `015_agent_integration_improvements` item no longer fits as planned runtime work.
|
|
12
|
+
|
|
13
|
+
Most of the important integration correctness work is already done:
|
|
14
|
+
|
|
15
|
+
- agent tool execution can go through durable `TOOL_CALLS`
|
|
16
|
+
- runtime tool execution is host-configured through `ToolExecutor`
|
|
17
|
+
- agent state persistence is not blocked on runtime internals
|
|
18
|
+
|
|
19
|
+
The main remaining idea is much smaller: a convenience constructor such as
|
|
20
|
+
`create_agent_runtime(...)` that would wrap `create_local_runtime(...)` plus
|
|
21
|
+
`MappingToolExecutor.from_tools(...)` for simple local setups.
|
|
22
|
+
|
|
23
|
+
## Current code reality
|
|
24
|
+
|
|
25
|
+
- `src/abstractruntime/integrations/abstractcore/factory.py`
|
|
26
|
+
- already exposes the generic Runtime constructor layer:
|
|
27
|
+
- `create_local_runtime(...)`
|
|
28
|
+
- `create_remote_runtime(...)`
|
|
29
|
+
- `create_hybrid_runtime(...)`
|
|
30
|
+
- `../abstractagent/src/abstractagent/agents/react.py`
|
|
31
|
+
- already wraps `create_local_runtime(...)` +
|
|
32
|
+
`MappingToolExecutor.from_tools(...)`
|
|
33
|
+
- `../abstractagent/src/abstractagent/agents/codeact.py`
|
|
34
|
+
- does the same for CodeAct
|
|
35
|
+
- `../abstractagent/src/abstractagent/agents/memact.py`
|
|
36
|
+
- does the same for MemAct
|
|
37
|
+
- `../abstractflow/abstractflow/visual/executor.py`
|
|
38
|
+
- assembles its own Runtime/tool wiring with different host-specific policy
|
|
39
|
+
|
|
40
|
+
The duplication exists, but it is concentrated in higher-level packages that
|
|
41
|
+
already own agent or host semantics.
|
|
42
|
+
|
|
43
|
+
## Why it is not planned now
|
|
44
|
+
|
|
45
|
+
- It is an ergonomics improvement, not a runtime correctness gap.
|
|
46
|
+
- The API shape depends on cross-repo expectations from `abstractagent`.
|
|
47
|
+
- This repo should stay careful about adding convenience APIs that quietly pull in higher-level agent assumptions.
|
|
48
|
+
|
|
49
|
+
## Possible future direction
|
|
50
|
+
|
|
51
|
+
- keep the helper explicitly local-only
|
|
52
|
+
- accept direct tool functions and build the `MappingToolExecutor`
|
|
53
|
+
- avoid storing callables in durable run state
|
|
54
|
+
- document clearly that advanced approval/passthrough/delegated tool setups should still use the lower-level factories directly
|
|
55
|
+
|
|
56
|
+
## Guidance
|
|
57
|
+
|
|
58
|
+
Re-promote this only if maintainers still want a tiny convenience API after the higher-priority runtime boundary work lands.
|
|
59
|
+
|
|
60
|
+
## Deprecation report
|
|
61
|
+
|
|
62
|
+
Deprecated: 2026-05-21
|
|
63
|
+
|
|
64
|
+
Reason:
|
|
65
|
+
|
|
66
|
+
- Runtime already has the correct generic constructor layer.
|
|
67
|
+
- The exact convenience pattern is agent-shaped rather than runtime-shaped.
|
|
68
|
+
- The real duplication is currently in `abstractagent`, not across Runtime
|
|
69
|
+
consumers generally.
|
|
70
|
+
|
|
71
|
+
What replaced it:
|
|
72
|
+
|
|
73
|
+
- Nothing new in Runtime. Higher-level packages should keep owning their own
|
|
74
|
+
factories or factor a shared helper in their own package.
|
|
75
|
+
|
|
76
|
+
Why it should not be built here:
|
|
77
|
+
|
|
78
|
+
- A public `create_agent_runtime(...)` would encode agent-level assumptions into
|
|
79
|
+
the lower-level Runtime package.
|
|
80
|
+
- Sibling packages do not share one uniform shape anyway: some use
|
|
81
|
+
approval/passthrough executors or other host policy that a tiny Runtime
|
|
82
|
+
convenience wrapper would not capture cleanly.
|
|
83
|
+
|
|
84
|
+
If this idea returns later, it should start in `abstractagent` as a package-
|
|
85
|
+
owned helper rather than a new public Runtime API.
|
{abstractruntime-0.4.19 → abstractruntime-0.4.20}/docs/backlog/deprecated/DEPRECATED_README.md
RENAMED
|
@@ -28,6 +28,9 @@ These were temporary implementation specs created in the abstractcore workspace
|
|
|
28
28
|
- `005_docs_updates.md` - Implemented
|
|
29
29
|
- `README.md` - Original context document (preserved as-is)
|
|
30
30
|
|
|
31
|
+
### From Current Numbered Backlog
|
|
32
|
+
- `0034_agent_runtime_convenience_constructor.md` - Deprecated on 2026-05-21 because the convenience pattern is agent-shaped and belongs in `abstractagent` if it is needed at all
|
|
33
|
+
|
|
31
34
|
## Note
|
|
32
35
|
|
|
33
36
|
Do not add new items here. Use `completed/` for finished work and `planned/` for future work.
|
|
@@ -120,6 +120,29 @@ Gateway-specific prompt-cache environment variables should be consumed by Gatewa
|
|
|
120
120
|
Hosts can inspect, prepare, and now clean up caches through `abstractruntime.integrations.abstractcore.get_abstractcore_host_facade(runtime)`, which exposes the normal prompt-cache/model-residency controls plus durable bloc helpers such as `upsert_text_bloc(...)`, `ensure_bloc_kv_artifact(...)`, `load_bloc_kv_artifact(...)`, `list_bloc_kv_artifacts(...)`, `delete_bloc_kv_artifact(...)`, and `delete_bloc(...)` without depending on the private runtime attachment directly.
|
|
121
121
|
Docs: `integrations/abstractcore.md`. Code: `src/abstractruntime/integrations/abstractcore/host_facade.py`, `src/abstractruntime/integrations/abstractcore/llm_client.py`.
|
|
122
122
|
|
|
123
|
+
## Can a host still export or import local provider prompt caches?
|
|
124
|
+
|
|
125
|
+
Yes, but treat that as **host-local operator tooling**, not the main durable
|
|
126
|
+
workflow memory model.
|
|
127
|
+
|
|
128
|
+
Use the Runtime host facade:
|
|
129
|
+
- `list_prompt_cache_exports(...)`
|
|
130
|
+
- `prompt_cache_export(...)`
|
|
131
|
+
- `prompt_cache_import(...)`
|
|
132
|
+
|
|
133
|
+
Important limits:
|
|
134
|
+
- this surface is **local-only**; remote and hybrid runtimes return
|
|
135
|
+
`prompt_cache_local_only`
|
|
136
|
+
- Runtime owns the export root policy:
|
|
137
|
+
- `~/.abstractruntime/prompt_cache_exports` by default
|
|
138
|
+
- `<base_dir>/prompt_cache_exports` for `create_local_file_runtime(...)`
|
|
139
|
+
- exports are partitioned per provider/model, so the same logical export name
|
|
140
|
+
can coexist cleanly across different local backends
|
|
141
|
+
|
|
142
|
+
For durable replay-safe workflow reuse, prefer `prompt_cache_binding` from
|
|
143
|
+
durable bloc/KV artifacts instead of host-local provider cache exports.
|
|
144
|
+
Docs: `integrations/abstractcore.md`. Code: `src/abstractruntime/integrations/abstractcore/host_facade.py`, `src/abstractruntime/integrations/abstractcore/llm_client.py`.
|
|
145
|
+
|
|
123
146
|
## Does Runtime duplicate durable bloc text? How do per-model caches relate to it?
|
|
124
147
|
|
|
125
148
|
For local runtimes, Runtime owns the bloc root and stores one durable **text snapshot** per SHA256 within that root. That bloc is the source of truth. The provider/model cache is a **derived artifact** under that bloc, not a second independent memory model.
|
|
@@ -322,6 +322,9 @@ AbstractRuntime's AbstractCore integration now exposes a public host-control fac
|
|
|
322
322
|
- `prompt_cache_fork(...)`
|
|
323
323
|
- `prompt_cache_clear(...)`
|
|
324
324
|
- `prompt_cache_prepare_modules(...)`
|
|
325
|
+
- `list_prompt_cache_exports(...)`
|
|
326
|
+
- `prompt_cache_export(...)`
|
|
327
|
+
- `prompt_cache_import(...)`
|
|
325
328
|
- `upsert_text_bloc(...)`
|
|
326
329
|
- `get_bloc_record(...)`
|
|
327
330
|
- `list_blocs(...)`
|
|
@@ -359,7 +362,9 @@ Contract notes:
|
|
|
359
362
|
- The three prompt-cache tracks are distinct:
|
|
360
363
|
- session prompt cache: best-effort volatile reuse
|
|
361
364
|
- durable bloc prompt cache: exact reuse through bloc/KV/binding
|
|
362
|
-
-
|
|
365
|
+
- host-local prompt-cache export/import admin: optional operator tooling
|
|
366
|
+
around live local provider cache state, separate from durable workflow
|
|
367
|
+
memory
|
|
363
368
|
|
|
364
369
|
Host-side prompt-cache example:
|
|
365
370
|
|
|
@@ -416,6 +421,38 @@ loaded = facade.load_bloc_kv_artifact(
|
|
|
416
421
|
binding = loaded["artifact"]["prompt_cache_binding"]
|
|
417
422
|
```
|
|
418
423
|
|
|
424
|
+
Host-local prompt-cache export/import example:
|
|
425
|
+
|
|
426
|
+
```python
|
|
427
|
+
saved = facade.prompt_cache_export(
|
|
428
|
+
name="orbit-cache",
|
|
429
|
+
key="sess:orbit",
|
|
430
|
+
q8=True,
|
|
431
|
+
)
|
|
432
|
+
listed = facade.list_prompt_cache_exports()
|
|
433
|
+
loaded_cache = facade.prompt_cache_import(
|
|
434
|
+
name="orbit-cache",
|
|
435
|
+
key="loaded:orbit",
|
|
436
|
+
clear_existing=True,
|
|
437
|
+
)
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
Host-local export/import contract:
|
|
441
|
+
|
|
442
|
+
- This surface is **local-only**. Remote and hybrid runtimes return structured
|
|
443
|
+
`prompt_cache_local_only` payloads instead of proxying host filesystem state
|
|
444
|
+
through Core Server.
|
|
445
|
+
- Runtime owns the export root policy:
|
|
446
|
+
- default local root: `~/.abstractruntime/prompt_cache_exports`
|
|
447
|
+
- default file-runtime root: `<base_dir>/prompt_cache_exports`
|
|
448
|
+
- explicit `prompt_cache_export_root_dir=...` overrides are allowed when a
|
|
449
|
+
host needs a different local catalog root
|
|
450
|
+
- Exports stay partitioned by provider/model under that root, so the same
|
|
451
|
+
logical export name can coexist safely across different local backends.
|
|
452
|
+
- This is a **secondary operator/admin feature**, not the primary durable app
|
|
453
|
+
contract. For replay-safe exact reuse inside workflows, prefer
|
|
454
|
+
`prompt_cache_binding` from durable bloc/KV artifacts instead.
|
|
455
|
+
|
|
419
456
|
Host-side durable bloc lifecycle example:
|
|
420
457
|
|
|
421
458
|
```python
|
|
@@ -10,7 +10,7 @@ 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.20
|
|
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
16
|
- Optional AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.24`
|
|
@@ -318,6 +318,7 @@ Cached sessions / prompt cache:
|
|
|
318
318
|
- Prefer stable `params.prompt_cache_key` values or `run.vars["_runtime"]["prompt_cache"]` config to select cache namespaces; Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` is the process-wide opt-in.
|
|
319
319
|
- Gateway prompt-cache env vars should be consumed by Gateway and translated into `_runtime.prompt_cache`; Runtime does not read Gateway env names directly.
|
|
320
320
|
- For durable exact reuse across restarts, use `LLM_CALL.params.prompt_cache_binding` from a prior `load_bloc_kv_artifact(...)` result instead of treating provider-native snapshots as durable workflow state.
|
|
321
|
+
- For host-local operator workflows that still need provider-native export/import, use `get_abstractcore_host_facade(runtime).list_prompt_cache_exports(...)`, `prompt_cache_export(...)`, and `prompt_cache_import(...)`. That surface is local-only, partitions exports by provider/model under a Runtime-owned export root, and is intentionally separate from the durable bloc/binding contract.
|
|
321
322
|
- For local runtimes, Runtime owns one content-addressed bloc root and stores one durable bloc text snapshot per SHA256 there; provider/model caches are separate derived artifacts under that bloc, not duplicate portable memory copies.
|
|
322
323
|
- Keep provider cache handles, session objects, and warm-cache state inside AbstractCore clients or servers.
|
|
323
324
|
- Runtime correctness must not depend on a warm cache; a cold cache may be slower but should produce the same durable graph behavior.
|
|
@@ -3,7 +3,7 @@
|
|
|
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.20
|
|
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
9
|
- Current AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.24`
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
|
|
35
35
|
## Integrations
|
|
36
36
|
|
|
37
|
-
- [AbstractCore integration](docs/integrations/abstractcore.md): `LLM_CALL` / `TOOL_CALLS` / `MODEL_RESIDENCY`, local/remote/hybrid, prompt-cache and residency host controls, durable bloc/KV prompt-cache controls, discovery snapshot queries, durable run-scoped image/voice/music execution, media inputs, generated media outputs, provider-key headers, and tool approval waits
|
|
38
|
-
- Prompt-cache tracks: use `LLM_CALL.params.prompt_cache_key`, `run.vars["_runtime"]["prompt_cache"]`, or `ABSTRACTRUNTIME_PROMPT_CACHE` for best-effort session reuse; use `LLM_CALL.params.prompt_cache_binding` for durable exact bloc-backed reuse. Local Runtime stores one content-addressed bloc per root plus provider/model-specific derived KV artifacts. Gateway prompt-cache env belongs in Gateway.
|
|
37
|
+
- [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/voice/music execution, media inputs, generated media outputs, provider-key headers, and tool approval waits
|
|
38
|
+
- Prompt-cache tracks: use `LLM_CALL.params.prompt_cache_key`, `run.vars["_runtime"]["prompt_cache"]`, or `ABSTRACTRUNTIME_PROMPT_CACHE` for best-effort 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. Local Runtime stores one content-addressed bloc per root plus provider/model-specific derived KV artifacts. Gateway prompt-cache env belongs in Gateway.
|
|
39
39
|
- 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.
|
|
40
40
|
- Runtime-owned Core surfaces: `get_abstractcore_discovery_facade(...)`, `get_abstractcore_host_facade(...)`, and `get_abstractcore_run_facade(...)`
|
|
41
41
|
- 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.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
### Added
|
|
2
|
+
- Runtime now exposes a public host-local prompt-cache export/import admin surface on `get_abstractcore_host_facade(...)`:
|
|
3
|
+
- `list_prompt_cache_exports(...)`
|
|
4
|
+
- `prompt_cache_export(...)`
|
|
5
|
+
- `prompt_cache_import(...)`
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- Local Runtime now owns the prompt-cache export root/catalog policy:
|
|
9
|
+
- `~/.abstractruntime/prompt_cache_exports` by default
|
|
10
|
+
- `<base_dir>/prompt_cache_exports` for `create_local_file_runtime(...)`
|
|
11
|
+
- exact provider/model partitioning with Runtime-managed metadata sidecars
|
|
12
|
+
- Remote and hybrid runtimes now fail honestly for prompt-cache export/import admin with a structured local-only response instead of implying server-side support.
|
|
13
|
+
- Runtime docs and AI-readable `llms.txt` / `llms-full.txt` now document the secondary host-local export/import contract distinctly from the primary durable bloc/binding prompt-cache path.
|
|
@@ -75,6 +75,7 @@ def create_local_runtime(
|
|
|
75
75
|
model: str,
|
|
76
76
|
llm_kwargs: Optional[Dict[str, Any]] = None,
|
|
77
77
|
bloc_root_dir: Optional[str | Path] = None,
|
|
78
|
+
prompt_cache_export_root_dir: Optional[str | Path] = None,
|
|
78
79
|
run_store: Optional[RunStore] = None,
|
|
79
80
|
ledger_store: Optional[LedgerStore] = None,
|
|
80
81
|
tool_executor: Optional[ToolExecutor] = None,
|
|
@@ -138,6 +139,7 @@ def create_local_runtime(
|
|
|
138
139
|
llm_kwargs=effective_llm_kwargs,
|
|
139
140
|
artifact_store=artifact_store,
|
|
140
141
|
bloc_root_dir=bloc_root_dir,
|
|
142
|
+
prompt_cache_export_root_dir=prompt_cache_export_root_dir,
|
|
141
143
|
)
|
|
142
144
|
tools = tool_executor or AbstractCoreToolExecutor(timeout_s=resolved_tool_timeout_s)
|
|
143
145
|
# Orchestrator policy: enforce tool execution timeout at the runtime layer.
|
|
@@ -322,6 +324,7 @@ def create_local_file_runtime(
|
|
|
322
324
|
model: str,
|
|
323
325
|
llm_kwargs: Optional[Dict[str, Any]] = None,
|
|
324
326
|
bloc_root_dir: Optional[str | Path] = None,
|
|
327
|
+
prompt_cache_export_root_dir: Optional[str | Path] = None,
|
|
325
328
|
context: Optional[Any] = None,
|
|
326
329
|
config: Optional[RuntimeConfig] = None,
|
|
327
330
|
tool_timeout_s: Optional[float] = None,
|
|
@@ -333,6 +336,11 @@ def create_local_file_runtime(
|
|
|
333
336
|
model=model,
|
|
334
337
|
llm_kwargs=llm_kwargs,
|
|
335
338
|
bloc_root_dir=Path(bloc_root_dir) if bloc_root_dir is not None else (Path(base_dir) / "blocs"),
|
|
339
|
+
prompt_cache_export_root_dir=(
|
|
340
|
+
Path(prompt_cache_export_root_dir)
|
|
341
|
+
if prompt_cache_export_root_dir is not None
|
|
342
|
+
else (Path(base_dir) / "prompt_cache_exports")
|
|
343
|
+
),
|
|
336
344
|
run_store=run_store,
|
|
337
345
|
ledger_store=ledger_store,
|
|
338
346
|
context=context,
|