AbstractRuntime 0.4.14__tar.gz → 0.4.16__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 (327) hide show
  1. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/CHANGELOG.md +39 -1
  2. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/PKG-INFO +12 -12
  3. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/README.md +4 -4
  4. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/README.md +1 -1
  5. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/adr/0002_execution_modes_local_remote_hybrid.md +1 -1
  6. abstractruntime-0.4.16/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +44 -0
  7. abstractruntime-0.4.16/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +55 -0
  8. abstractruntime-0.4.16/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +104 -0
  9. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/adr/README.md +6 -1
  10. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/api.md +13 -3
  11. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/architecture.md +4 -3
  12. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/README.md +21 -2
  13. abstractruntime-0.4.16/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +181 -0
  14. abstractruntime-0.4.16/docs/backlog/completed/020_runtime_gateway_install_boundary.md +95 -0
  15. abstractruntime-0.4.16/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +95 -0
  16. abstractruntime-0.4.16/docs/backlog/completed/022_model_residency_control_plane.md +95 -0
  17. abstractruntime-0.4.16/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +83 -0
  18. abstractruntime-0.4.16/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +79 -0
  19. abstractruntime-0.4.16/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +153 -0
  20. abstractruntime-0.4.16/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +177 -0
  21. abstractruntime-0.4.16/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +145 -0
  22. abstractruntime-0.4.16/docs/backlog/planned/008_signatures_and_keys.md +75 -0
  23. abstractruntime-0.4.16/docs/backlog/planned/014_remote_tool_worker_executor.md +74 -0
  24. abstractruntime-0.4.16/docs/backlog/planned/017_limit_warnings_and_observability.md +73 -0
  25. abstractruntime-0.4.16/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +67 -0
  26. abstractruntime-0.4.16/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +141 -0
  27. abstractruntime-0.4.16/docs/backlog/proposed/2026-05-20_agent_runtime_convenience_constructor.md +37 -0
  28. abstractruntime-0.4.16/docs/backlog/proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md +192 -0
  29. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/faq.md +68 -3
  30. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/getting-started.md +2 -2
  31. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/integrations/abstractcore.md +251 -8
  32. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/llms-full.txt +19 -12
  33. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/llms.txt +7 -5
  34. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/pyproject.toml +8 -8
  35. abstractruntime-0.4.16/release-notes.md +11 -0
  36. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/core/models.py +1 -0
  37. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/__init__.py +25 -0
  38. abstractruntime-0.4.16/src/abstractruntime/integrations/abstractcore/discovery_facade.py +292 -0
  39. abstractruntime-0.4.16/src/abstractruntime/integrations/abstractcore/discovery_queries.py +996 -0
  40. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +207 -0
  41. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/factory.py +24 -14
  42. abstractruntime-0.4.16/src/abstractruntime/integrations/abstractcore/host_facade.py +665 -0
  43. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/llm_client.py +3279 -150
  44. abstractruntime-0.4.16/src/abstractruntime/integrations/abstractcore/media_subprocess.py +234 -0
  45. abstractruntime-0.4.16/src/abstractruntime/integrations/abstractcore/run_facade.py +266 -0
  46. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +86 -0
  47. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/compiler.py +9 -0
  48. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/visual/executor.py +55 -0
  49. abstractruntime-0.4.16/tests/test_abstractcore_discovery_facade.py +814 -0
  50. abstractruntime-0.4.16/tests/test_abstractcore_host_facade.py +1003 -0
  51. abstractruntime-0.4.16/tests/test_abstractcore_run_facade.py +172 -0
  52. abstractruntime-0.4.16/tests/test_model_residency_control_plane.py +324 -0
  53. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_multimodal_abstractcore_integration.py +106 -0
  54. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_packaging_extras.py +7 -7
  55. abstractruntime-0.4.16/tests/test_prompt_cache_modules.py +1293 -0
  56. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_remote_llm_client.py +58 -0
  57. abstractruntime-0.4.14/docs/backlog/planned/008_signatures_and_keys.md +0 -21
  58. abstractruntime-0.4.14/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -69
  59. abstractruntime-0.4.14/docs/backlog/planned/015_agent_integration_improvements.md +0 -111
  60. abstractruntime-0.4.14/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -141
  61. abstractruntime-0.4.14/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -74
  62. abstractruntime-0.4.14/docs/backlog/proposed/2026-05-08_runtime_gateway_env_namespace_cleanup.md +0 -163
  63. abstractruntime-0.4.14/docs/backlog/proposed/2026-05-08_runtime_gateway_install_boundary.md +0 -128
  64. abstractruntime-0.4.14/docs/backlog/proposed/2026-05-09_runtime_retention_and_purge_contract.md +0 -82
  65. abstractruntime-0.4.14/release-notes.md +0 -2
  66. abstractruntime-0.4.14/tests/test_prompt_cache_modules.py +0 -462
  67. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/.github/workflows/ci.yml +0 -0
  68. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/.github/workflows/release.yml +0 -0
  69. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/.gitignore +0 -0
  70. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/ACKNOWLEDGMENTS.md +0 -0
  71. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/CONTRIBUTING.md +0 -0
  72. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/LICENSE +0 -0
  73. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/ROADMAP.md +0 -0
  74. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/SECURITY.md +0 -0
  75. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  76. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  77. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  78. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  79. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/003_wait_primitives.md +0 -0
  80. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  81. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  82. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  83. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  84. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/009_artifact_store.md +0 -0
  85. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  86. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  87. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  88. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  89. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  90. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  91. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  92. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  93. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  94. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  95. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  96. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  97. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/004_tests.md +0 -0
  98. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  99. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  100. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  101. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  102. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/README.md +0 -0
  103. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  104. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/evidence.md +0 -0
  105. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/limits.md +0 -0
  106. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/manual_testing.md +0 -0
  107. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/mcp-worker.md +0 -0
  108. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/proposal.md +0 -0
  109. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/provenance.md +0 -0
  110. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/snapshots.md +0 -0
  111. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/tools-comms.md +0 -0
  112. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/docs/workflow-bundles.md +0 -0
  113. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/emails.config.example.yaml +0 -0
  114. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/examples/01_hello_world.py +0 -0
  115. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/examples/02_ask_user.py +0 -0
  116. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/examples/03_wait_until.py +0 -0
  117. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/examples/04_multi_step.py +0 -0
  118. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/examples/05_persistence.py +0 -0
  119. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/examples/06_llm_integration.py +0 -0
  120. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/examples/07_react_agent.py +0 -0
  121. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/examples/README.md +0 -0
  122. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/mkdocs.yml +0 -0
  123. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/pytest.ini +0 -0
  124. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/__init__.py +0 -0
  125. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/core/__init__.py +0 -0
  126. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/core/config.py +0 -0
  127. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/core/event_keys.py +0 -0
  128. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/core/policy.py +0 -0
  129. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/core/runtime.py +0 -0
  130. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/core/spec.py +0 -0
  131. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/core/vars.py +0 -0
  132. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/evidence/__init__.py +0 -0
  133. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/evidence/recorder.py +0 -0
  134. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/history_bundle.py +0 -0
  135. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/identity/__init__.py +0 -0
  136. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/identity/fingerprint.py +0 -0
  137. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/__init__.py +0 -0
  138. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  139. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  140. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  141. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  142. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  143. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  144. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
  145. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  146. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  147. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  148. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  149. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  150. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  151. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/memory/__init__.py +0 -0
  152. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/memory/active_context.py +0 -0
  153. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/memory/active_memory.py +0 -0
  154. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/memory/compaction.py +0 -0
  155. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/memory/kg_packets.py +0 -0
  156. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/memory/memact_composer.py +0 -0
  157. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/memory/recall_levels.py +0 -0
  158. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/memory/token_budget.py +0 -0
  159. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/rendering/__init__.py +0 -0
  160. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  161. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/rendering/json_stringify.py +0 -0
  162. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/scheduler/__init__.py +0 -0
  163. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/scheduler/convenience.py +0 -0
  164. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/scheduler/registry.py +0 -0
  165. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/scheduler/scheduler.py +0 -0
  166. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/__init__.py +0 -0
  167. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/artifacts.py +0 -0
  168. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/base.py +0 -0
  169. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/commands.py +0 -0
  170. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/in_memory.py +0 -0
  171. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/json_files.py +0 -0
  172. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/ledger_chain.py +0 -0
  173. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/observable.py +0 -0
  174. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/offloading.py +0 -0
  175. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/snapshots.py +0 -0
  176. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/storage/sqlite.py +0 -0
  177. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  178. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  179. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  180. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  181. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  182. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  183. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  184. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  185. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  186. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  187. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  188. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  189. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  190. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  191. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  192. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  193. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  194. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  195. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/workflow_bundle/models.py +0 -0
  196. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  197. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  198. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  199. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/README.md +0 -0
  200. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/conftest.py +0 -0
  201. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_active_context_policy.py +0 -0
  202. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_active_memory.py +0 -0
  203. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_answer_user_effect.py +0 -0
  204. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_artifacts.py +0 -0
  205. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_chat_summarizer_integration.py +0 -0
  206. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_command_store.py +0 -0
  207. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_compaction_helpers.py +0 -0
  208. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_control_adapter_while.py +0 -0
  209. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_default_tools_comms_gating.py +0 -0
  210. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_default_tools_include_skim_files.py +0 -0
  211. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_default_tools_include_skim_folders.py +0 -0
  212. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_default_tools_search_files_executor.py +0 -0
  213. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_durable_toolsets.py +0 -0
  214. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  215. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_emit_event_without_workflow_registry.py +0 -0
  216. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_evidence_recorder.py +0 -0
  217. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  218. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_integration_abstractcore.py +0 -0
  219. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_integrations_abstractcore.py +0 -0
  220. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_json_file_run_store_children_index.py +0 -0
  221. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_jsonl_ledger_recovery.py +0 -0
  222. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_kg_learn_and_recall_contract.py +0 -0
  223. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_ledger_chain.py +0 -0
  224. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_ledger_subscription.py +0 -0
  225. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_media_artifact_refs.py +0 -0
  226. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  227. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  228. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_requires_prompt.py +0 -0
  229. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_response_schema_normalization.py +0 -0
  230. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_structured_output_fallback.py +0 -0
  231. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  232. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  233. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  234. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_client_media_artifacts.py +0 -0
  235. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_client_system_context.py +0 -0
  236. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_llm_client_tool_call_parsing.py +0 -0
  237. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  238. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_mcp_remote_tool_executor.py +0 -0
  239. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_mcp_worker_logging.py +0 -0
  240. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_mcp_worker_security.py +0 -0
  241. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_mcp_worker_stdio.py +0 -0
  242. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_media_artifact_resolution.py +0 -0
  243. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memact_composer_from_kg_result.py +0 -0
  244. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  245. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_kg_packets.py +0 -0
  246. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  247. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  248. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  249. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  250. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_note_effect.py +0 -0
  251. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_query_effect.py +0 -0
  252. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_query_rich_filters.py +0 -0
  253. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  254. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_memory_tag_effect.py +0 -0
  255. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_mlx_generation_serialization.py +0 -0
  256. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_offloading.py +0 -0
  257. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_pause_resume.py +0 -0
  258. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_queryable_run_store.py +0 -0
  259. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  260. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_real_integration.py +0 -0
  261. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_recall_levels_policy.py +0 -0
  262. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_rendering_agent_trace_report.py +0 -0
  263. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_rendering_json_stringify.py +0 -0
  264. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_retry_idempotency.py +0 -0
  265. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_run_history_bundle.py +0 -0
  266. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  267. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_runtime_install_boundary.py +0 -0
  268. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  269. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_runtime_node_traces.py +0 -0
  270. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  271. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_scheduler.py +0 -0
  272. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  273. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_snapshots.py +0 -0
  274. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_sqlite_ledger_store.py +0 -0
  275. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_start_subworkflow_async_wait.py +0 -0
  276. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  277. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  278. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_structured_output_schema_enum.py +0 -0
  279. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_subworkflow.py +0 -0
  280. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_terminal_effect_completion.py +0 -0
  281. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  282. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  283. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_approval_executor.py +0 -0
  284. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_approval_resume_executes.py +0 -0
  285. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_calls_idempotency_keys.py +0 -0
  286. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_executor_argument_sanitization.py +0 -0
  287. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_executor_error_output_detection.py +0 -0
  288. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_executor_filename_alias.py +0 -0
  289. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  290. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_executor_read_file_aliases.py +0 -0
  291. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_executor_timeout.py +0 -0
  292. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_tool_wait_allowlist_safety.py +0 -0
  293. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_trace_context_propagation.py +0 -0
  294. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_vars_query_effect.py +0 -0
  295. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  296. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  297. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  298. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  299. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  300. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  301. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_memact_compose_node.py +0 -0
  302. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  303. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  304. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  305. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_add_message_builtin.py +0 -0
  306. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  307. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_call_tool_node.py +0 -0
  308. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_compiler_basic.py +0 -0
  309. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  310. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_get_element_node.py +0 -0
  311. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_get_random_element_node.py +0 -0
  312. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_has_tools_builtin.py +0 -0
  313. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  314. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  315. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_make_object_node.py +0 -0
  316. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_media_nodes.py +0 -0
  317. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  318. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_memory_source_pins.py +0 -0
  319. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_prompt_only.py +0 -0
  320. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_random_nodes.py +0 -0
  321. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_string_contains_replace.py +0 -0
  322. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_visualflow_tool_parameters_node.py +0 -0
  323. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_wait_event_prompt_metadata.py +0 -0
  324. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_workflow_bundle_registry.py +0 -0
  325. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  326. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  327. {abstractruntime-0.4.14 → abstractruntime-0.4.16}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.16] - 2026-05-21
