AbstractRuntime 0.10.1__tar.gz → 0.10.3__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 (706) hide show
  1. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/CHANGELOG.md +33 -0
  2. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/PKG-INFO +1 -1
  3. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/api.md +1 -0
  4. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/llms-full.txt +1 -0
  5. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/pyproject.toml +1 -1
  6. abstractruntime-0.10.3/release-notes.md +8 -0
  7. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/llm_client.py +17 -1
  8. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +213 -18
  9. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/function_library.py +8 -6
  10. abstractruntime-0.10.3/tests/test_code_node_imports.py +212 -0
  11. abstractruntime-0.10.3/tests/test_endpoint_profile_media_in_process.py +45 -0
  12. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_function_library.py +2 -2
  13. abstractruntime-0.10.1/release-notes.md +0 -4
  14. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/.github/workflows/ci.yml +0 -0
  15. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/.github/workflows/release.yml +0 -0
  16. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/.gitignore +0 -0
  17. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/ACKNOWLEDGMENTS.md +0 -0
  18. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/CODE_OF_CONDUCT.md +0 -0
  19. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/CONTRIBUTING.md +0 -0
  20. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/LICENSE +0 -0
  21. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/README.md +0 -0
  22. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/ROADMAP.md +0 -0
  23. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/SECURITY.md +0 -0
  24. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/README.md +0 -0
  25. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  26. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  27. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  28. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  29. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  30. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  31. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  32. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/adr/README.md +0 -0
  33. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/architecture.md +0 -0
  34. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/artifacts.md +0 -0
  35. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/automations.md +0 -0
  36. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/README.md +0 -0
  37. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  38. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  39. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  40. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  41. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  42. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  43. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  44. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  45. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/003_wait_primitives.md +0 -0
  46. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  47. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  48. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  49. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  50. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  51. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  52. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  53. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  54. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/009_artifact_store.md +0 -0
  55. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  56. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  57. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  58. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  59. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  60. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  61. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  62. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  63. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  64. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  65. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  66. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  67. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  68. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  69. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  70. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  71. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
  72. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  73. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  74. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  75. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  76. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  77. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  78. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  79. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  80. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/004_tests.md +0 -0
  81. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  82. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  83. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  84. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  85. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/README.md +0 -0
  86. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  87. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  88. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  89. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  90. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  91. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  92. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  93. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  94. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  95. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  96. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  97. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  98. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
  99. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  100. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  101. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_portability/README.md +0 -0
  102. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  103. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  104. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  105. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  106. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  107. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  108. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  109. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  110. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  111. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  112. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  113. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  114. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  115. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  116. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  117. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  118. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  119. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  120. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  121. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  122. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  123. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  124. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  125. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  126. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  127. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  128. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  129. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  130. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  131. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/email.md +0 -0
  132. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/entity-runtime.md +0 -0
  133. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/evidence.md +0 -0
  134. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/faq.md +0 -0
  135. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/getting-started.md +0 -0
  136. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/integrations/abstractcore.md +0 -0
  137. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/limits.md +0 -0
  138. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/manual_testing.md +0 -0
  139. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/mcp-worker.md +0 -0
  140. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/proposal.md +0 -0
  141. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/provenance.md +0 -0
  142. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/snapshots.md +0 -0
  143. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/tool-approval.md +0 -0
  144. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/tools-comms.md +0 -0
  145. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/troubleshooting.md +0 -0
  146. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/docs/workflow-bundles.md +0 -0
  147. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/examples/01_hello_world.py +0 -0
  148. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/examples/02_ask_user.py +0 -0
  149. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/examples/03_wait_until.py +0 -0
  150. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/examples/04_multi_step.py +0 -0
  151. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/examples/05_persistence.py +0 -0
  152. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/examples/06_llm_integration.py +0 -0
  153. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/examples/07_react_agent.py +0 -0
  154. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/examples/README.md +0 -0
  155. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/llms.txt +0 -0
  156. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/mkdocs.yml +0 -0
  157. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/pytest.ini +0 -0
  158. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/scripts/backfill_diary_edges.py +0 -0
  159. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/scripts/generate_llms_full.py +0 -0
  160. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/__init__.py +0 -0
  161. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automation_queries.py +0 -0
  162. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/__init__.py +0 -0
  163. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/adapters.py +0 -0
  164. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/attention.py +0 -0
  165. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/bundle.py +0 -0
  166. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
  167. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
  168. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/commands.py +0 -0
  169. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/controller.py +0 -0
  170. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/ledger.py +0 -0
  171. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/models.py +0 -0
  172. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/automations/service.py +0 -0
  173. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/__init__.py +0 -0
  174. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/config.py +0 -0
  175. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/effect_cancellation.py +0 -0
  176. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/event_keys.py +0 -0
  177. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/health.py +0 -0
  178. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/live_deltas.py +0 -0
  179. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/models.py +0 -0
  180. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/policy.py +0 -0
  181. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/progress_channel.py +0 -0
  182. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/run_attribution.py +0 -0
  183. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/run_identity.py +0 -0
  184. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/run_lifecycle.py +0 -0
  185. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/runtime.py +0 -0
  186. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/spec.py +0 -0
  187. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/tool_scope.py +0 -0
  188. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/core/vars.py +0 -0
  189. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/documents/__init__.py +0 -0
  190. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/documents/charts.py +0 -0
  191. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/documents/docx.py +0 -0
  192. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/documents/pdf.py +0 -0
  193. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/email/__init__.py +0 -0
  194. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/email/actions.py +0 -0
  195. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/email/automations.py +0 -0
  196. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/email/binding.py +0 -0
  197. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/email/feeder.py +0 -0
  198. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/email/frame.py +0 -0
  199. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/email/inbox.py +0 -0
  200. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/evidence/__init__.py +0 -0
  201. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/evidence/recorder.py +0 -0
  202. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/history_bundle.py +0 -0
  203. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/__init__.py +0 -0
  204. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/act_only.py +0 -0
  205. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/chat.py +0 -0
  206. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/communities.py +0 -0
  207. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/diary.py +0 -0
  208. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/digest.py +0 -0
  209. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/entity_runtime.py +0 -0
  210. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/fingerprint.py +0 -0
  211. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/lease.py +0 -0
  212. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/life.py +0 -0
  213. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/memory_reader.py +0 -0
  214. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/night_voice.py +0 -0
  215. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/phase_graph.py +0 -0
  216. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/phase_spec.py +0 -0
  217. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/prelude.py +0 -0
  218. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  219. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/reflection.py +0 -0
  220. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  221. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/substrate.py +0 -0
  222. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/tool_effects.py +0 -0
  223. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/tool_policy.py +0 -0
  224. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/tools.py +0 -0
  225. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/identity/visit_workflow.py +0 -0
  226. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/__init__.py +0 -0
  227. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  228. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  229. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
  230. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  231. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
  232. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  233. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  234. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  235. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
  236. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  237. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  238. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
  239. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  240. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  241. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  242. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  243. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  244. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
  245. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  246. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  247. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  248. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
  249. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
  250. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
  251. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  252. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
  253. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  254. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  255. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
  256. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  257. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  258. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  259. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  260. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  261. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  262. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  263. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  264. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/memory/__init__.py +0 -0
  265. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/memory/active_context.py +0 -0
  266. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/memory/active_memory.py +0 -0
  267. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/memory/compaction.py +0 -0
  268. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/memory/kg_packets.py +0 -0
  269. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/memory/memact_composer.py +0 -0
  270. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/memory/recall_levels.py +0 -0
  271. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/memory/token_budget.py +0 -0
  272. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/rendering/__init__.py +0 -0
  273. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  274. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/rendering/json_stringify.py +0 -0
  275. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/scheduler/__init__.py +0 -0
  276. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/scheduler/convenience.py +0 -0
  277. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/scheduler/multi_store.py +0 -0
  278. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/scheduler/registry.py +0 -0
  279. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/scheduler/scheduler.py +0 -0
  280. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/session_history.py +0 -0
  281. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/session_turns.py +0 -0
  282. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/__init__.py +0 -0
  283. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/artifacts.py +0 -0
  284. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/base.py +0 -0
  285. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/commands.py +0 -0
  286. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/in_memory.py +0 -0
  287. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/json_files.py +0 -0
  288. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/lease.py +0 -0
  289. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/ledger_chain.py +0 -0
  290. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/ledger_slim.py +0 -0
  291. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/observable.py +0 -0
  292. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/offloading.py +0 -0
  293. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/serialize.py +0 -0
  294. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/snapshots.py +0 -0
  295. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/sqlite.py +0 -0
  296. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  297. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/triggers/__init__.py +0 -0
  298. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/triggers/email_received.py +0 -0
  299. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/triggers/manual.py +0 -0
  300. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/triggers/protocol.py +0 -0
  301. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/triggers/registry.py +0 -0
  302. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/triggers/schedule.py +0 -0
  303. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/turn_grounding.py +0 -0
  304. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/utils/__init__.py +0 -0
  305. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/utils/atomic_files.py +0 -0
  306. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/utils/file_filters.py +0 -0
  307. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/utils/workspace_paths.py +0 -0
  308. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  309. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  310. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  311. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  312. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  313. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  314. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  315. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  316. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  317. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  318. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  319. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
  320. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  321. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  322. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  323. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  324. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  325. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
  326. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
  327. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
  328. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  329. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  330. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
  331. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
  332. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  333. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/workflow_bundle/models.py +0 -0
  334. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  335. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  336. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  337. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/README.md +0 -0
  338. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/automation_harness.py +0 -0
  339. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/conftest.py +0 -0
  340. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/email_wp2_support.py +0 -0
  341. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/fixtures/schedule_v1_corpus.json +0 -0
  342. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/live_email/conftest.py +0 -0
  343. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/live_email/live_email_support.py +0 -0
  344. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/live_email/test_email_live_runtime.py +0 -0
  345. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_abstractcore_comms_facade.py +0 -0
  346. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_abstractcore_discovery_facade.py +0 -0
  347. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_abstractcore_host_facade.py +0 -0
  348. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_abstractcore_run_facade.py +0 -0
  349. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_abstractcore_server_facade.py +0 -0
  350. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_abstractcore_structured_facade.py +0 -0
  351. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_abstractcore_telegram_facade.py +0 -0
  352. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_active_context_policy.py +0 -0
  353. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_active_index.py +0 -0
  354. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_active_memory.py +0 -0
  355. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_agora_agent_alias_identity.py +0 -0
  356. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_agora_tools_http.py +0 -0
  357. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  358. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_answer_user_effect.py +0 -0
  359. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_artifacts.py +0 -0
  360. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_calendar_schedule.py +0 -0
  361. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_commands.py +0 -0
  362. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_controller.py +0 -0
  363. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_controller_recovery.py +0 -0
  364. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_definition.py +0 -0
  365. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_discussion_isolation.py +0 -0
  366. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_email_results.py +0 -0
  367. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_growing_context.py +0 -0
  368. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_index.py +0 -0
  369. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_next_fire.py +0 -0
  370. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_occurrence_input_resolver.py +0 -0
  371. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_occurrence_recovery.py +0 -0
  372. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_replay_read_only.py +0 -0
  373. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_retry.py +0 -0
  374. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_session_turns.py +0 -0
  375. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_status.py +0 -0
  376. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_automation_tool_approval.py +0 -0
  377. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_browser_probe_target_walling.py +0 -0
  378. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  379. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_capability_default_reasoning.py +0 -0
  380. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_chat_summarizer_integration.py +0 -0
  381. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_code_node_restricted_python.py +0 -0
  382. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_command_sandbox_host_facade.py +0 -0
  383. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_command_store.py +0 -0
  384. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_compaction_helpers.py +0 -0
  385. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_compaction_summarizer_route.py +0 -0
  386. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_config_facade_models_engines.py +0 -0
  387. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_config_facade_voice_input_hint.py +0 -0
  388. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_control_adapter_while.py +0 -0
  389. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_controller_bundle_packaged.py +0 -0
  390. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_crash_ordering_inversions.py +0 -0
  391. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_create_if_absent.py +0 -0
  392. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_data_registry_facade.py +0 -0
  393. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_default_tools_camera_gating.py +0 -0
  394. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_default_tools_comms_gating.py +0 -0
  395. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_default_tools_include_skim_files.py +0 -0
  396. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_default_tools_include_skim_folders.py +0 -0
  397. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_default_tools_include_skim_web.py +0 -0
  398. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_default_tools_search_files_executor.py +0 -0
  399. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_diary_capture.py +0 -0
  400. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_diary_write_rescue.py +0 -0
  401. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_directory_lease.py +0 -0
  402. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_disabled_toolsets_seam.py +0 -0
  403. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  404. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_discovery_tts_unavailable_reason.py +0 -0
  405. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_discovery_voice_openai_api_key.py +0 -0
  406. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_discussion_session_anchor.py +0 -0
  407. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_document_markdown_tables.py +0 -0
  408. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_document_renderers_hr_quote.py +0 -0
  409. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_durable_toolsets.py +0 -0
  410. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_durable_write_discipline.py +0 -0
  411. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  412. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_effect_cancellation.py +0 -0
  413. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_effect_issuance_idempotency.py +0 -0
  414. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  415. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_election_consequence_teaching.py +0 -0
  416. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_email_binding_and_refiner.py +0 -0
  417. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_email_gate_fixes.py +0 -0
  418. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_email_inbox_and_trigger.py +0 -0
  419. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_email_regate_fixes.py +0 -0
  420. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_email_review_fixes.py +0 -0
  421. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_email_self_trigger_loop.py +0 -0
  422. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_email_toolset_and_walls.py +0 -0
  423. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_emergence_experiment.py +0 -0
  424. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_emit_event_uses_wait_index.py +0 -0
  425. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_emit_event_without_workflow_registry.py +0 -0
  426. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_endpoint_profile_route_context.py +0 -0
  427. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_awake_memory_fixes.py +0 -0
  428. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_brain_effects.py +0 -0
  429. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_chat_driver.py +0 -0
  430. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_chat_tools_reflection.py +0 -0
  431. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_diary.py +0 -0
  432. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_execute_tool.py +0 -0
  433. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_fetch_url_tool.py +0 -0
  434. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_history_window.py +0 -0
  435. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_life_loop.py +0 -0
  436. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_memory_richness.py +0 -0
  437. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_phase_graph_conformance.py +0 -0
  438. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_react_visit_window.py +0 -0
  439. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_recent_memories.py +0 -0
  440. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_runtime.py +0 -0
  441. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_search_memory.py +0 -0
  442. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  443. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_substrate_resolution.py +0 -0
  444. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_visit_honesty.py +0 -0
  445. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_workspace_cap.py +0 -0
  446. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_entity_workspace_tools.py +0 -0
  447. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_event_wait_index.py +0 -0
  448. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  449. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_evidence_recorder.py +0 -0
  450. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  451. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_execute_command_output_offload.py +0 -0
  452. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_execution_capability_discovery.py +0 -0
  453. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_explicit_eject_other_clients.py +0 -0
  454. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_factory_default_retry_policy.py +0 -0
  455. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  456. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_format_repair_nudge.py +0 -0
  457. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_fresh_install_no_provider.py +0 -0
  458. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_gateway_facades_c4899.py +0 -0
  459. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_git_read_only_refiner.py +0 -0
  460. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_hf_process_residency_merge.py +0 -0
  461. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_history_window_multimodal.py +0 -0
  462. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_hot_path_store_reads.py +0 -0
  463. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_indexed_idempotency_lookup.py +0 -0
  464. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_integration_abstractcore.py +0 -0
  465. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_integrations_abstractcore.py +0 -0
  466. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_json_file_run_store_children_index.py +0 -0
  467. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_json_run_cache_bound.py +0 -0
  468. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_json_store_scan_memo.py +0 -0
  469. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_jsonl_ledger_recovery.py +0 -0
  470. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_kg_learn_and_recall_contract.py +0 -0
  471. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_ledger_chain.py +0 -0
  472. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_ledger_record_slimming.py +0 -0
  473. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_ledger_subscription.py +0 -0
  474. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_live_token_deltas.py +0 -0
  475. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_media_artifact_refs.py +0 -0
  476. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  477. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  478. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  479. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_requires_prompt.py +0 -0
  480. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_response_schema_normalization.py +0 -0
  481. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_structured_output_fallback.py +0 -0
  482. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_text_phase_progress.py +0 -0
  483. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  484. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  485. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  486. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_client_grounding_tail.py +0 -0
  487. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_client_media_artifacts.py +0 -0
  488. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_client_system_context.py +0 -0
  489. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_client_tool_call_parsing.py +0 -0
  490. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_retry_classification.py +0 -0
  491. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_llm_streaming_on_token.py +0 -0
  492. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_local_helper_tool_exposure.py +0 -0
  493. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_local_residency_host_sweep.py +0 -0
  494. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  495. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_max_iterations_ceiling.py +0 -0
  496. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_mcp_remote_tool_executor.py +0 -0
  497. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
  498. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_mcp_worker_logging.py +0 -0
  499. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_mcp_worker_security.py +0 -0
  500. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_mcp_worker_stdio.py +0 -0
  501. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_media_artifact_resolution.py +0 -0
  502. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_media_capability_default_routing.py +0 -0
  503. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_media_only_requests_skip_text_client.py +0 -0
  504. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_media_subprocess.py +0 -0
  505. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memact_composer_from_kg_result.py +0 -0
  506. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_appraise_handler.py +0 -0
  507. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_communities.py +0 -0
  508. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  509. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_kg_packets.py +0 -0
  510. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  511. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  512. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  513. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  514. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_note_effect.py +0 -0
  515. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_query_effect.py +0 -0
  516. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_query_rich_filters.py +0 -0
  517. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  518. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_seam_handlers.py +0 -0
  519. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_seam_sqlite_durability.py +0 -0
  520. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_memory_tag_effect.py +0 -0
  521. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_mlx_generation_serialization.py +0 -0
  522. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_mlx_process_residency_merge.py +0 -0
  523. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_model_eject_cancel.py +0 -0
  524. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_model_residency_clean_switch.py +0 -0
  525. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_model_residency_control_plane.py +0 -0
  526. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  527. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_multi_store_scheduler.py +0 -0
  528. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_multimodal_abstractcore_integration.py +0 -0
  529. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_native_mlx_application_wiring.py +0 -0
  530. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_native_mlx_execution_controls_live.py +0 -0
  531. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_native_tool_channel.py +0 -0
  532. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_night_voice.py +0 -0
  533. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_no_default_provider_refusal_ux.py +0 -0
  534. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_offload_answer_chain_c4978.py +0 -0
  535. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  536. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_offloading.py +0 -0
  537. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_packaging_extras.py +0 -0
  538. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_parallel_readonly_tool_execution.py +0 -0
  539. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_pause_resume.py +0 -0
  540. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_pdf_unicode_rendering.py +0 -0
  541. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_personal_cycle.py +0 -0
  542. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_phantom_attachment_index.py +0 -0
  543. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_phase_graph_artifact_control.py +0 -0
  544. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_phase_graph_obedience.py +0 -0
  545. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_phase_vocabulary_migration.py +0 -0
  546. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  547. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_prompt_cache_export_import.py +0 -0
  548. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  549. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_prompt_cache_modules.py +0 -0
  550. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  551. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  552. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_prompt_overlay.py +0 -0
  553. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  554. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_provider_pin_routing_isolation.py +0 -0
  555. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_queryable_run_store.py +0 -0
  556. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_r12_workspace_sandbox.py +0 -0
  557. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  558. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_read_idle_threading.py +0 -0
  559. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_readoption_experiment.py +0 -0
  560. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_real_integration.py +0 -0
  561. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_realize_election.py +0 -0
  562. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_recall_levels_policy.py +0 -0
  563. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_remote_client_cancel.py +0 -0
  564. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_remote_llm_client.py +0 -0
  565. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_remote_speculation_defaults.py +0 -0
  566. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_rendering_agent_trace_report.py +0 -0
  567. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_rendering_json_stringify.py +0 -0
  568. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_report_branding.py +0 -0
  569. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_resident_media_generation.py +0 -0
  570. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_resume_concurrent_same_wait.py +0 -0
  571. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_retry_idempotency.py +0 -0
  572. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_run_history_bundle.py +0 -0
  573. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_run_index_workspace_root.py +0 -0
  574. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_run_mutation_lock.py +0 -0
  575. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_run_scoped_tool_policy.py +0 -0
  576. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_run_tool_scope_ceiling.py +0 -0
  577. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_browser_session_boundary.py +0 -0
  578. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  579. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  580. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_effect_invocation_trace.py +0 -0
  581. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  582. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_install_boundary.py +0 -0
  583. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  584. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_node_traces.py +0 -0
  585. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  586. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_runtime_tick_step_gate.py +0 -0
  587. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_schedule_v1_corpus.py +0 -0
  588. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_schedule_v2_calendar.py +0 -0
  589. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_scheduler.py +0 -0
  590. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_send_email_refiner.py +0 -0
  591. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_send_email_self_default_policy.py +0 -0
  592. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  593. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_session_history.py +0 -0
  594. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_session_prompt_cache_attribution.py +0 -0
  595. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_session_prompt_cache_visibility.py +0 -0
  596. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_session_route_stamp.py +0 -0
  597. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_session_start_cost.py +0 -0
  598. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_shell_tool_exposure.py +0 -0
  599. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_snapshots.py +0 -0
  600. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_speculation_inheritance.py +0 -0
  601. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_speculation_reaches_provider_construction.py +0 -0
  602. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_sqlite_ledger_store.py +0 -0
  603. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_start_subworkflow_async_wait.py +0 -0
  604. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  605. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  606. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_steer_sidecar.py +0 -0
  607. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_storage_deletion.py +0 -0
  608. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_structured_output_schema_enum.py +0 -0
  609. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_subworkflow.py +0 -0
  610. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_terminal_effect_completion.py +0 -0
  611. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  612. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_thinking_inheritance.py +0 -0
  613. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  614. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_approval_executor.py +0 -0
  615. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_approval_resume_executes.py +0 -0
  616. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_approval_wait_key_identity.py +0 -0
  617. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_calls_idempotency_keys.py +0 -0
  618. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_catalog.py +0 -0
  619. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_descriptor_registry.py +0 -0
  620. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_executor_argument_sanitization.py +0 -0
  621. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_executor_error_output_detection.py +0 -0
  622. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_executor_filename_alias.py +0 -0
  623. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  624. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_executor_read_file_aliases.py +0 -0
  625. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_executor_timeout.py +0 -0
  626. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_inventory_facade.py +0 -0
  627. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_invoke_effect.py +0 -0
  628. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_policy_and_mounts.py +0 -0
  629. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_tool_wait_allowlist_safety.py +0 -0
  630. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_topic_election_world_model.py +0 -0
  631. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_trace_context_propagation.py +0 -0
  632. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_trigger_registry.py +0 -0
  633. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_trigger_schedule_math.py +0 -0
  634. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_turn_grounding_byte_stability.py +0 -0
  635. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_turn_grounding_carriers_a3.py +0 -0
  636. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_vars_query_effect.py +0 -0
  637. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visit_ab_fixture.py +0 -0
  638. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visit_midturn_elections.py +0 -0
  639. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visit_midturn_resume.py +0 -0
  640. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visit_workflow.py +0 -0
  641. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  642. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  643. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  644. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  645. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  646. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  647. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_entity_memory_nodes.py +0 -0
  648. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  649. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_llm_call_partial_override.py +0 -0
  650. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  651. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_loop_back_out_of_body.py +0 -0
  652. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
  653. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_loop_limit_on_wire.py +0 -0
  654. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_memact_compose_node.py +0 -0
  655. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  656. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  657. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  658. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_reroute_lowering.py +0 -0
  659. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_set_vars_pins.py +0 -0
  660. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  661. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  662. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_add_message_builtin.py +0 -0
  663. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  664. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_agora_react_agent.py +0 -0
  665. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_call_tool_node.py +0 -0
  666. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  667. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_compiler_basic.py +0 -0
  668. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  669. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_continue_on_error.py +0 -0
  670. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  671. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  672. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  673. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_get_element_node.py +0 -0
  674. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_get_random_element_node.py +0 -0
  675. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_get_var_node.py +0 -0
  676. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_has_tools_builtin.py +0 -0
  677. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  678. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  679. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_make_object_node.py +0 -0
  680. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_media_nodes.py +0 -0
  681. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  682. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_memory_source_pins.py +0 -0
  683. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_pin_expressions.py +0 -0
  684. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_prompt_only.py +0 -0
  685. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_random_nodes.py +0 -0
  686. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_schema_enum_switch.py +0 -0
  687. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_string_contains_replace.py +0 -0
  688. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_visualflow_tool_parameters_node.py +0 -0
  689. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_voice_openai_api_key_path.py +0 -0
  690. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_voice_stream_is_not_a_wait.py +0 -0
  691. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_w4_feelings_lens.py +0 -0
  692. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_wait_event_deadline.py +0 -0
  693. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_wait_event_prompt_metadata.py +0 -0
  694. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_wait_until_streak.py +0 -0
  695. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_wait_until_utc_normalization.py +0 -0
  696. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workflow_bundle_registry.py +0 -0
  697. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_builtin_deny.py +0 -0
  698. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_context_allowed_workspaces.py +0 -0
  699. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  700. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  701. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  702. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  703. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_prompt_context.py +0 -0
  704. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_read_only.py +0 -0
  705. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_workspace_writable_paths.py +0 -0
  706. {abstractruntime-0.10.1 → abstractruntime-0.10.3}/tests/test_write_chart.py +0 -0
