AbstractRuntime 0.4.25__tar.gz → 0.4.28__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 (360) hide show
  1. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/ACKNOWLEDGMENTS.md +3 -5
  2. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/CHANGELOG.md +46 -1
  3. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/CONTRIBUTING.md +3 -3
  4. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/PKG-INFO +46 -61
  5. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/README.md +33 -19
  6. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/README.md +2 -0
  7. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/api.md +34 -11
  8. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/architecture.md +7 -3
  9. abstractruntime-0.4.28/docs/artifacts.md +149 -0
  10. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/README.md +4 -1
  11. abstractruntime-0.4.28/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +41 -0
  12. abstractruntime-0.4.28/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +80 -0
  13. abstractruntime-0.4.28/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +67 -0
  14. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/faq.md +3 -3
  15. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/getting-started.md +10 -5
  16. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/integrations/abstractcore.md +64 -16
  17. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/mcp-worker.md +2 -3
  18. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/tools-comms.md +1 -1
  19. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/troubleshooting.md +7 -8
  20. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/examples/README.md +2 -2
  21. abstractruntime-0.4.28/llms-full.txt +4213 -0
  22. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/llms.txt +9 -6
  23. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/pyproject.toml +14 -54
  24. abstractruntime-0.4.28/release-notes.md +20 -0
  25. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/__init__.py +4 -0
  26. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/runtime.py +24 -0
  27. abstractruntime-0.4.28/src/abstractruntime/documents/__init__.py +5 -0
  28. abstractruntime-0.4.28/src/abstractruntime/documents/pdf.py +369 -0
  29. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/history_bundle.py +224 -25
  30. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +33 -0
  31. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +169 -5
  32. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +131 -3
  33. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/factory.py +4 -0
  34. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/llm_client.py +1627 -121
  35. abstractruntime-0.4.28/src/abstractruntime/integrations/abstractcore/media_subprocess.py +490 -0
  36. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/output_specs.py +2 -2
  37. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/run_facade.py +24 -0
  38. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +88 -91
  39. abstractruntime-0.4.28/src/abstractruntime/storage/artifacts.py +2008 -0
  40. abstractruntime-0.4.28/src/abstractruntime/utils/__init__.py +31 -0
  41. abstractruntime-0.4.28/src/abstractruntime/utils/file_filters.py +189 -0
  42. abstractruntime-0.4.28/src/abstractruntime/utils/workspace_paths.py +200 -0
  43. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +6 -0
  44. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/compiler.py +69 -3
  45. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/builtins.py +69 -0
  46. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/executor.py +751 -29
  47. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_abstractcore_discovery_facade.py +273 -1
  48. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_abstractcore_run_facade.py +199 -0
  49. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_artifacts.py +225 -0
  50. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_response_schema_normalization.py +28 -1
  51. abstractruntime-0.4.28/tests/test_llm_client_system_context.py +620 -0
  52. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_media_artifact_resolution.py +1 -0
  53. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_model_residency_control_plane.py +3 -0
  54. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_multimodal_abstractcore_integration.py +1185 -80
  55. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_packaging_extras.py +32 -19
  56. abstractruntime-0.4.28/tests/test_provider_endpoint_profile_resolution.py +283 -0
  57. abstractruntime-0.4.28/tests/test_run_history_bundle.py +462 -0
  58. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_runtime_llm_call_grounding_in_ledger.py +4 -2
  59. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_session_attachments_registry_and_open_tool.py +4 -8
  60. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_agent_output_context_includes_messages.py +70 -0
  61. abstractruntime-0.4.28/tests/test_visualflow_capability_routes_and_thinking.py +202 -0
  62. abstractruntime-0.4.28/tests/test_visualflow_edit_json_schema_node.py +105 -0
  63. abstractruntime-0.4.28/tests/test_visualflow_file_nodes_workspace.py +501 -0
  64. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_llm_call_multimodal_output.py +61 -0
  65. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_media_nodes.py +127 -0
  66. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_prompt_only.py +49 -0
  67. abstractruntime-0.4.28/tests/test_visualflow_schema_enum_switch.py +391 -0
  68. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_string_contains_replace.py +11 -1
  69. abstractruntime-0.4.28/tests/test_workspace_policy_mount_virtual_paths.py +137 -0
  70. abstractruntime-0.4.25/llms-full.txt +0 -427
  71. abstractruntime-0.4.25/release-notes.md +0 -9
  72. abstractruntime-0.4.25/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -234
  73. abstractruntime-0.4.25/src/abstractruntime/storage/artifacts.py +0 -674
  74. abstractruntime-0.4.25/tests/test_llm_client_system_context.py +0 -275
  75. abstractruntime-0.4.25/tests/test_run_history_bundle.py +0 -178
  76. abstractruntime-0.4.25/tests/test_workspace_policy_mount_virtual_paths.py +0 -56
  77. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/.github/workflows/ci.yml +0 -0
  78. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/.github/workflows/release.yml +0 -0
  79. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/.gitignore +0 -0
  80. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/CODE_OF_CONDUCT.md +0 -0
  81. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/LICENSE +0 -0
  82. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/ROADMAP.md +0 -0
  83. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/SECURITY.md +0 -0
  84. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  85. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  86. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  87. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  88. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  89. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  90. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  91. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/adr/README.md +0 -0
  92. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  93. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  94. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  95. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  96. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  97. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  98. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  99. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  100. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/003_wait_primitives.md +0 -0
  101. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  102. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  103. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  104. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  105. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  106. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/009_artifact_store.md +0 -0
  107. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  108. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  109. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  110. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  111. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  112. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  113. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  114. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  115. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  116. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  117. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  118. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  119. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  120. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  121. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  122. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  123. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  124. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  125. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  126. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  127. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  128. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  129. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  130. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/004_tests.md +0 -0
  131. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  132. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  133. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  134. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  135. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/README.md +0 -0
  136. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  137. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  138. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  139. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  140. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  141. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  142. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  143. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  144. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  145. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/evidence.md +0 -0
  146. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/limits.md +0 -0
  147. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/manual_testing.md +0 -0
  148. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/proposal.md +0 -0
  149. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/provenance.md +0 -0
  150. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/snapshots.md +0 -0
  151. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/docs/workflow-bundles.md +0 -0
  152. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/emails.config.example.yaml +0 -0
  153. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/examples/01_hello_world.py +0 -0
  154. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/examples/02_ask_user.py +0 -0
  155. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/examples/03_wait_until.py +0 -0
  156. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/examples/04_multi_step.py +0 -0
  157. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/examples/05_persistence.py +0 -0
  158. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/examples/06_llm_integration.py +0 -0
  159. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/examples/07_react_agent.py +0 -0
  160. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/mkdocs.yml +0 -0
  161. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/pytest.ini +0 -0
  162. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/__init__.py +0 -0
  163. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/config.py +0 -0
  164. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/event_keys.py +0 -0
  165. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/models.py +0 -0
  166. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/policy.py +0 -0
  167. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/run_lifecycle.py +0 -0
  168. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/spec.py +0 -0
  169. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/core/vars.py +0 -0
  170. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/evidence/__init__.py +0 -0
  171. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/evidence/recorder.py +0 -0
  172. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/identity/__init__.py +0 -0
  173. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/identity/fingerprint.py +0 -0
  174. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/__init__.py +0 -0
  175. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  176. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  177. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  178. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  179. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  180. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  181. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  182. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  183. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  184. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  185. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  186. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  187. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  188. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  189. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  190. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/memory/__init__.py +0 -0
  191. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/memory/active_context.py +0 -0
  192. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/memory/active_memory.py +0 -0
  193. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/memory/compaction.py +0 -0
  194. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/memory/kg_packets.py +0 -0
  195. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/memory/memact_composer.py +0 -0
  196. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/memory/recall_levels.py +0 -0
  197. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/memory/token_budget.py +0 -0
  198. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/rendering/__init__.py +0 -0
  199. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  200. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/rendering/json_stringify.py +0 -0
  201. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/__init__.py +0 -0
  202. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/convenience.py +0 -0
  203. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/registry.py +0 -0
  204. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/scheduler.py +0 -0
  205. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/__init__.py +0 -0
  206. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/base.py +0 -0
  207. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/commands.py +0 -0
  208. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/in_memory.py +0 -0
  209. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/json_files.py +0 -0
  210. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/ledger_chain.py +0 -0
  211. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/observable.py +0 -0
  212. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/offloading.py +0 -0
  213. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/snapshots.py +0 -0
  214. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/storage/sqlite.py +0 -0
  215. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  216. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  217. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  218. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  219. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  220. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  221. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  222. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  223. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  224. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  225. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  226. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  227. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  228. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  229. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  230. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  231. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  232. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  233. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/models.py +0 -0
  234. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  235. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  236. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  237. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/README.md +0 -0
  238. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/conftest.py +0 -0
  239. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_abstractcore_comms_facade.py +0 -0
  240. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_abstractcore_host_facade.py +0 -0
  241. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_abstractcore_telegram_facade.py +0 -0
  242. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_active_context_policy.py +0 -0
  243. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_active_memory.py +0 -0
  244. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_answer_user_effect.py +0 -0
  245. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_chat_summarizer_integration.py +0 -0
  246. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_command_store.py +0 -0
  247. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_compaction_helpers.py +0 -0
  248. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_control_adapter_while.py +0 -0
  249. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_default_tools_comms_gating.py +0 -0
  250. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_default_tools_include_skim_files.py +0 -0
  251. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_default_tools_include_skim_folders.py +0 -0
  252. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_default_tools_search_files_executor.py +0 -0
  253. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_durable_toolsets.py +0 -0
  254. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  255. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_emit_event_without_workflow_registry.py +0 -0
  256. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_evidence_recorder.py +0 -0
  257. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  258. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_integration_abstractcore.py +0 -0
  259. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_integrations_abstractcore.py +0 -0
  260. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_json_file_run_store_children_index.py +0 -0
  261. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_jsonl_ledger_recovery.py +0 -0
  262. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_kg_learn_and_recall_contract.py +0 -0
  263. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_ledger_chain.py +0 -0
  264. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_ledger_subscription.py +0 -0
  265. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_media_artifact_refs.py +0 -0
  266. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  267. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  268. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_requires_prompt.py +0 -0
  269. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_structured_output_fallback.py +0 -0
  270. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  271. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  272. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  273. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_client_media_artifacts.py +0 -0
  274. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_llm_client_tool_call_parsing.py +0 -0
  275. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  276. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_mcp_remote_tool_executor.py +0 -0
  277. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_mcp_worker_logging.py +0 -0
  278. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_mcp_worker_security.py +0 -0
  279. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_mcp_worker_stdio.py +0 -0
  280. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memact_composer_from_kg_result.py +0 -0
  281. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  282. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_kg_packets.py +0 -0
  283. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  284. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  285. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  286. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  287. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_note_effect.py +0 -0
  288. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_query_effect.py +0 -0
  289. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_query_rich_filters.py +0 -0
  290. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  291. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_memory_tag_effect.py +0 -0
  292. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_mlx_generation_serialization.py +0 -0
  293. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_offloading.py +0 -0
  294. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_pause_resume.py +0 -0
  295. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_prompt_cache_export_import.py +0 -0
  296. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_prompt_cache_modules.py +0 -0
  297. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_queryable_run_store.py +0 -0
  298. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  299. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_real_integration.py +0 -0
  300. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_recall_levels_policy.py +0 -0
  301. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_remote_llm_client.py +0 -0
  302. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_rendering_agent_trace_report.py +0 -0
  303. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_rendering_json_stringify.py +0 -0
  304. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_retry_idempotency.py +0 -0
  305. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  306. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_runtime_effect_invocation_trace.py +0 -0
  307. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_runtime_install_boundary.py +0 -0
  308. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_runtime_node_traces.py +0 -0
  309. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  310. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_scheduler.py +0 -0
  311. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_snapshots.py +0 -0
  312. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_sqlite_ledger_store.py +0 -0
  313. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_start_subworkflow_async_wait.py +0 -0
  314. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  315. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  316. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_storage_deletion.py +0 -0
  317. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_structured_output_schema_enum.py +0 -0
  318. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_subworkflow.py +0 -0
  319. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_terminal_effect_completion.py +0 -0
  320. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  321. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  322. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_approval_executor.py +0 -0
  323. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_approval_resume_executes.py +0 -0
  324. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_calls_idempotency_keys.py +0 -0
  325. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_executor_argument_sanitization.py +0 -0
  326. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_executor_error_output_detection.py +0 -0
  327. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_executor_filename_alias.py +0 -0
  328. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  329. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_executor_read_file_aliases.py +0 -0
  330. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_executor_timeout.py +0 -0
  331. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_tool_wait_allowlist_safety.py +0 -0
  332. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_trace_context_propagation.py +0 -0
  333. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_vars_query_effect.py +0 -0
  334. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  335. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  336. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  337. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  338. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  339. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_memact_compose_node.py +0 -0
  340. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  341. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  342. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  343. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_add_message_builtin.py +0 -0
  344. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  345. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_call_tool_node.py +0 -0
  346. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_compiler_basic.py +0 -0
  347. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  348. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_get_element_node.py +0 -0
  349. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_get_random_element_node.py +0 -0
  350. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_has_tools_builtin.py +0 -0
  351. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  352. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_make_object_node.py +0 -0
  353. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  354. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_memory_source_pins.py +0 -0
  355. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_random_nodes.py +0 -0
  356. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_visualflow_tool_parameters_node.py +0 -0
  357. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_wait_event_prompt_metadata.py +0 -0
  358. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_workflow_bundle_registry.py +0 -0
  359. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  360. {abstractruntime-0.4.25 → abstractruntime-0.4.28}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
