AbstractRuntime 0.4.16__tar.gz → 0.4.17__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 (321) hide show
  1. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/CHANGELOG.md +15 -1
  2. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/PKG-INFO +12 -12
  3. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/README.md +4 -4
  4. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/api.md +7 -7
  5. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/architecture.md +3 -3
  6. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/README.md +18 -2
  7. abstractruntime-0.4.17/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +178 -0
  8. abstractruntime-0.4.17/docs/backlog/planned/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +165 -0
  9. abstractruntime-0.4.17/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +86 -0
  10. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/faq.md +10 -9
  11. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/getting-started.md +1 -1
  12. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/integrations/abstractcore.md +23 -6
  13. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/llms-full.txt +6 -6
  14. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/llms.txt +5 -5
  15. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/pyproject.toml +10 -10
  16. abstractruntime-0.4.17/release-notes.md +10 -0
  17. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +56 -0
  18. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +165 -0
  19. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/llm_client.py +235 -1
  20. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/run_facade.py +23 -1
  21. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_abstractcore_discovery_facade.py +176 -0
  22. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_abstractcore_run_facade.py +75 -0
  23. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_multimodal_abstractcore_integration.py +54 -0
  24. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_packaging_extras.py +7 -7
  25. abstractruntime-0.4.16/release-notes.md +0 -11
  26. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/.github/workflows/ci.yml +0 -0
  27. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/.github/workflows/release.yml +0 -0
  28. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/.gitignore +0 -0
  29. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/ACKNOWLEDGMENTS.md +0 -0
  30. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/CONTRIBUTING.md +0 -0
  31. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/LICENSE +0 -0
  32. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/ROADMAP.md +0 -0
  33. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/SECURITY.md +0 -0
  34. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/README.md +0 -0
  35. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  36. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  37. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  38. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  39. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  40. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  41. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/adr/README.md +0 -0
  42. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  43. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  44. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/003_wait_primitives.md +0 -0
  45. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  46. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  47. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  48. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  49. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/009_artifact_store.md +0 -0
  50. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  51. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  52. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  53. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  54. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  55. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  56. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  57. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  58. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  59. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  60. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  61. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  62. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  63. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  64. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  65. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  66. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  67. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  68. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  69. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  70. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  71. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/004_tests.md +0 -0
  72. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  73. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  74. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  75. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  76. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/README.md +0 -0
  77. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  78. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  79. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  80. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  81. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  82. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  83. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/proposed/2026-05-20_agent_runtime_convenience_constructor.md +0 -0
  84. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/backlog/proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md +0 -0
  85. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/evidence.md +0 -0
  86. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/limits.md +0 -0
  87. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/manual_testing.md +0 -0
  88. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/mcp-worker.md +0 -0
  89. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/proposal.md +0 -0
  90. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/provenance.md +0 -0
  91. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/snapshots.md +0 -0
  92. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/tools-comms.md +0 -0
  93. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/docs/workflow-bundles.md +0 -0
  94. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/emails.config.example.yaml +0 -0
  95. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/examples/01_hello_world.py +0 -0
  96. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/examples/02_ask_user.py +0 -0
  97. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/examples/03_wait_until.py +0 -0
  98. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/examples/04_multi_step.py +0 -0
  99. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/examples/05_persistence.py +0 -0
  100. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/examples/06_llm_integration.py +0 -0
  101. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/examples/07_react_agent.py +0 -0
  102. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/examples/README.md +0 -0
  103. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/mkdocs.yml +0 -0
  104. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/pytest.ini +0 -0
  105. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/__init__.py +0 -0
  106. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/core/__init__.py +0 -0
  107. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/core/config.py +0 -0
  108. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/core/event_keys.py +0 -0
  109. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/core/models.py +0 -0
  110. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/core/policy.py +0 -0
  111. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/core/runtime.py +0 -0
  112. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/core/spec.py +0 -0
  113. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/core/vars.py +0 -0
  114. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/evidence/__init__.py +0 -0
  115. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/evidence/recorder.py +0 -0
  116. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/history_bundle.py +0 -0
  117. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/identity/__init__.py +0 -0
  118. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/identity/fingerprint.py +0 -0
  119. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/__init__.py +0 -0
  120. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  121. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  122. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  123. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  124. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  125. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  126. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  127. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  128. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  129. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  130. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  131. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
  132. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  133. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  134. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  135. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  136. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  137. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  138. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/memory/__init__.py +0 -0
  139. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/memory/active_context.py +0 -0
  140. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/memory/active_memory.py +0 -0
  141. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/memory/compaction.py +0 -0
  142. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/memory/kg_packets.py +0 -0
  143. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/memory/memact_composer.py +0 -0
  144. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/memory/recall_levels.py +0 -0
  145. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/memory/token_budget.py +0 -0
  146. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/rendering/__init__.py +0 -0
  147. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  148. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/rendering/json_stringify.py +0 -0
  149. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/scheduler/__init__.py +0 -0
  150. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/scheduler/convenience.py +0 -0
  151. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/scheduler/registry.py +0 -0
  152. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/scheduler/scheduler.py +0 -0
  153. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/__init__.py +0 -0
  154. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/artifacts.py +0 -0
  155. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/base.py +0 -0
  156. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/commands.py +0 -0
  157. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/in_memory.py +0 -0
  158. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/json_files.py +0 -0
  159. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/ledger_chain.py +0 -0
  160. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/observable.py +0 -0
  161. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/offloading.py +0 -0
  162. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/snapshots.py +0 -0
  163. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/storage/sqlite.py +0 -0
  164. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  165. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  166. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  167. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  168. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  169. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  170. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  171. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  172. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  173. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  174. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  175. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
  176. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  177. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  178. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  179. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  180. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  181. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
  182. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  183. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  184. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  185. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/models.py +0 -0
  186. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  187. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  188. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  189. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/README.md +0 -0
  190. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/conftest.py +0 -0
  191. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_abstractcore_host_facade.py +0 -0
  192. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_active_context_policy.py +0 -0
  193. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_active_memory.py +0 -0
  194. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_answer_user_effect.py +0 -0
  195. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_artifacts.py +0 -0
  196. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_chat_summarizer_integration.py +0 -0
  197. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_command_store.py +0 -0
  198. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_compaction_helpers.py +0 -0
  199. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_control_adapter_while.py +0 -0
  200. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_default_tools_comms_gating.py +0 -0
  201. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_default_tools_include_skim_files.py +0 -0
  202. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_default_tools_include_skim_folders.py +0 -0
  203. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_default_tools_search_files_executor.py +0 -0
  204. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_durable_toolsets.py +0 -0
  205. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  206. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_emit_event_without_workflow_registry.py +0 -0
  207. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_evidence_recorder.py +0 -0
  208. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  209. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_integration_abstractcore.py +0 -0
  210. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_integrations_abstractcore.py +0 -0
  211. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_json_file_run_store_children_index.py +0 -0
  212. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_jsonl_ledger_recovery.py +0 -0
  213. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_kg_learn_and_recall_contract.py +0 -0
  214. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_ledger_chain.py +0 -0
  215. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_ledger_subscription.py +0 -0
  216. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_media_artifact_refs.py +0 -0
  217. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  218. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  219. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_requires_prompt.py +0 -0
  220. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_response_schema_normalization.py +0 -0
  221. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_structured_output_fallback.py +0 -0
  222. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  223. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  224. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  225. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_client_media_artifacts.py +0 -0
  226. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_client_system_context.py +0 -0
  227. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_llm_client_tool_call_parsing.py +0 -0
  228. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  229. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_mcp_remote_tool_executor.py +0 -0
  230. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_mcp_worker_logging.py +0 -0
  231. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_mcp_worker_security.py +0 -0
  232. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_mcp_worker_stdio.py +0 -0
  233. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_media_artifact_resolution.py +0 -0
  234. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memact_composer_from_kg_result.py +0 -0
  235. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  236. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_kg_packets.py +0 -0
  237. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  238. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  239. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  240. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  241. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_note_effect.py +0 -0
  242. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_query_effect.py +0 -0
  243. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_query_rich_filters.py +0 -0
  244. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  245. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_memory_tag_effect.py +0 -0
  246. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_mlx_generation_serialization.py +0 -0
  247. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_model_residency_control_plane.py +0 -0
  248. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_offloading.py +0 -0
  249. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_pause_resume.py +0 -0
  250. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_prompt_cache_modules.py +0 -0
  251. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_queryable_run_store.py +0 -0
  252. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  253. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_real_integration.py +0 -0
  254. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_recall_levels_policy.py +0 -0
  255. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_remote_llm_client.py +0 -0
  256. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_rendering_agent_trace_report.py +0 -0
  257. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_rendering_json_stringify.py +0 -0
  258. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_retry_idempotency.py +0 -0
  259. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_run_history_bundle.py +0 -0
  260. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  261. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_runtime_install_boundary.py +0 -0
  262. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  263. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_runtime_node_traces.py +0 -0
  264. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  265. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_scheduler.py +0 -0
  266. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  267. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_snapshots.py +0 -0
  268. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_sqlite_ledger_store.py +0 -0
  269. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_start_subworkflow_async_wait.py +0 -0
  270. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  271. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  272. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_structured_output_schema_enum.py +0 -0
  273. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_subworkflow.py +0 -0
  274. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_terminal_effect_completion.py +0 -0
  275. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  276. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  277. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_approval_executor.py +0 -0
  278. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_approval_resume_executes.py +0 -0
  279. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_calls_idempotency_keys.py +0 -0
  280. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_executor_argument_sanitization.py +0 -0
  281. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_executor_error_output_detection.py +0 -0
  282. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_executor_filename_alias.py +0 -0
  283. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  284. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_executor_read_file_aliases.py +0 -0
  285. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_executor_timeout.py +0 -0
  286. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_tool_wait_allowlist_safety.py +0 -0
  287. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_trace_context_propagation.py +0 -0
  288. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_vars_query_effect.py +0 -0
  289. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  290. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  291. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  292. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  293. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  294. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  295. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_memact_compose_node.py +0 -0
  296. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  297. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  298. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  299. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_add_message_builtin.py +0 -0
  300. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  301. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_call_tool_node.py +0 -0
  302. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_compiler_basic.py +0 -0
  303. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  304. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_get_element_node.py +0 -0
  305. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_get_random_element_node.py +0 -0
  306. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_has_tools_builtin.py +0 -0
  307. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  308. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  309. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_make_object_node.py +0 -0
  310. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_media_nodes.py +0 -0
  311. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  312. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_memory_source_pins.py +0 -0
  313. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_prompt_only.py +0 -0
  314. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_random_nodes.py +0 -0
  315. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_string_contains_replace.py +0 -0
  316. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_visualflow_tool_parameters_node.py +0 -0
  317. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_wait_event_prompt_metadata.py +0 -0
  318. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_workflow_bundle_registry.py +0 -0
  319. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  320. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  321. {abstractruntime-0.4.16 → abstractruntime-0.4.17}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.17] - 2026-05-21