@@ -5,6 +5,39 @@ All notable changes to AbstractRuntime will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.10.3] - 2026-10-18
9
+
10
+ ### Fixed
11
+
12
+ - Image and video specs whose provider is an endpoint profile (`endpoint:<id>`) run in process instead of in
13
+ the one-shot local media subprocess. The subprocess isolates local pipelines and has no host
14
+ endpoint-profile resolver, so a gateway profile (for example an OpenAI-compatible relay serving
15
+ `gpt-image-2` selected on the gateway's image route) could not be resolved there; in process,
16
+ AbstractVision resolves it through the resolver the host attached to the client. Tests:
17
+ `tests/test_endpoint_profile_media_in_process.py`.
18
+
19
+ ## [0.10.2] - 2026-10-16
20
+
21
+ ### Changed
22
+
23
+ - **Code nodes can import Python's standard library.** In the `sandbox` permission mode, `import json`, `re`,
24
+ `datetime`, `math`, `collections`, `itertools`, `statistics`, `textwrap`, `hashlib`, `urllib.parse`… now
25
+ work, at the top of the code and inside functions, in both the RestrictedPython lane and the fallback lane, and
26
+ inside the function bodies of flow function libraries. The sandbox still refuses third-party packages, private
27
+ (`_`-prefixed) modules, and the standard-library modules that reach the machine or go around the sandbox's own
28
+ checks: processes and the operating system (`os`, `subprocess`, `threading`, `signal`, `ctypes`, `platform`…), files (`io`,
29
+ `pathlib`, `shutil`, `tempfile`, `glob`, `sqlite3`, `logging`, and the parsers that read a file by path: `xml`,
30
+ `configparser`, `argparse`…), the network (`socket`, `http`, `urllib.request`, `smtplib`…), code loading or
31
+ interpreter internals (`sys`, `importlib`, `pickle`, `types`, `inspect`…) and attribute access by name,
32
+ evaluated annotations or frames (`operator`, `typing`, `functools`, `traceback`). A refusal names the module
33
+ and the reason; `from x import *`, relative imports and the `__import__` call stay refused.
34
+ - **A Code node's return value must be JSON data.** `transform` returning a module, a function, a set, bytes or
35
+ any other value JSON cannot carry now fails with a sandbox error naming the value and where it sits
36
+ (`transform returned a value that cannot be sent as JSON: module 'time' at output[2]`), in every permission
37
+ mode, instead of a serializer crash later in the gateway's simulate reply or the run's persisted state. `full_access` (host policy) imports anything, as before.
38
+ The rule is applied twice: at compile time by `validate_code`, and at run time by the `__import__` bound into
39
+ the sandbox builtins. `get_code_execution_policy()` now lists `imports.denied_modules` for thin clients.
40
+
8
41
  ## [0.10.1] - 2026-10-16
9
42
 
10
43
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.10.1
3
+ Version: 0.10.3
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
@@ -355,6 +355,7 @@ Multimodal support:
355
355
  - with the pooled local client (`MultiLocalAbstractCoreLLMClient`), a request whose outputs are all non-text (image, video, voice, music, transcription) and that carries no tools never builds the text client: it runs on AbstractCore's capability host (`CapabilityHostProvider`, no text model), and so does streaming TTS. A text default that cannot be built (an engine not installed) therefore never blocks speech or image generation
356
356
  - media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
357
357
  - local image/video generation runs in a one-shot subprocess (`execution_mode="local_one_shot_subprocess"`) unless every requested media model is resident (explicitly loaded with `load_model_residency`), in which case it runs in-process on the loaded pipeline (`execution_mode="resident_in_process"`, `resident_load_ids`)
358
+ - a media spec whose `provider` is an endpoint profile (`endpoint:<id>`) never uses the one-shot subprocess: it is an HTTP call to that endpoint, and the host's endpoint-profile resolver (`set_provider_endpoint_profile_resolver`) exists only in this process
358
359
  - optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; local media warmup that no capability plugin can serve (`image_generation`, `image_upscale`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, `music_generation`) reports `requires_long_lived_server=true`, and image/video tasks also report `execution_mode="local_one_shot_subprocess"`
359
360
  - 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
360
361
 
@@ -1225,6 +1225,7 @@ Multimodal support:
1225
1225
  - with the pooled local client (`MultiLocalAbstractCoreLLMClient`), a request whose outputs are all non-text (image, video, voice, music, transcription) and that carries no tools never builds the text client: it runs on AbstractCore's capability host (`CapabilityHostProvider`, no text model), and so does streaming TTS. A text default that cannot be built (an engine not installed) therefore never blocks speech or image generation
1226
1226
  - media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
1227
1227
  - local image/video generation runs in a one-shot subprocess (`execution_mode="local_one_shot_subprocess"`) unless every requested media model is resident (explicitly loaded with `load_model_residency`), in which case it runs in-process on the loaded pipeline (`execution_mode="resident_in_process"`, `resident_load_ids`)
1228
+ - a media spec whose `provider` is an endpoint profile (`endpoint:<id>`) never uses the one-shot subprocess: it is an HTTP call to that endpoint, and the host's endpoint-profile resolver (`set_provider_endpoint_profile_resolver`) exists only in this process
1228
1229
  - optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; local media warmup that no capability plugin can serve (`image_generation`, `image_upscale`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, `music_generation`) reports `requires_long_lived_server=true`, and image/video tasks also report `execution_mode="local_one_shot_subprocess"`
1229
1230
  - 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
1230
1231
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "AbstractRuntime"
7
- version = "0.10.1"
7
+ version = "0.10.3"
8
8
  description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -0,0 +1,8 @@
1
+ ### Fixed
2
+
3
+ - Image and video specs whose provider is an endpoint profile (`endpoint:<id>`) run in process instead of in
4
+ the one-shot local media subprocess. The subprocess isolates local pipelines and has no host
5
+ endpoint-profile resolver, so a gateway profile (for example an OpenAI-compatible relay serving
6
+ `gpt-image-2` selected on the gateway's image route) could not be resolved there; in process,
7
+ AbstractVision resolves it through the resolver the host attached to the client. Tests:
8
+ `tests/test_endpoint_profile_media_in_process.py`.
@@ -2141,6 +2141,20 @@ def _decode_subprocess_media_payload(payload: Dict[str, Any]) -> Dict[str, Any]:
2141
2141
  return out
2142
2142
 
2143
2143
 
2144
+ def _spec_routes_to_endpoint_profile(spec: Any) -> bool:
2145
+ """True when a media spec names an `endpoint:<id>` provider.
2146
+
2147
+ Such a spec is an HTTP call to a named endpoint connection, not a local
2148
+ pipeline: the one-shot media subprocess has nothing to isolate for it, and
2149
+ it cannot resolve the profile -- the host's endpoint-profile resolver
2150
+ (`set_provider_endpoint_profile_resolver`) lives on THIS process's
2151
+ clients, and a per-user gateway profile has no AbstractCore config row
2152
+ the subprocess could read. So it runs in process, where AbstractVision
2153
+ resolves the profile through the owning provider's resolver.
2154
+ """
2155
+ return isinstance(spec, dict) and str(spec.get("provider") or "").strip().lower().startswith("endpoint:")
2156
+
2157
+
2144
2158
  def _is_subprocess_safe_image_specs(specs: List[Dict[str, Any]], media: Optional[List[Any]]) -> bool:
2145
2159
  if not _env_flag_enabled("ABSTRACTRUNTIME_LOCAL_IMAGE_SUBPROCESS", default=True):
2146
2160
  return False
@@ -2148,7 +2162,7 @@ def _is_subprocess_safe_image_specs(specs: List[Dict[str, Any]], media: Optional
2148
2162
  return False
2149
2163
  normalized_media = list(media or [])
2150
2164
  for spec in specs:
2151
- if not isinstance(spec, dict):
2165
+ if not isinstance(spec, dict) or _spec_routes_to_endpoint_profile(spec):
2152
2166
  return False
2153
2167
  modality = str(spec.get("modality") or "").strip().lower()
2154
2168
  task = str(spec.get("task") or "").strip().lower()
@@ -2202,6 +2216,8 @@ def _is_subprocess_safe_video_specs(specs: List[Dict[str, Any]], media: Optional
2202
2216
  if len(specs) != 1 or not isinstance(specs[0], dict):
2203
2217
  return False
2204
2218
  spec = specs[0]
2219
+ if _spec_routes_to_endpoint_profile(spec):
2220
+ return False
2205
2221
  modality = str(spec.get("modality") or "").strip().lower()
2206
2222
  task = str(spec.get("task") or "").strip().lower()
2207
2223
  if modality != "video":
@@ -8,8 +8,10 @@ without importing the web backend implementation.
8
8
  from __future__ import annotations
9
9
 
10
10
  import ast
11
+ import builtins as _builtins
11
12
  import os
12
- from typing import Any, Callable, Dict
13
+ import sys
14
+ from typing import Any, Callable, Dict, Optional
13
15
 
14
16
  # Try to import RestrictedPython, fall back to basic execution if not available
15
17
  try:
@@ -83,6 +85,173 @@ if RESTRICTED_PYTHON_AVAILABLE:
83
85
  super().check_name(node, name, allow_magic_methods)
84
86
 
85
87
 
88
+ # ---------------------------------------------------------------------------
89
+ # Imports in the sandbox: Python's own standard library, except the modules
90
+ # that reach outside the interpreter. One rule for the AST check at compile
91
+ # time (validate_code) and the ``__import__`` guard at run time (the guard is
92
+ # what actually gates: the AST check only makes the refusal early and clear).
93
+ # ---------------------------------------------------------------------------
94
+
95
+ # Top-level standard-library modules the sandbox refuses, each with the reason
96
+ # shown to the author. Grouped by what the module reaches.
97
+ SANDBOX_DENIED_MODULES: Dict[str, str] = {
98
+ # processes, the OS, the interpreter
99
+ **{m: "processes and the operating system" for m in (
100
+ "os", "posix", "nt", "posixpath", "ntpath", "genericpath", "subprocess", "multiprocessing",
101
+ "threading", "_thread", "concurrent", "asyncio", "signal", "ctypes", "resource", "pwd", "grp",
102
+ "pty", "tty", "termios", "fcntl", "pipes", "crypt", "spwd", "nis", "syslog", "mmap", "msvcrt",
103
+ "winreg", "winsound", "ossaudiodev", "locale", "getpass", "readline", "rlcompleter", "cmd",
104
+ "atexit", "faulthandler", "gc", "webbrowser", "antigravity", "this", "turtle", "turtledemo",
105
+ "tkinter", "curses", "idlelib",
106
+ # runs uname/sw_vers and reads /etc/os-release to answer
107
+ "platform",
108
+ )},
109
+ # files on the machine
110
+ **{m: "files on the machine" for m in (
111
+ "io", "pathlib", "shutil", "tempfile", "glob", "fileinput", "linecache", "filecmp", "zipfile",
112
+ "tarfile", "gzip", "bz2", "lzma", "dbm", "shelve", "sqlite3", "codecs", "logging", "wave", "aifc",
113
+ "sunau", "chunk", "sndhdr", "imghdr", "tokenize", "mailbox", "mailcap", "netrc", "uu", "cgi",
114
+ "cgitb", "pyclbr", "tabnanny",
115
+ # parsers and readers that take a file PATH (xml.*.parse, configparser.read,
116
+ # argparse's @argument-files, gettext's catalogs)
117
+ "xml", "pyexpat", "configparser", "argparse", "optparse", "gettext",
118
+ # read_mime_types(path) / MimeTypes.read(path)
119
+ "mimetypes",
120
+ )},
121
+ # the network
122
+ **{m: "the network" for m in (
123
+ "socket", "ssl", "select", "selectors", "socketserver", "http", "ftplib", "poplib", "imaplib",
124
+ "smtplib", "smtpd", "nntplib", "telnetlib", "xmlrpc", "wsgiref", "asynchat", "asyncore",
125
+ )},
126
+ # loading or running code, interpreter internals
127
+ **{m: "loading or running code" for m in (
128
+ "sys", "builtins", "importlib", "pkgutil", "runpy", "zipimport", "modulefinder", "code", "codeop",
129
+ "compileall", "py_compile", "marshal", "pickle", "pickletools", "copyreg", "types", "inspect",
130
+ "dis", "site", "sysconfig", "timeit", "doctest", "unittest", "pdb", "bdb", "trace", "profile",
131
+ "cProfile", "pstats", "tracemalloc", "test", "lib2to3", "pydoc", "pydoc_data", "ensurepip", "venv",
132
+ "zipapp", "distutils", "msilib", "__main__", "opcode", "symtable",
133
+ )},
134
+ # around the sandbox's own checks: attribute access by NAME (which the dunder
135
+ # rule cannot see), evaluation of annotation strings, access to frames
136
+ **{m: "around the sandbox's checks (attributes by name, evaluated annotations, frames)" for m in (
137
+ "operator", "typing", "functools", "traceback",
138
+ )},
139
+ }
140
+
141
+ # A refused package whose one pure submodule is allowed: ``urllib.parse``
142
+ # (URL parsing) is fine, ``urllib.request`` is the network.
143
+ SANDBOX_ALLOWED_SUBMODULES: frozenset = frozenset({"urllib.parse"})
144
+
145
+ _STDLIB_MODULE_NAMES: frozenset = frozenset(getattr(sys, "stdlib_module_names", ()))
146
+
147
+
148
+ def sandbox_import_reason(name: str) -> Optional[str]:
149
+ """Why the sandbox refuses importing ``name`` — or None when it is allowed.
150
+
151
+ Allowed: a module of Python's own standard library whose top-level package
152
+ is not in SANDBOX_DENIED_MODULES (plus the listed pure submodules of a
153
+ refused package). Refused: everything else — third-party packages, private
154
+ (``_``-prefixed) modules, and the standard-library modules that reach
155
+ processes, files, the network or code loading. ``full_access`` (host
156
+ policy) lifts every limit.
157
+ """
158
+ dotted = str(name or "").strip()
159
+ if not dotted:
160
+ return "an empty module name"
161
+ if dotted in SANDBOX_ALLOWED_SUBMODULES:
162
+ return None
163
+ top = dotted.split(".", 1)[0]
164
+ if top == "__future__":
165
+ return None
166
+ if top.startswith("_"):
167
+ return "a private module"
168
+ reason = SANDBOX_DENIED_MODULES.get(top)
169
+ if reason is not None:
170
+ return f"it reaches {reason}"
171
+ if top == "urllib":
172
+ return "it reaches the network; only urllib.parse is importable"
173
+ if top not in _STDLIB_MODULE_NAMES:
174
+ return "only Python's own standard library is importable"
175
+ return None
176
+
177
+
178
+ def sandbox_import_check(name: str, fromlist: Any = ()) -> None:
179
+ """Raise CodeExecutionError when the sandbox refuses importing ``name``.
180
+
181
+ ``fromlist`` are the names of a ``from name import a, b`` statement: a
182
+ refused package is still fine when every one of them is an allowed
183
+ submodule (``from urllib import parse``).
184
+ """
185
+ reason = sandbox_import_reason(name)
186
+ if reason is not None and fromlist and all(
187
+ isinstance(item, str) and f"{name}.{item}" in SANDBOX_ALLOWED_SUBMODULES for item in fromlist
188
+ ):
189
+ reason = None
190
+ if reason is not None:
191
+ raise CodeExecutionError(
192
+ f"import of '{name}' is not allowed in the sandbox: {reason} "
193
+ "(full_access lifts this limit)"
194
+ )
195
+
196
+
197
+ def _sandbox_import(name: str, globals: Any = None, locals: Any = None, fromlist: Any = (), level: int = 0) -> Any:
198
+ """The sandbox's ``__import__``: the same rule as validate_code, applied
199
+ to the name that is actually imported at run time (relative imports are
200
+ refused: there is no package for them to be relative to)."""
201
+ if level:
202
+ raise CodeExecutionError("relative imports are not allowed in the sandbox")
203
+ sandbox_import_check(name, tuple(fromlist or ()))
204
+ return _builtins.__import__(name, globals, locals, fromlist or (), 0)
205
+
206
+
207
+ def sandbox_builtins(base: Any) -> Dict[str, Any]:
208
+ """A copy of ``base`` builtins with the sandbox's ``__import__`` bound."""
209
+ out: Dict[str, Any] = dict(base)
210
+ out["__import__"] = _sandbox_import
211
+ return out
212
+
213
+
214
+ def _json_offender(value: Any, path: str = "output") -> Optional[tuple]:
215
+ """The first value inside ``value`` that JSON cannot carry, as (path, type name)."""
216
+ if value is None or isinstance(value, (bool, int, float, str)):
217
+ return None
218
+ if isinstance(value, (list, tuple)):
219
+ for i, item in enumerate(value):
220
+ found = _json_offender(item, f"{path}[{i}]")
221
+ if found:
222
+ return found
223
+ return None
224
+ if isinstance(value, dict):
225
+ for key, item in value.items():
226
+ if not isinstance(key, (str, int, float, bool)) and key is not None:
227
+ return (f"{path} (key {key!r})", type(key).__name__)
228
+ found = _json_offender(item, f"{path}[{key!r}]")
229
+ if found:
230
+ return found
231
+ return None
232
+ name = type(value).__name__
233
+ if name == "module":
234
+ name = f"module '{getattr(value, '__name__', '?')}'"
235
+ elif name in ("function", "builtin_function_or_method", "method"):
236
+ name = f"function '{getattr(value, '__name__', '?')}'"
237
+ return (path, name)
238
+
239
+
240
+ def ensure_json_result(value: Any, function_name: str = "transform") -> Any:
241
+ """Return ``value`` when JSON can carry it; otherwise raise a CodeExecutionError
242
+ that names the offending value and where it sits, so the author sees
243
+ "return os_time, not the module" instead of a serializer crash later
244
+ (the gateway's simulate reply, or the run's persisted state)."""
245
+ found = _json_offender(value)
246
+ if found is None:
247
+ return value
248
+ path, name = found
249
+ raise CodeExecutionError(
250
+ f"{function_name} returned a value that cannot be sent as JSON: {name} at {path}. "
251
+ "Return data: str, int, float, bool, None, lists and dicts of those."
252
+ )
253
+
254
+
86
255
  def normalize_code_permissions(permissions: Any = "sandbox") -> str:
87
256
  """Return the canonical Code node execution permission mode."""
88
257
  raw = str(permissions or "sandbox").strip().lower().replace("-", "_")
@@ -129,8 +298,17 @@ def get_code_execution_policy() -> Dict[str, Any]:
129
298
  "label": "Sandbox",
130
299
  "available": True,
131
300
  "default": True,
132
- "safety": "restricted_python",
133
- "description": "Protected Python execution with imports and unsafe constructs disabled.",
301
+ "safety": "restricted_python" if RESTRICTED_PYTHON_AVAILABLE else "basic",
302
+ "description": (
303
+ "Protected Python execution: Python's standard library is importable, except the "
304
+ "modules that reach processes, files, the network or code loading; exec/eval, "
305
+ "dunder access and third-party packages are refused."
306
+ ),
307
+ "imports": {
308
+ "allowed": "python standard library",
309
+ "denied_modules": sorted(SANDBOX_DENIED_MODULES),
310
+ "allowed_submodules": sorted(SANDBOX_ALLOWED_SUBMODULES),
311
+ },
134
312
  },
135
313
  {
136
314
  "id": "full_access",
@@ -163,13 +341,24 @@ def validate_code(code: str) -> None:
163
341
  raise CodeExecutionError(f"Syntax error: {e}") from e
164
342
 
165
343
  for node in ast.walk(tree):
166
- # Disallow imports
167
- if isinstance(node, (ast.Import, ast.ImportFrom)):
168
- raise CodeExecutionError("Imports are not allowed")
169
-
170
- # Disallow exec/eval
344
+ # Imports: Python's own standard library, minus the modules that reach
345
+ # the machine (sandbox_import_check); the run-time __import__ guard
346
+ # applies the same rule to whatever is actually imported.
347
+ if isinstance(node, ast.Import):
348
+ for alias in node.names:
349
+ sandbox_import_check(alias.name)
350
+ elif isinstance(node, ast.ImportFrom):
351
+ if node.level:
352
+ raise CodeExecutionError("relative imports are not allowed in the sandbox")
353
+ if any(alias.name == "*" for alias in node.names):
354
+ raise CodeExecutionError(f"'from {node.module} import *' is not allowed in the sandbox")
355
+ sandbox_import_check(node.module or "", tuple(alias.name for alias in node.names))
356
+
357
+ # Disallow exec/eval/compile and the dynamic import call (write `import x`)
171
358
  if isinstance(node, ast.Call) and isinstance(node.func, ast.Name):
172
- if node.func.id in ("exec", "eval", "compile", "__import__"):
359
+ if node.func.id == "__import__":
360
+ raise CodeExecutionError("'__import__' is not allowed in the sandbox: write `import <module>` instead")
361
+ if node.func.id in ("exec", "eval", "compile"):
173
362
  raise CodeExecutionError(f"'{node.func.id}' is not allowed")
174
363
 
175
364
  # Disallow dunder attributes
@@ -214,9 +403,10 @@ def _create_full_access_handler(code: str, function_name: str) -> Callable[[Any]
214
403
  raise CodeExecutionError(f"'{function_name}' is not a callable function")
215
404
 
216
405
  try:
217
- return func(input_data)
406
+ result = func(input_data)
218
407
  except Exception as e:
219
408
  raise CodeExecutionError(f"Runtime error: {e}") from e
409
+ return ensure_json_result(result, function_name)
220
410
 
221
411
  return handler
222
412
 
@@ -259,10 +449,11 @@ def _apply(func: Any, *args: Any, **kwargs: Any) -> Any:
259
449
  def _sandbox_parse_json(text: Any) -> Any:
260
450
  """``parse_json(text)`` — the sandbox's JSON reader.
261
451
 
262
- The sandbox has no imports, so JSON parsing was impossible in code nodes
263
- and would have been impossible in pin expressions (the design verdict's
264
- amendment 4: "parser" helpers were unbuildable inline). Errors stay in
265
- the CodeExecutionError family so they surface loudly with attribution.
452
+ Pin expressions have no imports, and code nodes had none when this helper
453
+ was added (the design verdict's amendment 4: "parser" helpers were
454
+ unbuildable inline); it stays the one-call JSON reader of both sandboxes.
455
+ Errors stay in the CodeExecutionError family so they surface loudly with
456
+ attribution.
266
457
  """
267
458
  import json
268
459
 
@@ -433,7 +624,7 @@ def _create_restricted_handler(code: str, function_name: str) -> Callable[[Any],
433
624
 
434
625
  def handler(input_data: Any) -> Any:
435
626
  restricted_globals = {
436
- "__builtins__": safe_builtins,
627
+ "__builtins__": sandbox_builtins(safe_builtins),
437
628
  "_getiter_": default_guarded_getiter,
438
629
  "_getitem_": default_guarded_getitem,
439
630
  "_iter_unpack_sequence_": guarded_iter_unpack_sequence,
@@ -473,9 +664,10 @@ def _create_restricted_handler(code: str, function_name: str) -> Callable[[Any],
473
664
  raise CodeExecutionError(f"'{function_name}' is not a callable function")
474
665
 
475
666
  try:
476
- return func(input_data)
667
+ result = func(input_data)
477
668
  except Exception as e:
478
669
  raise CodeExecutionError(f"Runtime error: {e}") from e
670
+ return ensure_json_result(result, function_name)
479
671
 
480
672
  return handler
481
673
 
@@ -494,11 +686,13 @@ def _create_basic_handler(code: str, function_name: str) -> Callable[[Any], Any]
494
686
  limited_globals = {
495
687
  "__builtins__": {
496
688
  # Same convenience set as the restricted lane (one source),
497
- # plus the literal names bare exec needs.
689
+ # plus the literal names bare exec needs and the sandbox's
690
+ # __import__ (standard library only, see sandbox_import_check).
498
691
  **sandbox_helper_globals(),
499
692
  "True": True,
500
693
  "False": False,
501
694
  "None": None,
695
+ "__import__": _sandbox_import,
502
696
  }
503
697
  }
504
698
 
@@ -528,8 +722,9 @@ def _create_basic_handler(code: str, function_name: str) -> Callable[[Any], Any]
528
722
  raise CodeExecutionError(f"'{function_name}' is not a callable function")
529
723
 
530
724
  try:
531
- return func(input_data)
725
+ result = func(input_data)
532
726
  except Exception as e:
533
727
  raise CodeExecutionError(f"Runtime error: {e}") from e
728
+ return ensure_json_result(result, function_name)
534
729
 
535
730
  return handler
@@ -70,6 +70,7 @@ from .code_executor import (
70
70
  CodeExecutionError,
71
71
  _apply,
72
72
  _inplacevar,
73
+ sandbox_builtins,
73
74
  sandbox_helper_globals,
74
75
  validate_code,
75
76
  )
@@ -152,11 +153,12 @@ def _validate_library_purity(name: str, code: str) -> None:
152
153
  construction, so the process-lifetime shared namespace can never leak
153
154
  state across runs/tenants. Build-time, loud, attributed by function name.
154
155
 
155
- FIRST runs the SAME ``validate_code`` the code-node lane uses (imports,
156
- exec/eval/compile/__import__, dunder-attribute access) — one source, no
157
- drift ("one sandbox, one rule"). The library lane previously skipped it
158
- and let in-body imports fail only at CALL time; now it refuses at build
159
- exactly like a code node. The purity rules below are the tier-2 ADDITION
156
+ FIRST runs the SAME ``validate_code`` the code-node lane uses (imports
157
+ outside Python's standard library or of the modules that reach the
158
+ machine, exec/eval/compile/__import__, dunder-attribute access) — one
159
+ source, no drift ("one sandbox, one rule"). The library lane previously
160
+ skipped it and let in-body imports fail only at CALL time; now it refuses
161
+ at build exactly like a code node. The purity rules below are the tier-2 ADDITION
160
162
  on top of that shared baseline.
161
163
  """
162
164
  try:
@@ -232,7 +234,7 @@ def compile_function_library(
232
234
  # mirrors the code-node sandbox EXACTLY (one sandbox, one rule) or bodies
233
235
  # die at call time with bare sandbox-internal NameErrors.
234
236
  shared_ns: Dict[str, Any] = {
235
- "__builtins__": safe_builtins,
237
+ "__builtins__": sandbox_builtins(safe_builtins), # + the sandbox __import__ (standard library)
236
238
  "_getiter_": default_guarded_getiter,
237
239
  "_getitem_": default_guarded_getitem,
238
240
  "_iter_unpack_sequence_": guarded_iter_unpack_sequence,