@@ -10,12 +10,10 @@ The canonical dependency list lives in `pyproject.toml`.
10
10
  - **abstractsemantics** (`>=0.0.3`) — structured schema registry support (declared in `pyproject.toml`, used in `src/abstractruntime/integrations/abstractmemory/effect_handlers.py` and VisualFlow execution wiring).
11
11
  - **AbstractMemory** (`>=0.2.6`) — TripleStore models and store contract used by Runtime's `MEMORY_KG_*` effects. Durable/vector backend dependencies such as LanceDB remain selected by hosts.
12
12
 
13
- ## Optional integrations (extras)
14
-
15
- Installed only when you opt in to extras:
16
- - **abstractcore** (`>=2.13.12`) — LLM + tools integration used by `abstractruntime[abstractcore]` (declared in `pyproject.toml`, implementation under `src/abstractruntime/integrations/abstractcore/*`, docs: `docs/integrations/abstractcore.md`).
13
+ ## Runtime integrations
14
+ - **abstractcore** (`>=2.13.31`) — LLM, tools, media, and capability integration used by the base `abstractruntime` install (declared in `pyproject.toml`, implementation under `src/abstractruntime/integrations/abstractcore/*`, docs: `docs/integrations/abstractcore.md`).
17
15
  - The AbstractCore integration uses **httpx** for remote mode (`src/abstractruntime/integrations/abstractcore/llm_client.py`) and **pydantic** for structured validation (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`). These are provided by AbstractCore’s dependency set.
18
- - **abstractcore[tools]** (`>=2.13.12`) — toolchain extra used by `abstractruntime[mcp-worker]` (declared in `pyproject.toml`) and intended to include HTML parsing dependencies (see comments in `pyproject.toml`).
16
+ - **abstractcore[tools]** (`>=2.13.31`) — toolchain extra used by the base Runtime and `abstractruntime-mcp-worker` entry point (declared in `pyproject.toml`) and intended to include HTML parsing dependencies (see comments in `pyproject.toml`).
19
17
  - **RestrictedPython** (optional) — used for sandboxed execution of VisualFlow “Code” nodes when available (`src/abstractruntime/visualflow_compiler/visual/code_executor.py`).
20
18
 
21
19
  ## Build & test tooling
@@ -7,6 +7,48 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.28] - 2026-06-06
11
+
12
+ ### Added
13
+ - VisualFlow `read_pdf` and `write_pdf` document nodes. `read_pdf` extracts PDF text/metadata with `pypdf`; `write_pdf` renders text or Markdown-style content to real PDF bytes with `reportlab` while keeping run state JSON-safe.
14
+ - Runtime discovery now exposes installed compatible vision adapters through `list_vision_adapters(...)`.
15
+ - Runtime's local/remote image and video media helpers now preserve task-specific batch generation controls (`count` / `n`, `seeds`) and ordered `lora_adapters`, and VisualFlow media nodes now lower those fields for image generation, image edit, text-to-video, and image-to-video.
16
+
17
+ ### Changed
18
+ - Runtime's base dependency path no longer selects AbstractCore's media extra or direct PyMuPDF/PyMuPDF4LLM/PyMuPDF-layout packages for VisualFlow PDF support.
19
+ - Raised the AbstractCore dependency floor to `abstractcore>=2.13.37`, matching the released Core/Vision adapter, batch-generation, and media-parameter contract used by Runtime's base and hardware profiles.
20
+ - Forwarded newer Core/Vision controls such as `guidance_2`, `flow_shift`, and image-upscaler parameters through generated-media execution.
21
+ - The per-turn `<runtime_metadata>` prompt envelope is now temporal-only by default (`local_datetime` plus a country-free `display`). Full grounding remains in result metadata (`runtime_grounding`); operators can opt fields back into the prompt with `ABSTRACTRUNTIME_GROUNDING_PROMPT_FIELDS` (comma-separated subset of `local_datetime,timezone,country,user,display`).
22
+ - When the runtime injects a `<runtime_metadata>` envelope into the user turn, it now also appends a stable "RUNTIME GROUNDING" contract to the system prompt explaining that the envelope is machine context, not a user language/locale preference.
23
+
24
+ ### Fixed
25
+ - Markdown-to-PDF rendering now handles ATX heading levels 1 through 6, preventing deeper headings such as `####` from appearing as literal paragraph text in generated PDFs.
26
+ - VisualFlow LLM Call and Agent structured outputs now expose the parsed object on the `data` output while preserving the existing textual `response` output.
27
+ - VisualFlow LLM Call nodes now preserve inline `resp_schema` / `response_schema` constraints when provider and model are left on Auto, so Gateway/Core default routing still receives a structured-output `response_model`.
28
+ - VisualFlow `answer_user` lowering now always emits a string `message` payload, preventing connected-but-null message inputs from creating invalid `ANSWER_USER` effects.
29
+ - Structured-output field descriptions from JSON Schema now survive Runtime's Pydantic response-model conversion, so providers receive the same guidance authored in Flow.
30
+ - Local subprocess media execution now supports task-compatible image edit and image upscaling inputs under the same durable image/video contract as in-process Runtime media calls.
31
+ - Runtime now ships its own workspace-path and file-filter helper modules instead of importing unreleased AbstractCore internals, so published installs and release CI use the same supported dependency surface.
32
+
33
+ ## [0.4.27] - 2026-06-03
34
+
35
+ ### Changed
36
+ - Raised the AbstractCore dependency floor to `abstractcore>=2.13.32` so Runtime hosts inherit provider endpoint profiles, route-specific multimodal defaults, and updated audio-understanding model metadata.
37
+ - Updated AbstractCore discovery integration to expose Gateway/Core capability defaults, provider endpoint profiles, and route-specific media catalogs to thin clients.
38
+
39
+ ### Fixed
40
+ - LLM and generated-media execution now resolves Gateway/Core default provider and model selections when VisualFlow nodes leave provider/model on Auto.
41
+ - Media artifact resolution and VisualFlow generated-media calls now preserve uploaded artifacts and progress callbacks across Runtime/AbstractCore boundaries.
42
+
43
+ ## [0.4.26] - 2026-05-31
44
+
45
+ ### Changed
46
+ - Moved AbstractCore remote/tool/media capability integration and the MCP worker dependency set into the base `pip install abstractruntime` profile. Runtime now exposes only the base, `abstractruntime[apple]`, and `abstractruntime[gpu]` user install profiles for functionality vs. local-inferencer selection; the `abstractcore`, `multimodal`, `mcp-worker`, `all-apple`, and `all-gpu` extras are no longer part of the supported install surface.
47
+ - Raised the AbstractCore dependency floor to `abstractcore>=2.13.31` so Runtime installs inherit the latest remote-light media and Wan A14B vision contracts.
48
+
49
+ ### Fixed
50
+ - Local text-to-video and image-to-video media-only calls now run in an isolated subprocess, preserving progress callbacks while preventing native MLX/Metal video failures from killing the Gateway/Runtime parent process.
51
+
10
52
  ## [0.4.25] - 2026-05-29
11
53
 
12
54
  ### Added
@@ -570,7 +612,10 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
570
612
 
571
613
  Initial development version with basic proof-of-concept features.
572
614
 
573
- [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.25...HEAD
615
+ [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.28...HEAD
616
+ [0.4.28]: https://github.com/lpalbou/abstractruntime/compare/v0.4.27...v0.4.28
617
+ [0.4.27]: https://github.com/lpalbou/abstractruntime/compare/v0.4.26...v0.4.27
618
+ [0.4.26]: https://github.com/lpalbou/abstractruntime/compare/v0.4.25...v0.4.26
574
619
  [0.4.25]: https://github.com/lpalbou/abstractruntime/compare/v0.4.24...v0.4.25
575
620
  [0.4.24]: https://github.com/lpalbou/abstractruntime/compare/v0.4.23...v0.4.24
576
621
  [0.4.23]: https://github.com/lpalbou/abstractruntime/compare/v0.4.22...v0.4.23
@@ -16,8 +16,8 @@ python -m venv .venv
16
16
  source .venv/bin/activate
17
17
  python -m pip install -U pip
18
18
 
19
- # Full dev install (kernel + optional integrations used by tests/examples)
20
- python -m pip install -e ".[abstractcore,mcp-worker]"
19
+ # Full dev install (runtime + docs/test tooling)
20
+ python -m pip install -e ".[test,docs]"
21
21
 
22
22
  python -m pytest -q
23
23
  ```
@@ -30,7 +30,7 @@ If you cloned **only** this repo (without the AbstractFramework workspace), make
30
30
  - Core kernel (durable semantics): `src/abstractruntime/core/`
31
31
  - Durability backends: `src/abstractruntime/storage/`
32
32
  - Driver loop (in-process): `src/abstractruntime/scheduler/`
33
- - Optional integrations (extras): `src/abstractruntime/integrations/`
33
+ - Runtime integrations: `src/abstractruntime/integrations/`
34
34
  - Tests: `tests/`
35
35
 
36
36
  Docs entrypoints:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AbstractRuntime
3
- Version: 0.4.25
3
+ Version: 0.4.28
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,57 +20,28 @@ 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: abstractcore[audio,music,remote,tools,vision,voice]>=2.13.37
23
24
  Requires-Dist: abstractmemory>=0.2.6
24
25
  Requires-Dist: abstractsemantics>=0.0.3
25
- Provides-Extra: abstractcore
26
- Requires-Dist: abstractcore>=2.13.30; extra == 'abstractcore'
27
- Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'abstractcore'
28
- Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'abstractcore'
29
- Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'abstractcore'
30
- Provides-Extra: all-apple
31
- Requires-Dist: abstractcore[all-apple]>=2.13.30; extra == 'all-apple'
32
- Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'all-apple'
33
- Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'all-apple'
34
- Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'all-apple'
35
- Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'all-apple'
36
- Provides-Extra: all-gpu
37
- Requires-Dist: abstractcore[all-gpu]>=2.13.30; extra == 'all-gpu'
38
- Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'all-gpu'
39
- Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'all-gpu'
40
- Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'all-gpu'
41
- Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'all-gpu'
26
+ Requires-Dist: anyio<5.0.0,>=4.12.1
27
+ Requires-Dist: httpx<1.0.0,>=0.28.1
28
+ Requires-Dist: openai<2.0.0,>=1.109.1
29
+ Requires-Dist: pandas<3.0.0,>=1.0.0
30
+ Requires-Dist: pillow<13.0.0,>=10.0.0
31
+ Requires-Dist: pypdf<7.0.0,>=6.0.0
32
+ Requires-Dist: python-pptx<2.0.0,>=1.0.2
33
+ Requires-Dist: reportlab<5.0.0,>=4.0.0
34
+ Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
42
35
  Provides-Extra: apple
43
- Requires-Dist: abstractcore[apple]>=2.13.30; extra == 'apple'
44
- Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'apple'
45
- Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'apple'
46
- Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'apple'
36
+ Requires-Dist: abstractcore[all-apple]>=2.13.37; extra == 'apple'
47
37
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
48
38
  Provides-Extra: docs
49
39
  Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
50
40
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
51
41
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
52
42
  Provides-Extra: gpu
53
- Requires-Dist: abstractcore[gpu]>=2.13.30; extra == 'gpu'
54
- Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'gpu'
55
- Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'gpu'
56
- Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'gpu'
43
+ Requires-Dist: abstractcore[all-gpu]>=2.13.37; extra == 'gpu'
57
44
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'gpu'
58
- Provides-Extra: mcp-worker
59
- Requires-Dist: abstractcore[tools]>=2.13.30; extra == 'mcp-worker'
60
- Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'mcp-worker'
61
- Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'mcp-worker'
62
- Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'mcp-worker'
63
- Provides-Extra: multimodal
64
- Requires-Dist: abstractcore[audio,music,remote,vision,voice]>=2.13.30; extra == 'multimodal'
65
- Requires-Dist: anyio<5.0.0,>=4.12.1; extra == 'multimodal'
66
- Requires-Dist: httpx<1.0.0,>=0.28.1; extra == 'multimodal'
67
- Requires-Dist: openai<2.0.0,>=1.109.1; extra == 'multimodal'
68
- Requires-Dist: pandas<3.0.0,>=1.0.0; extra == 'multimodal'
69
- Requires-Dist: pillow<13.0.0,>=10.0.0; extra == 'multimodal'
70
- Requires-Dist: pymupdf-layout<2.0.0,>=1.26.6; extra == 'multimodal'
71
- Requires-Dist: pymupdf4llm<1.0.0,>=0.0.20; extra == 'multimodal'
72
- Requires-Dist: python-pptx<2.0.0,>=1.0.2; extra == 'multimodal'
73
- Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32; extra == 'multimodal'
74
45
  Provides-Extra: test
75
46
  Requires-Dist: pytest>=7.0.0; extra == 'test'
76
47
  Description-Content-Type: text/markdown
@@ -81,7 +52,7 @@ Description-Content-Type: text/markdown
81
52
 
82
53
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
83
54
 
84
- **Version:** 0.4.25 • **Python:** 3.10+
55
+ **Version:** 0.4.28 • **Python:** 3.10+
85
56
 
86
57
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
87
58
 
@@ -103,31 +74,34 @@ flowchart LR
103
74
 
104
75
  ## Install
105
76
 
106
- Core runtime:
77
+ Remote-light runtime:
107
78
 
108
79
  ```bash
109
80
  pip install abstractruntime
110
81
  ```
111
82
 
112
- AbstractCore integration (LLM + tools):
83
+ The base install includes AbstractCore 2.13.37 or newer with remote provider,
84
+ tool, vision, voice, audio, and music integration, plus the
85
+ `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
86
+ default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
87
+ sentence-transformer embeddings are not selected unless you choose a hardware
88
+ profile or another package-specific local extra.
113
89
 
114
- ```bash
115
- pip install "abstractruntime[abstractcore]"
116
- ```
117
-
118
- The `abstractcore` extra installs AbstractCore 2.13.30 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, task-aware model residency for text/image/video/TTS/STT, video generation endpoints, and the public local vision-cache catalog helper used by Runtime discovery remain aligned. Use `abstractruntime[multimodal]` when you need common media dependencies and capability plugins (installs `abstractcore[remote,vision,voice,audio,music]>=2.13.30`, including `abstractmusic>=0.1.12`).
90
+ VisualFlow PDF document nodes use permissive dependencies in Runtime's base
91
+ install: `Read PDF` extracts text and metadata with `pypdf`, and `Write PDF`
92
+ renders text or Markdown-style report content to real PDF bytes with
93
+ `reportlab`.
119
94
 
120
- Hardware profile cascades are available for native Python installs:
121
- `abstractruntime[apple]`, `abstractruntime[gpu]`, `abstractruntime[all-apple]`,
122
- and `abstractruntime[all-gpu]` delegate to the matching AbstractCore profile
123
- without making the runtime kernel itself hardware-specific.
124
-
125
- MCP worker entrypoint (default toolsets over stdio):
95
+ Native Python hardware profiles add local inferencer stacks:
126
96
 
127
97
  ```bash
128
- pip install "abstractruntime[mcp-worker]"
98
+ pip install "abstractruntime[apple]"
99
+ pip install "abstractruntime[gpu]"
129
100
  ```
130
101
 
102
+ `abstractruntime[apple]` delegates to AbstractCore's native Apple aggregate;
103
+ `abstractruntime[gpu]` delegates to AbstractCore's GPU aggregate.
104
+
131
105
  ## Quick start (pause + resume)
132
106
 
133
107
  ```python
@@ -169,9 +143,9 @@ state = rt.resume(
169
143
  assert state.status.value == "completed"
170
144
  ```
171
145
 
172
- ## What’s included (v0.4.25)
146
+ ## What’s included (v0.4.26)
173
147
 
174
- Kernel (dependency-light):
148
+ Kernel (import-light):
175
149
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
176
150
  - durable execution: `Runtime.start/tick/resume` (`src/abstractruntime/core/runtime.py`)
177
151
  - durable waits/events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
@@ -190,9 +164,20 @@ Drivers + distribution:
190
164
  - scheduler: `create_scheduled_runtime()` (`src/abstractruntime/scheduler/*`)
191
165
  - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
192
166
  - VisualFlow multi-entry execution lowering for fan-in routes and per-entry input overrides (`docs/workflow-bundles.md`)
167
+ - VisualFlow LLM Call and Agent nodes propagate Core generation params such as
168
+ `thinking` through Runtime effects. Provider Models nodes can apply Core
169
+ `capability_route` filters so run-time model discovery matches Gateway/Flow
170
+ authoring.
171
+ - VisualFlow image/video nodes and Runtime media helpers preserve task-specific
172
+ Core media controls, including `count`/`n`, `seeds`, ordered
173
+ `lora_adapters`, and video `flow_shift`, while keeping provider/model/task
174
+ truth in AbstractCore and AbstractVision.
175
+ - VisualFlow structured LLM/Agent results preserve `response` as text and expose
176
+ the schema-conformant object on `data`, so Break Object and Switch can consume
177
+ fields without reparsing the response string.
193
178
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
194
179
 
195
- Optional integrations:
180
+ Runtime-owned integrations:
196
181
  - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
197
182
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
198
183
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
@@ -256,7 +241,7 @@ sr = create_scheduled_runtime(
256
241
  python -m venv .venv
257
242
  source .venv/bin/activate
258
243
  python -m pip install -U pip
259
- python -m pip install -e ".[abstractcore,mcp-worker,test,docs]"
244
+ python -m pip install -e ".[test,docs]"
260
245
  python -m pytest -q
261
246
  ```
262
247
 
@@ -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.25 • **Python:** 3.10+
7
+ **Version:** 0.4.28 • **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
 
@@ -26,31 +26,34 @@ flowchart LR
26
26
 
27
27
  ## Install
28
28
 
29
- Core runtime:
29
+ Remote-light runtime:
30
30
 
31
31
  ```bash
32
32
  pip install abstractruntime
33
33
  ```
34
34
 
35
- AbstractCore integration (LLM + tools):
35
+ The base install includes AbstractCore 2.13.37 or newer with remote provider,
36
+ tool, vision, voice, audio, and music integration, plus the
37
+ `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
38
+ default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
39
+ sentence-transformer embeddings are not selected unless you choose a hardware
40
+ profile or another package-specific local extra.
36
41
 
37
- ```bash
38
- pip install "abstractruntime[abstractcore]"
39
- ```
40
-
41
- The `abstractcore` extra installs AbstractCore 2.13.30 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, durable bloc prompt-cache helpers, bindings, lifecycle operations, public output-selector contract, async/sync text-generation output-selector parity, task-aware model residency for text/image/video/TTS/STT, video generation endpoints, and the public local vision-cache catalog helper used by Runtime discovery remain aligned. Use `abstractruntime[multimodal]` when you need common media dependencies and capability plugins (installs `abstractcore[remote,vision,voice,audio,music]>=2.13.30`, including `abstractmusic>=0.1.12`).
42
+ VisualFlow PDF document nodes use permissive dependencies in Runtime's base
43
+ install: `Read PDF` extracts text and metadata with `pypdf`, and `Write PDF`
44
+ renders text or Markdown-style report content to real PDF bytes with
45
+ `reportlab`.
42
46
 
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.
47
-
48
- MCP worker entrypoint (default toolsets over stdio):
47
+ Native Python hardware profiles add local inferencer stacks:
49
48
 
50
49
  ```bash
51
- pip install "abstractruntime[mcp-worker]"
50
+ pip install "abstractruntime[apple]"
51
+ pip install "abstractruntime[gpu]"
52
52
  ```
53
53
 
54
+ `abstractruntime[apple]` delegates to AbstractCore's native Apple aggregate;
55
+ `abstractruntime[gpu]` delegates to AbstractCore's GPU aggregate.
56
+
54
57
  ## Quick start (pause + resume)
55
58
 
56
59
  ```python
@@ -92,9 +95,9 @@ state = rt.resume(
92
95
  assert state.status.value == "completed"
93
96
  ```
94
97
 
95
- ## What’s included (v0.4.25)
98
+ ## What’s included (v0.4.26)
96
99
 
97
- Kernel (dependency-light):
100
+ Kernel (import-light):
98
101
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
99
102
  - durable execution: `Runtime.start/tick/resume` (`src/abstractruntime/core/runtime.py`)
100
103
  - durable waits/events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
@@ -113,9 +116,20 @@ Drivers + distribution:
113
116
  - scheduler: `create_scheduled_runtime()` (`src/abstractruntime/scheduler/*`)
114
117
  - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
115
118
  - VisualFlow multi-entry execution lowering for fan-in routes and per-entry input overrides (`docs/workflow-bundles.md`)
119
+ - VisualFlow LLM Call and Agent nodes propagate Core generation params such as
120
+ `thinking` through Runtime effects. Provider Models nodes can apply Core
121
+ `capability_route` filters so run-time model discovery matches Gateway/Flow
122
+ authoring.
123
+ - VisualFlow image/video nodes and Runtime media helpers preserve task-specific
124
+ Core media controls, including `count`/`n`, `seeds`, ordered
125
+ `lora_adapters`, and video `flow_shift`, while keeping provider/model/task
126
+ truth in AbstractCore and AbstractVision.
127
+ - VisualFlow structured LLM/Agent results preserve `response` as text and expose
128
+ the schema-conformant object on `data`, so Break Object and Switch can consume
129
+ fields without reparsing the response string.
116
130
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
117
131
 
118
- Optional integrations:
132
+ Runtime-owned integrations:
119
133
  - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
120
134
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
121
135
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
@@ -179,7 +193,7 @@ sr = create_scheduled_runtime(
179
193
  python -m venv .venv
180
194
  source .venv/bin/activate
181
195
  python -m pip install -U pip
182
- python -m pip install -e ".[abstractcore,mcp-worker,test,docs]"
196
+ python -m pip install -e ".[test,docs]"
183
197
  python -m pytest -q
184
198
  ```
185
199
 
@@ -26,8 +26,10 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
26
26
  - `faq.md` — common questions (recommended)
27
27
  - `troubleshooting.md` — symptom-oriented setup, runtime, and integration fixes
28
28
  - `manual_testing.md` — manual smoke tests and how to run the test suite
29
+ - `artifacts.md` — Runtime artifact identity, descriptors, provenance, catalog search, and access stats
29
30
  - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
30
31
  - `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
32
+ - `api.md#workflowbundles-flow-and-visualflow-distribution` — VisualFlow compiler APIs, media nodes, and PDF document nodes (`read_pdf` / `write_pdf`)
31
33
 
32
34
  ## Features (reference)
33
35
 
@@ -33,7 +33,7 @@ Scheduler convenience wrapper:
33
33
  from abstractruntime import create_scheduled_runtime
34
34
  ```
35
35
 
36
- Optional integration (requires `abstractruntime[abstractcore]`):
36
+ AbstractCore integration (included in the base `abstractruntime` install):
37
37
 
38
38
  ```python
39
39
  from abstractruntime.integrations.abstractcore import (
@@ -117,11 +117,17 @@ These APIs are exported at the package root (see `src/abstractruntime/__init__.p
117
117
  ## Artifacts (store by reference)
118
118
 
119
119
  Implementation: `src/abstractruntime/storage/artifacts.py`.
120
+ Deep dive: `artifacts.md`.
120
121
 
121
122
  Key types:
122
123
  - `ArtifactStore` (interface), `InMemoryArtifactStore`, `FileArtifactStore`
123
124
  - helpers: `artifact_ref(...)`, `resolve_artifact(...)`, `is_artifact_ref(...)`
124
125
 
126
+ The store keeps payload bytes out of run state and persists structured metadata:
127
+ - `ArtifactDescriptor` is the Runtime-owned descriptor used by Gateway and Observer. It separates `semantic_kind` such as `voice`, `music`, `sound`, or `image` from `render_kind` such as `audio`, `markdown`, `html`, or `json`, and can carry workflow/node/turn links, media facts, generation/provenance data, source refs, security, and action links.
128
+ - `ArtifactAccessStats` records explicit metadata/content/preview/download/export actions when HTTP or UI layers call `record_access(...)`. Plain `load(...)` and `get_metadata(...)` remain side-effect free.
129
+ - `search(...)`, `count(...)`, `facet_counts(...)`, and `stats(...)` provide metadata queries for host control planes. `FileArtifactStore` serves these from a repairable SQLite catalog when possible, including exact `total`, `total_bytes`, and requested facet counts without forcing Gateway/Observer to load every matching artifact.
130
+
125
131
  Artifacts are used by:
126
132
  - offloading wrappers (`src/abstractruntime/storage/offloading.py`)
127
133
  - evidence capture (`docs/evidence.md`, `src/abstractruntime/evidence/recorder.py`)
@@ -156,9 +162,23 @@ VisualFlow compiler helpers are available from `abstractruntime.visualflow_compi
156
162
  - `visual_to_flow(...)` lowers VisualFlow into the internal Flow IR.
157
163
  - `compile_visualflow(...)` and `compile_visualflow_tree(...)` compile VisualFlow JSON into executable `WorkflowSpec` objects.
158
164
 
159
- VisualFlow authoring note (media nodes):
160
- - Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
165
+ VisualFlow authoring note (media and document nodes):
166
+ - Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `upscale_image`, `image_upscale`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
161
167
  - Generated-media and transcription nodes lower to a durable `EffectType.LLM_CALL` with an `output` selector (for example `{"modality":"music","task":"music_generation"}`), while `listen_voice` lowers to `WAIT_EVENT`. Hosts should persist the authoring node type rather than pre-lowering to `llm_call`.
168
+ - Runtime also recognizes file/document nodes. `read_file` and `write_file`
169
+ handle UTF-8 text/JSON workspace paths. In Gateway-hosted runs, those paths
170
+ follow the shared canonical contract: `rel/path` for the main workspace root
171
+ and `mount_alias/rel/path` for approved mounts. `read_pdf` extracts text and
172
+ metadata from PDF paths with `pypdf`; `write_pdf` renders text or
173
+ Markdown-style content to real PDF bytes with `reportlab`; `list_folder_files`
174
+ enumerates workspace-scoped folders with family/extension filters;
175
+ `import_workspace_file` snapshots a workspace file into a durable artifact;
176
+ `read_artifact` projects saved file content back out as text/JSON/bounded
177
+ binary metadata; and `export_artifact` writes a durable artifact back to a
178
+ workspace path. PDF bytes are written to the workspace path and only
179
+ JSON-safe metadata/path values are stored in run state. In local Runtime-only
180
+ runs with no workspace scope, relative file-node paths still fall back to the
181
+ process working directory.
162
182
 
163
183
  Public bundle APIs are exported from `src/abstractruntime/workflow_bundle/__init__.py` and re-exported in `src/abstractruntime/__init__.py`:
164
184
  - open: `open_workflow_bundle(...)`
@@ -176,11 +196,11 @@ Implementation: `src/abstractruntime/history_bundle.py`.
176
196
 
177
197
  This produces a portable record of a run’s state + ledger + artifacts suitable for debugging/review.
178
198
 
179
- ## Optional integrations
199
+ ## Runtime-owned integrations
180
200
 
181
201
  ### AbstractCore (LLM + tools)
182
202
 
183
- Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.30 or newer).
203
+ Requires: `pip install abstractruntime` (AbstractCore 2.13.37 or newer is part of the base install).
184
204
 
185
205
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
186
206
 
@@ -193,11 +213,14 @@ Entry points:
193
213
  - public durable run facade: `AbstractCoreRunFacade`, `get_abstractcore_run_facade(...)` (`src/abstractruntime/integrations/abstractcore/run_facade.py`)
194
214
  - effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
195
215
  - tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
196
- - discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`)
216
+ - discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`, `list_vision_adapters`)
197
217
  - host-facade client delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `get_model_residency_capabilities`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
198
218
  - host-local prompt-cache export/import admin also lives on the host facade and client delegation layer (`list_prompt_cache_exports`, `prompt_cache_export`, `prompt_cache_import`) and is intentionally local-only
199
219
  - host-facade email helpers delegate to Runtime's host-local comms facade/export layer (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
200
- - run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
220
+ - run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `upscale_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
221
+ - task-specific image/video helpers preserve batch and adapter controls such as
222
+ `count`/`n`, `seeds`, ordered `lora_adapters`, and video `flow_shift`; local
223
+ subprocess isolation stays within the same public contract.
201
224
 
202
225
  `LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
203
226
  - `prompt`, `messages`, `system_prompt`, and convenience `text`
@@ -206,14 +229,14 @@ Entry points:
206
229
  - `params`: provider/model routing, generation controls, prompt-cache keys or `prompt_cache_binding`, structured-output schema options, and tracing metadata
207
230
 
208
231
  Multimodal support:
209
- - install `abstractruntime[multimodal]` for common AbstractCore media, vision, voice, audio, and music dependencies
232
+ - common remote-light AbstractCore media, vision, voice, audio, and music dependencies are part of the base Runtime install
210
233
  - local clients call AbstractCore's unified `generate(..., media=..., output=...)`
211
- - remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, text-to-video, image-to-video, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
234
+ - remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, image upscaling, text-to-video, image-to-video, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
212
235
  - remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
213
236
  - generated image/video/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
214
237
  - media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
215
- - optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; unsupported local media warmup for `image_generation`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, and `music_generation` reports `requires_long_lived_server=true`, and generated image/video tasks also report `execution_mode="local_one_shot_subprocess"`
216
- - Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected Core/capability install profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
238
+ - optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; unsupported local media warmup for `image_generation`, `image_upscale`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, and `music_generation` reports `requires_long_lived_server=true`, and generated image/video tasks also report `execution_mode="local_one_shot_subprocess"`
239
+ - Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected local-inference profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
217
240
 
218
241
  Prompt cache / cached sessions:
219
242
  - LLM clients expose cache control methods listed above for host-side preparation and inspection
@@ -1,7 +1,7 @@
1
1
  # AbstractRuntime — Architecture
2
2
 
3
- > Updated: 2026-05-23
4
- > Version: 0.4.24
3
+ > Updated: 2026-06-13
4
+ > Version: 0.4.28
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.
@@ -38,7 +38,7 @@ The boundary is intentionally narrow:
38
38
  - Provider sessions and prompt-cache objects are not runtime state. Runtime may carry stable cache keys, while AbstractCore clients/servers manage warm caches.
39
39
  - Hosts should use Runtime-owned AbstractCore facades for discovery snapshots, prompt-cache/model-residency control operations, and durable run-scoped media/comms child runs instead of reaching through private runtime attachments or importing Core internals directly.
40
40
  - Local execution can use richer AbstractCore capability plugins. Remote and hybrid execution map the common media cases to AbstractCore Server endpoints and OpenAI-compatible content arrays, while hybrid keeps tool execution local.
41
- - Gateway and other hosts compose Runtime with the desired Core/capability/memory profile. Runtime's base package includes the AbstractMemory contract but not backend extras such as LanceDB; hosts choose storage, embeddings, and readiness policy. Hardware profile extras such as `apple`, `gpu`, `all-apple`, and `all-gpu` cascade through AbstractCore when a host selects them.
41
+ - Gateway and other hosts compose Runtime with the desired memory and local-inference profile. Runtime's base package includes the AbstractMemory contract, AbstractCore remote/tool capability integration, Runtime-owned permissive PDF read/write support, and the MCP worker entry point, but not backend extras such as LanceDB, Core media document stacks, or local inferencer stacks. Hosts choose storage, embeddings, readiness policy, and whether to add `abstractruntime[apple]` or `abstractruntime[gpu]`.
42
42
  - Remote and hybrid clients use explicit Core server URLs and auth headers supplied by the host. Runtime does not read Gateway auth environment variables for provider/model/auth decisions or treat Gateway bearer tokens as Core server/provider credentials.
43
43
 
44
44
  This keeps the runtime usable by `../abstractgateway` and application layers such as `../abstractflow`, `../abstractassistant`, `../abstractobserver`, and `../abstractcode` without embedding provider-specific model logic in the durable kernel.
@@ -213,6 +213,10 @@ The scheduler is an in-process driver loop that resumes due waits and can delive
213
213
  AbstractRuntime includes a compiler and a portable bundle format:
214
214
  - VisualFlow compiler: `src/abstractruntime/visualflow_compiler/*` (VisualFlow JSON -> `WorkflowSpec`)
215
215
  - Multi-entry VisualFlow authoring routes are lowered into internal `join_exec` and `path_mux` nodes when a target has multiple incoming `exec-in` edges plus per-route input overrides. This keeps authoring JSON clean while making runtime behavior explicit and restart-safe. See `workflow-bundles.md` for the concrete metadata shape.
216
+ - VisualFlow document nodes include `read_pdf` and `write_pdf`. They use
217
+ workspace-scoped paths, keep PDF bytes out of checkpoints, and store only
218
+ JSON-safe extracted text, metadata, hashes, content types, and file paths in
219
+ node outputs.
216
220
  - WorkflowBundles (`.flow`): `src/abstractruntime/workflow_bundle/*` (manifest + flows + assets)
217
221
  - pack/unpack helpers: `pack_workflow_bundle(...)`, `open_workflow_bundle(...)`
218
222