AbstractRuntime 0.4.5__tar.gz → 0.4.6__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 (292) hide show
  1. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/CHANGELOG.md +10 -1
  2. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/PKG-INFO +7 -7
  3. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/README.md +3 -3
  4. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/api.md +1 -1
  5. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/architecture.md +1 -1
  6. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/getting-started.md +1 -1
  7. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/integrations/abstractcore.md +2 -2
  8. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/limits.md +1 -1
  9. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/proposal.md +1 -1
  10. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/provenance.md +1 -1
  11. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/llms-full.txt +3 -3
  12. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/llms.txt +3 -3
  13. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/pyproject.toml +4 -4
  14. abstractruntime-0.4.6/release-notes.md +5 -0
  15. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/output_specs.py +26 -1
  16. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_multimodal_abstractcore_integration.py +14 -1
  17. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_packaging_extras.py +3 -2
  18. abstractruntime-0.4.5/release-notes.md +0 -6
  19. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/.github/workflows/ci.yml +0 -0
  20. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/.github/workflows/release.yml +0 -0
  21. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/.gitignore +0 -0
  22. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/ACKNOWLEDGMENTS.md +0 -0
  23. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/CONTRIBUTING.md +0 -0
  24. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/LICENSE +0 -0
  25. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/ROADMAP.md +0 -0
  26. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/SECURITY.md +0 -0
  27. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/README.md +0 -0
  28. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  29. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  30. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  31. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/README.md +0 -0
  32. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/README.md +0 -0
  33. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  34. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  35. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/003_wait_primitives.md +0 -0
  36. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  37. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  38. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  39. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  40. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/009_artifact_store.md +0 -0
  41. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  42. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  43. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  44. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  45. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  46. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  47. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  48. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  49. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  50. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  51. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  52. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  53. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/004_tests.md +0 -0
  54. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  55. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  56. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  57. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  58. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/README.md +0 -0
  59. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  60. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  61. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  62. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/015_agent_integration_improvements.md +0 -0
  63. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  64. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  65. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/evidence.md +0 -0
  66. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/faq.md +0 -0
  67. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/manual_testing.md +0 -0
  68. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/mcp-worker.md +0 -0
  69. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/snapshots.md +0 -0
  70. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/tools-comms.md +0 -0
  71. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/workflow-bundles.md +0 -0
  72. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/emails.config.example.yaml +0 -0
  73. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/01_hello_world.py +0 -0
  74. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/02_ask_user.py +0 -0
  75. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/03_wait_until.py +0 -0
  76. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/04_multi_step.py +0 -0
  77. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/05_persistence.py +0 -0
  78. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/06_llm_integration.py +0 -0
  79. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/07_react_agent.py +0 -0
  80. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/README.md +0 -0
  81. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/mkdocs.yml +0 -0
  82. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/pytest.ini +0 -0
  83. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/__init__.py +0 -0
  84. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/__init__.py +0 -0
  85. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/config.py +0 -0
  86. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/event_keys.py +0 -0
  87. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/models.py +0 -0
  88. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/policy.py +0 -0
  89. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/runtime.py +0 -0
  90. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/spec.py +0 -0
  91. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/vars.py +0 -0
  92. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/evidence/__init__.py +0 -0
  93. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/evidence/recorder.py +0 -0
  94. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/history_bundle.py +0 -0
  95. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/identity/__init__.py +0 -0
  96. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/identity/fingerprint.py +0 -0
  97. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/__init__.py +0 -0
  98. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  99. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  100. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  101. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  102. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  103. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  104. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
  105. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  106. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  107. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  108. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  109. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  110. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  111. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  112. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  113. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  114. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/__init__.py +0 -0
  115. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/active_context.py +0 -0
  116. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/active_memory.py +0 -0
  117. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/compaction.py +0 -0
  118. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/kg_packets.py +0 -0
  119. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/memact_composer.py +0 -0
  120. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/recall_levels.py +0 -0
  121. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/token_budget.py +0 -0
  122. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/rendering/__init__.py +0 -0
  123. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  124. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/rendering/json_stringify.py +0 -0
  125. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/scheduler/__init__.py +0 -0
  126. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/scheduler/convenience.py +0 -0
  127. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/scheduler/registry.py +0 -0
  128. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/scheduler/scheduler.py +0 -0
  129. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/__init__.py +0 -0
  130. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/artifacts.py +0 -0
  131. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/base.py +0 -0
  132. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/commands.py +0 -0
  133. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/in_memory.py +0 -0
  134. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/json_files.py +0 -0
  135. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/ledger_chain.py +0 -0
  136. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/observable.py +0 -0
  137. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/offloading.py +0 -0
  138. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/snapshots.py +0 -0
  139. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/sqlite.py +0 -0
  140. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  141. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  142. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  143. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  144. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  145. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  146. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  147. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  148. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  149. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  150. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  151. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
  152. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  153. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  154. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  155. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  156. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  157. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
  158. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  159. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  160. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  161. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/models.py +0 -0
  162. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  163. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  164. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  165. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/README.md +0 -0
  166. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/conftest.py +0 -0
  167. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_active_context_policy.py +0 -0
  168. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_active_memory.py +0 -0
  169. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_answer_user_effect.py +0 -0
  170. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_artifacts.py +0 -0
  171. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_chat_summarizer_integration.py +0 -0
  172. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_command_store.py +0 -0
  173. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_compaction_helpers.py +0 -0
  174. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_control_adapter_while.py +0 -0
  175. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_default_tools_comms_gating.py +0 -0
  176. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_default_tools_include_skim_files.py +0 -0
  177. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_default_tools_include_skim_folders.py +0 -0
  178. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_default_tools_search_files_executor.py +0 -0
  179. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_durable_toolsets.py +0 -0
  180. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  181. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_emit_event_without_workflow_registry.py +0 -0
  182. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_evidence_recorder.py +0 -0
  183. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  184. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_integration_abstractcore.py +0 -0
  185. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_integrations_abstractcore.py +0 -0
  186. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_json_file_run_store_children_index.py +0 -0
  187. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_jsonl_ledger_recovery.py +0 -0
  188. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_kg_learn_and_recall_contract.py +0 -0
  189. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_ledger_chain.py +0 -0
  190. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_ledger_subscription.py +0 -0
  191. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_media_artifact_refs.py +0 -0
  192. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  193. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  194. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_requires_prompt.py +0 -0
  195. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_response_schema_normalization.py +0 -0
  196. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_structured_output_fallback.py +0 -0
  197. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  198. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  199. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  200. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_client_media_artifacts.py +0 -0
  201. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_client_system_context.py +0 -0
  202. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_client_tool_call_parsing.py +0 -0
  203. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  204. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mcp_remote_tool_executor.py +0 -0
  205. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mcp_worker_logging.py +0 -0
  206. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mcp_worker_security.py +0 -0
  207. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mcp_worker_stdio.py +0 -0
  208. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memact_composer_from_kg_result.py +0 -0
  209. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  210. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_packets.py +0 -0
  211. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  212. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  213. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  214. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  215. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_note_effect.py +0 -0
  216. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_query_effect.py +0 -0
  217. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_query_rich_filters.py +0 -0
  218. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  219. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_tag_effect.py +0 -0
  220. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mlx_generation_serialization.py +0 -0
  221. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_offloading.py +0 -0
  222. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_pause_resume.py +0 -0
  223. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_prompt_cache_modules.py +0 -0
  224. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_queryable_run_store.py +0 -0
  225. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  226. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_real_integration.py +0 -0
  227. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_recall_levels_policy.py +0 -0
  228. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_remote_llm_client.py +0 -0
  229. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_rendering_agent_trace_report.py +0 -0
  230. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_rendering_json_stringify.py +0 -0
  231. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_retry_idempotency.py +0 -0
  232. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_run_history_bundle.py +0 -0
  233. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  234. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  235. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_runtime_node_traces.py +0 -0
  236. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  237. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_scheduler.py +0 -0
  238. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  239. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_snapshots.py +0 -0
  240. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_sqlite_ledger_store.py +0 -0
  241. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_start_subworkflow_async_wait.py +0 -0
  242. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  243. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  244. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_structured_output_schema_enum.py +0 -0
  245. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_subworkflow.py +0 -0
  246. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_terminal_effect_completion.py +0 -0
  247. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  248. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  249. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_approval_executor.py +0 -0
  250. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_approval_resume_executes.py +0 -0
  251. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_calls_idempotency_keys.py +0 -0
  252. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_argument_sanitization.py +0 -0
  253. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_error_output_detection.py +0 -0
  254. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_filename_alias.py +0 -0
  255. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  256. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_read_file_aliases.py +0 -0
  257. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_timeout.py +0 -0
  258. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_wait_allowlist_safety.py +0 -0
  259. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_trace_context_propagation.py +0 -0
  260. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_vars_query_effect.py +0 -0
  261. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  262. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  263. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  264. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  265. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  266. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  267. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_memact_compose_node.py +0 -0
  268. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  269. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  270. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  271. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_add_message_builtin.py +0 -0
  272. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  273. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_call_tool_node.py +0 -0
  274. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_compiler_basic.py +0 -0
  275. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  276. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_get_element_node.py +0 -0
  277. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_get_random_element_node.py +0 -0
  278. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_has_tools_builtin.py +0 -0
  279. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  280. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  281. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_make_object_node.py +0 -0
  282. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  283. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_memory_source_pins.py +0 -0
  284. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_prompt_only.py +0 -0
  285. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_random_nodes.py +0 -0
  286. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_string_contains_replace.py +0 -0
  287. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_tool_parameters_node.py +0 -0
  288. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_wait_event_prompt_metadata.py +0 -0
  289. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_workflow_bundle_registry.py +0 -0
  290. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  291. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  292. {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.6] - 2026-05-07
