AbstractRuntime 0.4.7__tar.gz → 0.4.8__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 (295) hide show
  1. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/CHANGELOG.md +14 -0
  2. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/PKG-INFO +21 -8
  3. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/README.md +8 -3
  4. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/api.md +1 -1
  5. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/architecture.md +1 -1
  6. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/proposed/2026-05-08_runtime_gateway_env_namespace_cleanup.md +4 -4
  7. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/proposed/2026-05-08_runtime_gateway_install_boundary.md +23 -12
  8. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/getting-started.md +1 -1
  9. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/integrations/abstractcore.md +2 -2
  10. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/limits.md +1 -1
  11. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/proposal.md +1 -1
  12. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/provenance.md +1 -1
  13. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/pyproject.toml +21 -5
  14. abstractruntime-0.4.8/release-notes.md +11 -0
  15. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_packaging_extras.py +18 -8
  16. abstractruntime-0.4.7/release-notes.md +0 -11
  17. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/.github/workflows/ci.yml +0 -0
  18. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/.github/workflows/release.yml +0 -0
  19. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/.gitignore +0 -0
  20. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/ACKNOWLEDGMENTS.md +0 -0
  21. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/CONTRIBUTING.md +0 -0
  22. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/LICENSE +0 -0
  23. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/ROADMAP.md +0 -0
  24. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/SECURITY.md +0 -0
  25. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/README.md +0 -0
  26. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  27. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  28. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  29. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/adr/README.md +0 -0
  30. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/README.md +0 -0
  31. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  32. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  33. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/003_wait_primitives.md +0 -0
  34. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  35. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  36. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  37. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  38. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/009_artifact_store.md +0 -0
  39. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  40. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  41. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  42. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  43. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  44. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  45. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  46. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  47. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  48. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  49. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  50. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  51. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/004_tests.md +0 -0
  52. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  53. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  54. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  55. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  56. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/README.md +0 -0
  57. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  58. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  59. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  60. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/planned/015_agent_integration_improvements.md +0 -0
  61. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  62. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  63. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/evidence.md +0 -0
  64. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/faq.md +0 -0
  65. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/manual_testing.md +0 -0
  66. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/mcp-worker.md +0 -0
  67. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/snapshots.md +0 -0
  68. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/tools-comms.md +0 -0
  69. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/docs/workflow-bundles.md +0 -0
  70. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/emails.config.example.yaml +0 -0
  71. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/examples/01_hello_world.py +0 -0
  72. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/examples/02_ask_user.py +0 -0
  73. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/examples/03_wait_until.py +0 -0
  74. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/examples/04_multi_step.py +0 -0
  75. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/examples/05_persistence.py +0 -0
  76. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/examples/06_llm_integration.py +0 -0
  77. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/examples/07_react_agent.py +0 -0
  78. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/examples/README.md +0 -0
  79. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/llms-full.txt +0 -0
  80. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/llms.txt +0 -0
  81. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/mkdocs.yml +0 -0
  82. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/pytest.ini +0 -0
  83. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/__init__.py +0 -0
  84. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/core/__init__.py +0 -0
  85. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/core/config.py +0 -0
  86. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/core/event_keys.py +0 -0
  87. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/core/models.py +0 -0
  88. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/core/policy.py +0 -0
  89. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/core/runtime.py +0 -0
  90. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/core/spec.py +0 -0
  91. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/core/vars.py +0 -0
  92. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/evidence/__init__.py +0 -0
  93. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/evidence/recorder.py +0 -0
  94. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/history_bundle.py +0 -0
  95. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/identity/__init__.py +0 -0
  96. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/identity/fingerprint.py +0 -0
  97. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/__init__.py +0 -0
  98. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  99. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  100. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  101. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  102. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  103. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  104. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
  105. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  106. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  107. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  108. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
  109. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  110. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  111. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  112. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  113. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  114. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  115. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/memory/__init__.py +0 -0
  116. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/memory/active_context.py +0 -0
  117. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/memory/active_memory.py +0 -0
  118. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/memory/compaction.py +0 -0
  119. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/memory/kg_packets.py +0 -0
  120. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/memory/memact_composer.py +0 -0
  121. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/memory/recall_levels.py +0 -0
  122. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/memory/token_budget.py +0 -0
  123. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/rendering/__init__.py +0 -0
  124. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  125. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/rendering/json_stringify.py +0 -0
  126. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/scheduler/__init__.py +0 -0
  127. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/scheduler/convenience.py +0 -0
  128. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/scheduler/registry.py +0 -0
  129. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/scheduler/scheduler.py +0 -0
  130. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/__init__.py +0 -0
  131. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/artifacts.py +0 -0
  132. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/base.py +0 -0
  133. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/commands.py +0 -0
  134. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/in_memory.py +0 -0
  135. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/json_files.py +0 -0
  136. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/ledger_chain.py +0 -0
  137. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/observable.py +0 -0
  138. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/offloading.py +0 -0
  139. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/snapshots.py +0 -0
  140. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/storage/sqlite.py +0 -0
  141. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  142. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  143. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  144. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  145. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  146. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  147. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  148. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  149. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  150. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  151. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  152. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
  153. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  154. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  155. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  156. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  157. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  158. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
  159. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  160. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  161. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  162. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/workflow_bundle/models.py +0 -0
  163. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  164. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  165. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  166. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/README.md +0 -0
  167. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/conftest.py +0 -0
  168. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_active_context_policy.py +0 -0
  169. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_active_memory.py +0 -0
  170. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_answer_user_effect.py +0 -0
  171. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_artifacts.py +0 -0
  172. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_chat_summarizer_integration.py +0 -0
  173. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_command_store.py +0 -0
  174. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_compaction_helpers.py +0 -0
  175. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_control_adapter_while.py +0 -0
  176. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_default_tools_comms_gating.py +0 -0
  177. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_default_tools_include_skim_files.py +0 -0
  178. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_default_tools_include_skim_folders.py +0 -0
  179. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_default_tools_search_files_executor.py +0 -0
  180. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_durable_toolsets.py +0 -0
  181. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  182. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_emit_event_without_workflow_registry.py +0 -0
  183. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_evidence_recorder.py +0 -0
  184. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  185. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_integration_abstractcore.py +0 -0
  186. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_integrations_abstractcore.py +0 -0
  187. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_json_file_run_store_children_index.py +0 -0
  188. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_jsonl_ledger_recovery.py +0 -0
  189. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_kg_learn_and_recall_contract.py +0 -0
  190. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_ledger_chain.py +0 -0
  191. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_ledger_subscription.py +0 -0
  192. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_media_artifact_refs.py +0 -0
  193. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  194. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  195. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_requires_prompt.py +0 -0
  196. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_response_schema_normalization.py +0 -0
  197. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_structured_output_fallback.py +0 -0
  198. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  199. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  200. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  201. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_client_media_artifacts.py +0 -0
  202. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_client_system_context.py +0 -0
  203. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_llm_client_tool_call_parsing.py +0 -0
  204. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  205. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_mcp_remote_tool_executor.py +0 -0
  206. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_mcp_worker_logging.py +0 -0
  207. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_mcp_worker_security.py +0 -0
  208. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_mcp_worker_stdio.py +0 -0
  209. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memact_composer_from_kg_result.py +0 -0
  210. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  211. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_kg_packets.py +0 -0
  212. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  213. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  214. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  215. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  216. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_note_effect.py +0 -0
  217. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_query_effect.py +0 -0
  218. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_query_rich_filters.py +0 -0
  219. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  220. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_memory_tag_effect.py +0 -0
  221. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_mlx_generation_serialization.py +0 -0
  222. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_multimodal_abstractcore_integration.py +0 -0
  223. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_offloading.py +0 -0
  224. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_pause_resume.py +0 -0
  225. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_prompt_cache_modules.py +0 -0
  226. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_queryable_run_store.py +0 -0
  227. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  228. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_real_integration.py +0 -0
  229. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_recall_levels_policy.py +0 -0
  230. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_remote_llm_client.py +0 -0
  231. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_rendering_agent_trace_report.py +0 -0
  232. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_rendering_json_stringify.py +0 -0
  233. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_retry_idempotency.py +0 -0
  234. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_run_history_bundle.py +0 -0
  235. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  236. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_runtime_install_boundary.py +0 -0
  237. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  238. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_runtime_node_traces.py +0 -0
  239. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  240. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_scheduler.py +0 -0
  241. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  242. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_snapshots.py +0 -0
  243. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_sqlite_ledger_store.py +0 -0
  244. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_start_subworkflow_async_wait.py +0 -0
  245. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  246. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  247. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_structured_output_schema_enum.py +0 -0
  248. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_subworkflow.py +0 -0
  249. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_terminal_effect_completion.py +0 -0
  250. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  251. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  252. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_approval_executor.py +0 -0
  253. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_approval_resume_executes.py +0 -0
  254. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_calls_idempotency_keys.py +0 -0
  255. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_executor_argument_sanitization.py +0 -0
  256. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_executor_error_output_detection.py +0 -0
  257. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_executor_filename_alias.py +0 -0
  258. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  259. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_executor_read_file_aliases.py +0 -0
  260. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_executor_timeout.py +0 -0
  261. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_tool_wait_allowlist_safety.py +0 -0
  262. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_trace_context_propagation.py +0 -0
  263. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_vars_query_effect.py +0 -0
  264. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  265. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  266. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  267. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  268. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  269. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  270. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_memact_compose_node.py +0 -0
  271. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  272. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  273. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  274. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_add_message_builtin.py +0 -0
  275. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  276. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_call_tool_node.py +0 -0
  277. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_compiler_basic.py +0 -0
  278. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  279. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_get_element_node.py +0 -0
  280. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_get_random_element_node.py +0 -0
  281. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_has_tools_builtin.py +0 -0
  282. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  283. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  284. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_make_object_node.py +0 -0
  285. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  286. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_memory_source_pins.py +0 -0
  287. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_prompt_only.py +0 -0
  288. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_random_nodes.py +0 -0
  289. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_string_contains_replace.py +0 -0
  290. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_visualflow_tool_parameters_node.py +0 -0
  291. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_wait_event_prompt_metadata.py +0 -0
  292. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_workflow_bundle_registry.py +0 -0
  293. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  294. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  295. {abstractruntime-0.4.7 → abstractruntime-0.4.8}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.8] - 2026-05-08