11
+
12
+ ### Added
13
+ - Runtime now surfaces AbstractCore-backed music through the same durable boundary as other generated artifacts:
14
+ - host discovery snapshot methods for music providers/models
15
+ - durable run-scoped `generate_music(...)`
16
+ - artifact-backed normalized music outputs for local and remote Runtime paths
17
+
18
+ ### Changed
19
+ - Minimum optional AbstractCore dependency floor is now `abstractcore>=2.13.24`.
20
+ - The `multimodal` extra now installs `abstractcore[remote,vision,voice,audio,music]>=2.13.24`, which includes AbstractMusic's lightweight remote ACE backend path via `abstractmusic>=0.1.4`.
21
+ - Runtime docs and AI-readable `llms.txt` / `llms-full.txt` now describe the shipped music boundary and the current `0030` Gateway cleanup scope more accurately.
22
+
10
23
  ## [0.4.16] - 2026-05-21
11
24
 
12
25
  ### Added
@@ -448,7 +461,8 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
448
461
 
449
462
  Initial development version with basic proof-of-concept features.
450
463
 
451
- [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.16...HEAD
464
+ [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.17...HEAD
465
+ [0.4.17]: https://github.com/lpalbou/abstractruntime/compare/v0.4.16...v0.4.17
452
466
  [0.4.16]: https://github.com/lpalbou/abstractruntime/compare/v0.4.15...v0.4.16
453
467
  [0.4.15]: https://github.com/lpalbou/abstractruntime/compare/v0.4.14...v0.4.15
454
468
  [0.4.14]: https://github.com/lpalbou/abstractruntime/compare/v0.4.13...v0.4.14
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AbstractRuntime
3
- Version: 0.4.16
3
+ Version: 0.4.17
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.23; extra == 'abstractcore'
26
+ Requires-Dist: abstractcore>=2.13.24; extra == 'abstractcore'
27
27
  Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'abstractcore'
28
28
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'abstractcore'
29
29
  Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'abstractcore'
30
30
  Provides-Extra: all-apple
31
- Requires-Dist: abstractcore[all-apple]>=2.13.23; extra == 'all-apple'
31
+ Requires-Dist: abstractcore[all-apple]>=2.13.24; extra == 'all-apple'
32
32
  Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'all-apple'
33
33
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'all-apple'
34
34
  Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'all-apple'
35
35
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'all-apple'
36
36
  Provides-Extra: all-gpu
37
- Requires-Dist: abstractcore[all-gpu]>=2.13.23; extra == 'all-gpu'
37
+ Requires-Dist: abstractcore[all-gpu]>=2.13.24; extra == 'all-gpu'
38
38
  Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'all-gpu'
39
39
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'all-gpu'
40
40
  Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'all-gpu'
41
41
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'all-gpu'
42
42
  Provides-Extra: apple
43
- Requires-Dist: abstractcore[apple]>=2.13.23; extra == 'apple'
43
+ Requires-Dist: abstractcore[apple]>=2.13.24; extra == 'apple'
44
44
  Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'apple'
45
45
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'apple'
46
46
  Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'apple'
@@ -50,18 +50,18 @@ Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
50
50
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
51
51
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
52
52
  Provides-Extra: gpu
53
- Requires-Dist: abstractcore[gpu]>=2.13.23; extra == 'gpu'
53
+ Requires-Dist: abstractcore[gpu]>=2.13.24; extra == 'gpu'
54
54
  Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'gpu'
55
55
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'gpu'
56
56
  Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'gpu'
57
57
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'gpu'
58
58
  Provides-Extra: mcp-worker
59
- Requires-Dist: abstractcore[tools]>=2.13.23; extra == 'mcp-worker'
59
+ Requires-Dist: abstractcore[tools]>=2.13.24; extra == 'mcp-worker'
60
60
  Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'mcp-worker'
61
61
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'mcp-worker'
62
62
  Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'mcp-worker'
63
63
  Provides-Extra: multimodal
64
- Requires-Dist: abstractcore[audio,remote,vision,voice]>=2.13.23; extra == 'multimodal'
64
+ Requires-Dist: abstractcore[audio,music,remote,vision,voice]>=2.13.24; extra == 'multimodal'
65
65
  Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'multimodal'
66
66
  Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'multimodal'
67
67
  Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'multimodal'
@@ -81,7 +81,7 @@ Description-Content-Type: text/markdown
81
81
 
82
82
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
83
83
 
84
- **Version:** 0.4.16 • **Python:** 3.10+
84
+ **Version:** 0.4.17 • **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.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.
118
+ The `abstractcore` extra installs AbstractCore 2.13.24 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, and lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, the public local vision-cache catalog helper used by Runtime discovery, and the lightweight `abstractmusic>=0.1.4` ACE-remote path used by Runtime music generation are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, audio, and music dependencies.
119
119
 
120
120
  Hardware profile cascades are available for native Python installs:
121
121
  `abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
@@ -169,7 +169,7 @@ state = rt.resume(
169
169
  assert state.status.value == "completed"
170
170
  ```
171
171
 
172
- ## What’s included (v0.4.16)
172
+ ## What’s included (v0.4.17)
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, and lifecycle operations, 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 image/voice/music outputs, 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.16 • **Python:** 3.10+
7
+ **Version:** 0.4.17 • **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.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.
41
+ The `abstractcore` extra installs AbstractCore 2.13.24 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, and lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, the public local vision-cache catalog helper used by Runtime discovery, and the lightweight `abstractmusic>=0.1.4` ACE-remote path used by Runtime music generation are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, audio, and music dependencies.
42
42
 
43
43
  Hardware profile cascades are available for native Python installs:
44
44
  `abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
@@ -92,7 +92,7 @@ state = rt.resume(
92
92
  assert state.status.value == "completed"
93
93
  ```
94
94
 
95
- ## What’s included (v0.4.16)
95
+ ## What’s included (v0.4.17)
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, and lifecycle operations, 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 image/voice/music outputs, 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.
@@ -125,7 +125,7 @@ Key types:
125
125
  Artifacts are used by:
126
126
  - offloading wrappers (`src/abstractruntime/storage/offloading.py`)
127
127
  - evidence capture (`docs/evidence.md`, `src/abstractruntime/evidence/recorder.py`)
128
- - AbstractCore media integration: input artifact refs can be materialized for LLM calls, and generated image/voice/audio outputs are stored as artifact refs
128
+ - AbstractCore media integration: input artifact refs can be materialized for LLM calls, and generated image/voice/music/audio outputs are stored as artifact refs
129
129
 
130
130
  ## Snapshots / bookmarks
131
131
 
@@ -176,7 +176,7 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
176
176
 
177
177
  ### AbstractCore (LLM + tools)
178
178
 
179
- Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.23 or newer).
179
+ Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.24 or newer).
180
180
 
