AbstractRuntime 0.4.19__tar.gz → 0.4.21__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.
Files changed (336) hide show
  1. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/CHANGELOG.md +37 -1
  2. abstractruntime-0.4.21/CODE_OF_CONDUCT.md +30 -0
  3. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/PKG-INFO +14 -12
  4. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/README.md +6 -4
  5. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/README.md +3 -0
  6. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +1 -1
  7. abstractruntime-0.4.21/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +60 -0
  8. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/adr/README.md +2 -0
  9. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/api.md +11 -5
  10. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/architecture.md +2 -2
  11. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/README.md +21 -3
  12. abstractruntime-0.4.21/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +184 -0
  13. abstractruntime-0.4.21/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +205 -0
  14. abstractruntime-0.4.21/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +88 -0
  15. abstractruntime-0.4.21/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +85 -0
  16. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/DEPRECATED_README.md +3 -0
  17. abstractruntime-0.4.21/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +136 -0
  18. abstractruntime-0.4.21/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +85 -0
  19. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/faq.md +26 -3
  20. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/getting-started.md +1 -1
  21. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/integrations/abstractcore.md +48 -7
  22. abstractruntime-0.4.21/docs/troubleshooting.md +136 -0
  23. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/llms-full.txt +10 -5
  24. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/llms.txt +9 -6
  25. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/mkdocs.yml +1 -0
  26. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/pyproject.toml +8 -8
  27. abstractruntime-0.4.21/release-notes.md +15 -0
  28. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +81 -6
  29. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/factory.py +8 -0
  30. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/host_facade.py +98 -1
  31. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/llm_client.py +1196 -38
  32. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/output_specs.py +2 -2
  33. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/run_facade.py +24 -0
  34. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/compiler.py +46 -5
  35. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/visual/executor.py +205 -0
  36. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_abstractcore_host_facade.py +171 -3
  37. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_abstractcore_run_facade.py +64 -0
  38. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_factory_timeouts_default_to_abstractcore_config.py +4 -2
  39. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_client_media_artifacts.py +23 -0
  40. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_local_runtime_timeout_kwarg_policy.py +10 -1
  41. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_model_residency_control_plane.py +222 -6
  42. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_multimodal_abstractcore_integration.py +69 -0
  43. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_packaging_extras.py +7 -7
  44. abstractruntime-0.4.21/tests/test_prompt_cache_export_import.py +342 -0
  45. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_prompt_cache_modules.py +39 -0
  46. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_llm_call_multimodal_output.py +55 -0
  47. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_media_nodes.py +141 -0
  48. abstractruntime-0.4.19/docs/backlog/proposed/2026-05-20_agent_runtime_convenience_constructor.md +0 -37
  49. abstractruntime-0.4.19/docs/backlog/proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md +0 -192
  50. abstractruntime-0.4.19/release-notes.md +0 -8
  51. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/.github/workflows/ci.yml +0 -0
  52. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/.github/workflows/release.yml +0 -0
  53. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/.gitignore +0 -0
  54. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/ACKNOWLEDGMENTS.md +0 -0
  55. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/CONTRIBUTING.md +0 -0
  56. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/LICENSE +0 -0
  57. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/ROADMAP.md +0 -0
  58. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/SECURITY.md +0 -0
  59. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  60. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  61. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  62. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  63. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  64. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  65. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  66. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  67. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  68. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/003_wait_primitives.md +0 -0
  69. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  70. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  71. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  72. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  73. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/009_artifact_store.md +0 -0
  74. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  75. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  76. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  77. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  78. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  79. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  80. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  81. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  82. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  83. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  84. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  85. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  86. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  87. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  88. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  89. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  90. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  91. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  92. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  93. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  94. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  95. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  96. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/004_tests.md +0 -0
  97. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  98. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  99. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  100. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/README.md +0 -0
  101. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  102. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  103. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  104. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  105. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  106. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  107. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  108. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/evidence.md +0 -0
  109. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/limits.md +0 -0
  110. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/manual_testing.md +0 -0
  111. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/mcp-worker.md +0 -0
  112. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/proposal.md +0 -0
  113. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/provenance.md +0 -0
  114. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/snapshots.md +0 -0
  115. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/tools-comms.md +0 -0
  116. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/docs/workflow-bundles.md +0 -0
  117. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/emails.config.example.yaml +0 -0
  118. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/examples/01_hello_world.py +0 -0
  119. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/examples/02_ask_user.py +0 -0
  120. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/examples/03_wait_until.py +0 -0
  121. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/examples/04_multi_step.py +0 -0
  122. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/examples/05_persistence.py +0 -0
  123. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/examples/06_llm_integration.py +0 -0
  124. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/examples/07_react_agent.py +0 -0
  125. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/examples/README.md +0 -0
  126. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/pytest.ini +0 -0
  127. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/__init__.py +0 -0
  128. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/core/__init__.py +0 -0
  129. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/core/config.py +0 -0
  130. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/core/event_keys.py +0 -0
  131. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/core/models.py +0 -0
  132. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/core/policy.py +0 -0
  133. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/core/runtime.py +0 -0
  134. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/core/spec.py +0 -0
  135. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/core/vars.py +0 -0
  136. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/evidence/__init__.py +0 -0
  137. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/evidence/recorder.py +0 -0
  138. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/history_bundle.py +0 -0
  139. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/identity/__init__.py +0 -0
  140. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/identity/fingerprint.py +0 -0
  141. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/__init__.py +0 -0
  142. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  143. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  144. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  145. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  146. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
  147. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  148. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  149. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  150. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  151. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  152. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  153. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  154. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  155. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  156. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  157. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  158. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  159. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  160. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/memory/__init__.py +0 -0
  161. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/memory/active_context.py +0 -0
  162. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/memory/active_memory.py +0 -0
  163. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/memory/compaction.py +0 -0
  164. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/memory/kg_packets.py +0 -0
  165. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/memory/memact_composer.py +0 -0
  166. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/memory/recall_levels.py +0 -0
  167. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/memory/token_budget.py +0 -0
  168. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/rendering/__init__.py +0 -0
  169. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  170. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/rendering/json_stringify.py +0 -0
  171. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/scheduler/__init__.py +0 -0
  172. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/scheduler/convenience.py +0 -0
  173. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/scheduler/registry.py +0 -0
  174. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/scheduler/scheduler.py +0 -0
  175. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/__init__.py +0 -0
  176. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/artifacts.py +0 -0
  177. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/base.py +0 -0
  178. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/commands.py +0 -0
  179. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/in_memory.py +0 -0
  180. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/json_files.py +0 -0
  181. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/ledger_chain.py +0 -0
  182. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/observable.py +0 -0
  183. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/offloading.py +0 -0
  184. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/snapshots.py +0 -0
  185. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/storage/sqlite.py +0 -0
  186. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  187. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  188. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  189. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  190. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  191. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  192. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  193. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  194. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  195. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  196. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  197. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  198. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  199. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  200. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  201. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  202. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  203. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  204. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  205. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/workflow_bundle/models.py +0 -0
  206. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  207. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  208. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  209. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/README.md +0 -0
  210. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/conftest.py +0 -0
  211. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_abstractcore_comms_facade.py +0 -0
  212. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_abstractcore_discovery_facade.py +0 -0
  213. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_abstractcore_telegram_facade.py +0 -0
  214. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_active_context_policy.py +0 -0
  215. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_active_memory.py +0 -0
  216. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_answer_user_effect.py +0 -0
  217. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_artifacts.py +0 -0
  218. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_chat_summarizer_integration.py +0 -0
  219. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_command_store.py +0 -0
  220. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_compaction_helpers.py +0 -0
  221. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_control_adapter_while.py +0 -0
  222. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_default_tools_comms_gating.py +0 -0
  223. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_default_tools_include_skim_files.py +0 -0
  224. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_default_tools_include_skim_folders.py +0 -0
  225. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_default_tools_search_files_executor.py +0 -0
  226. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_durable_toolsets.py +0 -0
  227. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  228. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_emit_event_without_workflow_registry.py +0 -0
  229. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_evidence_recorder.py +0 -0
  230. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_integration_abstractcore.py +0 -0
  231. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_integrations_abstractcore.py +0 -0
  232. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_json_file_run_store_children_index.py +0 -0
  233. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_jsonl_ledger_recovery.py +0 -0
  234. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_kg_learn_and_recall_contract.py +0 -0
  235. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_ledger_chain.py +0 -0
  236. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_ledger_subscription.py +0 -0
  237. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_media_artifact_refs.py +0 -0
  238. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  239. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  240. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_requires_prompt.py +0 -0
  241. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_response_schema_normalization.py +0 -0
  242. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_structured_output_fallback.py +0 -0
  243. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  244. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  245. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  246. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_client_system_context.py +0 -0
  247. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_llm_client_tool_call_parsing.py +0 -0
  248. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_mcp_remote_tool_executor.py +0 -0
  249. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_mcp_worker_logging.py +0 -0
  250. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_mcp_worker_security.py +0 -0
  251. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_mcp_worker_stdio.py +0 -0
  252. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_media_artifact_resolution.py +0 -0
  253. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memact_composer_from_kg_result.py +0 -0
  254. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  255. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_kg_packets.py +0 -0
  256. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  257. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  258. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  259. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  260. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_note_effect.py +0 -0
  261. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_query_effect.py +0 -0
  262. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_query_rich_filters.py +0 -0
  263. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  264. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_memory_tag_effect.py +0 -0
  265. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_mlx_generation_serialization.py +0 -0
  266. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_offloading.py +0 -0
  267. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_pause_resume.py +0 -0
  268. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_queryable_run_store.py +0 -0
  269. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  270. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_real_integration.py +0 -0
  271. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_recall_levels_policy.py +0 -0
  272. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_remote_llm_client.py +0 -0
  273. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_rendering_agent_trace_report.py +0 -0
  274. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_rendering_json_stringify.py +0 -0
  275. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_retry_idempotency.py +0 -0
  276. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_run_history_bundle.py +0 -0
  277. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  278. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_runtime_install_boundary.py +0 -0
  279. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  280. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_runtime_node_traces.py +0 -0
  281. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  282. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_scheduler.py +0 -0
  283. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  284. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_snapshots.py +0 -0
  285. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_sqlite_ledger_store.py +0 -0
  286. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_start_subworkflow_async_wait.py +0 -0
  287. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  288. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  289. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_structured_output_schema_enum.py +0 -0
  290. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_subworkflow.py +0 -0
  291. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_terminal_effect_completion.py +0 -0
  292. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  293. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  294. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_approval_executor.py +0 -0
  295. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_approval_resume_executes.py +0 -0
  296. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_calls_idempotency_keys.py +0 -0
  297. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_executor_argument_sanitization.py +0 -0
  298. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_executor_error_output_detection.py +0 -0
  299. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_executor_filename_alias.py +0 -0
  300. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  301. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_executor_read_file_aliases.py +0 -0
  302. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_executor_timeout.py +0 -0
  303. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_tool_wait_allowlist_safety.py +0 -0
  304. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_trace_context_propagation.py +0 -0
  305. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_vars_query_effect.py +0 -0
  306. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  307. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  308. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  309. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  310. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  311. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  312. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_memact_compose_node.py +0 -0
  313. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  314. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  315. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  316. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_add_message_builtin.py +0 -0
  317. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  318. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_call_tool_node.py +0 -0
  319. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_compiler_basic.py +0 -0
  320. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  321. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_get_element_node.py +0 -0
  322. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_get_random_element_node.py +0 -0
  323. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_has_tools_builtin.py +0 -0
  324. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  325. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_make_object_node.py +0 -0
  326. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  327. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_memory_source_pins.py +0 -0
  328. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_prompt_only.py +0 -0
  329. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_random_nodes.py +0 -0
  330. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_string_contains_replace.py +0 -0
  331. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_visualflow_tool_parameters_node.py +0 -0
  332. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_wait_event_prompt_metadata.py +0 -0
  333. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_workflow_bundle_registry.py +0 -0
  334. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  335. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  336. {abstractruntime-0.4.19 → abstractruntime-0.4.21}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.21] - 2026-05-22