11
+
12
+ ### Changed
13
+ - Minimum `abstractcore` optional dependency increased to `>=2.13.12`, and the
14
+ semantics floor increased to `abstractsemantics>=0.0.3`.
15
+ - Added explicit hardware-profile cascade extras:
16
+ `abstractruntime[apple]`, `abstractruntime[gpu]`,
17
+ `abstractruntime[all-apple]`, and `abstractruntime[all-gpu]`.
18
+
19
+ ### Notes
20
+ - Runtime still owns durable execution, not local model engines. These extras
21
+ delegate to the matching AbstractCore profile so Gateway and root aggregate
22
+ installs can compose a single profile vocabulary.
23
+
10
24
  ## [0.4.7] - 2026-05-08
11
25
 
12
26
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AbstractRuntime
3
- Version: 0.4.7
3
+ Version: 0.4.8
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
@@ -20,17 +20,25 @@ Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Programming Language :: Python :: 3.13
22
22
  Requires-Python: >=3.10
23
- Requires-Dist: abstractsemantics>=0.0.2
23
+ Requires-Dist: abstractsemantics>=0.0.3
24
24
  Provides-Extra: abstractcore
25
- Requires-Dist: abstractcore>=2.13.11; extra == 'abstractcore'
25
+ Requires-Dist: abstractcore>=2.13.12; extra == 'abstractcore'
26
+ Provides-Extra: all-apple
27
+ Requires-Dist: abstractcore[all-apple]>=2.13.12; extra == 'all-apple'
28
+ Provides-Extra: all-gpu
29
+ Requires-Dist: abstractcore[all-gpu]>=2.13.12; extra == 'all-gpu'
30
+ Provides-Extra: apple
31
+ Requires-Dist: abstractcore[apple]>=2.13.12; extra == 'apple'
26
32
  Provides-Extra: docs