11
+
12
+ ### Added
13
+ - Public durable AbstractCore bloc lifecycle operations on `get_abstractcore_host_facade(...)` across local, remote, and hybrid runtimes:
14
+ - `list_blocs(...)`
15
+ - `list_bloc_kv_artifacts(...)`
16
+ - `delete_bloc_kv_artifact(...)`
17
+ - `prune_bloc_kv_artifacts(...)`
18
+ - `delete_bloc(...)`
19
+
20
+ ### Changed
21
+ - Minimum optional AbstractCore dependency floor is now `abstractcore>=2.13.23`.
22
+ - Runtime's public docs and AI-readable `llms.txt` / `llms-full.txt` now describe the shipped durable bloc prompt-cache lifecycle boundary, including per-model KV artifacts and explicit cleanup controls.
23
+
24
+ ## [0.4.15] - 2026-05-20
25
+
26
+ ### Added
27
+ - Public AbstractCore Runtime facades for:
28
+ - discovery/catalog snapshot queries (`get_abstractcore_discovery_facade(...)`)
29
+ - prompt-cache and model-residency host control operations (`get_abstractcore_host_facade(...)`)
30
+ - durable run-scoped child-run execution for image, TTS, STT, and direct LLM calls (`get_abstractcore_run_facade(...)`)
31
+ - `EffectType.MODEL_RESIDENCY` with AbstractCore-backed load/list/unload handling and VisualFlow lowering support for runtime-owned model residency control.
32
+
33
+ ### Changed
34
+ - Minimum optional AbstractCore dependency floor is now `abstractcore>=2.13.20`.
35
+ - Local cached-vision discovery now depends on AbstractCore's public `get_local_vision_cache_catalog()` helper instead of private server internals.
36
+ - Local media residency no-op/unsupported responses now complete truthfully with warning/degraded metadata, and media-only results distinguish runtime orchestration identity from the actual media backend identity.
37
+ - Documentation was refreshed for the current Runtime/Core boundary, including root docs, ADR/backlog references, and AI-readable `llms.txt` / `llms-full.txt`.
38
+
10
39
  ## [0.4.14] - 2026-05-19
