AbstractRuntime 0.8.2__tar.gz → 0.8.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 (678) hide show
  1. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/CHANGELOG.md +17 -0
  2. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/PKG-INFO +1 -1
  3. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/pyproject.toml +1 -1
  4. abstractruntime-0.8.3/release-notes.md +11 -0
  5. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/controller.py +24 -3
  6. abstractruntime-0.8.3/src/abstractruntime/integrations/abstractcore/mcp_facade.py +120 -0
  7. abstractruntime-0.8.3/tests/test_mcp_runs_untrusted_and_facade.py +119 -0
  8. abstractruntime-0.8.2/release-notes.md +0 -11
  9. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/.github/workflows/ci.yml +0 -0
  10. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/.github/workflows/release.yml +0 -0
  11. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/.gitignore +0 -0
  12. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/ACKNOWLEDGMENTS.md +0 -0
  13. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/CODE_OF_CONDUCT.md +0 -0
  14. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/CONTRIBUTING.md +0 -0
  15. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/LICENSE +0 -0
  16. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/README.md +0 -0
  17. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/ROADMAP.md +0 -0
  18. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/SECURITY.md +0 -0
  19. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/README.md +0 -0
  20. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  21. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  22. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  23. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  24. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  25. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  26. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  27. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/adr/README.md +0 -0
  28. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/api.md +0 -0
  29. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/architecture.md +0 -0
  30. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/artifacts.md +0 -0
  31. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/automations.md +0 -0
  32. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/README.md +0 -0
  33. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  34. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  35. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  36. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  37. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  38. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  39. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  40. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  41. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/003_wait_primitives.md +0 -0
  42. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  43. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  44. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  45. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  46. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  47. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  48. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  49. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  50. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/009_artifact_store.md +0 -0
  51. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  52. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  53. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  54. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  55. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  56. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  57. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  58. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  59. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  60. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  61. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  62. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  63. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  64. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  65. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  66. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  67. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
  68. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  69. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  70. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  71. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  72. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  73. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  74. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  75. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  76. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/004_tests.md +0 -0
  77. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  78. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  79. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  80. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  81. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/README.md +0 -0
  82. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  83. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  84. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  85. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  86. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  87. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  88. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  89. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  90. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  91. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  92. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  93. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  94. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
  95. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  96. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  97. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_portability/README.md +0 -0
  98. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  99. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  100. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  101. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  102. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  103. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  104. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  105. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  106. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  107. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  108. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  109. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  110. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  111. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  112. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  113. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  114. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  115. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  116. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  117. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  118. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  119. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  120. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  121. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  122. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  123. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  124. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  125. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  126. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  127. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/email.md +0 -0
  128. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/entity-runtime.md +0 -0
  129. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/evidence.md +0 -0
  130. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/faq.md +0 -0
  131. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/getting-started.md +0 -0
  132. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/integrations/abstractcore.md +0 -0
  133. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/limits.md +0 -0
  134. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/manual_testing.md +0 -0
  135. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/mcp-worker.md +0 -0
  136. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/proposal.md +0 -0
  137. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/provenance.md +0 -0
  138. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/snapshots.md +0 -0
  139. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/tool-approval.md +0 -0
  140. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/tools-comms.md +0 -0
  141. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/troubleshooting.md +0 -0
  142. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/docs/workflow-bundles.md +0 -0
  143. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/examples/01_hello_world.py +0 -0
  144. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/examples/02_ask_user.py +0 -0
  145. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/examples/03_wait_until.py +0 -0
  146. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/examples/04_multi_step.py +0 -0
  147. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/examples/05_persistence.py +0 -0
  148. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/examples/06_llm_integration.py +0 -0
  149. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/examples/07_react_agent.py +0 -0
  150. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/examples/README.md +0 -0
  151. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/llms-full.txt +0 -0
  152. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/llms.txt +0 -0
  153. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/mkdocs.yml +0 -0
  154. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/pytest.ini +0 -0
  155. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/scripts/backfill_diary_edges.py +0 -0
  156. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/scripts/generate_llms_full.py +0 -0
  157. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/__init__.py +0 -0
  158. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automation_queries.py +0 -0
  159. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/__init__.py +0 -0
  160. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/adapters.py +0 -0
  161. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/attention.py +0 -0
  162. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/bundle.py +0 -0
  163. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
  164. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
  165. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/commands.py +0 -0
  166. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/ledger.py +0 -0
  167. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/models.py +0 -0
  168. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/automations/service.py +0 -0
  169. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/__init__.py +0 -0
  170. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/config.py +0 -0
  171. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/effect_cancellation.py +0 -0
  172. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/event_keys.py +0 -0
  173. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/health.py +0 -0
  174. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/live_deltas.py +0 -0
  175. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/models.py +0 -0
  176. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/policy.py +0 -0
  177. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/progress_channel.py +0 -0
  178. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/run_attribution.py +0 -0
  179. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/run_identity.py +0 -0
  180. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/run_lifecycle.py +0 -0
  181. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/runtime.py +0 -0
  182. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/spec.py +0 -0
  183. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/tool_scope.py +0 -0
  184. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/core/vars.py +0 -0
  185. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/documents/__init__.py +0 -0
  186. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/documents/charts.py +0 -0
  187. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/documents/docx.py +0 -0
  188. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/documents/pdf.py +0 -0
  189. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/email/__init__.py +0 -0
  190. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/email/actions.py +0 -0
  191. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/email/automations.py +0 -0
  192. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/email/binding.py +0 -0
  193. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/email/feeder.py +0 -0
  194. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/email/frame.py +0 -0
  195. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/email/inbox.py +0 -0
  196. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/evidence/__init__.py +0 -0
  197. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/evidence/recorder.py +0 -0
  198. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/history_bundle.py +0 -0
  199. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/__init__.py +0 -0
  200. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/act_only.py +0 -0
  201. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/chat.py +0 -0
  202. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/communities.py +0 -0
  203. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/diary.py +0 -0
  204. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/digest.py +0 -0
  205. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/entity_runtime.py +0 -0
  206. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/fingerprint.py +0 -0
  207. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/lease.py +0 -0
  208. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/life.py +0 -0
  209. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/memory_reader.py +0 -0
  210. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/night_voice.py +0 -0
  211. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/phase_graph.py +0 -0
  212. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/phase_spec.py +0 -0
  213. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/prelude.py +0 -0
  214. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  215. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/reflection.py +0 -0
  216. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  217. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/substrate.py +0 -0
  218. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/tool_effects.py +0 -0
  219. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/tool_policy.py +0 -0
  220. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/tools.py +0 -0
  221. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/identity/visit_workflow.py +0 -0
  222. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/__init__.py +0 -0
  223. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  224. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  225. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  226. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
  227. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  228. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  229. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  230. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
  231. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  232. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  233. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
  234. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  235. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  236. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  237. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
  238. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  239. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  240. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  241. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  242. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  243. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
  244. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
  245. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  246. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  247. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  248. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
  249. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  250. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  251. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  252. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  253. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  254. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  255. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  256. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  257. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/memory/__init__.py +0 -0
  258. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/memory/active_context.py +0 -0
  259. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/memory/active_memory.py +0 -0
  260. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/memory/compaction.py +0 -0
  261. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/memory/kg_packets.py +0 -0
  262. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/memory/memact_composer.py +0 -0
  263. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/memory/recall_levels.py +0 -0
  264. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/memory/token_budget.py +0 -0
  265. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/rendering/__init__.py +0 -0
  266. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  267. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/rendering/json_stringify.py +0 -0
  268. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/scheduler/__init__.py +0 -0
  269. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/scheduler/convenience.py +0 -0
  270. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/scheduler/multi_store.py +0 -0
  271. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/scheduler/registry.py +0 -0
  272. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/scheduler/scheduler.py +0 -0
  273. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/session_history.py +0 -0
  274. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/session_turns.py +0 -0
  275. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/__init__.py +0 -0
  276. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/artifacts.py +0 -0
  277. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/base.py +0 -0
  278. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/commands.py +0 -0
  279. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/in_memory.py +0 -0
  280. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/json_files.py +0 -0
  281. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/lease.py +0 -0
  282. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/ledger_chain.py +0 -0
  283. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/ledger_slim.py +0 -0
  284. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/observable.py +0 -0
  285. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/offloading.py +0 -0
  286. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/serialize.py +0 -0
  287. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/snapshots.py +0 -0
  288. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/sqlite.py +0 -0
  289. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  290. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/triggers/__init__.py +0 -0
  291. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/triggers/email_received.py +0 -0
  292. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/triggers/manual.py +0 -0
  293. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/triggers/protocol.py +0 -0
  294. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/triggers/registry.py +0 -0
  295. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/triggers/schedule.py +0 -0
  296. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/turn_grounding.py +0 -0
  297. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/utils/__init__.py +0 -0
  298. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/utils/atomic_files.py +0 -0
  299. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/utils/file_filters.py +0 -0
  300. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/utils/workspace_paths.py +0 -0
  301. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  302. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  303. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  304. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  305. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  306. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  307. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  308. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  309. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  310. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  311. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  312. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
  313. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  314. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  315. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  316. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  317. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  318. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  319. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
  320. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
  321. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  322. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  323. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
  324. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  325. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/workflow_bundle/models.py +0 -0
  326. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  327. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  328. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  329. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/README.md +0 -0
  330. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/automation_harness.py +0 -0
  331. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/conftest.py +0 -0
  332. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/email_wp2_support.py +0 -0
  333. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/live_email/conftest.py +0 -0
  334. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/live_email/live_email_support.py +0 -0
  335. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/live_email/test_email_live_runtime.py +0 -0
  336. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_abstractcore_comms_facade.py +0 -0
  337. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_abstractcore_discovery_facade.py +0 -0
  338. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_abstractcore_host_facade.py +0 -0
  339. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_abstractcore_run_facade.py +0 -0
  340. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_abstractcore_telegram_facade.py +0 -0
  341. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_active_context_policy.py +0 -0
  342. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_active_memory.py +0 -0
  343. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_agora_agent_alias_identity.py +0 -0
  344. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_agora_tools_http.py +0 -0
  345. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  346. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_answer_user_effect.py +0 -0
  347. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_artifacts.py +0 -0
  348. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_commands.py +0 -0
  349. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_controller.py +0 -0
  350. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_controller_recovery.py +0 -0
  351. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_definition.py +0 -0
  352. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_discussion_isolation.py +0 -0
  353. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_growing_context.py +0 -0
  354. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_index.py +0 -0
  355. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_next_fire.py +0 -0
  356. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_occurrence_recovery.py +0 -0
  357. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_replay_read_only.py +0 -0
  358. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_retry.py +0 -0
  359. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_session_turns.py +0 -0
  360. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_status.py +0 -0
  361. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_automation_tool_approval.py +0 -0
  362. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_browser_probe_target_walling.py +0 -0
  363. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  364. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_capability_default_reasoning.py +0 -0
  365. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_chat_summarizer_integration.py +0 -0
  366. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_code_node_restricted_python.py +0 -0
  367. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_command_store.py +0 -0
  368. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_compaction_helpers.py +0 -0
  369. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_compaction_summarizer_route.py +0 -0
  370. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_config_facade_models_engines.py +0 -0
  371. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_control_adapter_while.py +0 -0
  372. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_controller_bundle_packaged.py +0 -0
  373. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_crash_ordering_inversions.py +0 -0
  374. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_create_if_absent.py +0 -0
  375. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_data_registry_facade.py +0 -0
  376. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_default_tools_camera_gating.py +0 -0
  377. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_default_tools_comms_gating.py +0 -0
  378. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_default_tools_include_skim_files.py +0 -0
  379. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_default_tools_include_skim_folders.py +0 -0
  380. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_default_tools_include_skim_web.py +0 -0
  381. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_default_tools_search_files_executor.py +0 -0
  382. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_diary_capture.py +0 -0
  383. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_diary_write_rescue.py +0 -0
  384. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_directory_lease.py +0 -0
  385. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_disabled_toolsets_seam.py +0 -0
  386. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  387. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_discovery_tts_unavailable_reason.py +0 -0
  388. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_discovery_voice_openai_api_key.py +0 -0
  389. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_discussion_session_anchor.py +0 -0
  390. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_document_markdown_tables.py +0 -0
  391. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_document_renderers_hr_quote.py +0 -0
  392. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_durable_toolsets.py +0 -0
  393. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_durable_write_discipline.py +0 -0
  394. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  395. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_effect_cancellation.py +0 -0
  396. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_effect_issuance_idempotency.py +0 -0
  397. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  398. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_election_consequence_teaching.py +0 -0
  399. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_email_binding_and_refiner.py +0 -0
  400. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_email_gate_fixes.py +0 -0
  401. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_email_inbox_and_trigger.py +0 -0
  402. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_email_regate_fixes.py +0 -0
  403. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_email_review_fixes.py +0 -0
  404. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_email_self_trigger_loop.py +0 -0
  405. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_email_toolset_and_walls.py +0 -0
  406. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_emergence_experiment.py +0 -0
  407. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_emit_event_uses_wait_index.py +0 -0
  408. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_emit_event_without_workflow_registry.py +0 -0
  409. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_endpoint_profile_route_context.py +0 -0
  410. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_awake_memory_fixes.py +0 -0
  411. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_brain_effects.py +0 -0
  412. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_chat_driver.py +0 -0
  413. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_chat_tools_reflection.py +0 -0
  414. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_diary.py +0 -0
  415. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_execute_tool.py +0 -0
  416. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_fetch_url_tool.py +0 -0
  417. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_history_window.py +0 -0
  418. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_life_loop.py +0 -0
  419. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_memory_richness.py +0 -0
  420. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_phase_graph_conformance.py +0 -0
  421. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_react_visit_window.py +0 -0
  422. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_recent_memories.py +0 -0
  423. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_runtime.py +0 -0
  424. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_search_memory.py +0 -0
  425. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  426. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_substrate_resolution.py +0 -0
  427. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_visit_honesty.py +0 -0
  428. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_workspace_cap.py +0 -0
  429. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_entity_workspace_tools.py +0 -0
  430. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_event_wait_index.py +0 -0
  431. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  432. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_evidence_recorder.py +0 -0
  433. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  434. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_execute_command_output_offload.py +0 -0
  435. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_execution_capability_discovery.py +0 -0
  436. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_explicit_eject_other_clients.py +0 -0
  437. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_factory_default_retry_policy.py +0 -0
  438. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  439. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_format_repair_nudge.py +0 -0
  440. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_fresh_install_no_provider.py +0 -0
  441. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_gateway_facades_c4899.py +0 -0
  442. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_git_read_only_refiner.py +0 -0
  443. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_hf_process_residency_merge.py +0 -0
  444. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_history_window_multimodal.py +0 -0
  445. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_hot_path_store_reads.py +0 -0
  446. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_indexed_idempotency_lookup.py +0 -0
  447. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_integration_abstractcore.py +0 -0
  448. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_integrations_abstractcore.py +0 -0
  449. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_json_file_run_store_children_index.py +0 -0
  450. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_json_run_cache_bound.py +0 -0
  451. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_json_store_scan_memo.py +0 -0
  452. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_jsonl_ledger_recovery.py +0 -0
  453. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_kg_learn_and_recall_contract.py +0 -0
  454. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_ledger_chain.py +0 -0
  455. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_ledger_record_slimming.py +0 -0
  456. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_ledger_subscription.py +0 -0
  457. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_live_token_deltas.py +0 -0
  458. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_media_artifact_refs.py +0 -0
  459. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  460. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  461. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  462. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_requires_prompt.py +0 -0
  463. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_response_schema_normalization.py +0 -0
  464. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_structured_output_fallback.py +0 -0
  465. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_text_phase_progress.py +0 -0
  466. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  467. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  468. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  469. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_client_grounding_tail.py +0 -0
  470. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_client_media_artifacts.py +0 -0
  471. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_client_system_context.py +0 -0
  472. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_client_tool_call_parsing.py +0 -0
  473. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_retry_classification.py +0 -0
  474. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_llm_streaming_on_token.py +0 -0
  475. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_local_helper_tool_exposure.py +0 -0
  476. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_local_residency_host_sweep.py +0 -0
  477. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  478. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_max_iterations_ceiling.py +0 -0
  479. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_mcp_remote_tool_executor.py +0 -0
  480. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_mcp_worker_logging.py +0 -0
  481. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_mcp_worker_security.py +0 -0
  482. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_mcp_worker_stdio.py +0 -0
  483. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_media_artifact_resolution.py +0 -0
  484. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_media_capability_default_routing.py +0 -0
  485. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_media_only_requests_skip_text_client.py +0 -0
  486. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_media_subprocess.py +0 -0
  487. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memact_composer_from_kg_result.py +0 -0
  488. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_appraise_handler.py +0 -0
  489. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_communities.py +0 -0
  490. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  491. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_kg_packets.py +0 -0
  492. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  493. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  494. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  495. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  496. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_note_effect.py +0 -0
  497. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_query_effect.py +0 -0
  498. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_query_rich_filters.py +0 -0
  499. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  500. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_seam_handlers.py +0 -0
  501. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_seam_sqlite_durability.py +0 -0
  502. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_memory_tag_effect.py +0 -0
  503. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_mlx_generation_serialization.py +0 -0
  504. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_mlx_process_residency_merge.py +0 -0
  505. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_model_eject_cancel.py +0 -0
  506. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_model_residency_clean_switch.py +0 -0
  507. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_model_residency_control_plane.py +0 -0
  508. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  509. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_multi_store_scheduler.py +0 -0
  510. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_multimodal_abstractcore_integration.py +0 -0
  511. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_native_mlx_application_wiring.py +0 -0
  512. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_native_mlx_execution_controls_live.py +0 -0
  513. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_native_tool_channel.py +0 -0
  514. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_night_voice.py +0 -0
  515. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_no_default_provider_refusal_ux.py +0 -0
  516. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_offload_answer_chain_c4978.py +0 -0
  517. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  518. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_offloading.py +0 -0
  519. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_packaging_extras.py +0 -0
  520. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_parallel_readonly_tool_execution.py +0 -0
  521. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_pause_resume.py +0 -0
  522. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_pdf_unicode_rendering.py +0 -0
  523. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_personal_cycle.py +0 -0
  524. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_phantom_attachment_index.py +0 -0
  525. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_phase_graph_artifact_control.py +0 -0
  526. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_phase_graph_obedience.py +0 -0
  527. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_phase_vocabulary_migration.py +0 -0
  528. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  529. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_prompt_cache_export_import.py +0 -0
  530. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  531. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_prompt_cache_modules.py +0 -0
  532. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  533. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  534. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_prompt_overlay.py +0 -0
  535. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  536. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_provider_pin_routing_isolation.py +0 -0
  537. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_queryable_run_store.py +0 -0
  538. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  539. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_read_idle_threading.py +0 -0
  540. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_readoption_experiment.py +0 -0
  541. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_real_integration.py +0 -0
  542. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_realize_election.py +0 -0
  543. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_recall_levels_policy.py +0 -0
  544. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_remote_client_cancel.py +0 -0
  545. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_remote_llm_client.py +0 -0
  546. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_remote_speculation_defaults.py +0 -0
  547. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_rendering_agent_trace_report.py +0 -0
  548. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_rendering_json_stringify.py +0 -0
  549. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_report_branding.py +0 -0
  550. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_resident_media_generation.py +0 -0
  551. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_resume_concurrent_same_wait.py +0 -0
  552. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_retry_idempotency.py +0 -0
  553. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_run_history_bundle.py +0 -0
  554. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_run_index_workspace_root.py +0 -0
  555. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_run_mutation_lock.py +0 -0
  556. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_run_scoped_tool_policy.py +0 -0
  557. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_run_tool_scope_ceiling.py +0 -0
  558. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_browser_session_boundary.py +0 -0
  559. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  560. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  561. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_effect_invocation_trace.py +0 -0
  562. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  563. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_install_boundary.py +0 -0
  564. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  565. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_node_traces.py +0 -0
  566. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  567. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_runtime_tick_step_gate.py +0 -0
  568. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_scheduler.py +0 -0
  569. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_send_email_refiner.py +0 -0
  570. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_send_email_self_default_policy.py +0 -0
  571. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  572. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_session_history.py +0 -0
  573. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_session_prompt_cache_attribution.py +0 -0
  574. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_session_prompt_cache_visibility.py +0 -0
  575. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_session_route_stamp.py +0 -0
  576. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_session_start_cost.py +0 -0
  577. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_shell_tool_exposure.py +0 -0
  578. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_snapshots.py +0 -0
  579. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_speculation_inheritance.py +0 -0
  580. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_speculation_reaches_provider_construction.py +0 -0
  581. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_sqlite_ledger_store.py +0 -0
  582. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_start_subworkflow_async_wait.py +0 -0
  583. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  584. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  585. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_steer_sidecar.py +0 -0
  586. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_storage_deletion.py +0 -0
  587. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_structured_output_schema_enum.py +0 -0
  588. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_subworkflow.py +0 -0
  589. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_terminal_effect_completion.py +0 -0
  590. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  591. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_thinking_inheritance.py +0 -0
  592. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  593. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_approval_executor.py +0 -0
  594. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_approval_resume_executes.py +0 -0
  595. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_approval_wait_key_identity.py +0 -0
  596. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_calls_idempotency_keys.py +0 -0
  597. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_catalog.py +0 -0
  598. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_descriptor_registry.py +0 -0
  599. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_executor_argument_sanitization.py +0 -0
  600. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_executor_error_output_detection.py +0 -0
  601. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_executor_filename_alias.py +0 -0
  602. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  603. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_executor_read_file_aliases.py +0 -0
  604. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_executor_timeout.py +0 -0
  605. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_inventory_facade.py +0 -0
  606. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_invoke_effect.py +0 -0
  607. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_policy_and_mounts.py +0 -0
  608. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_tool_wait_allowlist_safety.py +0 -0
  609. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_topic_election_world_model.py +0 -0
  610. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_trace_context_propagation.py +0 -0
  611. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_trigger_registry.py +0 -0
  612. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_trigger_schedule_math.py +0 -0
  613. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_turn_grounding_byte_stability.py +0 -0
  614. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_turn_grounding_carriers_a3.py +0 -0
  615. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_vars_query_effect.py +0 -0
  616. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visit_ab_fixture.py +0 -0
  617. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visit_midturn_elections.py +0 -0
  618. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visit_midturn_resume.py +0 -0
  619. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visit_workflow.py +0 -0
  620. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  621. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  622. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  623. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  624. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  625. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  626. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_entity_memory_nodes.py +0 -0
  627. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  628. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_llm_call_partial_override.py +0 -0
  629. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  630. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_memact_compose_node.py +0 -0
  631. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  632. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  633. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  634. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  635. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  636. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_add_message_builtin.py +0 -0
  637. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  638. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_agora_react_agent.py +0 -0
  639. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_call_tool_node.py +0 -0
  640. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  641. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_compiler_basic.py +0 -0
  642. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  643. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_continue_on_error.py +0 -0
  644. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  645. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  646. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  647. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_function_library.py +0 -0
  648. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_get_element_node.py +0 -0
  649. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_get_random_element_node.py +0 -0
  650. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_get_var_node.py +0 -0
  651. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_has_tools_builtin.py +0 -0
  652. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  653. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  654. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_make_object_node.py +0 -0
  655. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_media_nodes.py +0 -0
  656. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  657. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_memory_source_pins.py +0 -0
  658. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_pin_expressions.py +0 -0
  659. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_prompt_only.py +0 -0
  660. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_random_nodes.py +0 -0
  661. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_schema_enum_switch.py +0 -0
  662. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_string_contains_replace.py +0 -0
  663. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_visualflow_tool_parameters_node.py +0 -0
  664. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_voice_openai_api_key_path.py +0 -0
  665. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_w4_feelings_lens.py +0 -0
  666. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_wait_event_deadline.py +0 -0
  667. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_wait_event_prompt_metadata.py +0 -0
  668. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_wait_until_streak.py +0 -0
  669. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_wait_until_utc_normalization.py +0 -0
  670. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_workflow_bundle_registry.py +0 -0
  671. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_workspace_builtin_deny.py +0 -0
  672. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  673. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  674. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  675. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  676. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_workspace_prompt_context.py +0 -0
  677. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_workspace_read_only.py +0 -0
  678. {abstractruntime-0.8.2 → abstractruntime-0.8.3}/tests/test_write_chart.py +0 -0
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ Nothing yet.
11
+
12
+ ## [0.8.3] - 2026-10-01
13
+
14
+
15
+ ### Added
16
+
17
+ - `integrations.abstractcore.mcp_facade`: opens a stdio or HTTP MCP client (a stdio server starts
18
+ with exactly the environment given), turns a server's tool into an `mcp::<server>::<tool>` spec
19
+ without its URL, and runs `tools/call` with the runtime's result mapping. The gateway calls
20
+ registered MCP servers through it.
21
+
22
+ ### Changed
23
+
24
+ - An automation run started by an email from someone else (untrusted input) is never offered an MCP
25
+ tool: every `mcp::...` name leaves its tool lists and is never granted, even when named.
26
+
10
27
  ## [0.8.2] - 2026-10-01