27
33
  Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
28
34
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
29
35
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
36
+ Provides-Extra: gpu
37
+ Requires-Dist: abstractcore[gpu]>=2.13.12; extra == 'gpu'
30
38
  Provides-Extra: mcp-worker
31
- Requires-Dist: abstractcore[tools]>=2.13.11; extra == 'mcp-worker'
39
+ Requires-Dist: abstractcore[tools]>=2.13.12; extra == 'mcp-worker'
32
40
  Provides-Extra: multimodal
33
- Requires-Dist: abstractcore[audio,media,openai,vision,voice]>=2.13.11; extra == 'multimodal'
41
+ Requires-Dist: abstractcore[audio,media,openai,vision,voice]>=2.13.12; extra == 'multimodal'
34
42
  Provides-Extra: test
35
43
  Requires-Dist: pytest>=7.0.0; extra == 'test'
36
44
  Description-Content-Type: text/markdown
@@ -41,7 +49,7 @@ Description-Content-Type: text/markdown
41
49
 
42
50
  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
51
 
44
- **Version:** 0.4.7 • **Python:** 3.10+
52
+ **Version:** 0.4.8 • **Python:** 3.10+
45
53
 
46
54
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
47
55
 
@@ -75,7 +83,12 @@ AbstractCore integration (LLM + tools):
75
83
  pip install "abstractruntime[abstractcore]"