11
40
 
12
41
  ### Fixed
@@ -419,7 +448,16 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
419
448
 
420
449
  Initial development version with basic proof-of-concept features.
421
450
 
422
- [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.7...HEAD
451
+ [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.16...HEAD
452
+ [0.4.16]: https://github.com/lpalbou/abstractruntime/compare/v0.4.15...v0.4.16
453
+ [0.4.15]: https://github.com/lpalbou/abstractruntime/compare/v0.4.14...v0.4.15
454
+ [0.4.14]: https://github.com/lpalbou/abstractruntime/compare/v0.4.13...v0.4.14
455
+ [0.4.13]: https://github.com/lpalbou/abstractruntime/compare/v0.4.12...v0.4.13
456
+ [0.4.12]: https://github.com/lpalbou/abstractruntime/compare/v0.4.11...v0.4.12
457
+ [0.4.11]: https://github.com/lpalbou/abstractruntime/compare/v0.4.10...v0.4.11
458
+ [0.4.10]: https://github.com/lpalbou/abstractruntime/compare/v0.4.9...v0.4.10
459
+ [0.4.9]: https://github.com/lpalbou/abstractruntime/compare/v0.4.8...v0.4.9
460
+ [0.4.8]: https://github.com/lpalbou/abstractruntime/compare/v0.4.7...v0.4.8
423
461
  [0.4.7]: https://github.com/lpalbou/abstractruntime/compare/v0.4.6...v0.4.7
424
462
  [0.4.6]: https://github.com/lpalbou/abstractruntime/compare/v0.4.5...v0.4.6
425
463
  [0.4.5]: https://github.com/lpalbou/abstractruntime/compare/v0.4.4...v0.4.5
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AbstractRuntime
3
- Version: 0.4.14
3
+ Version: 0.4.16
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.15; extra == 'abstractcore'
26
+ Requires-Dist: abstractcore>=2.13.23; 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.15; extra == 'all-apple'
31
+ Requires-Dist: abstractcore[all-apple]>=2.13.23; 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.15; extra == 'all-gpu'
37
+ Requires-Dist: abstractcore[all-gpu]>=2.13.23; 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.15; extra == 'apple'
43
+ Requires-Dist: abstractcore[apple]>=2.13.23; 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.15; extra == 'gpu'
53
+ Requires-Dist: abstractcore[gpu]>=2.13.23; 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.15; extra == 'mcp-worker'
59
+ Requires-Dist: abstractcore[tools]>=2.13.23; 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.15; extra == 'multimodal'
64
+ Requires-Dist: abstractcore[audio,remote,vision,voice]>=2.13.23; 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.10 • **Python:** 3.10+
84
+ **Version:** 0.4.16 • **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.13 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool catalog, public output-selector contract, and async/sync text-generation output-selector parity are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
118
+ The `abstractcore` extra installs AbstractCore 2.13.23 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, and the public local vision-cache catalog helper used by Runtime discovery are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio 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.10)
172
+ ## What’s included (v0.4.16)
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, cached sessions/prompt cache, media inputs, generated media, tool approval waits): `docs/integrations/abstractcore.md`
196
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, durable bloc prompt-cache controls, bindings, and lifecycle operations, media inputs, generated media, tool approval waits): `docs/integrations/abstractcore.md`
197
197
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
198
198
  depends on the light AbstractMemory contract; hosts choose storage backends
