AbstractRuntime 0.4.18__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.18 → abstractruntime-0.4.20}/CHANGELOG.md +30 -1
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/PKG-INFO +5 -5
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/README.md +4 -4
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/api.md +3 -1
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/architecture.md +1 -1
- {abstractruntime-0.4.18 → 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.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/DEPRECATED_README.md +3 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/faq.md +27 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/integrations/abstractcore.md +46 -1
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/tools-comms.md +1 -1
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/llms-full.txt +3 -2
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/llms.txt +4 -4
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/pyproject.toml +1 -1
- abstractruntime-0.4.20/release-notes.md +13 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/__init__.py +12 -1
- abstractruntime-0.4.20/src/abstractruntime/integrations/abstractcore/comms_facade.py +127 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/factory.py +8 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/host_facade.py +95 -6
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/llm_client.py +624 -7
- abstractruntime-0.4.20/tests/test_abstractcore_comms_facade.py +179 -0
- {abstractruntime-0.4.18 → 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.18/docs/backlog/proposed/2026-05-20_agent_runtime_convenience_constructor.md +0 -37
- abstractruntime-0.4.18/docs/backlog/proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md +0 -192
- abstractruntime-0.4.18/release-notes.md +0 -14
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/.gitignore +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/LICENSE +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/ROADMAP.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/SECURITY.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/README.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/evidence.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/getting-started.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/limits.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/proposal.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/provenance.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/examples/README.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/mkdocs.yml +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/pytest.ini +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/README.md +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/conftest.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_packaging_extras.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.18 → abstractruntime-0.4.20}/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.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
|
+
|
|
26
|
+
## [0.4.19] - 2026-05-21
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
- Runtime now ships the missed standalone email comms wrapper/export layer for host-local operator surfaces:
|
|
30
|
+
- `abstractruntime.integrations.abstractcore.comms_facade`
|
|
31
|
+
- package-level email helper exports from `abstractruntime.integrations.abstractcore`
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- Host-facade email helpers now delegate through Runtime's own comms facade instead of importing `abstractcore.tools.comms_tools` directly in the facade method body.
|
|
35
|
+
- Runtime docs and AI-readable `llms.txt` / `llms-full.txt` now describe the standalone email comms facade/export layer alongside the existing host facade, Telegram wrappers, and durable run-owned comms sends.
|
|
36
|
+
|
|
10
37
|
## [0.4.18] - 2026-05-21
|
|
11
38
|
|
|
12
39
|
### Added
|
|
@@ -478,7 +505,9 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
478
505
|
|
|
479
506
|
Initial development version with basic proof-of-concept features.
|
|
480
507
|
|
|
481
|
-
[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
|
|
510
|
+
[0.4.19]: https://github.com/lpalbou/abstractruntime/compare/v0.4.18...v0.4.19
|
|
482
511
|
[0.4.18]: https://github.com/lpalbou/abstractruntime/compare/v0.4.17...v0.4.18
|
|
483
512
|
[0.4.17]: https://github.com/lpalbou/abstractruntime/compare/v0.4.16...v0.4.17
|
|
484
513
|
[0.4.16]: https://github.com/lpalbou/abstractruntime/compare/v0.4.15...v0.4.16
|
|
@@ -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,8 +193,8 @@ 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`
|
|
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 remain host-local and nondurable.
|
|
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
|
+
- 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
|
|
200
200
|
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.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,8 +116,8 @@ 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`
|
|
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 remain host-local and nondurable.
|
|
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
|
+
- 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
|
|
123
123
|
such as LanceDB, SQLite, or in-memory stores.
|
|
@@ -184,13 +184,15 @@ Entry points:
|
|
|
184
184
|
- `create_local_runtime(...)`, `create_remote_runtime(...)`, `create_hybrid_runtime(...)` (`src/abstractruntime/integrations/abstractcore/factory.py`)
|
|
185
185
|
- public discovery facade: `AbstractCoreDiscoveryFacade`, `get_abstractcore_discovery_facade(...)` (`src/abstractruntime/integrations/abstractcore/discovery_facade.py`)
|
|
186
186
|
- public host facade: `AbstractCoreHostFacade`, `get_abstractcore_host_facade(...)` (`src/abstractruntime/integrations/abstractcore/host_facade.py`)
|
|
187
|
+
- public email comms wrappers: `list_email_accounts(...)`, `list_emails(...)`, `read_email(...)`, `send_email(...)` (`src/abstractruntime/integrations/abstractcore/comms_facade.py`)
|
|
187
188
|
- public Telegram host wrappers: `TelegramTdlibNotAvailable`, `bootstrap_telegram_auth_from_env(...)`, `get_global_telegram_client(...)`, `stop_global_telegram_client()`, `send_telegram_message(...)` (`src/abstractruntime/integrations/abstractcore/telegram_facade.py`)
|
|
188
189
|
- public durable run facade: `AbstractCoreRunFacade`, `get_abstractcore_run_facade(...)` (`src/abstractruntime/integrations/abstractcore/run_facade.py`)
|
|
189
190
|
- effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
|
|
190
191
|
- tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
|
|
191
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`)
|
|
192
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`)
|
|
193
|
-
- host-
|
|
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
|
|
195
|
+
- host-facade email helpers delegate to Runtime's host-local comms facade/export layer (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
|
|
194
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`)
|
|
195
197
|
|
|
196
198
|
`LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
|
|
@@ -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.18 → 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.
|
|
@@ -169,6 +192,10 @@ No. For the remaining host/operator paths, use Runtime's public wrappers instead
|
|
|
169
192
|
- `...list_emails(...)`
|
|
170
193
|
- `...read_email(...)`
|
|
171
194
|
- `...send_email(...)`
|
|
195
|
+
- `abstractruntime.integrations.abstractcore.list_email_accounts(...)`
|
|
196
|
+
- `...list_emails(...)`
|
|
197
|
+
- `...read_email(...)`
|
|
198
|
+
- `...send_email(...)`
|
|
172
199
|
- `abstractruntime.integrations.abstractcore.telegram_facade.bootstrap_telegram_auth_from_env(...)`
|
|
173
200
|
- `...get_global_telegram_client(...)`
|
|
174
201
|
- `...stop_global_telegram_client()`
|
|
@@ -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
|
|
@@ -493,6 +530,11 @@ email and Telegram:
|
|
|
493
530
|
- `list_emails(...)`
|
|
494
531
|
- `read_email(...)`
|
|
495
532
|
- `send_email(...)`
|
|
533
|
+
- `abstractruntime.integrations.abstractcore.comms_facade` also exposes:
|
|
534
|
+
- `list_email_accounts(...)`
|
|
535
|
+
- `list_emails(...)`
|
|
536
|
+
- `read_email(...)`
|
|
537
|
+
- `send_email(...)`
|
|
496
538
|
- `abstractruntime.integrations.abstractcore.telegram_facade` exposes:
|
|
497
539
|
- `TelegramTdlibNotAvailable`
|
|
498
540
|
- `bootstrap_telegram_auth_from_env(...)`
|
|
@@ -504,6 +546,9 @@ Contract notes:
|
|
|
504
546
|
|
|
505
547
|
- These are **host-local** wrappers over current public AbstractCore tool
|
|
506
548
|
modules. They do not proxy through the remote AbstractCore server.
|
|
549
|
+
- The host facade email methods and the standalone `comms_facade` functions use
|
|
550
|
+
the same Runtime-owned email wrapper layer; choose whichever is more natural
|
|
551
|
+
for the host surface you are building.
|
|
507
552
|
- They are intentionally **nondurable**. They do not write Runtime run history
|
|
508
553
|
on their own.
|
|
509
554
|
- Direct `send_email(...)` on the host facade and direct
|
|
@@ -48,7 +48,7 @@ Notes:
|
|
|
48
48
|
- In untrusted deployments, prefer passthrough tools so a host/worker boundary approves and executes tool calls (`PassthroughToolExecutor` in `src/abstractruntime/integrations/abstractcore/tool_executor.py`).
|
|
49
49
|
- For local bridge-owned delivery flows, `ApprovalToolExecutor` can auto-run the Telegram send tools while requiring approval for email, WhatsApp, unknown tools, and write/command-style tools by default.
|
|
50
50
|
- Separate from the durable `TOOL_CALLS` path, Runtime also exposes **host wrappers** for operator-owned email and Telegram surfaces:
|
|
51
|
-
- email helpers on `get_abstractcore_host_facade(runtime)`
|
|
51
|
+
- email helpers on `get_abstractcore_host_facade(runtime)` and `abstractruntime.integrations.abstractcore.comms_facade`
|
|
52
52
|
- Telegram lifecycle/send wrappers in `abstractruntime.integrations.abstractcore.telegram_facade`
|
|
53
53
|
- read/bootstrap helpers stay host-local and do not create run history by themselves
|
|
54
54
|
- if an outbound send belongs to a run, prefer the durable run facade:
|
|
@@ -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`
|
|
@@ -222,7 +222,7 @@ Notes:
|
|
|
222
222
|
- Use `ApprovalToolExecutor(delegate=..., policy=ToolApprovalPolicy())` when a local host should auto-run safe tools but pause for user approval before write/command/unknown tools.
|
|
223
223
|
- Remote `params.api_key` and `params.provider_api_key` are compatibility inputs; runtime converts them to `X-AbstractCore-Provider-API-Key` headers for current AbstractCore servers.
|
|
224
224
|
- Gateway/hosts choose Core server URLs, Core server auth headers, provider/model defaults, tool executors, artifact stores, and any Gateway env/config translation before Runtime sees the call.
|
|
225
|
-
- Hosts should bind `get_abstractcore_host_facade(rt)` for prompt-cache, durable bloc/KV, model-residency, and host-local email helper operations instead of
|
|
225
|
+
- Hosts should bind `get_abstractcore_host_facade(rt)` for prompt-cache, durable bloc/KV, and model-residency control operations, and use the Runtime-owned email wrapper layer (`get_abstractcore_host_facade(rt)` or `abstractruntime.integrations.abstractcore.comms_facade`) for host-local email helper operations instead of importing `abstractcore.tools.comms_tools` directly.
|
|
226
226
|
- Hosts should use `abstractruntime.integrations.abstractcore.telegram_facade` for Telegram TDLib bootstrap/global-client/send helpers instead of importing `abstractcore.tools.telegram_tdlib` or `abstractcore.tools.telegram_tools` directly. These wrappers remain host-local and do not proxy through a remote Core server.
|
|
227
227
|
- If an outbound email or Telegram send belongs to a run, hosts should prefer `get_abstractcore_run_facade(rt).send_email(...)` or `send_telegram_message(...)`. Those are durable `TOOL_CALLS` child runs: Runtime records the request and outcome, and replay should reuse the recorded result instead of resending the message. If the child run waits for approval or passthrough host execution, resume it through the same public boundary with `resume_tool_calls(...)`.
|
|
228
228
|
- Use `pip install "abstractruntime[multimodal]"` for common AbstractCore media, vision, voice, audio, and music dependencies.
|
|
@@ -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,11 +34,11 @@
|
|
|
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
|
-
- Host-local operator wrappers: the host facade
|
|
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.
|
|
42
42
|
- Durable outbound comms: when an email or Telegram send belongs to a run, use `get_abstractcore_run_facade(...).send_email(...)` or `send_telegram_message(...)` so Runtime records the request and outcome in a child run; replay should show the recorded result, not resend the message. If the child run waits for approval or passthrough execution, resume it through `resume_tool_calls(...)`.
|
|
43
43
|
- [Artifacts](docs/api.md#artifacts-store-by-reference): JSON-safe refs for large payloads; generated images/audio/voice/music are stored here rather than embedded in `RunState.vars`
|
|
44
44
|
- Remote multimodal guardrail: remote/hybrid media generation uses AbstractCore Server endpoints, does not inherit the chat model for media endpoints, rejects unsupported input media and non-file STT inputs instead of ignoring them, and redacts data URLs from persisted provider-request metadata
|