76
84
  ```
77
85
 
78
- The `abstractcore` extra installs AbstractCore 2.13.11 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool catalog, public output-selector contract, and async/sync text-generation output-selector parity are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
86
+ The `abstractcore` extra installs AbstractCore 2.13.12 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool catalog, public output-selector contract, and async/sync text-generation output-selector parity are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
87
+
88
+ Hardware profile cascades are available for native Python installs:
89
+ `abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
90
+ and `abstractruntime[all-gpu]` delegate to the matching AbstractCore profile
91
+ without making the runtime kernel itself hardware-specific.
79
92
 
80
93
  MCP worker entrypoint (default toolsets over stdio):
81
94
 
@@ -124,7 +137,7 @@ state = rt.resume(
124
137
  assert state.status.value == "completed"
125
138
  ```
126
139
 
127
- ## What’s included (v0.4.7)
140
+ ## What’s included (v0.4.8)
128
141
 
129
142
  Kernel (dependency-light):
130
143
  - 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.7 • **Python:** 3.10+
7
+ **Version:** 0.4.8 • **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,12 @@ AbstractCore integration (LLM + tools):
38
38
  pip install "abstractruntime[abstractcore]"
39
39
  ```
40
40
 
41
- The `abstractcore` extra installs AbstractCore 2.13.11 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool catalog, public output-selector contract, and async/sync text-generation output-selector parity are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
41
+ The `abstractcore` extra installs AbstractCore 2.13.12 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool catalog, public output-selector contract, and async/sync text-generation output-selector parity are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
42
+
43
+ Hardware profile cascades are available for native Python installs:
44
+ `abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
45
+ and `abstractruntime[all-gpu]` delegate to the matching AbstractCore profile
46
+ without making the runtime kernel itself hardware-specific.
42
47
 
43
48
  MCP worker entrypoint (default toolsets over stdio):
44
49
 
@@ -87,7 +92,7 @@ state = rt.resume(
87
92
  assert state.status.value == "completed"
88
93
  ```
89
94
 
90
- ## What’s included (v0.4.7)
95
+ ## What’s included (v0.4.8)
91
96
 
92
97
  Kernel (dependency-light):
93
98
  - 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.11 or newer).
179
+ Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.12 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-08
4
- > Version: 0.4.7
4
+ > Version: 0.4.8
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.
@@ -20,11 +20,11 @@ This matters for the two-entry-point design:
20
20
 
21
21
  ## Current Code Reality
22
22
 
23
- Runtime 0.4.7 largely carried out the install-boundary work:
23
+ Runtime 0.4.8 carries the current install-boundary work:
24
24
 
25
- - `pyproject.toml` now points Runtime AbstractCore extras at `abstractcore>=2.13.11`.
26
- - Runtime does not expose `apple`, `gpu`, `all-apple`, or `all-gpu` extras.
27
- - `tests/test_packaging_extras.py` verifies the Core floor and absence of fake hardware extras.
25
+ - `pyproject.toml` now points Runtime AbstractCore extras at `abstractcore>=2.13.12`.
26
+ - Runtime exposes `apple`, `gpu`, `all-apple`, and `all-gpu` as explicit Core profile cascades.
27
+ - `tests/test_packaging_extras.py` verifies the Core floor and profile cascade dependencies.
28
28
  - `tests/test_runtime_install_boundary.py` verifies the package root/kernel import boundary.
29
29
  - `tests/test_remote_llm_client.py` verifies remote AbstractCore clients do not inherit Gateway auth