199
199
  such as LanceDB, SQLite, or in-memory stores.
@@ -4,7 +4,7 @@
4
4
 
5
5
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
6
6
 
7
- **Version:** 0.4.10 • **Python:** 3.10+
7
+ **Version:** 0.4.16 • **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.13 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool catalog, public output-selector contract, and async/sync text-generation output-selector parity are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
41
+ The `abstractcore` extra installs AbstractCore 2.13.23 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, and the public local vision-cache catalog helper used by Runtime discovery are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio 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.10)
95
+ ## What’s included (v0.4.16)
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, cached sessions/prompt cache, media inputs, generated media, tool approval waits): `docs/integrations/abstractcore.md`
119
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, durable bloc prompt-cache controls, bindings, and lifecycle operations, media inputs, generated media, tool approval waits): `docs/integrations/abstractcore.md`
120
120
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
121
121
  depends on the light AbstractMemory contract; hosts choose storage backends
122
122
  such as LanceDB, SQLite, or in-memory stores.
@@ -24,7 +24,7 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
24
24
 
25
25
  - `faq.md` — common questions (recommended)
26
26
  - `manual_testing.md` — manual smoke tests and how to run the test suite
27
- - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions/prompt-cache control, media inputs, generated media outputs, and tool approval waits via AbstractCore
27
+ - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions, durable bloc prompt-cache control, media inputs, generated media outputs, and tool approval waits via AbstractCore
28
28
  - `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
29
29
 
30
30
  ## Features (reference)
@@ -34,6 +34,6 @@ effect payloads, client construction arguments, or Runtime-owned environment var
34
34
  ### See Also
35
35
  - Implementation: [`backlog/completed/005_abstractcore_integration.md`](../backlog/completed/005_abstractcore_integration.md)
36
36
  - Integration guide: [`integrations/abstractcore.md`](../integrations/abstractcore.md)
37
- - Gateway install boundary: [`backlog/proposed/2026-05-08_runtime_gateway_install_boundary.md`](../backlog/proposed/2026-05-08_runtime_gateway_install_boundary.md)
37
+ - Gateway install boundary: [`backlog/completed/020_runtime_gateway_install_boundary.md`](../backlog/completed/020_runtime_gateway_install_boundary.md)
38
38
  - Code: `src/abstractruntime/integrations/abstractcore/factory.py`
39
39
  - Framework ADR: `../../../docs/adr/0033-install-profiles-config-entrypoints-and-server-boundaries.md`
@@ -0,0 +1,44 @@
1
+ ## ADR 0004: Runtime owns run-scoped media execution truth
2
+
3
+ ### Status
4
+ Accepted (2026-05-20)
5
+
6
+ ### Context
7
+ Hosts sometimes need to trigger image generation, TTS, or STT for an existing run after the main workflow was already created.
8
+
9
+ If a host executes that media work directly and only appends ledger-like records afterward, Runtime is no longer the
10
+ source of truth for:
11
+
12
+ - what was requested;
13
+ - what provider/model path actually executed;
14
+ - which artifacts were produced;
15
+ - how replay should represent the step.
16
+
17
+ We also observed that local media residency can be misunderstood as successful warmup even when the local execution mode
18
+ is a one-shot subprocess boundary that cannot reuse the previous warm state.
19
+
20
+ ### Decision
21
+ AbstractRuntime owns run-scoped media execution truth.
22
+
23
+ Specifically:
24
+
25
+ - Hosts must route run-scoped image/TTS/STT work through Runtime, not execute it out-of-band.
26
+ - The integration provides a public durable run facade that creates Runtime-owned child runs for these operations.
27
+ - Operator/control-plane prompt-cache and model-residency controls remain separate host-oriented helpers and do not
28
+ create durable run history by themselves.
29
+ - Local unsupported media residency must be reported explicitly with machine-readable fields such as
30
+ `execution_mode`, `requires_long_lived_server`, and `config_hint`.
31
+ - Media-only normalized results must separate orchestration identity from actual media backend identity via
32
+ `runtime_provider` / `runtime_model` and `media_provider` / `media_model`.
33
+
34
+ ### Consequences
35
+ - Gateway/other hosts have a clean migration target for run-scoped media routes without synthesizing history after the
36
+ fact.
37
+ - Ledger and artifact truth stay Runtime-authored and replay-friendly.
38
+ - Optional local media warmup can remain non-fatal while still rendering honestly as a warning/no-op.
39
+ - Consumers can distinguish the runtime orchestration model from the media backend that produced the output.
40
+
41
+ ### See Also
42
+ - Implementation: [`../backlog/completed/023_truthful_local_media_residency_boundaries.md`](../backlog/completed/023_truthful_local_media_residency_boundaries.md)
43
+ - Implementation: [`../backlog/completed/024_runtime_owned_run_scoped_media_execution.md`](../backlog/completed/024_runtime_owned_run_scoped_media_execution.md)
44
+ - Integration guide: [`../integrations/abstractcore.md`](../integrations/abstractcore.md)
@@ -0,0 +1,55 @@
1
+ ## ADR 0005: Runtime owns AbstractCore host discovery queries
2
+
3
+ ### Status
4
+ Accepted (2026-05-20)
5
+
6
+ ### Context
7
+ Gateway and other hosts still need to answer operator and thin-client discovery questions such as:
8
+
9
+ - which providers are available;
10
+ - which models a provider exposes;
11
+ - what a model's capabilities are;
12
+ - which voice, TTS, STT, and vision catalogs are currently visible;
13
+ - which local vision models are cached.
14
+
15
+ Before this decision, those reads were often handled outside Runtime by:
16
+
17
+ - raw HTTP proxying from Gateway to AbstractCore server routes;
18
+ - direct imports of public `abstractcore.*` registries and helpers from Gateway;
19
+ - in at least one case, direct import of a Core-server route implementation.
20
+
21
+ That creates an inconsistent boundary: execution and some controls go through Runtime, but discovery reads bypass it entirely.
22
+
23
+ These discovery reads are not durable run truth in the same sense as `LLM_CALL`, `TOOL_CALLS`, or run-scoped media child runs. They are current-environment snapshots that may change between the original query and a later replay.
24
+
25
+ ### Decision
26
+ AbstractRuntime owns the host-facing AbstractCore discovery/query boundary.
27
+
28
+ Specifically:
29
+
30
+ - Hosts should ask Runtime for AbstractCore discovery and catalog queries rather than importing Core registries or proxying Core server routes directly.
31
+ - Runtime provides a public discovery facade for host-oriented snapshot queries.
32
+ - These discovery methods are query/snapshot oriented, not durable run effects.
33
+ - Replay or audit consumers should treat discovery results as recorded snapshots when they are persisted by hosts, not as work that should be re-executed automatically.
34
+ - Gateway-local liveness, auth, install diagnostics, and non-Core helper projections may remain host-local.
35
+
36
+ ### Consequences
37
+ - Runtime becomes the single Python integration boundary for AbstractCore execution, control, and discovery surfaces.
38
+ - Gateway can shrink into an HTTP projection layer rather than a second Core integration layer.
39
+ - Discovery results remain semantically distinct from durable run execution truth.
40
+ - Some local discovery implementations may still require Runtime integration code to adapt Core capability helpers or server-backed routes until Core exposes cleaner public helpers.
41
+
42
+ ### Enforcement
43
+ - New Gateway or host adoption work should prefer Runtime facades over direct `abstractcore.*` imports for discovery/catalog routes.
44
+ - Runtime docs should distinguish durable run work, operator controls, and snapshot discovery queries.
45
+ - Direct Gateway reach-through to `runtime._abstractcore_llm_client` remains prohibited when a public facade exists.
46
+
47
+ ### Validation
48
+ - Runtime tests should cover local and remote discovery facade behavior.
49
+ - Documentation should show the public discovery facade entrypoint and its scope.
50
+ - Follow-up backlog work in hosts should remove direct Core discovery bypasses where the facade now covers them.
51
+
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)
54
+ - Existing operator controls: [`0004_runtime_owns_run_scoped_media_execution_truth.md`](0004_runtime_owns_run_scoped_media_execution_truth.md)
55
+ - Integration guide: [`../integrations/abstractcore.md`](../integrations/abstractcore.md)
@@ -0,0 +1,104 @@
1
+ ## ADR 0006: Runtime owns durable AbstractCore bloc prompt-cache control
2
+
3
+ ### Status
4
+ Accepted (2026-05-20)
5
+
6
+ ### Context
7
+ AbstractCore `2.13.22` added a public durable prompt-cache contract for local
8
+ backends:
9
+
10
+ - text/file blocs as durable source-of-truth content,
11
+ - provider/model-specific KV artifacts,
12
+ - request-time `prompt_cache_binding` proof for exact reuse.
13
+
14
+ Before this decision, Runtime only owned:
15
+
16
+ - best-effort session prompt-cache controls,
17
+ - model-residency controls,
18
+ - discovery/query snapshots,
19
+ - durable run-scoped media execution.
20
+
21
+ That left a real gap for app-facing durable prompt caching:
22
+
23
+ - hosts had no public Runtime path for bloc/KV control operations;
24
+ - remote Runtime execution dropped `prompt_cache_binding`;
25
+ - `LLM_CALL` key injection could derive a competing session key even when a
26
+ durable binding was present;
27
+ - local Runtime had no explicit bloc-store root policy and would otherwise
28
+ inherit Core defaults implicitly.
29
+
30
+ ### Decision
31
+ AbstractRuntime owns the host-facing durable AbstractCore bloc prompt-cache
32
+ boundary.
33
+
34
+ Specifically:
35
+
36
+ - Hosts should use the existing `AbstractCoreHostFacade` for durable bloc/KV
37
+ prompt-cache controls rather than adding a fourth public facade.
38
+ - The public host surface includes:
39
+ - `upsert_text_bloc(...)`
40
+ - `get_bloc_record(...)`
41
+ - `list_blocs(...)`
42
+ - `get_bloc_kv_manifest(...)`
43
+ - `ensure_bloc_kv_artifact(...)`
44
+ - `load_bloc_kv_artifact(...)`
45
+ - `list_bloc_kv_artifacts(...)`
46
+ - `delete_bloc_kv_artifact(...)`
47
+ - `prune_bloc_kv_artifacts(...)`
48
+ - `delete_bloc(...)`
49
+ - Runtime mirrors Core's public bloc request/response model instead of
50
+ inventing a Gateway-local save/load vocabulary.
51
+ - `LLM_CALL.payload.params.prompt_cache_binding` is the public Runtime binding
52
+ input. Runtime may also accept the local Python alias
53
+ `expected_prompt_cache_binding`, but it must normalize to
54
+ `prompt_cache_binding`.
55
+ - When a binding is present:
56
+ - `binding.key` becomes the effective `prompt_cache_key` when no explicit key
57
+ was supplied;
58
+ - mismatched `prompt_cache_key` and `binding.key` fail before provider or
59
+ server execution;
60
+ - Runtime must not auto-derive a competing session key;
61
+ - local session prompt-cache preparation must not mutate the bound key before
62
+ generation.
63
+ - Local Runtime owns an explicit bloc-root policy:
64
+ - default local root: `~/.abstractruntime/blocs`
65
+ - default file-runtime root: `<base_dir>/blocs`
66
+ - explicit `bloc_root_dir=` overrides are allowed for hosts such as Gateway
67
+
68
+ ### Consequences
69
+ - Runtime becomes the public Python boundary for three distinct prompt-cache
70
+ tracks:
71
+ - session prompt-cache reuse,
72
+ - durable bloc/KV/binding reuse,
73
+ - local-admin snapshot save/load/list work if promoted later
74
+ - Hosts can expose durable bloc caching without reaching into Core or provider
75
+ internals.
76
+ - Hosts can also reclaim durable bloc/KV storage through the same Runtime
77
+ boundary instead of manual filesystem deletion or private Core hooks.
78
+ - Runtime does not silently inherit Core's default `~/.abstractcore/blocs`
79
+ layout.
80
+ - Provider-private prompt-cache snapshot save/load remains a separate local-admin
81
+ concern and is not promoted by this decision.
82
+
83
+ ### Enforcement
84
+ - New host adoption work should use `get_abstractcore_host_facade(runtime)` for
85
+ durable bloc/KV operations.
86
+ - Runtime docs and AI-readable docs must describe the durable bloc track
87
+ separately from session prompt caching.
88
+ - Runtime code review should reject any new auto-derived prompt-cache behavior
89
+ that competes with `prompt_cache_binding`.
90
+
91
+ ### Validation
92
+ - Host-facade tests cover delegation and remote route shaping for bloc/KV
93
+ operations.
94
+ - `LLM_CALL` tests cover binding-only adoption, alias normalization, and
95
+ mismatch fail-fast behavior.
96
+ - Regression coverage includes local/root-policy tests and the broader
97
+ AbstractCore Runtime facade suite.
98
+
99
+ ### See Also
100
+ - Implementation: [`../backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md`](../backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md)
101
+ - Core binding contract: `../abstractcore/docs/adr/0007-durable-memory-bloc-cache-binding.md`
102
+ - Related Runtime ADRs:
103
+ - [`0004_runtime_owns_run_scoped_media_execution_truth.md`](0004_runtime_owns_run_scoped_media_execution_truth.md)
104
+ - [`0005_runtime_owns_abstractcore_host_discovery_queries.md`](0005_runtime_owns_abstractcore_host_discovery_queries.md)
@@ -16,6 +16,9 @@ When you ask "why is it designed this way?", the answer is in an ADR. ADRs are:
16
16
  | 0001 | [Layered Coupling with AbstractCore](0001_layered_coupling_with_abstractcore.md) | Accepted | 2025-12-11 | Kernel stays dependency-light; AbstractCore integration is opt-in |
17
17
  | 0002 | [Execution Modes](0002_execution_modes_local_remote_hybrid.md) | Accepted | 2025-12-11 | Support local, remote, and hybrid execution topologies |
18
18
  | 0003 | [Provenance Hash Chain](0003_provenance_tamper_evident_hash_chain.md) | Accepted | 2025-12-11 | Tamper-evident ledger first; cryptographic signatures deferred |
19
+ | 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
+ | 0005 | [Runtime Owns AbstractCore Host Discovery Queries](0005_runtime_owns_abstractcore_host_discovery_queries.md) | Accepted | 2026-05-20 | Hosts should ask Runtime for Core discovery/catalog snapshots |
21
+ | 0006 | [Runtime Owns Durable AbstractCore Bloc Prompt-Cache Control](0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md) | Accepted | 2026-05-20 | Hosts should use Runtime for durable bloc/KV controls and binding-aware execution |
19
22
 
20
23
  ## Relationship to Backlog
21
24
 
@@ -26,6 +29,9 @@ ADRs explain *why*. Backlog items explain *what* and *how*.
26
29
  | 0001 | `backlog/completed/005_abstractcore_integration.md` |
27
30
  | 0002 | `backlog/completed/005_abstractcore_integration.md` |
28
31
  | 0003 | `backlog/completed/007_provenance_hash_chain.md`, `backlog/planned/008_signatures_and_keys.md` |
32
+ | 0004 | `backlog/completed/023_truthful_local_media_residency_boundaries.md`, `backlog/completed/024_runtime_owned_run_scoped_media_execution.md` |
33
+ | 0005 | `backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md` |
34
+ | 0006 | `backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md` |
29
35
 
30
36
  ## Adding New ADRs
31
37
 
@@ -34,4 +40,3 @@ When making a significant architectural decision:
34
40
  2. Use the template: Status, Context, Decision, Consequences
35
41
  3. Set status to "Accepted" once the decision is final
36
42
  4. If superseding an old ADR, update the old one's status to "Superseded by NNNN"
37
-
@@ -176,21 +176,26 @@ 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.12 or newer).
179
+ Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.23 or newer).
180
180
 
181
181
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
182
182
 
183
183
  Entry points:
184
184
  - `create_local_runtime(...)`, `create_remote_runtime(...)`, `create_hybrid_runtime(...)` (`src/abstractruntime/integrations/abstractcore/factory.py`)
185
+ - public discovery facade: `AbstractCoreDiscoveryFacade`, `get_abstractcore_discovery_facade(...)` (`src/abstractruntime/integrations/abstractcore/discovery_facade.py`)
186
+ - public host facade: `AbstractCoreHostFacade`, `get_abstractcore_host_facade(...)` (`src/abstractruntime/integrations/abstractcore/host_facade.py`)
187
+ - public durable run facade: `AbstractCoreRunFacade`, `get_abstractcore_run_facade(...)` (`src/abstractruntime/integrations/abstractcore/run_facade.py`)
185
188
  - effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
186
189
  - tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
187
- - prompt-cache control methods on the configured LLM client: `get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules` (`src/abstractruntime/integrations/abstractcore/llm_client.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
+ - run-facade helpers create durable child runs for existing runs (`execute_llm_call`, `generate_image`, `generate_voice`, `transcribe_audio`)
188
193
 