181
181
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
182
182
 
@@ -187,9 +187,9 @@ Entry points:
187
187
  - public durable run facade: `AbstractCoreRunFacade`, `get_abstractcore_run_facade(...)` (`src/abstractruntime/integrations/abstractcore/run_facade.py`)
188
188
  - effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
189
189
  - tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
190
- - discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_vision_provider_models`, `list_cached_vision_models`)
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_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`)
191
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`)
192
+ - run-facade helpers create durable child runs for existing runs (`execute_llm_call`, `generate_image`, `generate_voice`, `generate_music`, `transcribe_audio`)
193
193
 
194
194
  `LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
195
195
  - `prompt`, `messages`, `system_prompt`, and convenience `text`
@@ -198,11 +198,11 @@ Entry points:
198
198
  - `params`: provider/model routing, generation controls, prompt-cache keys or `prompt_cache_binding`, structured-output schema options, and tracing metadata
199
199
 
200
200
  Multimodal support:
201
- - install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, and audio dependencies
201
+ - install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, audio, and music dependencies
202
202
  - local clients call AbstractCore's unified `generate(..., media=..., output=...)`
203
- - remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, speech, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
203
+ - remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
204
204
  - remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
205
- - generated image/voice/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
205
+ - generated image/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
206
206
  - media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