11
+
12
+ ### Added
13
+ - Public model-residency capability discovery on the AbstractCore host facade so hosts can branch on task support before showing warmup controls.
14
+ - Durable run-facade support for image edits through `edit_image(...)`.
15
+ - First-class VisualFlow lowering for `edit_image` / `image_to_image` and `generate_music` media nodes.
16
+ - A focused troubleshooting guide and repository code of conduct in the core documentation set.
17
+
18
+ ### Changed
19
+ - Minimum optional AbstractCore dependency floor is now `abstractcore>=2.13.25`, matching the released Core validation for task-aware text/image/TTS/STT residency.
20
+ - Remote Runtime media execution now routes image edits through AbstractCore Server `/v1/images/edits` or provider-scoped `/{provider}/v1/images/edits`.
21
+ - Runtime no longer auto-derives session prompt-cache keys for non-text generated-media or transcription output selectors; explicit `prompt_cache_binding` remains supported.
22
+ - Local and remote model-residency responses now fail closed unless Core-owned residency truth verifies the loaded state.
23
+ - Runtime docs, backlog, ADR links, and AI-readable `llms.txt` / `llms-full.txt` now reflect the Core-owned residency boundary and current media node support.
24
+
25
+ ### Fixed
26
+ - Artifact-backed media resolution now preserves image/audio role metadata without failing when content type metadata is absent.
27
+
28
+ ## [0.4.20] - 2026-05-21
29
+
30
+ ### Added
31
+ - Runtime now exposes a public host-local prompt-cache export/import admin surface on `get_abstractcore_host_facade(...)`:
32
+ - `list_prompt_cache_exports(...)`
33
+ - `prompt_cache_export(...)`
34
+ - `prompt_cache_import(...)`
35
+
36
+ ### Changed
37
+ - Local Runtime now owns the prompt-cache export root/catalog policy:
38
+ - `~/.abstractruntime/prompt_cache_exports` by default
39
+ - `<base_dir>/prompt_cache_exports` for `create_local_file_runtime(...)`
40
+ - exact provider/model partitioning with Runtime-managed metadata sidecars
41
+ - 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.
42
+ - 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.
43
+
10
44
  ## [0.4.19] - 2026-05-21