189
194
  `LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
190
195
  - `prompt`, `messages`, `system_prompt`, and convenience `text`
191
196
  - `media`: a media path, artifact ref (`{"$artifact": "..."}` or `{"artifact_id": "..."}`), media dict, or list of those
192
197
  - `output`: AbstractCore output selector; top-level `outputs` is accepted as a runtime alias
193
- - `params`: provider/model routing, generation controls, prompt-cache keys, structured-output schema options, and tracing metadata
198
+ - `params`: provider/model routing, generation controls, prompt-cache keys or `prompt_cache_binding`, structured-output schema options, and tracing metadata
194
199
 
195
200
  Multimodal support:
196
201
  - install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, and audio dependencies
@@ -198,11 +203,16 @@ Multimodal support:
198
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
199
204
  - remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
200
205
  - generated image/voice/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
206
+ - media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
207
+ - optional local media residency failures complete with `status_hint="warning"` and `degraded=true`, while unsupported local media warmup also reports `execution_mode="local_one_shot_subprocess"` and `requires_long_lived_server=true`
201
208
  - Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected Core/capability install profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
202
209
 
203
210
  Prompt cache / cached sessions:
204
211
  - LLM clients expose cache control methods listed above for host-side preparation and inspection
205
212
  - `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]` or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default
213
+ - `LLM_CALL.params.prompt_cache_binding` is the durable exact-reuse input for bloc-backed prompt caching; if a binding includes `key`, Runtime adopts it as the effective prompt-cache key and refuses mismatches before provider execution
214
+ - `get_abstractcore_host_facade(...)` also exposes durable bloc helpers (`upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`)
215
+ - local Runtime owns the bloc root policy: `~/.abstractruntime/blocs` by default, `<base_dir>/blocs` for `create_local_file_runtime(...)`, and explicit `bloc_root_dir=...` overrides when needed
206
216
  - provider cache/session handles are not durable runtime state and should not be stored in `RunState.vars`
207
217
 
208
218
  Attachment registration limits:
@@ -1,7 +1,7 @@
1
1
  # AbstractRuntime — Architecture
2
2
 
3
- > Updated: 2026-05-08
4
- > Version: 0.4.9
3
+ > Updated: 2026-05-20
4
+ > Version: 0.4.16
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.
@@ -36,6 +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
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.
40
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.
41
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.
@@ -168,7 +169,7 @@ Registered in `Runtime._register_builtin_handlers()` (`src/abstractruntime/core/
168
169
 