207
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`
208
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
@@ -1,7 +1,7 @@
1
1
  # AbstractRuntime — Architecture
2
2
 
3
- > Updated: 2026-05-20
4
- > Version: 0.4.16
3
+ > Updated: 2026-05-21
4
+ > Version: 0.4.17
5
5
  > Scope: this describes **what is implemented in this repository**.
6
6
 
7
7
  AbstractRuntime is a **durable workflow runtime**: it executes workflow graphs as a persisted state machine with explicit waits (user, time, events, jobs, subworkflows). A run can pause for hours/days and resume **without** keeping Python stacks/coroutines alive.
@@ -28,7 +28,7 @@ Key invariants (enforced by code, not convention):
28
28
 
29
29
  ## AbstractCore capability boundary
30
30
 
31
- AbstractRuntime's job is persistence and orchestration. AbstractCore owns model/provider capability execution: chat, structured output, cached sessions/prompt cache, media input analysis, image generation, voice/audio generation, transcription, and future modalities such as music or video.
31
+ AbstractRuntime's job is persistence and orchestration. AbstractCore owns model/provider capability execution: chat, structured output, cached sessions/prompt cache, media input analysis, image generation, voice/audio generation, music generation, transcription, and future modalities such as video.
32
32
 
33
33
  The boundary is intentionally narrow:
34
34
  - Workflow nodes request model work with `EffectType.LLM_CALL`; the runtime persists the request/result and delegates execution to the configured AbstractCore client.
@@ -10,6 +10,19 @@ This folder contains a structured backlog used during development. Items are gro
10
10
 
11
11
  If you are new to the project, start with `../README.md` and `../architecture.md` instead.
12
12
 
13
+ ## Next recommended work
14
+
15
+ 1. `planned/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md`
16
+ This is the narrow Runtime work that unblocks the last high-pressure direct
17
+ `abstractcore` imports in Gateway for comms/email and Telegram without
18
+ reopening the already-completed media/discovery boundary work.
19
+ 2. `planned/018_workspace_access_policy_for_media_and_tools.md`
20
+ Keep workspace and tool policy explicit while Gateway extracts its local
21
+ workspace helpers.
22
+ 3. `planned/014_remote_tool_worker_executor.md`
23
+ The public ToolExecutor path is still the larger follow-on after the current
24
+ Gateway boundary cleanup.
25
+
13
26
  ## Completed
14
27
 
15
28
  | ID | Item |
@@ -36,6 +49,7 @@ If you are new to the project, start with `../README.md` and `../architecture.md
36
49
  | 026 | `completed/026_runtime_host_discovery_facade_for_core_catalogs.md` |