11
45
 
12
46
  ### Added
@@ -489,7 +523,9 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
489
523
 
490
524
  Initial development version with basic proof-of-concept features.
491
525
 
492
- [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.19...HEAD
526
+ [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.21...HEAD
527
+ [0.4.21]: https://github.com/lpalbou/abstractruntime/compare/v0.4.20...v0.4.21
528
+ [0.4.20]: https://github.com/lpalbou/abstractruntime/compare/v0.4.19...v0.4.20
493
529
  [0.4.19]: https://github.com/lpalbou/abstractruntime/compare/v0.4.18...v0.4.19
494
530
  [0.4.18]: https://github.com/lpalbou/abstractruntime/compare/v0.4.17...v0.4.18
495
531
  [0.4.17]: https://github.com/lpalbou/abstractruntime/compare/v0.4.16...v0.4.17
@@ -0,0 +1,30 @@
1
+ # Code of Conduct
2
+
3
+ ## Our Standard
4
+
5
+ This project is maintained as a professional software collaboration. Contributors, maintainers, and users are expected
6
+ to keep discussions respectful, technically focused, and welcoming to people with different backgrounds and experience
7
+ levels.
8
+
9
+ Examples of expected behavior:
10
+
11
+ - Use clear, constructive language when giving feedback.
12
+ - Assume good faith while still asking for evidence and reproducible details.
13
+ - Keep disagreements focused on the code, docs, design, or release process.
14
+ - Respect privacy and do not publish private contact details, credentials, logs, or user data.
15
+
16
+ Examples of unacceptable behavior:
17
+
18
+ - Harassment, threats, insults, or discriminatory language.
19
+ - Sustained off-topic disruption of issues, pull requests, or discussions.
20
+ - Publishing private information without explicit permission.
21
+ - Pressuring maintainers or contributors to bypass safety, security, or release checks.
22
+
23
+ ## Reporting
24
+
25
+ Report conduct concerns privately to the maintainer contact listed in the package metadata or through the repository
26
+ owner's GitHub profile. Include the relevant links, screenshots, or context when possible.
27
+
28
+ Maintainers may remove comments, close threads, block accounts, or restrict repository access when needed to protect the
29
+ project and its contributors.
30
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AbstractRuntime
3
- Version: 0.4.19
3
+ Version: 0.4.21
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.24; extra == 'abstractcore'
26
+ Requires-Dist: abstractcore>=2.13.25; 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.24; extra == 'all-apple'
31
+ Requires-Dist: abstractcore[all-apple]>=2.13.25; 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.24; extra == 'all-gpu'
37
+ Requires-Dist: abstractcore[all-gpu]>=2.13.25; 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.24; extra == 'apple'
43
+ Requires-Dist: abstractcore[apple]>=2.13.25; 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.24; extra == 'gpu'
53
+ Requires-Dist: abstractcore[gpu]>=2.13.25; 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.24; extra == 'mcp-worker'
59
+ Requires-Dist: abstractcore[tools]>=2.13.25; extra == 'mcp-worker'
60
60
  Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'mcp-worker'
61
61
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'mcp-worker'
62
62
  Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'mcp-worker'
63
63
  Provides-Extra: multimodal
64
- Requires-Dist: abstractcore[audio,music,remote,vision,voice]>=2.13.24; extra == 'multimodal'
64
+ Requires-Dist: abstractcore[audio,music,remote,vision,voice]>=2.13.25; 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.19 • **Python:** 3.10+
84
+ **Version:** 0.4.21 • **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.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.
118
+ The `abstractcore` extra installs AbstractCore 2.13.25 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, task-aware model residency for text/image/TTS/STT, the public local vision-cache catalog helper used by Runtime discovery, and the lightweight `abstractmusic>=0.1.8` ACE-remote path used by Runtime music generation are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, audio, or 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.19)
172
+ ## What’s included (v0.4.21)
173
173
 
174
174
  Kernel (dependency-light):
175
175
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
@@ -193,7 +193,7 @@ Drivers + distribution:
193
193
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
194
194
 
195
195
  Optional integrations:
196
- - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/voice/music outputs, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
196
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/voice/music outputs, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
197
197
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
198
198
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
199
199
  depends on the light AbstractMemory contract; hosts choose storage backends
@@ -233,6 +233,7 @@ sr = create_scheduled_runtime(
233
233
  | [API Reference](docs/api.md) | Public API surface (imports + pointers) |
234
234
  | [Docs Index](docs/README.md) | Full docs map (guides + reference) |
235
235
  | [FAQ](docs/faq.md) | Common questions and gotchas |
236
+ | [Troubleshooting](docs/troubleshooting.md) | Symptom-oriented setup, runtime, and integration fixes |
236
237
  | [Architecture](docs/architecture.md) | Component map + diagrams |
237
238
  | [Overview](docs/proposal.md) | Design goals, core concepts, and scope |
238
239
  | [Integrations](docs/integrations/) | Integration guides (AbstractCore) |
@@ -244,6 +245,7 @@ sr = create_scheduled_runtime(
244
245
  | [MCP Worker](docs/mcp-worker.md) | `abstractruntime-mcp-worker` CLI |
245
246
  | [Changelog](CHANGELOG.md) | Release notes |
246
247
  | [Contributing](CONTRIBUTING.md) | How to build/test and submit changes |
248
+ | [Code of Conduct](CODE_OF_CONDUCT.md) | Contributor conduct expectations |
247
249
  | [Security](SECURITY.md) | Responsible vulnerability reporting |
248
250
  | [Acknowledgments](ACKNOWLEDGMENTS.md) | Credits |
249
251
  | [ROADMAP](ROADMAP.md) | Prioritized next steps |
@@ -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.19 • **Python:** 3.10+
7
+ **Version:** 0.4.21 • **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.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.
41
+ The `abstractcore` extra installs AbstractCore 2.13.25 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, task-aware model residency for text/image/TTS/STT, the public local vision-cache catalog helper used by Runtime discovery, and the lightweight `abstractmusic>=0.1.8` ACE-remote path used by Runtime music generation are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, audio, or 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.19)
95
+ ## What’s included (v0.4.21)
96
96
 
97
97
  Kernel (dependency-light):
98
98
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
@@ -116,7 +116,7 @@ Drivers + distribution:
116
116
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
117
117
 
118
118
  Optional integrations:
119
- - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/voice/music outputs, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
119
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/voice/music outputs, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
120
120
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
121
121
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
122
122
  depends on the light AbstractMemory contract; hosts choose storage backends
@@ -156,6 +156,7 @@ sr = create_scheduled_runtime(
156
156
  | [API Reference](docs/api.md) | Public API surface (imports + pointers) |
157
157
  | [Docs Index](docs/README.md) | Full docs map (guides + reference) |
158
158
  | [FAQ](docs/faq.md) | Common questions and gotchas |
159
+ | [Troubleshooting](docs/troubleshooting.md) | Symptom-oriented setup, runtime, and integration fixes |
159
160
  | [Architecture](docs/architecture.md) | Component map + diagrams |
160
161
  | [Overview](docs/proposal.md) | Design goals, core concepts, and scope |
161
162
  | [Integrations](docs/integrations/) | Integration guides (AbstractCore) |
@@ -167,6 +168,7 @@ sr = create_scheduled_runtime(
167
168
  | [MCP Worker](docs/mcp-worker.md) | `abstractruntime-mcp-worker` CLI |
168
169
  | [Changelog](CHANGELOG.md) | Release notes |
169
170
  | [Contributing](CONTRIBUTING.md) | How to build/test and submit changes |
171
+ | [Code of Conduct](CODE_OF_CONDUCT.md) | Contributor conduct expectations |
170
172
  | [Security](SECURITY.md) | Responsible vulnerability reporting |
171
173
  | [Acknowledgments](ACKNOWLEDGMENTS.md) | Credits |
172
174
  | [ROADMAP](ROADMAP.md) | Prioritized next steps |
@@ -18,11 +18,13 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
18
18
  - `getting-started.md` — first steps (recommended)
19
19
  - `api.md` — public API surface (imports + pointers)
20
20
  - `architecture.md` — how the runtime is structured (with diagrams)
21
+ - `troubleshooting.md` — symptom-oriented setup, runtime, and integration fixes
21
22
  - `proposal.md` — design goals and scope boundaries
22
23
 
23
24
  ## Guides
24
25
 
25
26
  - `faq.md` — common questions (recommended)
27
+ - `troubleshooting.md` — symptom-oriented setup, runtime, and integration fixes
26
28
  - `manual_testing.md` — manual smoke tests and how to run the test suite
27
29
  - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions, durable bloc prompt-cache control, media inputs, generated media outputs, and tool approval waits via AbstractCore
28
30
  - `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
@@ -39,6 +41,7 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
39
41
  ## Maintainers
40
42
 
41
43
  - `../CHANGELOG.md` — release notes
44
+ - `../CODE_OF_CONDUCT.md` — contributor conduct expectations
42
45
  - `../CONTRIBUTING.md` — how to build/test and submit changes
43
46
  - `../SECURITY.md` — responsible vulnerability reporting
44
47
  - `../ACKNOWLEDGMENTS.md` — credits
@@ -50,6 +50,6 @@ Specifically:
50
50
  - Follow-up backlog work in hosts should remove direct Core discovery bypasses where the facade now covers them.
51
51
 
52
52
  ### See Also
53
- - Implementation: [`../backlog/planned/026_runtime_host_discovery_facade_for_core_catalogs.md`](../backlog/planned/026_runtime_host_discovery_facade_for_core_catalogs.md)
53
+ - Implementation: [`../backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md`](../backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md)
54
54
  - Existing operator controls: [`0004_runtime_owns_run_scoped_media_execution_truth.md`](0004_runtime_owns_run_scoped_media_execution_truth.md)
55
55
  - Integration guide: [`../integrations/abstractcore.md`](../integrations/abstractcore.md)
@@ -0,0 +1,60 @@
1
+ ## ADR 0007: Runtime relays Core-owned model residency truth
2
+
3
+ ### Status
4
+ Accepted (2026-05-21)
5
+
6
+ ### Context
7
+ Hosts and operator UIs ask Runtime whether a model is loaded. That question can
8
+ mean different things:
9
+
10
+ - a configured default provider/model;
11
+ - a cached Runtime or gateway client;
12
+ - a provider-owned model actually resident in memory.
13
+
14
+ Only AbstractCore owns provider implementations and provider-specific loaded
15
+ instance knowledge. Runtime can create and cache AbstractCore clients, but that
16
+ does not prove provider residency. HTTP-backed local providers, provider
17
+ servers, and native in-process providers all have different truth sources.
18
+
19
+ ### Decision
20
+ AbstractRuntime relays model-residency truth from AbstractCore. It does not
21
+ produce provider-residency truth itself.
22
+
23
+ Specifically:
24
+
25
+ - Runtime may expose its own cache/configuration state with fields such as
26
+ `runtime_cached` and `cache_state`.
27
+ - Runtime may call public AbstractCore integration contracts such as
28
+ `get_model_residency(...)` on a Core provider object or remote
29
+ `/acore/models/*` responses.
30
+ - Runtime must not call provider-native HTTP APIs, provider-specific unload/list
31
+ methods, or private provider internals to establish residency.
32
+ - Runtime must not infer loaded state from provider names, provider metadata,
33
+ `local_provider`, `base_url`, ports, model catalogs, default configuration, or
34
+ the existence of a cached client.
35
+ - If AbstractCore cannot verify provider residency, Runtime must fail closed:
36
+ `loaded=false`, `resident=false`, `provider_residency_verified=false`, and an
37
+ explicit unknown/provider-unverified state.
38
+
39
+ ### Consequences
40
+ - Gateway, Flow, and other hosts can distinguish a cached Runtime client from a
41
+ truly provider-loaded model.
42
+ - Positive `loaded=true` in Runtime local mode requires a Core-owned positive
43
+ provider-residency response.
44
+ - Provider-specific loaded-instance work belongs in AbstractCore providers or
45
+ capability plugins, not in Runtime.
46
+ - Some local rows remain visible as cache/configuration state while correctly
47
+ reporting that provider residency is unknown or not loaded.
48
+
49
+ ### Enforcement
50
+ - Reviews should reject Runtime provider-name lists, `base_url` heuristics, and
51
+ direct provider-native residency probes.
52
+ - Runtime tests should cover verified loaded, verified not-loaded, and unknown
53
+ provider-residency paths.
54
+ - Backlog items that need new residency truth must start with an AbstractCore
55
+ contract or a Core backlog item.
56
+
57
+ ### See Also
58
+ - Runtime backlog: [`../backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md`](../backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md)
59
+ - Runtime backlog: [`../backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md`](../backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md)
60
+ - Core companion ADR: [`../../../abstractcore/docs/adr/0008-provider-owned-model-residency-truth.md`](../../../abstractcore/docs/adr/0008-provider-owned-model-residency-truth.md)
@@ -19,6 +19,7 @@ When you ask "why is it designed this way?", the answer is in an ADR. ADRs are:
19
19
  | 0004 | [Runtime Owns Run-Scoped Media Execution Truth](0004_runtime_owns_run_scoped_media_execution_truth.md) | Accepted | 2026-05-20 | Hosts must route run-scoped media execution through Runtime |
20
20
  | 0005 | [Runtime Owns AbstractCore Host Discovery Queries](0005_runtime_owns_abstractcore_host_discovery_queries.md) | Accepted | 2026-05-20 | Hosts should ask Runtime for Core discovery/catalog snapshots |
21
21
  | 0006 | [Runtime Owns Durable AbstractCore Bloc Prompt-Cache Control](0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md) | Accepted | 2026-05-20 | Hosts should use Runtime for durable bloc/KV controls and binding-aware execution |
22
+ | 0007 | [Runtime Relays Core-Owned Model Residency Truth](0007_runtime_relays_core_owned_model_residency_truth.md) | Accepted | 2026-05-21 | Runtime reports loaded state only from AbstractCore residency truth |
22
23
 
23
24
  ## Relationship to Backlog
24
25
 
@@ -32,6 +33,7 @@ ADRs explain *why*. Backlog items explain *what* and *how*.
32
33
  | 0004 | `backlog/completed/023_truthful_local_media_residency_boundaries.md`, `backlog/completed/024_runtime_owned_run_scoped_media_execution.md` |
33
34
  | 0005 | `backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md` |
34
35
  | 0006 | `backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md` |
36
+ | 0007 | `backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md`, `backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md` |
35
37
 
36
38
  ## Adding New ADRs
37
39
 
@@ -156,6 +156,10 @@ VisualFlow compiler helpers are available from `abstractruntime.visualflow_compi
156
156
  - `visual_to_flow(...)` lowers VisualFlow into the internal Flow IR.
157
157
  - `compile_visualflow(...)` and `compile_visualflow_tree(...)` compile VisualFlow JSON into executable `WorkflowSpec` objects.
158
158
 
159
+ VisualFlow authoring note (media nodes):
160
+ - Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
161
+ - Generated-media and transcription nodes lower to a durable `EffectType.LLM_CALL` with an `output` selector (for example `{"modality":"music","task":"music_generation"}`), while `listen_voice` lowers to `WAIT_EVENT`. Hosts should persist the authoring node type rather than pre-lowering to `llm_call`.
162
+
159
163
  Public bundle APIs are exported from `src/abstractruntime/workflow_bundle/__init__.py` and re-exported in `src/abstractruntime/__init__.py`:
160
164
  - open: `open_workflow_bundle(...)`
161
165
  - registry: `WorkflowBundleRegistry`
@@ -176,7 +180,7 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
176
180
 
177
181
  ### AbstractCore (LLM + tools)
178
182
 
179
- Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.24 or newer).
183
+ Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.25 or newer).
180
184
 
181
185
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
182
186
 
@@ -190,9 +194,10 @@ Entry points:
190
194
  - effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
191
195
  - tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
192
196
  - discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`)
193
- - 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`)
197
+ - host-facade client delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `get_model_residency_capabilities`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
198
+ - host-local prompt-cache export/import admin also lives on the host facade and client delegation layer (`list_prompt_cache_exports`, `prompt_cache_export`, `prompt_cache_import`) and is intentionally local-only
194
199
  - host-facade email helpers delegate to Runtime's host-local comms facade/export layer (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
195
- - 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`)
200
+ - run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
196
201
 
197
202
  `LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
198
203
  - `prompt`, `messages`, `system_prompt`, and convenience `text`
@@ -203,17 +208,18 @@ Entry points:
203
208
  Multimodal support:
204
209
  - install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, audio, and music dependencies
205
210
  - local clients call AbstractCore's unified `generate(..., media=..., output=...)`
206
- - 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
211
+ - remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
207
212
  - remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
208
213
  - generated image/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
209
214
  - media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
210
- - 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`
215
+ - optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; unsupported local media warmup for `image_generation`, `tts`, `stt`, and `music_generation` reports `requires_long_lived_server=true`, and image generation also reports `execution_mode="local_one_shot_subprocess"`
211
216
  - Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected Core/capability install profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
212
217
 
213
218
  Prompt cache / cached sessions:
214
219
  - LLM clients expose cache control methods listed above for host-side preparation and inspection
215
220
  - `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]` or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default
216
221
  - `LLM_CALL.params.prompt_cache_binding` is the durable exact-reuse input for bloc-backed prompt caching; if a binding includes `key`, Runtime adopts it as the effective prompt-cache key and refuses mismatches before provider execution
222
+ - Runtime only auto-derives session prompt-cache keys for text/chat calls; non-text output selectors such as image, voice, music, and transcription keep explicit `prompt_cache_binding` support but do not receive an inferred cache key
217
223
  - `get_abstractcore_host_facade(...)` also exposes durable bloc helpers (`upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`)
218
224
  - local Runtime owns the bloc root policy: `~/.abstractruntime/blocs` by default, `<base_dir>/blocs` for `create_local_file_runtime(...)`, and explicit `bloc_root_dir=...` overrides when needed
219
225
  - provider cache/session handles are not durable runtime state and should not be stored in `RunState.vars`
@@ -1,7 +1,7 @@
1
1
  # AbstractRuntime — Architecture
2
2
 
3
- > Updated: 2026-05-21
4
- > Version: 0.4.19
3
+ > Updated: 2026-05-22
4
+ > Version: 0.4.21
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: 3
17
+ - Completed: 28
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`
@@ -18,10 +26,15 @@ If you are new to the project, start with `../README.md` and `../architecture.md
18
26
  2. `planned/014_remote_tool_worker_executor.md`
19
27
  The public ToolExecutor path is still the larger follow-on after the current
20
28
  Gateway boundary cleanup.
21
- 3. `proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md`
29
+ 3. `proposed/0036_local_media_residency_bridge_to_core_residency.md`
30
+ Local Runtime media residency should relay live Core-owned truth for image/TTS/STT or stay unsupported when no
31
+ Core-owned local media residency facade is wired.
32
+ 4. `proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md`
22
33
  The comms/Telegram boundary cleanup is now complete; the remaining lower
23
34
  pressure follow-up is a Runtime-owned tool-spec surface if Gateway or the
24
35
  MCP worker still need one after adoption.
36
+ 5. `proposed/0038_core_server_pool_residency_affinity.md`
37
+ Future-only topology item for multiple AbstractCore servers, server identity, and residency routing affinity.
25
38
 
26
39
  ## Completed
27
40
 
@@ -52,6 +65,9 @@ If you are new to the project, start with `../README.md` and `../architecture.md
52
65
  | 029 | `completed/029_runtime_music_generation_and_discovery_via_abstractcore.md` |
53
66
  | 0030 | `completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md` |
54
67
  | 0032 | `completed/0032_runtime_durable_outbound_comms_truth.md` |
68
+ | 0033 | `completed/0033_runtime_host_local_prompt_cache_export_import_surface.md` |
69
+ | 0035 | `completed/0035_model_residency_provider_truth_for_local_http_clients.md` |
70
+ | 0037 | `completed/0037_visualflow_generate_music_node_compiler_parity.md` |
55
71
 
56
72
  ## Planned
57
73
 
@@ -67,10 +83,12 @@ If you are new to the project, start with `../README.md` and `../architecture.md
67
83
 
68
84
  | ID | Item |
69
85
  |----|------|
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
86
  | 0031 | `proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md` |
87
+ | 0036 | `proposed/0036_local_media_residency_bridge_to_core_residency.md` |
88
+ | 0038 | `proposed/0038_core_server_pool_residency_affinity.md` |
73
89
 
74
90
  ## Deprecated
75
91
 
76
92
  See `deprecated/DEPRECATED_README.md` for context on the deprecated backlog set.
93
+ Recent deprecation:
94
+ - `deprecated/0034_agent_runtime_convenience_constructor.md`