169
170
  ### Host-wired effects
170
171
  The kernel defines the protocol; concrete integrations provide handlers:
171
- - `LLM_CALL`, `TOOL_CALLS`: provided by AbstractCore integration (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`). The integration supports local/remote/hybrid execution, cached sessions/prompt-cache control, media inputs, generated media outputs, provider-key header routing for remote servers, passthrough tools, and approval-gated local tool execution.
172
+ - `LLM_CALL`, `TOOL_CALLS`, `MODEL_RESIDENCY`: provided by AbstractCore integration (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`). The integration supports local/remote/hybrid execution, cached sessions/prompt-cache control, discovery/catalog snapshots, model residency, durable run-scoped media child runs, media inputs, generated media outputs, provider-key header routing for remote servers, passthrough tools, and approval-gated local tool execution.
172
173
  - `MEMORY_KG_*`: provided by the AbstractMemory bridge (`src/abstractruntime/integrations/abstractmemory/effect_handlers.py`)
173
174
 
174
175
  ### Reliability: retries + idempotency
@@ -1,8 +1,11 @@
1
1
  # Backlog (maintainers)
2
2
 
3
+ This README currently serves as the backlog overview for this repository.
4
+
3
5
  This folder contains a structured backlog used during development. Items are grouped as:
4
6
  - `completed/` — implemented work items (what shipped, with implementation pointers)