11
28
 
12
29
  Pausing an automation also stops its retries. Requires AbstractCore 2.20.2 (unchanged).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.8.2
3
+ Version: 0.8.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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "AbstractRuntime"
7
- version = "0.8.2"
7
+ version = "0.8.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,11 @@
1
+ ### Added
2
+
3
+ - `integrations.abstractcore.mcp_facade`: opens a stdio or HTTP MCP client (a stdio server starts
4
+ with exactly the environment given), turns a server's tool into an `mcp::<server>::<tool>` spec
5
+ without its URL, and runs `tools/call` with the runtime's result mapping. The gateway calls
6
+ registered MCP servers through it.
7
+
8
+ ### Changed
9
+
10
+ - An automation run started by an email from someone else (untrusted input) is never offered an MCP
11
+ tool: every `mcp::...` name leaves its tool lists and is never granted, even when named.
@@ -320,7 +320,17 @@ def _never_granted(name: str) -> bool:
320
320
  `send` network reach (`agora_post_message`, `agora_send_dm`, which have no core row)."""
321
321
  from ..integrations.abstractcore.tool_effects import sends_messages
322
322
 
323
- return _grant_excludes(name) or sends_messages(name)
323
+ return _grant_excludes(name) or sends_messages(name) or _is_mcp_tool(name)
324
+
325
+
326
+ # Tools of registered MCP servers (`mcp::<server>::<tool>`, AbstractCore's naming): external
327
+ # programs whose effects no fact table here describes. A run that reads text written by other
328
+ # people is never offered one and never granted one, named or not.
329
+ _MCP_TOOL_PREFIX = "mcp::"
330
+
331
+
332
+ def _is_mcp_tool(name: Any) -> bool:
333
+ return str(name or "").strip().startswith(_MCP_TOOL_PREFIX)
324
334
 
325
335
 
326
336
  # `_runtime.untrusted_input = True`: the run reads text written by other people (an inbound
@@ -368,12 +378,13 @@ def grant_tool_approval(
368
378
  beyond configured services, no code or command execution, no messaging, no
369
379
  writes outside the run's workspace, no delegation). Every other tool
370
380
  (`fetch_url`, `skim_url`, `web_search`, `execute_command`, `shell_exec`,
371
- `execute_python`, `delegate_agent`, `channel_fs_write`, MCP tools...) is
381
+ `execute_python`, `delegate_agent`, `channel_fs_write`...) is
372
382
  granted only when the user NAMED it individually in the definition
373
383
  (`policy.untrusted_input_tools`, passed as `named_tools`), and only within
374
384
  the target's tool ceiling. Message-sending tools (`send_email`,
375
385
  `reply_email`, `agora_post_message`, `agora_send_dm`, ...) are never
376
- granted, named or not. A withheld call asks a person. Schedule and manual
386
+ granted, named or not. MCP tools (`mcp::<server>::<tool>`) leave the run's tool lists
387
+ and are never granted. A withheld call asks a person. Schedule and manual
377
388
  automations keep the full grant (decision recorded in 0992).
378
389
 
379
390
  Untrusted input under `approval="ask"` (framework backlog 0992 re-gate): the
@@ -397,6 +408,15 @@ def grant_tool_approval(
397
408
  if not untrusted_input:
398
409
  return
399
410
  replaced_target_policy = True
411
+ mcp_withheld: list = []
412
+ if untrusted_input:
413
+ # Untrusted input: every MCP tool leaves the run's tool lists (the agent's `tools` input and
414
+ # the `_runtime.allowed_tools` ceiling), so the model is never offered one.
415
+ for holder, key in ((input_data, "tools"), (runtime_ns, "allowed_tools")):
416
+ raw = holder.get(key)
417
+ if isinstance(raw, list) and any(_is_mcp_tool(t) for t in raw):
418
+ mcp_withheld += [str(t).strip() for t in raw if _is_mcp_tool(t)]
419
+ holder[key] = [t for t in raw if not _is_mcp_tool(t)]
400
420
  allowed = runtime_ns.get("allowed_tools")
401
421
  names = allowed if isinstance(allowed, list) else list(TOOL_EFFECT_CLASSES)
402
422
  candidates = sorted({n.strip() for n in names if isinstance(n, str) and n.strip()})
@@ -413,6 +433,7 @@ def grant_tool_approval(
413
433
  else:
414
434
  withheld = [n for n in candidates if _grant_excludes(n)]
415
435
  tools = [n for n in candidates if n not in withheld]
436
+ withheld = withheld + sorted(set(mcp_withheld) - set(withheld))
416
437
  policy: Dict[str, Any] = {"auto_approve_tools": tools, "withheld_tools": withheld, "source": AUTOMATION_GRANT_SOURCE}
417
438
  if untrusted_input:
418
439
  policy.update(
@@ -0,0 +1,120 @@
1
+ """AbstractCore's MCP clients, reached through AbstractRuntime (the gateway's import boundary).
2
+
3
+ The gateway may not import `abstractcore` directly (tests/test_gateway_import_boundary.py). Everything
4
+ it needs to test a registered MCP server and to call that server's tools from a run lives here:
5
+
6
+ - `open_mcp_client`: a connected-on-demand client for one server (stdio or Streamable HTTP). A stdio
7
+ server starts with exactly the environment given (`inherit_env=False`), so no gateway secret leaks
8
+ into a third-party process.
9
+ - `mcp_tool_spec`: one server tool as the spec agents see, named `mcp::<server>::<tool>`.
10
+ - `call_mcp_tool`: one `tools/call`, mapped to the runtime's tool result convention
11
+ `(success, output, error)` (the same mapping `McpToolExecutor` uses).
12
+ - the client error classes, for callers that turn failures into sentences.
13
+
14
+ Requires the AbstractCore MCP clients with `initialize()` and `inherit_env` (abstractcore round 3).
15
+ """
16
+ from __future__ import annotations
17
+
18
+ from typing import Any, Dict, Mapping, Optional, Sequence, Tuple
19
+
20
+ from abstractcore.mcp import ( # noqa: F401 - re-exported names
21
+ MCP_TOOL_PREFIX,
22
+ McpClient,
23
+ McpServerInfo,
24
+ McpStdioClient,
25
+ mcp_tool_to_abstractcore_tool_spec,
26
+ namespaced_tool_name,
27
+ parse_namespaced_tool_name,
28
+ )
29
+ from abstractcore.mcp.client import McpError, McpHttpError, McpProtocolError, McpRpcError # noqa: F401
30
+
31
+
32
+ def is_mcp_tool_name(name: Any) -> bool:
33
+ """True for a namespaced MCP tool name (`mcp::<server>::<tool>`)."""
34
+ return parse_namespaced_tool_name(str(name or "")) is not None
35
+
36
+
37
+ def open_mcp_client(
38
+ *,
39
+ transport: str,
40
+ command: str = "",
41
+ args: Sequence[str] = (),
42
+ cwd: Optional[str] = None,
43
+ env: Optional[Mapping[str, str]] = None,
44
+ url: str = "",
45
+ headers: Optional[Mapping[str, str]] = None,
46
+ timeout_s: Optional[float] = 30.0,
47
+ client_name: str = "abstractgateway",
48
+ ) -> Any:
49
+ """A client for one MCP server. stdio starts the process now (raises FileNotFoundError and
50
+ friends when it cannot start); http connects on the first request. Call `initialize()` first."""
51
+ if transport == "stdio":
52
+ if not str(command or "").strip():
53
+ raise ValueError("a stdio MCP server needs a command")
54
+ return McpStdioClient(
55
+ command=[str(command)] + [str(a) for a in args],
56
+ cwd=cwd or None,
57
+ env=dict(env or {}),
58
+ inherit_env=False,
59
+ timeout_s=timeout_s,
60
+ client_name=client_name,
61
+ )
62
+ if transport == "http":
63
+ if not str(url or "").strip():
64
+ raise ValueError("an http MCP server needs a URL")
65
+ return McpClient(url=str(url), headers=dict(headers or {}), timeout_s=timeout_s, client_name=client_name)
66
+ raise ValueError(f"unknown MCP transport {transport!r} (stdio or http)")
67
+
68
+
69
+ def close_mcp_client(client: Any) -> None:
70
+ """Close the client; a stdio server still running afterwards is killed."""
71
+ try:
72
+ client.close()
73
+ except Exception: # noqa: BLE001
74
+ pass
75
+ proc = getattr(client, "_proc", None)
76
+ if proc is not None and proc.poll() is None:
77
+ try:
78
+ proc.kill()
79
+ proc.wait(timeout=2)
80
+ except Exception: # noqa: BLE001
81
+ pass
82
+
83
+
84
+ def mcp_tool_spec(*, server_id: str, tool: Dict[str, Any], transport: str) -> Dict[str, Any]:
85
+ """The agent-facing spec of one MCP tool ({name: mcp::<server>::<tool>, description, parameters,
86
+ tags, origin}). `tool` is a tools/list entry ({name, description, inputSchema}). The origin carries
87
+ the server id and transport only — never a URL, header or command."""
88
+ server = McpServerInfo(server_id=server_id, url=f"{transport}://{server_id}", transport=transport)
89
+ spec = mcp_tool_to_abstractcore_tool_spec(tool, server=server)
90
+ origin = dict(spec.get("origin") or {})
91
+ origin.pop("url", None)
92
+ spec["origin"] = origin
93
+ return spec
94
+
95
+
96
+ def call_mcp_tool(client: Any, *, tool_name: str, arguments: Optional[Dict[str, Any]] = None) -> Tuple[bool, Any, Optional[str]]:
97
+ """One tools/call → (success, output, error). Raises the client's errors (the caller words them)."""
98
+ from .tool_executor import _mcp_result_to_error, _mcp_result_to_output
99
+
100
+ result = client.call_tool(name=tool_name, arguments=dict(arguments or {}))
101
+ err = _mcp_result_to_error(result)
102
+ if err is not None:
103
+ return False, None, err
104
+ return True, _mcp_result_to_output(result), None
105
+
106
+
107
+ __all__ = [
108
+ "MCP_TOOL_PREFIX",
109
+ "McpError",
110
+ "McpHttpError",
111
+ "McpProtocolError",
112
+ "McpRpcError",
113
+ "call_mcp_tool",
114
+ "close_mcp_client",
115
+ "is_mcp_tool_name",
116
+ "mcp_tool_spec",
117
+ "namespaced_tool_name",
118
+ "open_mcp_client",
119
+ "parse_namespaced_tool_name",
120
+ ]
@@ -0,0 +1,119 @@
1
+ """MCP tools in runs (round 3, lane mcp-runs): untrusted input never offers nor grants an MCP tool,
2
+ and the facade the gateway calls MCP servers through (stdio, exact env, mcp::<server>::<tool>)."""
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+ import textwrap
7
+
8
+ import pytest
9
+
10
+ from abstractruntime.automations.controller import grant_tool_approval
11
+ from abstractruntime.core.models import RunState, RunStatus
12
+ from abstractruntime.integrations.abstractcore import mcp_facade
13
+ from abstractruntime.integrations.abstractcore.effect_handlers import _execute_with_run_policy
14
+ from abstractruntime.integrations.abstractcore.tool_executor import (
15
+ ApprovalToolExecutor,
16
+ MappingToolExecutor,
17
+ ToolApprovalPolicy,
18
+ )
19
+
20
+ MCP = "mcp::fake::echo"
21
+ EXECUTED: list = []
22
+
23
+
24
+ def _executor() -> ApprovalToolExecutor:
25
+ def _echo(**kw):
26
+ EXECUTED.append(MCP)
27
+ return kw
28
+
29
+ def _read(**kw):
30
+ EXECUTED.append("read_file")
31
+ return "x"
32
+
33
+ return ApprovalToolExecutor(delegate=MappingToolExecutor({MCP: _echo, "read_file": _read}), policy=ToolApprovalPolicy())
34
+
35
+
36
+ def _run(runtime_ns) -> RunState:
37
+ return RunState(run_id="r", workflow_id="w", status=RunStatus.RUNNING, current_node="n", vars={"_runtime": runtime_ns})
38
+
39
+
40
+ @pytest.fixture(autouse=True)
41
+ def _clear():
42
+ EXECUTED.clear()
43
+
44
+
45
+ @pytest.mark.parametrize("approval", ["auto", "ask"])
46
+ def test_untrusted_occurrence_removes_every_mcp_tool_from_its_tool_lists(approval):
47
+ data = {"tools": ["read_file", MCP, "mcp::other::x"], "_runtime": {"allowed_tools": ["read_file", MCP]}}
48
+ grant_tool_approval(data, untrusted_input=True, named_tools=[MCP], approval=approval)
49
+ assert data["tools"] == ["read_file"]
50
+ assert data["_runtime"]["allowed_tools"] == ["read_file"]
51
+ pol = data["_runtime"]["tool_policy"]
52
+ assert MCP in pol["withheld_tools"] and "mcp::other::x" in pol["withheld_tools"]
53
+ assert MCP not in pol["auto_approve_tools"]
54
+
55
+
56
+ def test_trusted_occurrence_keeps_mcp_tools():
57
+ """Control: a schedule/manual automation keeps them (and allow-all grants them)."""
58
+ data = {"tools": ["read_file", MCP], "_runtime": {"allowed_tools": ["read_file", MCP]}}
59
+ grant_tool_approval(data, untrusted_input=False, approval="auto")
60
+ assert data["tools"] == ["read_file", MCP]
61
+ assert MCP in data["_runtime"]["tool_policy"]["auto_approve_tools"]
62
+
63
+
64
+ def test_untrusted_run_never_auto_runs_an_mcp_tool_even_named():
65
+ pol = {"auto_approve_tools": [MCP, "read_file"], "untrusted_input": True, "approval": "auto",
66
+ "untrusted_input_tools": [MCP, "read_file"]}
67
+ out = _execute_with_run_policy(_executor(), [{"name": MCP, "arguments": {}, "call_id": "1"}], _run({"tool_policy": pol}))
68
+ assert out["mode"] == "approval_required" and EXECUTED == []
69
+ # Control: the named non-MCP tool runs.
70
+ out = _execute_with_run_policy(_executor(), [{"name": "read_file", "arguments": {}, "call_id": "1"}], _run({"tool_policy": pol}))
71
+ assert out["mode"] == "executed" and EXECUTED == ["read_file"]
72
+
73
+
74
+ def test_static_policy_asks_for_an_mcp_tool_and_allow_all_runs_it():
75
+ out = _execute_with_run_policy(_executor(), [{"name": MCP, "arguments": {}, "call_id": "1"}], _run({}))
76
+ assert out["mode"] == "approval_required" and EXECUTED == []
77
+ out = _execute_with_run_policy(_executor(), [{"name": MCP, "arguments": {}, "call_id": "1"}],
78
+ _run({"tool_policy": {"auto_approve_max_risk_rank": 4}}))
79
+ assert out["mode"] == "executed" and EXECUTED == [MCP]
80
+
81
+
82
+ FAKE = textwrap.dedent(
83
+ """
84
+ import json, os, sys
85
+ for line in sys.stdin:
86
+ req = json.loads(line)
87
+ rid, m = req.get("id"), req.get("method")
88
+ if rid is None:
89
+ continue
90
+ if m == "initialize":
91
+ res = {"protocolVersion": "2025-06-18", "capabilities": {"tools": {}}, "serverInfo": {"name": "fake", "version": "1"}}
92
+ elif m == "tools/call":
93
+ a = req["params"]["arguments"]
94
+ res = {"content": [{"type": "text", "text": json.dumps({"echo": a.get("text"), "secret_env": os.environ.get("GW_SECRET")})}]}
95
+ else:
96
+ res = {"tools": [{"name": "echo", "description": "Echo text.", "inputSchema": {"type": "object", "properties": {"text": {"type": "string"}}, "required": ["text"]}}]}
97
+ sys.stdout.write(json.dumps({"jsonrpc": "2.0", "id": rid, "result": res}) + "\\n"); sys.stdout.flush()
98
+ """
99
+ )
100
+
101
+
102
+ def test_facade_calls_a_stdio_server_with_exactly_the_given_env(tmp_path, monkeypatch):
103
+ script = tmp_path / "fake.py"
104
+ script.write_text(FAKE)
105
+ monkeypatch.setenv("GW_SECRET", "must-not-leak")
106
+ client = mcp_facade.open_mcp_client(transport="stdio", command=sys.executable, args=[str(script)], cwd=str(tmp_path),
107
+ env={"PATH": "/usr/bin:/bin"}, timeout_s=10)
108
+ try:
109
+ client.initialize()
110
+ tools = client.list_tools()
111
+ ok, output, err = mcp_facade.call_mcp_tool(client, tool_name="echo", arguments={"text": "hi"})
112
+ finally:
113
+ mcp_facade.close_mcp_client(client)
114
+ assert (ok, err) == (True, None)
115
+ assert output == {"echo": "hi", "secret_env": None}
116
+ spec = mcp_facade.mcp_tool_spec(server_id="fake", tool=tools[0], transport="stdio")
117
+ assert spec["name"] == MCP and "text" in spec["parameters"]
118
+ assert "url" not in spec["origin"] and spec["origin"]["server_id"] == "fake"
119
+ assert mcp_facade.is_mcp_tool_name(MCP) and not mcp_facade.is_mcp_tool_name("read_file")
@@ -1,11 +0,0 @@
1
- Pausing an automation also stops its retries. Requires AbstractCore 2.20.2 (unchanged).
2
-
3
- ### Changed
4
- - `automation.pause` also stops retries: an occurrence waiting in retry backoff is cancelled
5
- (quietly, like `stop_current`), and a scheduled attempt that fails while the automation is paused
6
- completes `failed` without a retry. An attempt already running still finishes, and a manual run
7
- (`run_now`, allowed while paused) keeps its retries.
8
-
9
- ### Notes
10
- - A retry that is waiting in backoff when you pause an automation is cancelled instead of starting
11
- after its backoff. Resume the automation, or use `run_now`, to run it again.
File without changes