37
50
  | 027 | `completed/027_runtime_durable_bloc_prompt_cache_facade.md` |
38
51
  | 028 | `completed/028_runtime_bloc_kv_lifecycle_and_pruning.md` |
52
+ | 029 | `completed/029_runtime_music_generation_and_discovery_via_abstractcore.md` |
39
53
 
40
54
  ## Planned
41
55
 
@@ -46,13 +60,15 @@ If you are new to the project, start with `../README.md` and `../architecture.md
46
60
  | 017 | `planned/017_limit_warnings_and_observability.md` |
47
61
  | 018 | `planned/018_workspace_access_policy_for_media_and_tools.md` |
48
62
  | 025 | `planned/025_runtime_retention_and_purge_contract.md` |
63
+ | 0030 | `planned/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md` |
49
64
 
50
65
  ## Proposed
51
66
 
52
- | Date | Item |
53
- |------|------|
67
+ | ID | Item |
68
+ |----|------|
54
69
  | 2026-05-20 | `proposed/2026-05-20_agent_runtime_convenience_constructor.md` |
55
70
  | 2026-05-20 | `proposed/2026-05-20_runtime_local_admin_prompt_cache_save_load.md` |
71
+ | 0031 | `proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md` |
56
72
 
57
73
  ## Deprecated
58
74
 
@@ -0,0 +1,178 @@
1
+ # 029 Runtime Music Generation And Discovery Via AbstractCore
2
+
3
+ ## Metadata
4
+ - Created: 2026-05-21
5
+ - Status: Completed
6
+ - Completed: 2026-05-21
7
+ - Origin: direct implementation from repository backlog/user request
8
+
9
+ ## Goal
10
+
11
+ Surface AbstractCore-backed music capabilities through Runtime without breaking
12
+ the existing boundary rule that Runtime integrates only with AbstractCore, not
13
+ directly with `abstractmusic` or other modality packages.
14
+
15
+ ## What Shipped
16
+
17
+ - Extended the public Runtime-owned discovery facade with music snapshot
18
+ methods:
19
+ - `list_music_providers(...)`
20
+ - `list_music_models(...)`
21
+ - Extended the public durable run facade with:
22
+ - `generate_music(...)`
23
+ - Extended remote AbstractCore multimodal routing so Runtime can execute music
24
+ generation through AbstractCore Server's `/v1/audio/music` contract and store
25
+ the returned bytes as normal Runtime artifacts.
26
+ - Extended local discovery helpers so local runtimes can surface music provider
27
+ and model catalogs through AbstractCore capability registries when the
28
+ configured Core stack exposes them.
29
+ - Normalized `music` generated outputs into the same JSON-safe artifact-backed
30
+ result shape used for image and voice outputs.
31
+ - Kept the package boundary clean:
32
+ - no direct Runtime import of `abstractmusic`
33
+ - no direct Runtime import of `abstractvoice`
34
+ - no direct Runtime import of `abstractvision`
35
+ - Updated the `multimodal` extra to include `abstractcore[music]` so the common
36
+ Runtime media install matches the public surface.
37
+ - Updated docs and LLM indexes so the repo no longer describes music support as
38
+ future-only work.
39
+
40
+ ## Current Code Pointers
41
+
42
+ - `src/abstractruntime/integrations/abstractcore/discovery_queries.py`
43
+ - `src/abstractruntime/integrations/abstractcore/discovery_facade.py`
44
+ - `src/abstractruntime/integrations/abstractcore/llm_client.py`
45
+ - `src/abstractruntime/integrations/abstractcore/run_facade.py`
46
+ - `tests/test_abstractcore_discovery_facade.py`
47
+ - `tests/test_multimodal_abstractcore_integration.py`
48
+ - `tests/test_abstractcore_run_facade.py`
49
+ - `tests/test_packaging_extras.py`
50
+ - `docs/integrations/abstractcore.md`
51
+ - `docs/api.md`
52
+ - `docs/faq.md`
53
+
54
+ Related ADRs already covered the boundary and ownership rules:
55
+ - `docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md`
56
+ - `docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md`
57
+
58
+ ## Validation
59
+
60
+ Focused validation run on 2026-05-21:
61
+
62
+ - `pytest -q tests/test_abstractcore_discovery_facade.py tests/test_multimodal_abstractcore_integration.py tests/test_abstractcore_run_facade.py`
63
+ - Result: `58 passed in 0.30s`
64
+
65
+ Broader regression and packaging validation:
66
+
67
+ - `PYTHONPATH="/Users/albou/tmp/abstractframework/abstractcore:src" pytest -q tests/test_abstractcore_discovery_facade.py tests/test_multimodal_abstractcore_integration.py tests/test_abstractcore_run_facade.py tests/test_remote_llm_client.py tests/test_packaging_extras.py tests/test_runtime_install_boundary.py tests/test_abstractcore_host_facade.py`
68
+ - Result: `84 passed in 0.51s`
69
+
70
+ Syntax/import sanity:
71
+
72
+ - `python -m compileall src/abstractruntime/integrations/abstractcore`
73
+ - Result: clean
74
+
75
+ Documentation build sanity:
76
+
77
+ - `mkdocs build -q --site-dir /tmp/abstractruntime-music-docs`
78
+ - Result: build passed; upstream Material for MkDocs emitted a non-blocking
79
+ roadmap warning about future MkDocs 2.0 compatibility
80
+
81
+ Practical proof points from the shipped tests:
82
+
83
+ - Remote Runtime now proxies music discovery through:
84
+ - `GET /v1/audio/music/providers`
85
+ - `GET /v1/audio/music/models`
86
+ - Remote Runtime now executes music generation through:
87
+ - `POST /v1/audio/music`
88
+ - Durable run-scoped music execution now works through
89
+ `get_abstractcore_run_facade(runtime).generate_music(...)`, producing a child
90
+ run with artifact-backed output.
91
+ - Live ACE Music smoke proof against AbstractCore `2.13.24` plus
92
+ `abstractmusic>=0.1.4`:
93
+ - direct Runtime local client call returned `audio/mp3` output with
94
+ `media_provider='abstractmusic:acemusic'`
95
+ - full Runtime `LLM_CALL` workflow completed durably with `ledger_entries=4`
96
+ and an artifact-backed MP3 result
97
+
98
+ ## Completion Report
99
+
100
+ ### Date
101
+
102
+ 2026-05-21
103
+
104
+ ### Summary
105
+
106
+ Runtime now surfaces music in the same three Runtime-owned ways that it already
107
+ surfaces other generated-media capabilities:
108
+
109
+ - discovery snapshots for host/query use
110
+ - durable run-scoped execution for existing runs
111
+ - artifact-backed normalized outputs for replay-safe state
112
+
113
+ The boundary remains correct: Runtime still talks only to AbstractCore and
114
+ AbstractCore Server contracts. Music capability packages remain behind
115
+ AbstractCore.
116
+
117
+ ### Behavior Changes
118
+
119
+ - Hosts can ask Runtime for music provider and model catalogs through the
120
+ public discovery facade instead of querying Core directly.
121
+ - Hosts can ask Runtime to durably execute run-scoped music generation through
122
+ the public run facade instead of doing out-of-band work and synthesizing
123
+ history afterward.
124
+ - Remote music bytes are persisted as Runtime artifacts with the same durable
125
+ output shape used by image and voice generation.
126
+ - The common `multimodal` install now includes the Core music extra so local
127
+ Runtime installs can expose music when the selected Core profile supports it.
128
+ - Runtime is now validated against the `abstractcore>=2.13.24` floor and the
129
+ lightweight remote ACE Music backend path from `abstractmusic>=0.1.4`.
130
+
131
+ ### Review Notes
132
+
133
+ - No new ADR was added. This change is an extension of existing accepted
134
+ Runtime policy:
135
+ - Runtime owns run-scoped media execution truth.
136
+ - Runtime owns host discovery boundaries.
137
+ - The main regression caught during implementation was that remote generated
138
+ media had briefly stopped preserving `output.run_id` and `output.tags` for
139
+ artifact storage. That was fixed before closure.
140
+
141
+ ### Tests
142
+
143
+ - `tests/test_abstractcore_discovery_facade.py`
144
+ - `tests/test_multimodal_abstractcore_integration.py`
145
+ - `tests/test_abstractcore_run_facade.py`
146
+ - regression support in:
147
+ - `tests/test_remote_llm_client.py`
148
+ - `tests/test_packaging_extras.py`
149
+ - `tests/test_runtime_install_boundary.py`
150
+ - `tests/test_abstractcore_host_facade.py`
151
+
152
+ ### Docs
153
+
154
+ - `README.md`
155
+ - `docs/integrations/abstractcore.md`
156
+ - `docs/api.md`
157
+ - `docs/faq.md`
158
+ - `docs/architecture.md`
159
+ - `llms.txt`
160
+ - `llms-full.txt`
161
+
162
+ ### Residual Risks
163
+
164
+ - Runtime is ready for the AbstractCore music boundary, but the exact local
165
+ backend matrix still depends on which AbstractCore capability packages and
166
+ backends a host installs.
167
+ - Remote music currently follows the current AbstractCore `/v1/audio/music`
168
+ contract. If Core changes provider/backend routing semantics, Runtime should
169
+ keep mirroring that public contract rather than growing direct modality
170
+ knowledge.
171
+
172
+ ### Follow-Ups
173
+
174
+ - Gateway/other hosts should adopt the new Runtime discovery and run facades
175
+ for music instead of querying or invoking Core directly.
176
+ - If a later Runtime surface needs music-specific operator controls, keep them
177
+ behind the existing Runtime-to-AbstractCore boundary rather than importing
178
+ `abstractmusic` directly.
@@ -0,0 +1,165 @@
1
+ # Planned: Runtime host facades for comms and Telegram, with tool-spec follow-up split out
2
+
3
+ ## Metadata
4
+ - Created: 2026-05-21
5
+ - Status: Planned
6
+ - Completed: N/A
7
+
8
+ ## ADR status
9
+ - Governing ADRs: None
10
+ - ADR impact: None; this extends the existing public host-facade pattern rather than creating a new architecture rule.
11
+
12
+ ## Context
13
+
14
+ Runtime already owns the public Gateway-facing integration boundary for the
15
+ main AbstractCore-backed surfaces:
16
+
17
+ - `AbstractCoreHostFacade` for operator/control-plane helpers
18
+ - `AbstractCoreDiscoveryFacade` for provider/model/media catalogs
19
+ - `AbstractCoreRunFacade` for run-scoped durable media execution
20
+
21
+ Gateway now uses those facades for prompt-cache control, durable blocs, model
22
+ residency, discovery, and run-scoped voice/STT/image work. The remaining
23
+ direct `abstractcore` imports in Gateway are concentrated in comms/Telegram
24
+ helpers and a smaller tool-spec/testing tail.
25
+
26
+ ## Current code reality
27
+
28
+ Inspected on 2026-05-21:
29
+
30
+ - `src/abstractruntime/integrations/abstractcore/host_facade.py`
31
+ - exposes prompt-cache, bloc, and model-residency helpers
32
+ - does not expose email/comms helpers
33
+ - `src/abstractruntime/integrations/abstractcore/default_tools.py`
34
+ - imports `abstractcore.tools.common_tools`, `comms_tools`, and `telegram_tools`
35
+ - derives JSON-safe tool specs via `abstractcore.tools.core.ToolDefinition`
36
+ - `src/abstractruntime/integrations/abstractcore/mcp_worker.py`
37
+ - converts callables to MCP entries through `ToolDefinition.from_function(...)`
38
+ - `src/abstractruntime/integrations/abstractcore/tool_executor.py`
39
+ - still constructs `abstractcore.tools.core.ToolCall`
40
+ - `../abstractgateway/src/abstractgateway/routes/gateway.py`
41
+ - still imports `abstractcore.tools.comms_tools` directly for email helper routes
42
+ - `../abstractgateway/src/abstractgateway/cli.py`
43
+ - still imports `abstractcore.tools.telegram_tdlib` directly for `telegram-auth`
44
+ - `../abstractgateway/src/abstractgateway/integrations/telegram_bridge.py`
45
+ - still imports `abstractcore.tools.telegram_tdlib` global-client helpers directly
46
+
47
+ Runtime therefore has the right facade pattern already, but the remaining
48
+ host/operator surfaces have not been moved onto it. The strongest current
49
+ Gateway production pressure is comms/email and Telegram bootstrap/global-client
50
+ access; tool-spec coupling is lower-pressure follow-up work.
51
+
52
+ ## Problem
53
+
54
+ Gateway cannot fully stop importing `abstractcore` directly until Runtime owns
55
+ two small public surfaces in phase 1:
56
+
57
+ 1. comms/email host helpers
58
+ 2. Telegram bootstrap/global-client wrappers, plus a thin send helper for notifier parity
59
+
60
+ The missing pieces are not durable-run problems. They are host/operator
61
+ integration surfaces, so they belong next to the existing host-facade pattern.
62
+ Tool-spec helpers remain useful, but they are not the strongest current
63
+ Gateway blocker and should not hold up the narrower phase-1 cleanup.
64
+
65
+ ## What we want to do
66
+
67
+ Extend Runtime's public host integration layer so Gateway can depend on
68
+ Runtime alone for the remaining comms/Telegram edges, while tracking
69
+ tool-spec normalization as a separate follow-up.
70
+
71
+ ## Why
72
+
73
+ - keeps Gateway source aligned with the Runtime-owned boundary
74
+ - reuses the existing facade pattern instead of inventing another Gateway/Core seam
75
+ - gives future hosts one place to look for operator-scoped helper contracts
76
+ - lets Runtime normalize local/remote Core topology for these paths too when needed later
77
+ - avoids over-scoping a release-blocking boundary cleanup around a lower-pressure
78
+ tool-spec concern
79
+
80
+ ## Requirements
81
+
82
+ - Add public host-facing email helpers for:
83
+ - list accounts
84
+ - list messages
85
+ - read message
86
+ - send message
87
+ - Add a Runtime-owned Telegram wrapper surface for:
88
+ - one-shot TDLib auth bootstrap from env
89
+ - a stable "not available" error
90
+ - access to the global TDLib client lifecycle used by the Gateway bridge
91
+ - stop/cleanup of the global client
92
+ - `send_telegram_message(...)` for notifier parity
93
+ - Keep these host helpers nondurable. They must not write Runtime run history by themselves.
94
+ - Allow Runtime to wrap existing public Core tool modules in phase 1; do not block on a larger Core refactor.
95
+ - Do not require a new AbstractCore runtime-facing backend seam for phase 1.
96
+
97
+ ## Suggested implementation
98
+
99
+ 1. Extend `AbstractCoreHostFacade` with email/comms methods:
100
+ - `list_email_accounts(...)`
101
+ - `list_emails(...)`
102
+ - `read_email(...)`
103
+ - `send_email(...)`
104
+ 2. Add a small Runtime Telegram helper module, for example under
105
+ `abstractruntime.integrations.abstractcore.telegram_facade`, with:
106
+ - `TelegramTdlibNotAvailable`
107
+ - `bootstrap_telegram_auth_from_env(...)`
108
+ - `get_global_telegram_client(start=False)`
109
+ - `stop_global_telegram_client()`
110
+ - `send_telegram_message(...)`
111
+ 3. Keep Runtime wrappers thin over current public Core helpers first:
112
+ - `abstractcore.tools.comms_tools`
113
+ - `abstractcore.tools.telegram_tdlib`
114
+ - `abstractcore.tools.telegram_tools`
115
+ 4. Keep full abstractagent/tool-type decoupling explicitly out of scope here.
116
+
117
+ ## Scope
118
+
119
+ - Runtime host facade extension for email/comms
120
+ - Runtime Telegram wrappers for Gateway CLI/bridge/notifier adoption
121
+ - tests proving those surfaces are public, stable, and JSON-safe
122
+
123
+ ## Non-goals
124
+
125
+ - Do not move Gateway workspace/file policy into Runtime.
126
+ - Do not redesign Core tool execution or the durable `TOOL_CALLS` effect.
127
+ - Do not block this on a full replacement of `abstractcore.tools.ToolCall` inside AbstractAgent.
128
+ - Do not block this phase on Runtime-owned tool-spec adapters; track those separately.
129
+ - Do not introduce new Core HTTP endpoints just to satisfy Gateway.
130
+
131
+ ## Dependencies and related tasks
132
+
133
+ - `../completed/019_runtime_host_facade_for_core_operator_surfaces.md`
134
+ - `../completed/026_runtime_host_discovery_facade_for_core_catalogs.md`
135
+ - `../completed/027_runtime_durable_bloc_prompt_cache_facade.md`
136
+ - `../completed/028_runtime_bloc_kv_lifecycle_and_pruning.md`
137
+ - `../proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md`
138
+ - `../../../../abstractgateway/docs/backlog/planned/0050_gateway_runtime_boundary_cleanup_for_workspace_comms_and_telegram.md`
139
+ - `../../../../abstractcore/docs/backlog/proposed/0796_runtime_facing_comms_and_telegram_backend_surface.md`
140
+
141
+ ## Expected outcomes
142
+
143
+ - Gateway can stop importing `abstractcore.tools.comms_tools` directly.
144
+ - Gateway can stop importing `abstractcore.tools.telegram_tdlib` and `telegram_tools` directly.
145
+ - Runtime remains the only lower-level dependency that Gateway imports for these operator/tooling paths.
146
+ - Runtime phase 1 proves whether a later Runtime-owned tool-spec surface is still needed.
147
+
148
+ ## Validation
149
+
150
+ - focused Runtime tests for new host-facade email methods
151
+ - focused Runtime tests for Telegram wrapper happy/unavailable paths
152
+ - Gateway adoption tests proving direct `abstractcore` imports are removed from those paths
153
+
154
+ ## Progress checklist
155
+ - [ ] Extend `AbstractCoreHostFacade` with email/comms helpers.
156
+ - [ ] Add Runtime-owned Telegram wrapper helpers for bootstrap, send, and global-client lifecycle.
157
+ - [ ] Validate Gateway adoption and re-run focused Runtime/Gateway boundary tests.
158
+
159
+ ## Guidance for the implementing agent
160
+
161
+ Prefer thin public wrappers over current Core functionality first. If phase 1
162
+ can unblock Gateway without new Core changes, do that. Keep Core item `0796`
163
+ proposed unless Runtime adoption proves the existing public tool modules are
164
+ too unstable or too duplicative. Keep Runtime-owned tool-spec adapters as a
165
+ separate follow-up rather than blocking this narrower comms/Telegram item.