5
- - `planned/` — future work proposals
7
+ - `planned/` — committed future work items that still match current runtime reality
8
+ - `proposed/` — uncommitted ideas and follow-on risks worth preserving
6
9
  - `deprecated/` — historical backlog notes (superseded)
7
10
 
8
11
  If you are new to the project, start with `../README.md` and `../architecture.md` instead.
@@ -24,6 +27,15 @@ If you are new to the project, start with `../README.md` and `../architecture.md
24
27
  | 012 | `completed/012_run_store_query_and_scheduler_support.md` |
25
28
  | 013 | `completed/013_effect_retries_and_idempotency.md` |
26
29
  | 016 | `completed/016_runtime_aware_parameters.md` |
30
+ | 019 | `completed/019_runtime_host_facade_for_core_operator_surfaces.md` |
31
+ | 020 | `completed/020_runtime_gateway_install_boundary.md` |
32
+ | 021 | `completed/021_runtime_gateway_env_namespace_cleanup.md` |
33
+ | 022 | `completed/022_model_residency_control_plane.md` |
34
+ | 023 | `completed/023_truthful_local_media_residency_boundaries.md` |
35
+ | 024 | `completed/024_runtime_owned_run_scoped_media_execution.md` |
36
+ | 026 | `completed/026_runtime_host_discovery_facade_for_core_catalogs.md` |
37
+ | 027 | `completed/027_runtime_durable_bloc_prompt_cache_facade.md` |
38
+ | 028 | `completed/028_runtime_bloc_kv_lifecycle_and_pruning.md` |
27
39
 
28
40
  ## Planned
29
41
 
@@ -31,9 +43,16 @@ If you are new to the project, start with `../README.md` and `../architecture.md
31
43
  |----|------|
32
44
  | 008 | `planned/008_signatures_and_keys.md` |
33
45
  | 014 | `planned/014_remote_tool_worker_executor.md` |
34
- | 015 | `planned/015_agent_integration_improvements.md` |
35
46
  | 017 | `planned/017_limit_warnings_and_observability.md` |
36
47
  | 018 | `planned/018_workspace_access_policy_for_media_and_tools.md` |
48
+ | 025 | `planned/025_runtime_retention_and_purge_contract.md` |
49
+
50
+ ## Proposed
51
+
52
+ | Date | Item |
53
+ |------|------|
54
+ | 2026-05-20 | `proposed/2026-05-20_agent_runtime_convenience_constructor.md` |
55
+ | 2026-05-20 | `proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md` |
37
56
 
38
57
  ## Deprecated
39
58