30
30
  or provider-key env vars.
@@ -13,17 +13,19 @@ deployments pull in Core, agents, media, memory, tools, and provider SDKs.
13
13
 
14
14
  ## Current Code Reality
15
15
 
16
- - Runtime base depends on `abstractsemantics>=0.0.2`.
16
+ - Runtime base depends on `abstractsemantics>=0.0.3`.
17
17
  - AbstractCore integration is explicit through `abstractruntime[abstractcore]`.
18
18
  - Multimodal helper dependencies are explicit through `abstractruntime[multimodal]`.
19
19
  - Runtime does not directly depend on AbstractMemory; memory effects are integration/host-wired.
20
20
  - Runtime config contains run-level defaults and limits, not deployment auth or provider secrets.
21
- - As of the AbstractCore `2.13.11` release, Core exposes the canonical install-profile aliases
21
+ - As of the AbstractCore `2.13.12` release, Core exposes the canonical install-profile aliases
22
22
  `abstractcore[apple]`, `abstractcore[gpu]`, `abstractcore[all-apple]`, and
23
23
  `abstractcore[all-gpu]`, plus the released Voice/Vision catalog-capable floors
24
- `abstractvoice>=0.9.1` and `abstractvision>=0.3.2`.
25
- - Runtime's package metadata now points its AbstractCore extras at `abstractcore>=2.13.11`
24
+ `abstractvoice>=0.9.2` and `abstractvision>=0.3.3`.
25
+ - Runtime's package metadata now points its AbstractCore extras at `abstractcore>=2.13.12`
26
26
  for Gateway deployment alignment.
27
+ - Runtime exposes pass-through profile extras `apple`, `gpu`, `all-apple`, and `all-gpu` so
28
+ Gateway/root aggregate installs can cascade through Core without Runtime owning hardware engines.
27
29
 
28
30
  ## Problem
29
31
 
@@ -43,12 +45,13 @@ Profile guidance:
43
45
 
44
46
  - `abstractruntime`: durable kernel plus Semantics schema refs.
45
47
  - `abstractruntime[abstractcore]`: LLM/tool integration, with a floor of
46
- `abstractcore>=2.13.11` so Gateway receives the current Core server-auth, provider-key,
48
+ `abstractcore>=2.13.12` so Gateway receives the current Core server-auth, provider-key,
47
49
  generated-media, and capability-catalog contracts.
48
50
  - `abstractruntime[multimodal]`: Core media/capability helpers for generated images, voice/audio,
49
- and media inputs, also with `abstractcore>=2.13.11`.
50
- - Do not add `apple`, `gpu`, `all-apple`, or `all-gpu` to Runtime unless Runtime itself owns a
51
- hardware-specific dependency, which it currently does not.
51
+ and media inputs, also with `abstractcore>=2.13.12`.
52
+ - `abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`, and
53
+ `abstractruntime[all-gpu]`: pass-through Core profile cascades. Runtime still owns no
54
+ hardware-specific engine.
52
55
 
53
56
  Gateway should compose Runtime with the selected Core/capability/memory profile. The cascade belongs
54
57
  to Gateway, not Runtime.
@@ -93,11 +96,20 @@ Related package guidance remains:
93
96
  - Gateway should keep Runtime base as the dependency for minimal installs.
94
97
  - Gateway server profiles may choose `AbstractRuntime[multimodal]`.
95
98
  - Gateway Apple/GPU profiles should cascade through Core profile names such as
96
- `abstractcore[all-apple]` or `abstractcore[all-gpu]`; Runtime should remain unchanged.
99
+ `abstractcore[all-apple]` or `abstractcore[all-gpu]`.
97
100
  - Root `abstractframework` should update Runtime version floors to match the current Gateway/Core
98
101
  integration baseline.
99
102
  - AbstractAgent should tighten its Runtime dependency floor.
100
103
 
104
+ What changed in Runtime 0.4.8:
105
+
106
+ - `abstractruntime[abstractcore]`, `abstractruntime[multimodal]`, and
107
+ `abstractruntime[mcp-worker]` now require `abstractcore>=2.13.12`.
108
+ - `abstractruntime[apple]` and `abstractruntime[gpu]` delegate to matching Core local-engine
109
+ aliases.
110
+ - `abstractruntime[all-apple]` and `abstractruntime[all-gpu]` delegate to matching Core aggregate
111
+ profiles.
112
+
101
113
  ## Promotion Criteria