11
+
12
+ ### Changed
13
+ - Minimum `abstractcore` optional dependency increased to `>=2.13.10` so Runtime picks up AbstractCore's async/sync text-generation output-selector parity in addition to the public output-selector contract.
14
+
15
+ ### Fixed
16
+ - AbstractCore output-selector imports now fail fast when an older local AbstractCore install exposes the helper module but does not include the 2.13.10 async parity fix.
17
+
10
18
  ## [0.4.5] - 2026-05-07
11
19
 
12
20
  ### Changed
@@ -332,7 +340,8 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
332
340
 
333
341
  Initial development version with basic proof-of-concept features.
334
342
 
335
- [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.5...HEAD
343
+ [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.6...HEAD
344
+ [0.4.6]: https://github.com/lpalbou/abstractruntime/compare/v0.4.5...v0.4.6
336
345
  [0.4.5]: https://github.com/lpalbou/abstractruntime/compare/v0.4.4...v0.4.5
337
346
  [0.4.4]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.4.4
338
347
  [0.4.3]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.4.3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AbstractRuntime
3
- Version: 0.4.5
3
+ Version: 0.4.6
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
@@ -22,15 +22,15 @@ Classifier: Programming Language :: Python :: 3.13
22
22
  Requires-Python: >=3.10
23
23
  Requires-Dist: abstractsemantics>=0.0.2
24
24
  Provides-Extra: abstractcore
25
- Requires-Dist: abstractcore>=2.13.9; extra == 'abstractcore'
25
+ Requires-Dist: abstractcore>=2.13.10; extra == 'abstractcore'
26
26
  Provides-Extra: docs
27
27
  Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
28
28
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
29
29
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
30
30
  Provides-Extra: mcp-worker
31
- Requires-Dist: abstractcore[tools]>=2.13.9; extra == 'mcp-worker'
31
+ Requires-Dist: abstractcore[tools]>=2.13.10; extra == 'mcp-worker'
32
32
  Provides-Extra: multimodal
33
- Requires-Dist: abstractcore[audio,media,openai,vision,voice]>=2.13.9; extra == 'multimodal'
33
+ Requires-Dist: abstractcore[audio,media,openai,vision,voice]>=2.13.10; extra == 'multimodal'
34
34
  Provides-Extra: test
35
35
  Requires-Dist: pytest>=7.0.0; extra == 'test'
36
36
  Description-Content-Type: text/markdown
@@ -41,7 +41,7 @@ Description-Content-Type: text/markdown
41
41
 
42
42
  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.
43
43
 
44
- **Version:** 0.4.5 • **Python:** 3.10+
44
+ **Version:** 0.4.6 • **Python:** 3.10+
45
45
 
46
46
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
47
47
 
@@ -75,7 +75,7 @@ AbstractCore integration (LLM + tools):
75
75
  pip install "abstractruntime[abstractcore]"
76
76
  ```
77
77
 
78
- The `abstractcore` extra installs AbstractCore 2.13.9 or newer so the hardened server auth model, provider-key header routing, prompt-cache control plane, current tool catalog, unified multimodal generation response types, and public output-selector contract are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
78
+ The `abstractcore` extra installs AbstractCore 2.13.10 or newer so the hardened server auth model, provider-key header routing, prompt-cache control plane, current tool catalog, unified multimodal generation response types, 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.
79
79
 
80
80
  MCP worker entrypoint (default toolsets over stdio):
81
81
 
@@ -124,7 +124,7 @@ state = rt.resume(
124
124
  assert state.status.value == "completed"
125
125
  ```
126
126
 
127
- ## What’s included (v0.4.5)
127
+ ## What’s included (v0.4.6)
128
128
 
129
129
  Kernel (dependency-light):
130
130
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
@@ -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.5 • **Python:** 3.10+
7
+ **Version:** 0.4.6 • **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.9 or newer so the hardened server auth model, provider-key header routing, prompt-cache control plane, current tool catalog, unified multimodal generation response types, and public output-selector contract are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
41
+ The `abstractcore` extra installs AbstractCore 2.13.10 or newer so the hardened server auth model, provider-key header routing, prompt-cache control plane, current tool catalog, unified multimodal generation response types, 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.
42
42
 
43
43
  MCP worker entrypoint (default toolsets over stdio):
44
44
 
@@ -87,7 +87,7 @@ state = rt.resume(
87
87
  assert state.status.value == "completed"
88
88
  ```
89
89
 
90
- ## What’s included (v0.4.5)
90
+ ## What’s included (v0.4.6)
91
91
 
92
92
  Kernel (dependency-light):
93
93
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
@@ -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.9 or newer).
179
+ Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.10 or newer).
180
180
 
181
181
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
182
182
 
@@ -1,7 +1,7 @@
1
1
  # AbstractRuntime — Architecture
2
2
 
3
3
  > Updated: 2026-05-07
4
- > Version: 0.4.5
4
+ > Version: 0.4.6
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.
@@ -18,7 +18,7 @@ Optional (LLM + tools via AbstractCore):
18
18
  pip install "abstractruntime[abstractcore]"
19
19
  ```
20
20
 
21
- This installs AbstractCore 2.13.9 or newer, which matches the documented server auth, provider-key header routing, prompt-cache control plane, current tool behavior, unified multimodal generation response types, and public output-selector contract. Use `abstractruntime[multimodal]` when your workflows need common media, vision, voice, or audio dependencies.
21
+ This installs AbstractCore 2.13.10 or newer, which matches the documented server auth, provider-key header routing, prompt-cache control plane, current tool behavior, unified multimodal generation response types, public output-selector contract, and async/sync text-generation output-selector parity. Use `abstractruntime[multimodal]` when your workflows need common media, vision, voice, or audio dependencies.
22
22
 
23
23
  ## Mental model (source of truth)
24
24
 
@@ -16,7 +16,7 @@ Implementation pointers (this repo):
16
16
  pip install "abstractruntime[abstractcore]"
17
17
  ```
18
18
 
19
- This extra installs AbstractCore 2.13.9 or newer. That is the supported baseline for the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), prompt-cache control-plane endpoints, current tool catalog, the unified multimodal `generate(..., output=...)` response types, and AbstractCore's public output-selector contract.
19
+ This extra installs AbstractCore 2.13.10 or newer. That is the supported baseline for the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), prompt-cache control-plane endpoints, current tool catalog, the unified multimodal `generate(..., output=...)` response types, AbstractCore's public output-selector contract, and async/sync text-generation output-selector parity.
20
20
 
21
21
  For AbstractCore's multimodal `generate(..., output=...)` path, use the newer baseline and optional media packages:
22
22
 
@@ -24,7 +24,7 @@ For AbstractCore's multimodal `generate(..., output=...)` path, use the newer ba
24
24
  pip install "abstractruntime[multimodal]"
25
25
  ```
26
26
 
27
- This installs `abstractcore[media,openai,vision,voice,audio]>=2.13.9`. Local image/voice generation still depends on the configured AbstractCore capability backends (for example AbstractVision and AbstractVoice, or OpenAI/OpenAI-compatible remote engines).
27
+ This installs `abstractcore[media,openai,vision,voice,audio]>=2.13.10`. Local image/voice generation still depends on the configured AbstractCore capability backends (for example AbstractVision and AbstractVoice, or OpenAI/OpenAI-compatible remote engines).
28
28
 
29
29
  The MCP worker entrypoint uses the `mcp-worker` extra:
30
30
 
@@ -62,7 +62,7 @@ Returns a structured dict for UI/status display. (`src/abstractruntime/core/runt
62
62
 
63
63
  Returns a list of `LimitWarning` objects for limits approaching/exceeded. (`src/abstractruntime/core/models.py`, `src/abstractruntime/core/runtime.py`)
64
64
 
65
- As of v0.4.5, warnings are computed for:
65
+ As of v0.4.6, warnings are computed for:
66
66
  - `iterations` (`current_iteration` vs `max_iterations`)
67
67
  - `tokens` (`estimated_tokens_used` vs `max_tokens`)
68
68
 
@@ -79,7 +79,7 @@ AbstractRuntime stays dependency-light at the kernel level; concrete integration
79
79
 
80
80
  ## Status (implemented in this repository)
81
81
 
82
- As of v0.4.5:
82
+ As of v0.4.6:
83
83
  - durable kernel: `RunState`, `WaitState`, `Runtime.start/tick/resume`
84
84
  - built-in waits + events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
85
85
  - persistence backends: in-memory, JSON/JSONL, SQLite
@@ -8,7 +8,7 @@ Implementation pointers:
8
8
  - model fields: `src/abstractruntime/core/models.py` (`StepRecord.prev_hash`, `StepRecord.record_hash`, `StepRecord.signature`)
9
9
  - hash-chain decorator + verifier: `src/abstractruntime/storage/ledger_chain.py`
10
10
 
11
- ## What is implemented (v0.4.5)
11
+ ## What is implemented (v0.4.6)
12
12
 
13
13
  - `HashChainedLedgerStore(inner_store)` — wraps any `LedgerStore` to compute hashes on append
14
14
  - `verify_ledger_chain(records)` — validates the chain and returns a verification report
@@ -10,11 +10,11 @@ This file is an **agent-oriented build guide** for the AbstractRuntime *library*
10
10
 
11
11
  Quick facts:
12
12
  - Python: 3.10+ (`pyproject.toml`)
13
- - Version: 0.4.5
13
+ - Version: 0.4.6
14
14
  - Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella; pairs with [AbstractCore](https://github.com/lpalbou/abstractcore)
15
15
  - Public export surface (source of truth): `src/abstractruntime/__init__.py`
16
- - Optional AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.9`
17
- - Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.9`
16
+ - Optional AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.10`
17
+ - Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.10`
18
18
 
19
19
  ```mermaid
20
20
  flowchart LR
@@ -3,11 +3,11 @@
3
3
  > Durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
4
4
 
5
5
  - Python: 3.10+ (see `pyproject.toml`)
6
- - Version: 0.4.5
6
+ - Version: 0.4.6
7
7
  - Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella, integrates with [AbstractCore](https://github.com/lpalbou/abstractcore)
8
8
  - Hard invariant: `RunState.vars` must be JSON-serializable (`src/abstractruntime/core/models.py`)
9
- - Current AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.9`
10
- - Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.9`
9
+ - Current AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.10`
10
+ - Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.10`
11
11
 
12
12
  ## Start here
13
13
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "AbstractRuntime"
7
- version = "0.4.5"
7
+ version = "0.4.6"
8
8
  description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -42,18 +42,18 @@ dependencies = [
42
42
  [project.optional-dependencies]
43
43
  # Enables `abstractruntime.integrations.abstractcore.*` imports.
44
44
  abstractcore = [
45
- "abstractcore>=2.13.9",
45
+ "abstractcore>=2.13.10",
46
46
  ]
47
47
 
48
48
  # Enables AbstractCore multimodal generation helpers with common OpenAI-backed
49
49
  # image/voice capability packages.
50
50
  multimodal = [
51
- "abstractcore[media,openai,vision,voice,audio]>=2.13.9",
51
+ "abstractcore[media,openai,vision,voice,audio]>=2.13.10",
52
52
  ]
53
53
 
54
54
  # Enables `abstractruntime-mcp-worker` with the default toolsets (includes bs4/lxml).
55
55
  mcp-worker = [
56
- "abstractcore[tools]>=2.13.9",
56
+ "abstractcore[tools]>=2.13.10",
57
57
  ]
58
58
 
59
59
  # CI/test dependencies. The workflow runs the basic contract suite plus focused
@@ -0,0 +1,5 @@
1
+ ### Changed
2
+ - Minimum `abstractcore` optional dependency increased to `>=2.13.10` so Runtime picks up AbstractCore's async/sync text-generation output-selector parity in addition to the public output-selector contract.
3
+
4
+ ### Fixed
5
+ - AbstractCore output-selector imports now fail fast when an older local AbstractCore install exposes the helper module but does not include the 2.13.10 async parity fix.
@@ -4,7 +4,26 @@ from __future__ import annotations
4
4
 
5
5
  from typing import Any, Dict, List, Optional
6
6
 
7
+ _MIN_ABSTRACTCORE_VERSION = (2, 13, 10)
8
+ _MIN_ABSTRACTCORE_VERSION_TEXT = "2.13.10"
9
+
10
+
11
+ def _version_tuple(value: str) -> tuple[int, int, int]:
12
+ parts: list[int] = []
13
+ for raw in str(value or "").split(".")[:3]:
14
+ digits = []
15
+ for char in raw:
16
+ if not char.isdigit():
17
+ break
18
+ digits.append(char)
19
+ parts.append(int("".join(digits) or "0"))
20
+ while len(parts) < 3:
21
+ parts.append(0)
22
+ return parts[0], parts[1], parts[2]
23
+
24
+
7
25
  try:
26
+ from abstractcore.utils.version import __version__ as _abstractcore_version
8
27
  from abstractcore.core.output_specs import (
9
28
  is_output_request,
10
29
  normalize_output_spec,
@@ -15,10 +34,16 @@ try:
15
34
  )
16
35
  except ImportError as exc: # pragma: no cover - import-time dependency guard
17
36
  raise ImportError(
18
- "abstractruntime.integrations.abstractcore requires abstractcore>=2.13.9 "
37
+ f"abstractruntime.integrations.abstractcore requires abstractcore>={_MIN_ABSTRACTCORE_VERSION_TEXT} "
19
38
  "for the public output selector contract."
20
39
  ) from exc
21
40
 
41
+ if _version_tuple(_abstractcore_version) < _MIN_ABSTRACTCORE_VERSION: # pragma: no cover - environment guard
42
+ raise ImportError(
43
+ f"abstractruntime.integrations.abstractcore requires abstractcore>={_MIN_ABSTRACTCORE_VERSION_TEXT} "
44
+ f"for async/sync output-selector parity; found abstractcore {_abstractcore_version}."
45
+ )
46
+
22
47
 
23
48
  def is_abstractcore_output_request(output: Any) -> bool:
24
49
  """Return True when `output` is AbstractCore's multimodal output selector."""
@@ -15,7 +15,9 @@ from abstractruntime.integrations.abstractcore.llm_client import (
15
15
  )
16
16
  from abstractruntime.integrations.abstractcore.output_specs import (
17
17
  is_abstractcore_output_request,
18
+ normalize_output_specs_for_runtime,
18
19
  output_request_has_generated_media,
20
+ output_request_has_non_text_result,
19
21
  )
20
22
  from abstractruntime.storage.artifacts import InMemoryArtifactStore
21
23
  from abstractruntime.storage.in_memory import InMemoryLedgerStore, InMemoryRunStore
@@ -243,7 +245,12 @@ def test_llm_call_generated_media_requires_artifact_store() -> None:
243
245
 
244
246
 
245
247
  def test_runtime_output_selector_adapter_delegates_to_public_abstractcore_contract() -> None:
246
- from abstractcore.core.output_specs import is_output_request, output_has_generated_media
248
+ from abstractcore.core.output_specs import (
249
+ is_output_request,
250
+ normalize_output_specs,
251
+ output_has_generated_media,
252
+ output_requires_non_chat_dispatch,
253
+ )
247
254
 
248
255
  cases = [
249
256
  "text",
@@ -251,6 +258,7 @@ def test_runtime_output_selector_adapter_delegates_to_public_abstractcore_contra
251
258
  {"modality": "audio"},
252
259
  {"modality": "voice"},
253
260
  {"task": "tts"},
261
+ {"task": "text_generation"},
254
262
  {"task": "image_edit"},
255
263
  [{"modality": "text"}, {"modality": "image"}],
256
264
  "json",
@@ -260,7 +268,12 @@ def test_runtime_output_selector_adapter_delegates_to_public_abstractcore_contra
260
268
  for case in cases:
261
269
  assert is_abstractcore_output_request(case) is is_output_request(case)
262
270
 
271
+ text_generation = {"task": "text_generation"}
272
+ assert normalize_output_specs_for_runtime(text_generation) == normalize_output_specs(text_generation)
263
273
  assert output_request_has_generated_media("image") is output_has_generated_media("image")
274
+ assert output_request_has_generated_media(text_generation) is False
275
+ assert output_request_has_non_text_result(text_generation) is output_requires_non_chat_dispatch(text_generation)
276
+ assert output_request_has_non_text_result(text_generation) is False
264
277
  assert output_request_has_generated_media({"task": "voice_clone"}) is False
265
278
 
266
279
 
@@ -27,7 +27,8 @@ def test_runtime_exposes_abstractcore_and_worker_extras() -> None:
27
27
  assert "[project.optional-dependencies]" in text
28
28
  assert "abstractcore = [" in text
29
29
  assert "mcp-worker = [" in text
30
+ assert '"abstractcore>=2.13.10"' in text
31
+ assert '"abstractcore[media,openai,vision,voice,audio]>=2.13.10"' in text
30
32
 
31
33
  worker_block = _extract_optional_dependency_block(text, key="mcp-worker")
32
- assert "abstractcore[tools]" in worker_block
33
-
34
+ assert '"abstractcore[tools]>=2.13.10"' in worker_block
@@ -1,6 +0,0 @@
1
- ### Changed
2
- - Minimum `abstractcore` optional dependency increased to `>=2.13.9` so Runtime can use AbstractCore's public output-selector contract instead of mirroring provider-private multimodal selector logic.
3
- - Runtime's AbstractCore output-spec adapter now delegates selector detection, normalization, generated-media detection, non-chat dispatch detection, and runtime metadata stripping to `abstractcore.core.output_specs`.
4
-
5
- ### Fixed
6
- - Explicit `voice_clone` output specs no longer require a Runtime `ArtifactStore` before dispatch because AbstractCore exposes them as generated resources rather than binary media outputs.
File without changes