AbstractRuntime 0.4.16__tar.gz → 0.4.18__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.16 → abstractruntime-0.4.18}/CHANGELOG.md +33 -1
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/PKG-INFO +13 -12
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/README.md +5 -4
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/api.md +10 -8
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/architecture.md +4 -4
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/README.md +19 -2
- abstractruntime-0.4.18/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +295 -0
- abstractruntime-0.4.18/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +165 -0
- abstractruntime-0.4.18/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +178 -0
- abstractruntime-0.4.18/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +86 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/faq.md +37 -9
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/getting-started.md +1 -1
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/integrations/abstractcore.md +117 -8
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/tools-comms.md +9 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/llms-full.txt +9 -7
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/llms.txt +7 -5
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/pyproject.toml +10 -10
- abstractruntime-0.4.18/release-notes.md +14 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/__init__.py +15 -2
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +56 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +165 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/host_facade.py +83 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/llm_client.py +235 -1
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/run_facade.py +244 -2
- abstractruntime-0.4.18/src/abstractruntime/integrations/abstractcore/telegram_facade.py +194 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_abstractcore_discovery_facade.py +176 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_abstractcore_host_facade.py +102 -0
- abstractruntime-0.4.18/tests/test_abstractcore_run_facade.py +477 -0
- abstractruntime-0.4.18/tests/test_abstractcore_telegram_facade.py +235 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_multimodal_abstractcore_integration.py +54 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_packaging_extras.py +7 -7
- abstractruntime-0.4.16/release-notes.md +0 -11
- abstractruntime-0.4.16/tests/test_abstractcore_run_facade.py +0 -172
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/.gitignore +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/LICENSE +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/ROADMAP.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/SECURITY.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/README.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/proposed/2026-05-20_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/backlog/proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/evidence.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/limits.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/proposal.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/provenance.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/examples/README.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/mkdocs.yml +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/pytest.ini +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/README.md +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/conftest.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.16 → abstractruntime-0.4.18}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.18] - 2026-05-21
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Runtime now exposes the remaining Gateway-facing comms/Telegram package boundary through public Runtime wrappers:
|
|
14
|
+
- host-local email helpers on `get_abstractcore_host_facade(...)`
|
|
15
|
+
- host-local Telegram TDLib/bootstrap/global-client wrappers in `abstractruntime.integrations.abstractcore.telegram_facade`
|
|
16
|
+
- Outbound email and Telegram sends can now execute as durable Runtime-authored child runs through `get_abstractcore_run_facade(...)`:
|
|
17
|
+
- `send_email(...)`
|
|
18
|
+
- `send_telegram_message(...)`
|
|
19
|
+
- `resume_tool_calls(...)` for approval-gated or passthrough tool waits
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- Runtime docs and AI-readable `llms.txt` / `llms-full.txt` now distinguish clearly between:
|
|
23
|
+
- host-local operator comms helpers
|
|
24
|
+
- durable run-owned outbound comms execution and replay semantics
|
|
25
|
+
- Outbound comms replay now follows the Runtime-owned truth model: recorded send requests and outcomes are replayed as data, not re-executed as external sends.
|
|
26
|
+
|
|
27
|
+
## [0.4.17] - 2026-05-21
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
- Runtime now surfaces AbstractCore-backed music through the same durable boundary as other generated artifacts:
|
|
31
|
+
- host discovery snapshot methods for music providers/models
|
|
32
|
+
- durable run-scoped `generate_music(...)`
|
|
33
|
+
- artifact-backed normalized music outputs for local and remote Runtime paths
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- Minimum optional AbstractCore dependency floor is now `abstractcore>=2.13.24`.
|
|
37
|
+
- The `multimodal` extra now installs `abstractcore[remote,vision,voice,audio,music]>=2.13.24`, which includes AbstractMusic's lightweight remote ACE backend path via `abstractmusic>=0.1.4`.
|
|
38
|
+
- Runtime docs and AI-readable `llms.txt` / `llms-full.txt` now describe the shipped music boundary and the current `0030` Gateway cleanup scope more accurately.
|
|
39
|
+
|
|
10
40
|
## [0.4.16] - 2026-05-21
|
|
11
41
|
|
|
12
42
|
### Added
|
|
@@ -448,7 +478,9 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
448
478
|
|
|
449
479
|
Initial development version with basic proof-of-concept features.
|
|
450
480
|
|
|
451
|
-
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.
|
|
481
|
+
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.18...HEAD
|
|
482
|
+
[0.4.18]: https://github.com/lpalbou/abstractruntime/compare/v0.4.17...v0.4.18
|
|
483
|
+
[0.4.17]: https://github.com/lpalbou/abstractruntime/compare/v0.4.16...v0.4.17
|
|
452
484
|
[0.4.16]: https://github.com/lpalbou/abstractruntime/compare/v0.4.15...v0.4.16
|
|
453
485
|
[0.4.15]: https://github.com/lpalbou/abstractruntime/compare/v0.4.14...v0.4.15
|
|
454
486
|
[0.4.14]: https://github.com/lpalbou/abstractruntime/compare/v0.4.13...v0.4.14
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.18
|
|
4
4
|
Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
|
|
5
5
|
Project-URL: AbstractCore (website), https://www.abstractcore.ai/
|
|
6
6
|
Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
|
|
@@ -23,24 +23,24 @@ Requires-Python: >=3.10
|
|
|
23
23
|
Requires-Dist: abstractmemory>=0.2.6
|
|
24
24
|
Requires-Dist: abstractsemantics>=0.0.3
|
|
25
25
|
Provides-Extra: abstractcore
|
|
26
|
-
Requires-Dist: abstractcore>=2.13.
|
|
26
|
+
Requires-Dist: abstractcore>=2.13.24; extra == 'abstractcore'
|
|
27
27
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'abstractcore'
|
|
28
28
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'abstractcore'
|
|
29
29
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'abstractcore'
|
|
30
30
|
Provides-Extra: all-apple
|
|
31
|
-
Requires-Dist: abstractcore[all-apple]>=2.13.
|
|
31
|
+
Requires-Dist: abstractcore[all-apple]>=2.13.24; extra == 'all-apple'
|
|
32
32
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'all-apple'
|
|
33
33
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'all-apple'
|
|
34
34
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'all-apple'
|
|
35
35
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'all-apple'
|
|
36
36
|
Provides-Extra: all-gpu
|
|
37
|
-
Requires-Dist: abstractcore[all-gpu]>=2.13.
|
|
37
|
+
Requires-Dist: abstractcore[all-gpu]>=2.13.24; extra == 'all-gpu'
|
|
38
38
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'all-gpu'
|
|
39
39
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'all-gpu'
|
|
40
40
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'all-gpu'
|
|
41
41
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'all-gpu'
|
|
42
42
|
Provides-Extra: apple
|
|
43
|
-
Requires-Dist: abstractcore[apple]>=2.13.
|
|
43
|
+
Requires-Dist: abstractcore[apple]>=2.13.24; extra == 'apple'
|
|
44
44
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'apple'
|
|
45
45
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'apple'
|
|
46
46
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'apple'
|
|
@@ -50,18 +50,18 @@ Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
|
|
|
50
50
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
51
51
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
52
52
|
Provides-Extra: gpu
|
|
53
|
-
Requires-Dist: abstractcore[gpu]>=2.13.
|
|
53
|
+
Requires-Dist: abstractcore[gpu]>=2.13.24; extra == 'gpu'
|
|
54
54
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'gpu'
|
|
55
55
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'gpu'
|
|
56
56
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'gpu'
|
|
57
57
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'gpu'
|
|
58
58
|
Provides-Extra: mcp-worker
|
|
59
|
-
Requires-Dist: abstractcore[tools]>=2.13.
|
|
59
|
+
Requires-Dist: abstractcore[tools]>=2.13.24; extra == 'mcp-worker'
|
|
60
60
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'mcp-worker'
|
|
61
61
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'mcp-worker'
|
|
62
62
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'mcp-worker'
|
|
63
63
|
Provides-Extra: multimodal
|
|
64
|
-
Requires-Dist: abstractcore[audio,remote,vision,voice]>=2.13.
|
|
64
|
+
Requires-Dist: abstractcore[audio,music,remote,vision,voice]>=2.13.24; extra == 'multimodal'
|
|
65
65
|
Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'multimodal'
|
|
66
66
|
Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'multimodal'
|
|
67
67
|
Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'multimodal'
|
|
@@ -81,7 +81,7 @@ Description-Content-Type: text/markdown
|
|
|
81
81
|
|
|
82
82
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
83
83
|
|
|
84
|
-
**Version:** 0.4.
|
|
84
|
+
**Version:** 0.4.18 • **Python:** 3.10+
|
|
85
85
|
|
|
86
86
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
87
87
|
|
|
@@ -115,7 +115,7 @@ AbstractCore integration (LLM + tools):
|
|
|
115
115
|
pip install "abstractruntime[abstractcore]"
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
-
The `abstractcore` extra installs AbstractCore 2.13.
|
|
118
|
+
The `abstractcore` extra installs AbstractCore 2.13.24 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, and lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, the public local vision-cache catalog helper used by Runtime discovery, and the lightweight `abstractmusic>=0.1.4` ACE-remote path used by Runtime music generation are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, audio, and music dependencies.
|
|
119
119
|
|
|
120
120
|
Hardware profile cascades are available for native Python installs:
|
|
121
121
|
`abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
|
|
@@ -169,7 +169,7 @@ state = rt.resume(
|
|
|
169
169
|
assert state.status.value == "completed"
|
|
170
170
|
```
|
|
171
171
|
|
|
172
|
-
## What’s included (v0.4.
|
|
172
|
+
## What’s included (v0.4.18)
|
|
173
173
|
|
|
174
174
|
Kernel (dependency-light):
|
|
175
175
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -193,7 +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,
|
|
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.
|
|
197
198
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
198
199
|
depends on the light AbstractMemory contract; hosts choose storage backends
|
|
199
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.18 • **Python:** 3.10+
|
|
8
8
|
|
|
9
9
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
10
10
|
|
|
@@ -38,7 +38,7 @@ AbstractCore integration (LLM + tools):
|
|
|
38
38
|
pip install "abstractruntime[abstractcore]"
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
The `abstractcore` extra installs AbstractCore 2.13.
|
|
41
|
+
The `abstractcore` extra installs AbstractCore 2.13.24 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, and lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, the public local vision-cache catalog helper used by Runtime discovery, and the lightweight `abstractmusic>=0.1.4` ACE-remote path used by Runtime music generation are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, audio, and music dependencies.
|
|
42
42
|
|
|
43
43
|
Hardware profile cascades are available for native Python installs:
|
|
44
44
|
`abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
|
|
@@ -92,7 +92,7 @@ state = rt.resume(
|
|
|
92
92
|
assert state.status.value == "completed"
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
-
## What’s included (v0.4.
|
|
95
|
+
## What’s included (v0.4.18)
|
|
96
96
|
|
|
97
97
|
Kernel (dependency-light):
|
|
98
98
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -116,7 +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,
|
|
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.
|
|
120
121
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
121
122
|
depends on the light AbstractMemory contract; hosts choose storage backends
|
|
122
123
|
such as LanceDB, SQLite, or in-memory stores.
|
|
@@ -125,7 +125,7 @@ Key types:
|
|
|
125
125
|
Artifacts are used by:
|
|
126
126
|
- offloading wrappers (`src/abstractruntime/storage/offloading.py`)
|
|
127
127
|
- evidence capture (`docs/evidence.md`, `src/abstractruntime/evidence/recorder.py`)
|
|
128
|
-
- AbstractCore media integration: input artifact refs can be materialized for LLM calls, and generated image/voice/audio outputs are stored as artifact refs
|
|
128
|
+
- AbstractCore media integration: input artifact refs can be materialized for LLM calls, and generated image/voice/music/audio outputs are stored as artifact refs
|
|
129
129
|
|
|
130
130
|
## Snapshots / bookmarks
|
|
131
131
|
|
|
@@ -176,7 +176,7 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
|
|
|
176
176
|
|
|
177
177
|
### AbstractCore (LLM + tools)
|
|
178
178
|
|
|
179
|
-
Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.
|
|
179
|
+
Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.24 or newer).
|
|
180
180
|
|
|
181
181
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
182
182
|
|
|
@@ -184,12 +184,14 @@ 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 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`)
|
|
187
188
|
- public durable run facade: `AbstractCoreRunFacade`, `get_abstractcore_run_facade(...)` (`src/abstractruntime/integrations/abstractcore/run_facade.py`)
|
|
188
189
|
- effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
|
|
189
190
|
- tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
|
|
190
|
-
- discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_vision_provider_models`, `list_cached_vision_models`)
|
|
191
|
-
- host-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
|
|
192
|
-
-
|
|
191
|
+
- 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
|
+
- 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-facade email helpers remain host-local wrappers over AbstractCore's public comms helpers (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
|
|
194
|
+
- 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`)
|
|
193
195
|
|
|
194
196
|
`LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
|
|
195
197
|
- `prompt`, `messages`, `system_prompt`, and convenience `text`
|
|
@@ -198,11 +200,11 @@ Entry points:
|
|
|
198
200
|
- `params`: provider/model routing, generation controls, prompt-cache keys or `prompt_cache_binding`, structured-output schema options, and tracing metadata
|
|
199
201
|
|
|
200
202
|
Multimodal support:
|
|
201
|
-
- install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, and
|
|
203
|
+
- install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, audio, and music dependencies
|
|
202
204
|
- local clients call AbstractCore's unified `generate(..., media=..., output=...)`
|
|
203
|
-
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, speech, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
205
|
+
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
204
206
|
- remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
|
|
205
|
-
- generated image/voice/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
207
|
+
- generated image/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
206
208
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
207
209
|
- optional local media residency failures complete with `status_hint="warning"` and `degraded=true`, while unsupported local media warmup also reports `execution_mode="local_one_shot_subprocess"` and `requires_long_lived_server=true`
|
|
208
210
|
- Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected Core/capability install profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AbstractRuntime — Architecture
|
|
2
2
|
|
|
3
|
-
> Updated: 2026-05-
|
|
4
|
-
> Version: 0.4.
|
|
3
|
+
> Updated: 2026-05-21
|
|
4
|
+
> Version: 0.4.18
|
|
5
5
|
> Scope: this describes **what is implemented in this repository**.
|
|
6
6
|
|
|
7
7
|
AbstractRuntime is a **durable workflow runtime**: it executes workflow graphs as a persisted state machine with explicit waits (user, time, events, jobs, subworkflows). A run can pause for hours/days and resume **without** keeping Python stacks/coroutines alive.
|
|
@@ -28,7 +28,7 @@ Key invariants (enforced by code, not convention):
|
|
|
28
28
|
|
|
29
29
|
## AbstractCore capability boundary
|
|
30
30
|
|
|
31
|
-
AbstractRuntime's job is persistence and orchestration. AbstractCore owns model/provider capability execution: chat, structured output, cached sessions/prompt cache, media input analysis, image generation, voice/audio generation, transcription, and future modalities such as
|
|
31
|
+
AbstractRuntime's job is persistence and orchestration. AbstractCore owns model/provider capability execution: chat, structured output, cached sessions/prompt cache, media input analysis, image generation, voice/audio generation, music generation, transcription, and future modalities such as video.
|
|
32
32
|
|
|
33
33
|
The boundary is intentionally narrow:
|
|
34
34
|
- Workflow nodes request model work with `EffectType.LLM_CALL`; the runtime persists the request/result and delegates execution to the configured AbstractCore client.
|
|
@@ -36,7 +36,7 @@ The boundary is intentionally narrow:
|
|
|
36
36
|
- Generated binary outputs are written to `ArtifactStore` and returned as `artifact_id` / `artifact_ref`, keeping `RunState.vars` and ledger records bounded and JSON-safe.
|
|
37
37
|
- Remote chat media is sent to AbstractCore Server as provider-ready content arrays, but persisted provider-request metadata redacts data URLs so checkpoints and ledgers do not embed media bytes.
|
|
38
38
|
- Provider sessions and prompt-cache objects are not runtime state. Runtime may carry stable cache keys, while AbstractCore clients/servers manage warm caches.
|
|
39
|
-
- Hosts should use Runtime-owned AbstractCore facades for discovery snapshots, prompt-cache/model-residency control operations, and durable run-scoped media child runs instead of reaching through private runtime attachments or importing Core internals directly.
|
|
39
|
+
- Hosts should use Runtime-owned AbstractCore facades for discovery snapshots, prompt-cache/model-residency control operations, and durable run-scoped media/comms child runs instead of reaching through private runtime attachments or importing Core internals directly.
|
|
40
40
|
- Local execution can use richer AbstractCore capability plugins. Remote and hybrid execution map the common media cases to AbstractCore Server endpoints and OpenAI-compatible content arrays, while hybrid keeps tool execution local.
|
|
41
41
|
- Gateway and other hosts compose Runtime with the desired Core/capability/memory profile. Runtime's base package includes the AbstractMemory contract but not backend extras such as LanceDB; hosts choose storage, embeddings, and readiness policy. Hardware profile extras such as `apple`, `gpu`, `all-apple`, and `all-gpu` cascade through AbstractCore when a host selects them.
|
|
42
42
|
- Remote and hybrid clients use explicit Core server URLs and auth headers supplied by the host. Runtime does not read Gateway auth environment variables for provider/model/auth decisions or treat Gateway bearer tokens as Core server/provider credentials.
|
|
@@ -10,6 +10,19 @@ This folder contains a structured backlog used during development. Items are gro
|
|
|
10
10
|
|
|
11
11
|
If you are new to the project, start with `../README.md` and `../architecture.md` instead.
|
|
12
12
|
|
|
13
|
+
## Next recommended work
|
|
14
|
+
|
|
15
|
+
1. `planned/018_workspace_access_policy_for_media_and_tools.md`
|
|
16
|
+
Keep workspace and tool policy explicit while Gateway extracts its local
|
|
17
|
+
workspace helpers.
|
|
18
|
+
2. `planned/014_remote_tool_worker_executor.md`
|
|
19
|
+
The public ToolExecutor path is still the larger follow-on after the current
|
|
20
|
+
Gateway boundary cleanup.
|
|
21
|
+
3. `proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md`
|
|
22
|
+
The comms/Telegram boundary cleanup is now complete; the remaining lower
|
|
23
|
+
pressure follow-up is a Runtime-owned tool-spec surface if Gateway or the
|
|
24
|
+
MCP worker still need one after adoption.
|
|
25
|
+
|
|
13
26
|
## Completed
|
|
14
27
|
|
|
15
28
|
| ID | Item |
|
|
@@ -36,6 +49,9 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
36
49
|
| 026 | `completed/026_runtime_host_discovery_facade_for_core_catalogs.md` |
|
|
37
50
|
| 027 | `completed/027_runtime_durable_bloc_prompt_cache_facade.md` |
|
|
38
51
|
| 028 | `completed/028_runtime_bloc_kv_lifecycle_and_pruning.md` |
|
|
52
|
+
| 029 | `completed/029_runtime_music_generation_and_discovery_via_abstractcore.md` |
|
|
53
|
+
| 0030 | `completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md` |
|
|
54
|
+
| 0032 | `completed/0032_runtime_durable_outbound_comms_truth.md` |
|
|
39
55
|
|
|
40
56
|
## Planned
|
|
41
57
|
|
|
@@ -49,10 +65,11 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
49
65
|
|
|
50
66
|
## Proposed
|
|
51
67
|
|
|
52
|
-
|
|
|
53
|
-
|
|
68
|
+
| ID | Item |
|
|
69
|
+
|----|------|
|
|
54
70
|
| 2026-05-20 | `proposed/2026-05-20_agent_runtime_convenience_constructor.md` |
|
|
55
71
|
| 2026-05-20 | `proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md` |
|
|
72
|
+
| 0031 | `proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md` |
|
|
56
73
|
|
|
57
74
|
## Deprecated
|
|
58
75
|
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# 0030 Runtime Host Facades For Comms And Telegram, With Tool-Spec Follow-Up Split Out
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
- Created: 2026-05-21
|
|
5
|
+
- Status: Completed
|
|
6
|
+
- Completed: 2026-05-21
|
|
7
|
+
|
|
8
|
+
## ADR status
|
|
9
|
+
- Governing ADRs: None
|
|
10
|
+
- ADR impact: None; this extends the existing public host-facade pattern rather than creating a new architecture rule.
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
|
|
14
|
+
Runtime already owns the public Gateway-facing integration boundary for the
|
|
15
|
+
main AbstractCore-backed surfaces:
|
|
16
|
+
|
|
17
|
+
- `AbstractCoreHostFacade` for operator/control-plane helpers
|
|
18
|
+
- `AbstractCoreDiscoveryFacade` for provider/model/media catalogs
|
|
19
|
+
- `AbstractCoreRunFacade` for run-scoped durable media execution
|
|
20
|
+
|
|
21
|
+
Gateway now uses those facades for prompt-cache control, durable blocs, model
|
|
22
|
+
residency, discovery, and run-scoped voice/STT/image work. The remaining
|
|
23
|
+
direct `abstractcore` imports in Gateway are concentrated in comms/Telegram
|
|
24
|
+
helpers and a smaller tool-spec/testing tail.
|
|
25
|
+
|
|
26
|
+
## Current code reality
|
|
27
|
+
|
|
28
|
+
Inspected on 2026-05-21:
|
|
29
|
+
|
|
30
|
+
- `src/abstractruntime/integrations/abstractcore/host_facade.py`
|
|
31
|
+
- exposes prompt-cache, bloc, and model-residency helpers
|
|
32
|
+
- does not expose email/comms helpers
|
|
33
|
+
- `src/abstractruntime/integrations/abstractcore/default_tools.py`
|
|
34
|
+
- imports `abstractcore.tools.common_tools`, `comms_tools`, and `telegram_tools`
|
|
35
|
+
- derives JSON-safe tool specs via `abstractcore.tools.core.ToolDefinition`
|
|
36
|
+
- `src/abstractruntime/integrations/abstractcore/mcp_worker.py`
|
|
37
|
+
- converts callables to MCP entries through `ToolDefinition.from_function(...)`
|
|
38
|
+
- `src/abstractruntime/integrations/abstractcore/tool_executor.py`
|
|
39
|
+
- still constructs `abstractcore.tools.core.ToolCall`
|
|
40
|
+
- `../abstractgateway/src/abstractgateway/routes/gateway.py`
|
|
41
|
+
- still imports `abstractcore.tools.comms_tools` directly for email helper routes
|
|
42
|
+
- `../abstractgateway/src/abstractgateway/cli.py`
|
|
43
|
+
- still imports `abstractcore.tools.telegram_tdlib` directly for `telegram-auth`
|
|
44
|
+
- `../abstractgateway/src/abstractgateway/integrations/telegram_bridge.py`
|
|
45
|
+
- still imports `abstractcore.tools.telegram_tdlib` global-client helpers directly
|
|
46
|
+
|
|
47
|
+
Runtime therefore has the right facade pattern already, but the remaining
|
|
48
|
+
host/operator surfaces have not been moved onto it. The strongest current
|
|
49
|
+
Gateway production pressure is comms/email and Telegram bootstrap/global-client
|
|
50
|
+
access; tool-spec coupling is lower-pressure follow-up work.
|
|
51
|
+
|
|
52
|
+
## Problem
|
|
53
|
+
|
|
54
|
+
Gateway cannot fully stop importing `abstractcore` directly until Runtime owns
|
|
55
|
+
two small public surfaces in phase 1:
|
|
56
|
+
|
|
57
|
+
1. comms/email host helpers
|
|
58
|
+
2. Telegram bootstrap/global-client wrappers, plus a thin send helper for notifier parity
|
|
59
|
+
|
|
60
|
+
The missing pieces are not durable-run problems. They are host/operator
|
|
61
|
+
integration surfaces, so they belong next to the existing host-facade pattern.
|
|
62
|
+
Tool-spec helpers remain useful, but they are not the strongest current
|
|
63
|
+
Gateway blocker and should not hold up the narrower phase-1 cleanup.
|
|
64
|
+
|
|
65
|
+
## What we want to do
|
|
66
|
+
|
|
67
|
+
Extend Runtime's public host integration layer so Gateway can depend on
|
|
68
|
+
Runtime alone for the remaining comms/Telegram edges, while tracking
|
|
69
|
+
tool-spec normalization as a separate follow-up.
|
|
70
|
+
|
|
71
|
+
## Why
|
|
72
|
+
|
|
73
|
+
- keeps Gateway source aligned with the Runtime-owned boundary
|
|
74
|
+
- reuses the existing facade pattern instead of inventing another Gateway/Core seam
|
|
75
|
+
- gives future hosts one place to look for operator-scoped helper contracts
|
|
76
|
+
- lets Runtime normalize local/remote Core topology for these paths too when needed later
|
|
77
|
+
- avoids over-scoping a release-blocking boundary cleanup around a lower-pressure
|
|
78
|
+
tool-spec concern
|
|
79
|
+
|
|
80
|
+
## Requirements
|
|
81
|
+
|
|
82
|
+
- Add public host-facing email helpers for:
|
|
83
|
+
- list accounts
|
|
84
|
+
- list messages
|
|
85
|
+
- read message
|
|
86
|
+
- send message
|
|
87
|
+
- Add a Runtime-owned Telegram wrapper surface for:
|
|
88
|
+
- one-shot TDLib auth bootstrap from env
|
|
89
|
+
- a stable "not available" error
|
|
90
|
+
- access to the global TDLib client lifecycle used by the Gateway bridge
|
|
91
|
+
- stop/cleanup of the global client
|
|
92
|
+
- `send_telegram_message(...)` for notifier parity
|
|
93
|
+
- Keep these host helpers nondurable. They must not write Runtime run history by themselves.
|
|
94
|
+
- Allow Runtime to wrap existing public Core tool modules in phase 1; do not block on a larger Core refactor.
|
|
95
|
+
- Do not require a new AbstractCore runtime-facing backend seam for phase 1.
|
|
96
|
+
|
|
97
|
+
## Suggested implementation
|
|
98
|
+
|
|
99
|
+
1. Extend `AbstractCoreHostFacade` with email/comms methods:
|
|
100
|
+
- `list_email_accounts(...)`
|
|
101
|
+
- `list_emails(...)`
|
|
102
|
+
- `read_email(...)`
|
|
103
|
+
- `send_email(...)`
|
|
104
|
+
2. Add a small Runtime Telegram helper module, for example under
|
|
105
|
+
`abstractruntime.integrations.abstractcore.telegram_facade`, with:
|
|
106
|
+
- `TelegramTdlibNotAvailable`
|
|
107
|
+
- `bootstrap_telegram_auth_from_env(...)`
|
|
108
|
+
- `get_global_telegram_client(start=False)`
|
|
109
|
+
- `stop_global_telegram_client()`
|
|
110
|
+
- `send_telegram_message(...)`
|
|
111
|
+
3. Keep Runtime wrappers thin over current public Core helpers first:
|
|
112
|
+
- `abstractcore.tools.comms_tools`
|
|
113
|
+
- `abstractcore.tools.telegram_tdlib`
|
|
114
|
+
- `abstractcore.tools.telegram_tools`
|
|
115
|
+
4. Keep full abstractagent/tool-type decoupling explicitly out of scope here.
|
|
116
|
+
|
|
117
|
+
## Scope
|
|
118
|
+
|
|
119
|
+
- Runtime host facade extension for email/comms
|
|
120
|
+
- Runtime Telegram wrappers for Gateway CLI/bridge/notifier adoption
|
|
121
|
+
- tests proving those surfaces are public, stable, and JSON-safe
|
|
122
|
+
|
|
123
|
+
## Non-goals
|
|
124
|
+
|
|
125
|
+
- Do not move Gateway workspace/file policy into Runtime.
|
|
126
|
+
- Do not redesign Core tool execution or the durable `TOOL_CALLS` effect.
|
|
127
|
+
- Do not block this on a full replacement of `abstractcore.tools.ToolCall` inside AbstractAgent.
|
|
128
|
+
- Do not block this phase on Runtime-owned tool-spec adapters; track those separately.
|
|
129
|
+
- Do not introduce new Core HTTP endpoints just to satisfy Gateway.
|
|
130
|
+
|
|
131
|
+
## Dependencies and related tasks
|
|
132
|
+
|
|
133
|
+
- `../completed/019_runtime_host_facade_for_core_operator_surfaces.md`
|
|
134
|
+
- `../completed/026_runtime_host_discovery_facade_for_core_catalogs.md`
|
|
135
|
+
- `../completed/027_runtime_durable_bloc_prompt_cache_facade.md`
|
|
136
|
+
- `../completed/028_runtime_bloc_kv_lifecycle_and_pruning.md`
|
|
137
|
+
- `../proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md`
|
|
138
|
+
- `../../../../abstractgateway/docs/backlog/planned/0050_gateway_runtime_boundary_cleanup_for_workspace_comms_and_telegram.md`
|
|
139
|
+
- `../../../../abstractcore/docs/backlog/proposed/0796_runtime_facing_comms_and_telegram_backend_surface.md`
|
|
140
|
+
|
|
141
|
+
## Expected outcomes
|
|
142
|
+
|
|
143
|
+
- Runtime exposes the public surfaces Gateway needs in order to stop importing
|
|
144
|
+
`abstractcore.tools.comms_tools` directly.
|
|
145
|
+
- Runtime exposes the public surfaces Gateway needs in order to stop importing
|
|
146
|
+
`abstractcore.tools.telegram_tdlib` and `telegram_tools` directly.
|
|
147
|
+
- Runtime remains the only lower-level dependency that Gateway needs for these
|
|
148
|
+
operator/tooling paths once Gateway adopts the new wrappers.
|
|
149
|
+
- Runtime phase 1 proves whether a later Runtime-owned tool-spec surface is
|
|
150
|
+
still needed; that work stays split into `0031`.
|
|
151
|
+
|
|
152
|
+
## Validation
|
|
153
|
+
|
|
154
|
+
- focused Runtime tests for the new host-facade email methods
|
|
155
|
+
- focused Runtime tests for Telegram wrapper happy/unavailable paths
|
|
156
|
+
- focused Runtime wiring proof that the host email helpers still work when the
|
|
157
|
+
runtime is local/remote/hybrid because they are host-local wrappers, not
|
|
158
|
+
remote Core server routes
|
|
159
|
+
- aggregate Runtime regression covering the adjacent host-facade behavior
|
|
160
|
+
|
|
161
|
+
## Progress checklist
|
|
162
|
+
- [x] Extend `AbstractCoreHostFacade` with email/comms helpers.
|
|
163
|
+
- [x] Add Runtime-owned Telegram wrapper helpers for bootstrap, send, and global-client lifecycle.
|
|
164
|
+
- [x] Validate the Runtime surfaces and re-run focused Runtime boundary tests.
|
|
165
|
+
|
|
166
|
+
## Guidance for the implementing agent
|
|
167
|
+
|
|
168
|
+
Prefer thin public wrappers over current Core functionality first. If phase 1
|
|
169
|
+
can unblock Gateway without new Core changes, do that. Keep Core item `0796`
|
|
170
|
+
proposed unless Runtime adoption proves the existing public tool modules are
|
|
171
|
+
too unstable or too duplicative. Keep Runtime-owned tool-spec adapters as a
|
|
172
|
+
separate follow-up rather than blocking this narrower comms/Telegram item.
|
|
173
|
+
|
|
174
|
+
## Completion report
|
|
175
|
+
|
|
176
|
+
### Date
|
|
177
|
+
|
|
178
|
+
2026-05-21
|
|
179
|
+
|
|
180
|
+
### Summary
|
|
181
|
+
|
|
182
|
+
Runtime now exposes the phase-1 public comms and Telegram wrappers that Gateway
|
|
183
|
+
needed for its remaining direct AbstractCore imports:
|
|
184
|
+
|
|
185
|
+
- host-facade email helpers on `AbstractCoreHostFacade`
|
|
186
|
+
- a separate Runtime-owned `telegram_facade` module for TDLib bootstrap,
|
|
187
|
+
process-global client lifecycle, and send parity
|
|
188
|
+
|
|
189
|
+
The implementation stayed intentionally narrow. It did not add remote server
|
|
190
|
+
routes, and it did not mix the lower-pressure tool-spec cleanup back into this
|
|
191
|
+
item.
|
|
192
|
+
|
|
193
|
+
### What shipped
|
|
194
|
+
|
|
195
|
+
- Extended `AbstractCoreHostFacade` with:
|
|
196
|
+
- `list_email_accounts(...)`
|
|
197
|
+
- `list_emails(...)`
|
|
198
|
+
- `read_email(...)`
|
|
199
|
+
- `send_email(...)`
|
|
200
|
+
- Added `abstractruntime.integrations.abstractcore.telegram_facade` with:
|
|
201
|
+
- `TelegramTdlibNotAvailable`
|
|
202
|
+
- `bootstrap_telegram_auth_from_env(...)`
|
|
203
|
+
- `get_global_telegram_client(...)`
|
|
204
|
+
- `stop_global_telegram_client()`
|
|
205
|
+
- `send_telegram_message(...)`
|
|
206
|
+
- Exported the new Telegram wrappers from
|
|
207
|
+
`abstractruntime.integrations.abstractcore`.
|
|
208
|
+
- Updated docs and LLM indexes so the public boundary now points hosts at
|
|
209
|
+
Runtime instead of direct `abstractcore.tools.*` imports.
|
|
210
|
+
|
|
211
|
+
### Current code pointers
|
|
212
|
+
|
|
213
|
+
- `src/abstractruntime/integrations/abstractcore/host_facade.py`
|
|
214
|
+
- `src/abstractruntime/integrations/abstractcore/telegram_facade.py`
|
|
215
|
+
- `src/abstractruntime/integrations/abstractcore/__init__.py`
|
|
216
|
+
- `tests/test_abstractcore_host_facade.py`
|
|
217
|
+
- `tests/test_abstractcore_telegram_facade.py`
|
|
218
|
+
- `docs/integrations/abstractcore.md`
|
|
219
|
+
- `docs/tools-comms.md`
|
|
220
|
+
- `docs/api.md`
|
|
221
|
+
- `docs/faq.md`
|
|
222
|
+
|
|
223
|
+
### Behavior changes
|
|
224
|
+
|
|
225
|
+
- Hosts can now use Runtime for operator-scoped email account discovery, email
|
|
226
|
+
listing/reading, and email sending instead of importing
|
|
227
|
+
`abstractcore.tools.comms_tools` directly.
|
|
228
|
+
- Hosts can now use Runtime for Telegram TDLib bootstrap, process-global TDLib
|
|
229
|
+
client lifecycle, and notifier-style `send_telegram_message(...)` instead of
|
|
230
|
+
importing `abstractcore.tools.telegram_tdlib` or `telegram_tools` directly.
|
|
231
|
+
- The email and Telegram phase-1 wrappers are explicitly **host-local**:
|
|
232
|
+
- they do not proxy through a remote AbstractCore server
|
|
233
|
+
- they do not create Runtime run history on their own
|
|
234
|
+
- the Telegram global client remains process-scoped rather than
|
|
235
|
+
runtime-instance scoped
|
|
236
|
+
|
|
237
|
+
### Review notes
|
|
238
|
+
|
|
239
|
+
- No new ADR was added. This is an extension of the already-established public
|
|
240
|
+
Runtime facade pattern rather than a new durable architecture rule.
|
|
241
|
+
- The two focused subagent reviews converged on the shipped shape:
|
|
242
|
+
- email belongs on the existing host facade
|
|
243
|
+
- Telegram lifecycle belongs in a separate module because it is process-global
|
|
244
|
+
host state, not normal runtime-instance state
|
|
245
|
+
- Tool-spec adapters remain explicitly deferred to `0031` rather than being
|
|
246
|
+
silently dropped.
|
|
247
|
+
|
|
248
|
+
### Tests
|
|
249
|
+
|
|
250
|
+
- `pytest -q tests/test_abstractcore_host_facade.py tests/test_abstractcore_telegram_facade.py`
|
|
251
|
+
- Result: `24 passed`
|
|
252
|
+
- `pytest -q tests/test_abstractcore_host_facade.py tests/test_abstractcore_telegram_facade.py tests/test_prompt_cache_modules.py tests/test_model_residency_control_plane.py tests/test_packaging_extras.py`
|
|
253
|
+
- Result: `53 passed in 0.29s`
|
|
254
|
+
- `python -m compileall src/abstractruntime/integrations/abstractcore`
|
|
255
|
+
- Result: clean
|
|
256
|
+
- `mkdocs build -q --site-dir /tmp/abstractruntime-0030-docs`
|
|
257
|
+
- Result: docs build passed; upstream Material for MkDocs emitted a
|
|
258
|
+
non-blocking roadmap warning
|
|
259
|
+
- `git diff --check`
|
|
260
|
+
- Result: clean
|
|
261
|
+
|
|
262
|
+
### Docs
|
|
263
|
+
|
|
264
|
+
- `README.md`
|
|
265
|
+
- `docs/integrations/abstractcore.md`
|
|
266
|
+
- `docs/tools-comms.md`
|
|
267
|
+
- `docs/api.md`
|
|
268
|
+
- `docs/faq.md`
|
|
269
|
+
- `llms.txt`
|
|
270
|
+
- `llms-full.txt`
|
|
271
|
+
|
|
272
|
+
### Residual risks
|
|
273
|
+
|
|
274
|
+
- These wrappers intentionally do not normalize remote/hybrid comms/Telegram
|
|
275
|
+
behavior through a remote Core server. If a later product requirement wants a
|
|
276
|
+
remote backend seam for those paths, that should be a separate decision.
|
|
277
|
+
- Gateway adoption is still tracked separately in
|
|
278
|
+
`../../../../abstractgateway/docs/backlog/planned/0050_gateway_runtime_boundary_cleanup_for_workspace_comms_and_telegram.md`.
|
|
279
|
+
- Gateway's backlog item `0050` still links to the old planned path for this
|
|
280
|
+
Runtime item. That stale sibling-package link was detected during closure
|
|
281
|
+
hygiene but was not edited here because Runtime write scope stayed confined to
|
|
282
|
+
this repository.
|
|
283
|
+
|
|
284
|
+
### Follow-ups
|
|
285
|
+
|
|
286
|
+
- Durable outbound comms sends were corrected separately in
|
|
287
|
+
`completed/0032_runtime_durable_outbound_comms_truth.md` so `0030` can stay
|
|
288
|
+
an honest record of the narrower package-boundary cleanup it originally
|
|
289
|
+
shipped.
|
|
290
|
+
- Keep Runtime-owned tool-spec adapters in
|
|
291
|
+
`../proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md`.
|
|
292
|
+
- Keep the optional Core seam idea in
|
|
293
|
+
`../../../../abstractcore/docs/backlog/proposed/0796_runtime_facing_comms_and_telegram_backend_surface.md`
|
|
294
|
+
proposed unless Runtime or Gateway adoption proves the current public Core
|
|
295
|
+
wrappers are insufficient.
|