102
114
 
103
115
  Promoted because the Runtime release needed package metadata alignment, clearer install-boundary
@@ -111,7 +123,6 @@ docs, and regression tests for the Gateway handoff.
111
123
  - [x] Runtime LLM/media integration tests gated behind extras.
112
124
  - [x] Static import checks that Runtime kernel modules do not import Core, Vision, Voice, Memory, or
113
125
  Music.
114
- - [x] Package metadata test proving Runtime exposes no fake `apple`, `gpu`, `all-apple`, or `all-gpu`
115
- extras.
126
+ - [x] Package metadata test proving Runtime profile extras are explicit Core cascades.
116
127
  - [x] Package metadata test proving `abstractruntime[abstractcore]` and `abstractruntime[multimodal]`
117
- depend on `abstractcore>=2.13.11`.
128
+ depend on `abstractcore>=2.13.12`.
@@ -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.11 or newer, which matches the documented server auth, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool behavior, 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.
21
+ This installs AbstractCore 2.13.12 or newer, which matches the documented server auth, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool behavior, 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.11 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), generated-media contracts, capability catalog, prompt-cache control-plane endpoints, current tool catalog, AbstractCore's public output-selector contract, and async/sync text-generation output-selector parity.
19
+ This extra installs AbstractCore 2.13.12 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), generated-media contracts, capability catalog, prompt-cache control-plane endpoints, current tool catalog, 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.11`. 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.12`. 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.7, warnings are computed for:
65
+ As of v0.4.8, 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.7:
82
+ As of v0.4.8:
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.7)
11
+ ## What is implemented (v0.4.8)
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "AbstractRuntime"
7
- version = "0.4.7"
7
+ version = "0.4.8"
8
8
  description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -36,24 +36,40 @@ classifiers = [
36
36
  dependencies = [
37
37
  # Required to resolve stable structured-output schema refs like:
38
38
  # {"$ref":"abstractsemantics:kg_assertion_schema_v0"}
39
- "abstractsemantics>=0.0.2",
39
+ "abstractsemantics>=0.0.3",
40
40
  ]
41
41
 
42
42
  [project.optional-dependencies]
43
43
  # Enables `abstractruntime.integrations.abstractcore.*` imports.
44
44
  abstractcore = [
45
- "abstractcore>=2.13.11",
45
+ "abstractcore>=2.13.12",
46
+ ]
47
+
48
+ apple = [
49
+ "abstractcore[apple]>=2.13.12",
50
+ ]
51
+
52
+ gpu = [
53
+ "abstractcore[gpu]>=2.13.12",
54
+ ]
55
+
56
+ all-apple = [
57
+ "abstractcore[all-apple]>=2.13.12",
58
+ ]
59
+
60
+ all-gpu = [
61
+ "abstractcore[all-gpu]>=2.13.12",
46
62
  ]
47
63
 
48
64
  # Enables AbstractCore multimodal generation helpers with common OpenAI-backed
49
65
  # image/voice capability packages.
50
66
  multimodal = [
51
- "abstractcore[media,openai,vision,voice,audio]>=2.13.11",
67
+ "abstractcore[media,openai,vision,voice,audio]>=2.13.12",
52
68
  ]
53
69
 
54
70
  # Enables `abstractruntime-mcp-worker` with the default toolsets (includes bs4/lxml).
55
71
  mcp-worker = [
56
- "abstractcore[tools]>=2.13.11",
72
+ "abstractcore[tools]>=2.13.12",
57
73
  ]
58
74
 
59
75
  # CI/test dependencies. The workflow runs the basic contract suite plus focused
@@ -0,0 +1,11 @@
1
+ ### Changed
2
+ - Minimum `abstractcore` optional dependency increased to `>=2.13.12`, and the
3
+ semantics floor increased to `abstractsemantics>=0.0.3`.
4
+ - Added explicit hardware-profile cascade extras:
5
+ `abstractruntime[apple]`, `abstractruntime[gpu]`,
6
+ `abstractruntime[all-apple]`, and `abstractruntime[all-gpu]`.
7
+
8
+ ### Notes
9
+ - Runtime still owns durable execution, not local model engines. These extras
10
+ delegate to the matching AbstractCore profile so Gateway and root aggregate
11
+ installs can compose a single profile vocabulary.
@@ -46,20 +46,30 @@ def test_runtime_exposes_abstractcore_and_worker_extras_with_gateway_aligned_flo
46
46
  assert "[project.optional-dependencies]" in text
47
47
  assert "abstractcore = [" in text
48
48
  assert "mcp-worker = [" in text
49
- assert '"abstractcore>=2.13.11"' in text
50
- assert '"abstractcore[media,openai,vision,voice,audio]>=2.13.11"' in text
49
+ assert '"abstractcore>=2.13.12"' in text
50
+ assert '"abstractcore[media,openai,vision,voice,audio]>=2.13.12"' in text
51
51
 
52
52
  worker_block = _extract_optional_dependency_block(text, key="mcp-worker")
53
- assert '"abstractcore[tools]>=2.13.11"' in worker_block
53
+ assert '"abstractcore[tools]>=2.13.12"' in worker_block
54
54
 
55
55
 
56
- def test_runtime_does_not_expose_hardware_profile_extras() -> None:
56
+ def test_runtime_exposes_python_install_hardware_profile_cascades() -> None:
57
57
  pyproject = Path(__file__).resolve().parents[1] / "pyproject.toml"
58
58
  text = pyproject.read_text(encoding="utf-8")
59
59
 
60
60
  optional_keys = _extract_optional_dependency_keys(text)
61
61
 
62
- assert "apple" not in optional_keys
63
- assert "gpu" not in optional_keys
64
- assert "all-apple" not in optional_keys
65
- assert "all-gpu" not in optional_keys
62
+ assert "apple" in optional_keys
63
+ assert "gpu" in optional_keys
64
+ assert "all-apple" in optional_keys
65
+ assert "all-gpu" in optional_keys
66
+
67
+ apple_block = _extract_optional_dependency_block(text, key="apple")
68
+ gpu_block = _extract_optional_dependency_block(text, key="gpu")
69
+ all_apple_block = _extract_optional_dependency_block(text, key="all-apple")
70
+ all_gpu_block = _extract_optional_dependency_block(text, key="all-gpu")
71
+
72
+ assert '"abstractcore[apple]>=2.13.12"' in apple_block
73
+ assert '"abstractcore[gpu]>=2.13.12"' in gpu_block
74
+ assert '"abstractcore[all-apple]>=2.13.12"' in all_apple_block
75
+ assert '"abstractcore[all-gpu]>=2.13.12"' in all_gpu_block
@@ -1,11 +0,0 @@
1
- ### Changed
2
- - Minimum `abstractcore` optional dependency increased to `>=2.13.11` for the `abstractcore`, `multimodal`, and `mcp-worker` extras so Runtime aligns with the current Core server-auth, provider-key, generated-media, and capability-catalog contracts.
3
- - AbstractCore integration imports now fail fast when a stale local AbstractCore install is older than the 2.13.11 Gateway/Core deployment baseline.
4
- - Documentation now makes the Gateway handoff explicit: hosts choose Runtime plus the Core/capability/memory profile, pass Core server URLs/auth headers deliberately, and keep provider clients, auth objects, model handles, and sessions out of durable runtime state.
5
- - Runtime no longer reads Gateway-owned environment variables directly. Prompt-cache defaults use explicit Runtime state or `ABSTRACTRUNTIME_PROMPT_CACHE`, read-file attachment registration limits use explicit Runtime state/payload values or `ABSTRACTRUNTIME_MAX_ATTACHMENT_BYTES`, and workflow bundle registries use shared/framework or explicit directories.
6
-
7
- ### Testing
8
- - Added packaging boundary coverage proving Runtime exposes no fake hardware profile extras (`apple`, `gpu`, `all-apple`, `all-gpu`) and keeps the Core floors aligned.
9
- - Added import-boundary coverage proving the runtime kernel and package root do not import optional Core/Vision/Voice/Memory/Music stacks.
10
- - Added a remote client regression test proving Gateway auth/provider-key environment variables are not inherited as AbstractCore server auth or provider-key headers.
11
- - Added regression tests proving Gateway env vars alone do not enable prompt-cache keys, shrink attachment registration limits, or select workflow bundle registry directories.
File without changes