AbstractRuntime 0.4.26__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.26 → abstractruntime-0.4.28}/CHANGELOG.md +36 -1
  2. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/PKG-INFO +25 -9
  3. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/README.md +19 -3
  4. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/README.md +2 -0
  5. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/api.md +30 -7
  6. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/architecture.md +7 -3
  7. abstractruntime-0.4.28/docs/artifacts.md +149 -0
  8. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/README.md +4 -1
  9. abstractruntime-0.4.28/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +41 -0
  10. abstractruntime-0.4.28/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +80 -0
  11. abstractruntime-0.4.28/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +67 -0
  12. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/faq.md +1 -1
  13. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/getting-started.md +2 -2
  14. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/integrations/abstractcore.md +55 -5
  15. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/troubleshooting.md +2 -2
  16. abstractruntime-0.4.28/llms-full.txt +4213 -0
  17. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/llms.txt +8 -5
  18. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/pyproject.toml +6 -6
  19. abstractruntime-0.4.28/release-notes.md +20 -0
  20. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/__init__.py +4 -0
  21. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/runtime.py +24 -0
  22. abstractruntime-0.4.28/src/abstractruntime/documents/__init__.py +5 -0
  23. abstractruntime-0.4.28/src/abstractruntime/documents/pdf.py +369 -0
  24. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/history_bundle.py +224 -25
  25. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +33 -0
  26. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +169 -5
  27. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +39 -5
  28. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/factory.py +4 -0
  29. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/llm_client.py +1426 -145
  30. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +168 -25
  31. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/output_specs.py +2 -2
  32. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/run_facade.py +24 -0
  33. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +88 -91
  34. abstractruntime-0.4.28/src/abstractruntime/storage/artifacts.py +2008 -0
  35. abstractruntime-0.4.28/src/abstractruntime/utils/__init__.py +31 -0
  36. abstractruntime-0.4.28/src/abstractruntime/utils/file_filters.py +189 -0
  37. abstractruntime-0.4.28/src/abstractruntime/utils/workspace_paths.py +200 -0
  38. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +6 -0
  39. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/compiler.py +69 -3
  40. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/builtins.py +69 -0
  41. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/executor.py +751 -29
  42. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_discovery_facade.py +273 -1
  43. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_run_facade.py +199 -0
  44. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_artifacts.py +225 -0
  45. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_response_schema_normalization.py +28 -1
  46. abstractruntime-0.4.28/tests/test_llm_client_system_context.py +620 -0
  47. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_media_artifact_resolution.py +1 -0
  48. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_model_residency_control_plane.py +3 -0
  49. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_multimodal_abstractcore_integration.py +1104 -88
  50. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_packaging_extras.py +18 -3
  51. abstractruntime-0.4.28/tests/test_provider_endpoint_profile_resolution.py +283 -0
  52. abstractruntime-0.4.28/tests/test_run_history_bundle.py +462 -0
  53. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_llm_call_grounding_in_ledger.py +4 -2
  54. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_session_attachments_registry_and_open_tool.py +4 -8
  55. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_output_context_includes_messages.py +70 -0
  56. abstractruntime-0.4.28/tests/test_visualflow_capability_routes_and_thinking.py +202 -0
  57. abstractruntime-0.4.28/tests/test_visualflow_edit_json_schema_node.py +105 -0
  58. abstractruntime-0.4.28/tests/test_visualflow_file_nodes_workspace.py +501 -0
  59. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_llm_call_multimodal_output.py +61 -0
  60. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_media_nodes.py +127 -0
  61. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_prompt_only.py +49 -0
  62. abstractruntime-0.4.28/tests/test_visualflow_schema_enum_switch.py +391 -0
  63. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_string_contains_replace.py +11 -1
  64. abstractruntime-0.4.28/tests/test_workspace_policy_mount_virtual_paths.py +137 -0
  65. abstractruntime-0.4.26/llms-full.txt +0 -428
  66. abstractruntime-0.4.26/release-notes.md +0 -6
  67. abstractruntime-0.4.26/src/abstractruntime/storage/artifacts.py +0 -674
  68. abstractruntime-0.4.26/tests/test_llm_client_system_context.py +0 -275
  69. abstractruntime-0.4.26/tests/test_provider_endpoint_profile_resolution.py +0 -130
  70. abstractruntime-0.4.26/tests/test_run_history_bundle.py +0 -178
  71. abstractruntime-0.4.26/tests/test_workspace_policy_mount_virtual_paths.py +0 -56
  72. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/.github/workflows/ci.yml +0 -0
  73. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/.github/workflows/release.yml +0 -0
  74. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/.gitignore +0 -0
  75. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/ACKNOWLEDGMENTS.md +0 -0
  76. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/CODE_OF_CONDUCT.md +0 -0
  77. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/CONTRIBUTING.md +0 -0
  78. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/LICENSE +0 -0
  79. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/ROADMAP.md +0 -0
  80. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/SECURITY.md +0 -0
  81. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  82. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  83. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  84. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  85. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  86. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  87. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  88. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/README.md +0 -0
  89. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  90. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  91. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  92. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  93. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  94. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  95. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  96. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  97. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/003_wait_primitives.md +0 -0
  98. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  99. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  100. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  101. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  102. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  103. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/009_artifact_store.md +0 -0
  104. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  105. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  106. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  107. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  108. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  109. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  110. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  111. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  112. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  113. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  114. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  115. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  116. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  117. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  118. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  119. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  120. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  121. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  122. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  123. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  124. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  125. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  126. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  127. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/004_tests.md +0 -0
  128. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  129. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  130. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  131. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  132. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/README.md +0 -0
  133. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  134. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  135. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  136. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  137. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  138. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  139. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  140. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  141. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  142. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/evidence.md +0 -0
  143. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/limits.md +0 -0
  144. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/manual_testing.md +0 -0
  145. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/mcp-worker.md +0 -0
  146. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/proposal.md +0 -0
  147. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/provenance.md +0 -0
  148. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/snapshots.md +0 -0
  149. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/tools-comms.md +0 -0
  150. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/workflow-bundles.md +0 -0
  151. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/emails.config.example.yaml +0 -0
  152. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/01_hello_world.py +0 -0
  153. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/02_ask_user.py +0 -0
  154. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/03_wait_until.py +0 -0
  155. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/04_multi_step.py +0 -0
  156. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/05_persistence.py +0 -0
  157. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/06_llm_integration.py +0 -0
  158. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/07_react_agent.py +0 -0
  159. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/README.md +0 -0
  160. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/mkdocs.yml +0 -0
  161. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/pytest.ini +0 -0
  162. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/__init__.py +0 -0
  163. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/config.py +0 -0
  164. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/event_keys.py +0 -0
  165. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/models.py +0 -0
  166. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/policy.py +0 -0
  167. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/run_lifecycle.py +0 -0
  168. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/spec.py +0 -0
  169. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/vars.py +0 -0
  170. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/evidence/__init__.py +0 -0
  171. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/evidence/recorder.py +0 -0
  172. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/identity/__init__.py +0 -0
  173. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/identity/fingerprint.py +0 -0
  174. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/__init__.py +0 -0
  175. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  176. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  177. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  178. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  179. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  180. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  181. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  182. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  183. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  184. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  185. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  186. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  187. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  188. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  189. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  190. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/__init__.py +0 -0
  191. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/active_context.py +0 -0
  192. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/active_memory.py +0 -0
  193. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/compaction.py +0 -0
  194. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/kg_packets.py +0 -0
  195. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/memact_composer.py +0 -0
  196. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/recall_levels.py +0 -0
  197. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/token_budget.py +0 -0
  198. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/rendering/__init__.py +0 -0
  199. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  200. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/rendering/json_stringify.py +0 -0
  201. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/__init__.py +0 -0
  202. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/convenience.py +0 -0
  203. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/registry.py +0 -0
  204. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/scheduler.py +0 -0
  205. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/__init__.py +0 -0
  206. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/base.py +0 -0
  207. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/commands.py +0 -0
  208. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/in_memory.py +0 -0
  209. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/json_files.py +0 -0
  210. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/ledger_chain.py +0 -0
  211. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/observable.py +0 -0
  212. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/offloading.py +0 -0
  213. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/snapshots.py +0 -0
  214. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/sqlite.py +0 -0
  215. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  216. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  217. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  218. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  219. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  220. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  221. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  222. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  223. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  224. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  225. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  226. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  227. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  228. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  229. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  230. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  231. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  232. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  233. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/models.py +0 -0
  234. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  235. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  236. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  237. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/README.md +0 -0
  238. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/conftest.py +0 -0
  239. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_comms_facade.py +0 -0
  240. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_host_facade.py +0 -0
  241. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_telegram_facade.py +0 -0
  242. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_active_context_policy.py +0 -0
  243. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_active_memory.py +0 -0
  244. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_answer_user_effect.py +0 -0
  245. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_chat_summarizer_integration.py +0 -0
  246. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_command_store.py +0 -0
  247. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_compaction_helpers.py +0 -0
  248. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_control_adapter_while.py +0 -0
  249. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_default_tools_comms_gating.py +0 -0
  250. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_default_tools_include_skim_files.py +0 -0
  251. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_default_tools_include_skim_folders.py +0 -0
  252. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_default_tools_search_files_executor.py +0 -0
  253. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_durable_toolsets.py +0 -0
  254. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  255. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_emit_event_without_workflow_registry.py +0 -0
  256. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_evidence_recorder.py +0 -0
  257. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  258. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_integration_abstractcore.py +0 -0
  259. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_integrations_abstractcore.py +0 -0
  260. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_json_file_run_store_children_index.py +0 -0
  261. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_jsonl_ledger_recovery.py +0 -0
  262. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_kg_learn_and_recall_contract.py +0 -0
  263. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_ledger_chain.py +0 -0
  264. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_ledger_subscription.py +0 -0
  265. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_media_artifact_refs.py +0 -0
  266. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  267. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  268. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_requires_prompt.py +0 -0
  269. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_structured_output_fallback.py +0 -0
  270. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  271. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  272. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  273. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_client_media_artifacts.py +0 -0
  274. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_client_tool_call_parsing.py +0 -0
  275. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  276. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mcp_remote_tool_executor.py +0 -0
  277. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mcp_worker_logging.py +0 -0
  278. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mcp_worker_security.py +0 -0
  279. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mcp_worker_stdio.py +0 -0
  280. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memact_composer_from_kg_result.py +0 -0
  281. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  282. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_packets.py +0 -0
  283. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  284. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  285. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  286. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  287. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_note_effect.py +0 -0
  288. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_query_effect.py +0 -0
  289. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_query_rich_filters.py +0 -0
  290. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  291. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_tag_effect.py +0 -0
  292. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mlx_generation_serialization.py +0 -0
  293. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_offloading.py +0 -0
  294. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_pause_resume.py +0 -0
  295. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_prompt_cache_export_import.py +0 -0
  296. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_prompt_cache_modules.py +0 -0
  297. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_queryable_run_store.py +0 -0
  298. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  299. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_real_integration.py +0 -0
  300. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_recall_levels_policy.py +0 -0
  301. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_remote_llm_client.py +0 -0
  302. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_rendering_agent_trace_report.py +0 -0
  303. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_rendering_json_stringify.py +0 -0
  304. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_retry_idempotency.py +0 -0
  305. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  306. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_effect_invocation_trace.py +0 -0
  307. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_install_boundary.py +0 -0
  308. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_node_traces.py +0 -0
  309. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  310. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_scheduler.py +0 -0
  311. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_snapshots.py +0 -0
  312. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_sqlite_ledger_store.py +0 -0
  313. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_start_subworkflow_async_wait.py +0 -0
  314. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  315. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  316. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_storage_deletion.py +0 -0
  317. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_structured_output_schema_enum.py +0 -0
  318. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_subworkflow.py +0 -0
  319. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_terminal_effect_completion.py +0 -0
  320. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  321. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  322. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_approval_executor.py +0 -0
  323. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_approval_resume_executes.py +0 -0
  324. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_calls_idempotency_keys.py +0 -0
  325. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_argument_sanitization.py +0 -0
  326. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_error_output_detection.py +0 -0
  327. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_filename_alias.py +0 -0
  328. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  329. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_read_file_aliases.py +0 -0
  330. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_timeout.py +0 -0
  331. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_wait_allowlist_safety.py +0 -0
  332. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_trace_context_propagation.py +0 -0
  333. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_vars_query_effect.py +0 -0
  334. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  335. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  336. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  337. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  338. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  339. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_memact_compose_node.py +0 -0
  340. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  341. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  342. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  343. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_add_message_builtin.py +0 -0
  344. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  345. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_call_tool_node.py +0 -0
  346. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_compiler_basic.py +0 -0
  347. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  348. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_get_element_node.py +0 -0
  349. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_get_random_element_node.py +0 -0
  350. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_has_tools_builtin.py +0 -0
  351. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  352. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_make_object_node.py +0 -0
  353. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  354. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_memory_source_pins.py +0 -0
  355. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_random_nodes.py +0 -0
  356. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_tool_parameters_node.py +0 -0
  357. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_wait_event_prompt_metadata.py +0 -0
  358. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_workflow_bundle_registry.py +0 -0
  359. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  360. {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
@@ -7,6 +7,39 @@ 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
+
10
43
  ## [0.4.26] - 2026-05-31
11
44
 
12
45
  ### Changed
@@ -579,7 +612,9 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
579
612
 
580
613
  Initial development version with basic proof-of-concept features.
581
614
 
582
- [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.26...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
583
618
  [0.4.26]: https://github.com/lpalbou/abstractruntime/compare/v0.4.25...v0.4.26
584
619
  [0.4.25]: https://github.com/lpalbou/abstractruntime/compare/v0.4.24...v0.4.25
585
620
  [0.4.24]: https://github.com/lpalbou/abstractruntime/compare/v0.4.23...v0.4.24
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AbstractRuntime
3
- Version: 0.4.26
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,7 +20,7 @@ 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,media,music,remote,tools,vision,voice]>=2.13.31
23
+ Requires-Dist: abstractcore[audio,music,remote,tools,vision,voice]>=2.13.37
24
24
  Requires-Dist: abstractmemory>=0.2.6
25
25
  Requires-Dist: abstractsemantics>=0.0.3
26
26
  Requires-Dist: anyio<5.0.0,>=4.12.1
@@ -28,19 +28,19 @@ Requires-Dist: httpx<1.0.0,>=0.28.1
28
28
  Requires-Dist: openai<2.0.0,>=1.109.1
29
29
  Requires-Dist: pandas<3.0.0,>=1.0.0
30
30
  Requires-Dist: pillow<13.0.0,>=10.0.0
31
- Requires-Dist: pymupdf-layout<2.0.0,>=1.26.6
32
- Requires-Dist: pymupdf4llm<1.0.0,>=0.0.20
31
+ Requires-Dist: pypdf<7.0.0,>=6.0.0
33
32
  Requires-Dist: python-pptx<2.0.0,>=1.0.2
33
+ Requires-Dist: reportlab<5.0.0,>=4.0.0
34
34
  Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
35
35
  Provides-Extra: apple
36
- Requires-Dist: abstractcore[all-apple]>=2.13.31; extra == 'apple'
36
+ Requires-Dist: abstractcore[all-apple]>=2.13.37; extra == 'apple'
37
37
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
38
38
  Provides-Extra: docs
39
39
  Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
40
40
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
41
41
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
42
42
  Provides-Extra: gpu
43
- Requires-Dist: abstractcore[all-gpu]>=2.13.31; extra == 'gpu'
43
+ Requires-Dist: abstractcore[all-gpu]>=2.13.37; extra == 'gpu'
44
44
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'gpu'
45
45
  Provides-Extra: test
46
46
  Requires-Dist: pytest>=7.0.0; extra == 'test'
@@ -52,7 +52,7 @@ Description-Content-Type: text/markdown
52
52
 
53
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.
54
54
 
55
- **Version:** 0.4.26 • **Python:** 3.10+
55
+ **Version:** 0.4.28 • **Python:** 3.10+
56
56
 
57
57
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
58
58
 
@@ -80,13 +80,18 @@ Remote-light runtime:
80
80
  pip install abstractruntime
81
81
  ```
82
82
 
83
- The base install includes AbstractCore 2.13.31 or newer with remote provider,
84
- tool, media, vision, voice, audio, and music integration, plus the
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
85
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
86
86
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
87
87
  sentence-transformer embeddings are not selected unless you choose a hardware
88
88
  profile or another package-specific local extra.
89
89
 
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`.
94
+
90
95
  Native Python hardware profiles add local inferencer stacks:
91
96
 
92
97
  ```bash
@@ -159,6 +164,17 @@ Drivers + distribution:
159
164
  - scheduler: `create_scheduled_runtime()` (`src/abstractruntime/scheduler/*`)
160
165
  - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
161
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.
162
178
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
163
179
 
164
180
  Runtime-owned integrations:
@@ -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.26 • **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
 
@@ -32,13 +32,18 @@ Remote-light runtime:
32
32
  pip install abstractruntime
33
33
  ```
34
34
 
35
- The base install includes AbstractCore 2.13.31 or newer with remote provider,
36
- tool, media, vision, voice, audio, and music integration, plus the
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
37
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
38
38
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
39
39
  sentence-transformer embeddings are not selected unless you choose a hardware
40
40
  profile or another package-specific local extra.
41
41
 
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`.
46
+
42
47
  Native Python hardware profiles add local inferencer stacks:
43
48
 
44
49
  ```bash
@@ -111,6 +116,17 @@ Drivers + distribution:
111
116
  - scheduler: `create_scheduled_runtime()` (`src/abstractruntime/scheduler/*`)
112
117
  - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
113
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.
114
130
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
115
131
 
116
132
  Runtime-owned integrations:
@@ -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
 
@@ -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(...)`
@@ -180,7 +200,7 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
180
200
 
181
201
  ### AbstractCore (LLM + tools)
182
202
 
183
- Requires: `pip install abstractruntime` (AbstractCore 2.13.31 or newer is part of the base install).
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`
@@ -208,11 +231,11 @@ Entry points:
208
231
  Multimodal support:
209
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"`
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"`
216
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:
@@ -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 memory and local-inference profile. Runtime's base package includes the AbstractMemory contract, AbstractCore remote/tool/media capability integration, and the MCP worker entry point, but not backend extras such as LanceDB or local inferencer stacks. Hosts choose storage, embeddings, readiness policy, and whether to add `abstractruntime[apple]` or `abstractruntime[gpu]`.
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
 
@@ -0,0 +1,149 @@
1
+ # Runtime artifacts
2
+
3
+ AbstractRuntime stores large payloads as artifacts so run state, ledger records,
4
+ and workflow outputs remain JSON-safe. Artifacts are the durable record for
5
+ files, generated media, tool evidence, exported history bundles, and other
6
+ payloads that should be referenced by id rather than embedded inline.
7
+
8
+ The implementation lives in `src/abstractruntime/storage/artifacts.py`.
9
+
10
+ ## File-like vocabulary boundary
11
+
12
+ Runtime artifacts are not the same thing as live filesystem paths:
13
+
14
+ - `Artifact`: a Runtime-owned durable payload safe to persist, search, reuse,
15
+ and pass between runs by reference.
16
+ - `Workspace File` / `Workspace Folder`: a server-side path capability under
17
+ Gateway/runtime workspace policy. These are path values, not durable payloads.
18
+ - `Local File` / `Local Folder`: a client-side intake source. In hosted/browser
19
+ mode they should be uploaded and normalized into artifacts before durable
20
+ execution.
21
+
22
+ Gateway/Flow product copy may say `Server File` / `Server Folder` when users
23
+ choose an origin, but Runtime stays anchored on artifact refs versus
24
+ workspace-scoped paths.
25
+
26
+ ## Artifact identity
27
+
28
+ An artifact has a stable `artifact_id`, a `blob_id` for content deduplication
29
+ when the backend supports it, and a `run_id` scope. JSON state and Gateway APIs
30
+ pass artifacts with refs such as:
31
+
32
+ ```json
33
+ {
34
+ "$artifact": "a7050ebc5c8330...",
35
+ "artifact_id": "a7050ebc5c8330...",
36
+ "run_id": "9e19bd6a-ba07-4c2e-86c6-94ec7ca0a373",
37
+ "content_type": "audio/wav",
38
+ "size_bytes": 5293012
39
+ }
40
+ ```
41
+
42
+ The ref is a pointer, not authorization. Hosts such as AbstractGateway are
43
+ responsible for deciding which principal may list or read an artifact.
44
+
45
+ ## Stored metadata
46
+
47
+ Runtime stores two metadata layers:
48
+
49
+ - `tags`: string fields for compatibility and simple lookups.
50
+ - `metadata`: structured JSON for producer-specific details.
51
+ - `descriptor`: a Runtime-owned `ArtifactDescriptor` that normalizes the fields
52
+ Gateway and Observer should use.
53
+
54
+ The descriptor separates display format from semantic meaning:
55
+
56
+ - `render_kind`: how the artifact should be rendered, such as `image`, `audio`,
57
+ `video`, `markdown`, `html`, `json`, `text`, or `document`.
58
+ - `semantic_kind`: what the artifact represents, such as `voice`, `music`,
59
+ `sound`, `transcript`, `evidence`, `workflow_snapshot`, or `image`.
60
+ - `classification_source`: whether the classification came from the producer,
61
+ runtime tags, MIME inference, or legacy fallback.
62
+
63
+ The descriptor can also carry `session_id`, `workflow_id`, `node_id`, `turn_id`,
64
+ `ledger_cursor`, `producer`, `generation`, `media`, `source_refs`, `links`,
65
+ `security`, and action metadata. Producer metadata may be sparse; consumers
66
+ should show missing fields as unavailable rather than guessing.
67
+
68
+ ## Generated media provenance
69
+
70
+ When generated media is produced through the Runtime AbstractCore integration
71
+ with output selectors, Runtime stores descriptor and metadata alongside the
72
+ bytes. Current generated outputs include image, video, voice/TTS, music, sound
73
+ or audio outputs, and transcription-style text outputs where the host route
74
+ stores a transcript artifact.
75
+
76
+ Generated-media descriptors record available producer facts:
77
+
78
+ - package/capability route, provider, model, backend, and runtime provider/model
79
+ when they differ;
80
+ - prompt or TTS text, requested format, output index, negative prompt, and
81
+ redacted generation parameters;
82
+ - source artifact refs for edit, image-to-video, cloned/reference voice, or
83
+ other source-media flows when provided;
84
+ - measured media facts such as duration, sample rate, dimensions, channels, or
85
+ frame counts when the store can inspect the bytes.
86
+
87
+ Runtime redacts obvious secret fields and bounds large metadata values. It does
88
+ not store raw provider requests as indexed descriptor fields.
89
+
90
+ Gateway or package producers that store artifacts outside the main Runtime
91
+ generated-media path should use `build_artifact_descriptor_payload(...)` from
92
+ `abstractruntime.storage.artifacts`. That helper applies the Runtime descriptor
93
+ schema, bounded secret-key redaction, and prompt/text sensitivity labels without
94
+ making Gateway invent a parallel descriptor contract.
95
+
96
+ ## Catalog and search
97
+
98
+ `InMemoryArtifactStore` and `FileArtifactStore` support:
99
+
100
+ - `store(...)`, `load(...)`, and `get_metadata(...)`;
101
+ - `update_metadata(...)` for descriptor or structured metadata enrichment;
102
+ - `search(...)` for bounded pages;
103
+ - `count(...)`, `facet_counts(...)`, and `stats(...)` for exact totals and
104
+ filter chips;
105
+ - `record_access(...)` for explicit metadata/content/preview/download/export
106
+ counters.
107
+
108
+ `FileArtifactStore` maintains a repairable SQLite catalog for descriptor fields,
109
+ time filters, exact counts, byte totals, and facets. The catalog is an index of
110
+ Runtime-owned artifact metadata; the payload bytes and metadata files remain the
111
+ source of truth.
112
+
113
+ Plain `load(...)` and `get_metadata(...)` are side-effect free. UI and HTTP
114
+ layers that want access statistics must call `record_access(...)` or use Gateway
115
+ content routes that label the action.
116
+
117
+ ## Gateway and Observer
118
+
119
+ AbstractGateway exposes Runtime artifacts through bounded HTTP APIs. Search
120
+ responses include `artifact_envelope_v1`, which projects Runtime descriptors,
121
+ media facts, access stats, and action links while preserving legacy row fields.
122
+ Gateway only forwards descriptor action links that are relative Gateway/UI
123
+ links; arbitrary external provider URLs should be represented as trace
124
+ availability or Gateway-owned trace records instead.
125
+
126
+ AbstractObserver renders Gateway envelopes. It should not infer canonical
127
+ artifact meaning from filenames or raw content except as a visible legacy
128
+ fallback. Use the Runtime tab for artifact inventory and the Observe tab for the
129
+ workflow/ledger narrative.
130
+
131
+ ## Retrieval boundaries
132
+
133
+ Artifact search answers questions about stored files and media by metadata,
134
+ scope, type, time, producer, and links back to runs. It is not a semantic memory
135
+ search system.
136
+
137
+ - Use the ledger for "what happened in this workflow?"
138
+ - Use artifact search for "what files/media exist and how were they produced?"
139
+ - Use AbstractMemory/KG retrieval for "what knowledge or relationships were
140
+ learned?"
141
+ - Use Gateway audit/provider links for system-level request traces when the
142
+ envelope reports them.
143
+
144
+ ## Limits
145
+
146
+ Legacy artifacts may only have MIME type and tags. Runtime projects them with
147
+ fallback descriptor fields so clients can still list and preview them, but
148
+ producer-level prompt/model/source provenance is only available for artifacts
149
+ created through descriptor-aware paths.
@@ -14,7 +14,7 @@ If you are new to the project, start with `../README.md` and `../architecture.md
14
14
 
15
15
  - Planned: 5
16
16
  - Proposed: 3
17
- - Completed: 30
17
+ - Completed: 33
18
18
  - Deprecated: 13
19
19
  - Recurrent: 0
20
20
 
@@ -70,6 +70,9 @@ If you are new to the project, start with `../README.md` and `../architecture.md
70
70
  | 0037 | `completed/0037_visualflow_generate_music_node_compiler_parity.md` |
71
71
  | 0039 | `completed/0039_runtime_music_structure_prompt_bool_contract.md` |
72
72
  | 0040 | `completed/0040_task_agnostic_local_residency_listing.md` |
73
+ | 0041 | `completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md` |
74
+ | 0042 | `completed/0042_core_vision_upscale_and_parameter_surface.md` |
75
+ | 0043 | `completed/0043_runtime_vision_adapter_and_batch_surface.md` |
73
76
 
74
77
  ## Planned
75
78
 
@@ -0,0 +1,41 @@
1
+ # Completed: Runtime hardware extras avoid nonpermissive document stacks
2
+
3
+ ## Metadata
4
+ - Created: 2026-06-05
5
+ - Status: Completed
6
+ - Completed: 2026-06-06
7
+
8
+ ## ADR status
9
+ - Governing ADRs: root `docs/adr/0029-permissive-dependency-and-licensing-policy.md`, root `docs/adr/0033-install-profiles-config-entrypoints-and-server-boundaries.md`
10
+ - ADR impact: None. This completes the Runtime-side enforcement of the existing permissive dependency and install-profile policies.
11
+
12
+ ## Context
13
+ Runtime's base VisualFlow PDF nodes use permissive dependencies:
14
+
15
+ - `pypdf` for PDF text and metadata extraction;
16
+ - `reportlab` for PDF writing.
17
+
18
+ The remaining risk was that Runtime `apple` and `gpu` extras delegated to Core aggregate profiles that previously pulled PyMuPDF-family packages. Core item `0805` moved the default Core PDF route to `pypdf` and isolated PyMuPDF-family packages behind the explicit `pdf-pymupdf-commercial` extra.
19
+
20
+ ## What changed
21
+ - Runtime remains versioned with mandatory `pypdf` and `reportlab` base dependencies, so light, Apple, and GPU installs all receive PDF read/write support.
22
+ - Runtime packaging tests now assert PyMuPDF-family packages are absent from the Runtime base, `apple`, and `gpu` profile definitions.
23
+ - Runtime packaging tests also inspect the sibling Core `all-apple` and `all-gpu` profiles in the monorepo and assert they contain `pypdf` but not PyMuPDF-family packages.
24
+ - The attachment/open test now creates a PDF through Runtime's ReportLab writer instead of PyMuPDF, proving the default route parses PDFs without the optional commercial backend.
25
+
26
+ ## Current code pointers
27
+ - `pyproject.toml`
28
+ - `src/abstractruntime/documents/pdf.py`
29
+ - `tests/test_packaging_extras.py`
30
+ - `tests/test_visualflow_file_nodes_workspace.py`
31
+ - `tests/test_session_attachments_registry_and_open_tool.py`
32
+
33
+ ## Validation
34
+ - `python -m pytest tests/test_visualflow_file_nodes_workspace.py tests/test_session_attachments_registry_and_open_tool.py::test_open_attachment_pdf_extracts_text_when_media_stack_available tests/test_packaging_extras.py -q`
35
+ - Result: 6 passed.
36
+
37
+ ## Completion report
38
+ Runtime hardware profile PDF dependency inheritance is now aligned with the permissive default policy. PyMuPDF remains possible only through Core's explicit opt-in extra; Runtime does not install it by default in base, Apple, or GPU profiles.
39
+
40
+ ## Residual follow-up
41
+ Core item `0806_pdf_images_tables_and_extraction_strategy.md` tracks richer image/table/OCR support. That work must keep capability reporting truthful and must not reintroduce PyMuPDF-family packages into default install profiles.
@@ -0,0 +1,80 @@
1
+ # 0042 Core Vision Upscale and Parameter Surface
2
+
3
+ ## Metadata
4
+ - Created: 2026-06-07
5
+ - Completed: 2026-06-07
6
+ - Status: Completed
7
+ - Owner: AbstractRuntime
8
+ - Origin: follow-up to AbstractCore and AbstractVision releases that added richer Vision/Core models, image upscaling, and generation controls.
9
+
10
+ ## ADR Status
11
+ - Governing ADRs:
12
+ - `docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md`
13
+ - `docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md`
14
+ - `docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md`
15
+ - ADR impact: none. This work applies the existing Runtime-owned execution and discovery boundary to the newly exposed Core/Vision surface.
16
+
17
+ ## Current Code Reality
18
+
19
+ - Runtime already exposes durable run-facade helpers for image generation, image edit, text-to-video, image-to-video, TTS, music, and STT.
20
+ - Runtime discovery already relays Core/Vision provider-model catalogs, but its local Vision task allowlist only accepts `text_to_image`, `image_to_image`, `text_to_video`, and `image_to_video`.
21
+ - Remote generated-media routing handles Core image generation/edit and video generation/edit endpoints, including async video progress, but it has no `image_upscale` route.
22
+ - VisualFlow media-node lowering forwards common image/video parameters, but not the newer Core/Vision controls such as `guidance_2` or image upscaler parameters.
23
+ - Runtime model residency support reports media tasks, but does not yet include image upscaling.
24
+
25
+ ## Architecture Review
26
+
27
+ Alternatives considered:
28
+
29
+ 1. **Duplicate Core's model and task registry in Runtime.**
30
+ - Rejected because Core owns model capabilities and provider residency truth. Runtime should relay and route, not become a second registry.
31
+ 2. **Let Gateway call Core's new upscaler endpoint directly.**
32
+ - Rejected for run-scoped media work because ADR 0004 requires Runtime-owned child-run history and artifact provenance.
33
+ 3. **Add a generic untyped Core pass-through media endpoint.**
34
+ - Deferred. It would be flexible, but it would make thin-client contracts weaker and harder to validate.
35
+ 4. **Extend Runtime's existing media abstractions with `image_upscale` and pass through named Core/Vision controls.**
36
+ - Recommended. It keeps the boundary simple, preserves child-run durability, and avoids registry duplication.
37
+
38
+ ## Goal
39
+
40
+ Make Runtime support the richer AbstractCore/Vision media surface without guessing model truth:
41
+
42
+ - relay `image_upscale` in Vision discovery;
43
+ - execute image upscaling through Runtime-owned child runs and Core remote/local integration paths;
44
+ - pass through new generation controls such as `guidance_2` and upscaler controls;
45
+ - expose truthful residency/task support for image upscaling;
46
+ - keep progress callbacks as ledger `abstract.progress` events and never persist callbacks.
47
+
48
+ ## Acceptance Criteria
49
+
50
+ - `AbstractCoreRunFacade` exposes a durable `upscale_image(...)` helper.
51
+ - Remote Core execution routes `output={"modality":"image","task":"image_upscale"}` to `/v1/images/upscale` or `/{provider}/v1/images/upscale`.
52
+ - Local Core execution can route an upscaling output spec through the existing multimodal provider path.
53
+ - Runtime discovery accepts `task=image_upscale` for Vision provider-model catalogs and cached model filters.
54
+ - Runtime VisualFlow compilation/lowering recognizes an `upscale_image` / `image_upscale` node shape and forwards upscaler parameters.
55
+ - `guidance_2` is forwarded for image/video generation and edit paths where supplied.
56
+ - Model-residency task reporting includes `image_upscale`.
57
+ - Focused tests prove request payloads, artifact storage, discovery filters, and progress callback behavior.
58
+
59
+ ## Review Checklist
60
+
61
+ - No direct Gateway/Core bypass is introduced.
62
+ - No model capability or provider residency truth is inferred in Runtime.
63
+ - Generated media outputs remain artifact-backed and run-scoped.
64
+ - Callback objects are not serialized into run vars, effect payloads, or artifacts.
65
+ - Existing image/video/music/STT tests remain green.
66
+
67
+ ## Implementation Summary
68
+
69
+ - Added `image_upscale` to Runtime's Core Vision discovery task allowlist and model-residency capability descriptors.
70
+ - Added `AbstractCoreRunFacade.upscale_image(...)`, preserving parent/child run ownership and artifact provenance.
71
+ - Routed remote `output={"modality":"image","task":"image_upscale"}` calls to AbstractCore Server image upscaling endpoints, including the async job/progress path when a progress callback is active.
72
+ - Forwarded newer Core/Vision parameters including `guidance_2` for image/video generation/edit paths and upscaler controls for image upscaling.
73
+ - Added VisualFlow compiler/executor recognition for `upscale_image` / `image_upscale` nodes.
74
+ - Updated Runtime docs, FAQ, troubleshooting, and AI-readable indexes for the new Core floor and media surface.
75
+
76
+ ## Validation
77
+
78
+ - `PYTHONPATH=src:../abstractcore python -m compileall -q src/abstractruntime/integrations/abstractcore src/abstractruntime/visualflow_compiler src/abstractruntime/core/runtime.py`
79
+ - `PYTHONPATH=src:../abstractcore pytest -q tests/test_packaging_extras.py tests/test_visualflow_media_nodes.py tests/test_model_residency_control_plane.py::test_model_residency_capabilities_describe_core_backed_truth_by_task tests/test_abstractcore_run_facade.py::test_run_facade_upscale_image_creates_durable_child_run_with_media tests/test_multimodal_abstractcore_integration.py::test_remote_image_upscale_uses_abstractcore_images_upscale_endpoint_and_stores_artifact tests/test_multimodal_abstractcore_integration.py::test_remote_image_upscale_with_progress_uses_core_job_endpoint tests/test_abstractcore_discovery_facade.py::test_local_vision_provider_models_accept_image_upscale_task_from_cache`
80
+ - Result: `23 passed in 0.29s`