AbstractRuntime 0.15.3__tar.gz → 0.17.0__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 (895) hide show
  1. abstractruntime-0.17.0/.github/workflows/changelog.yml +23 -0
  2. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/CHANGELOG.md +131 -0
  3. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/CONTRIBUTING.md +4 -2
  4. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/PKG-INFO +49 -8
  5. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/README.md +45 -4
  6. abstractruntime-0.17.0/changelog.d/README.md +21 -0
  7. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/README.md +5 -1
  8. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +1 -0
  9. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/api.md +117 -8
  10. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/architecture.md +45 -4
  11. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/README.md +1 -0
  12. abstractruntime-0.17.0/docs/backlog/completed/0864_facade_catalog_hub_search_pages.md +27 -0
  13. abstractruntime-0.17.0/docs/backlog/planned/0866_queued_state_in_the_ledger_and_pools_lend_never_build.md +55 -0
  14. abstractruntime-0.17.0/docs/backlog/proposed/0865_model_loaded_ledger_event.md +27 -0
  15. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/entity-runtime.md +15 -0
  16. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/faq.md +1 -1
  17. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/getting-started.md +2 -2
  18. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/integrations/abstractcore.md +154 -6
  19. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/replay.md +35 -1
  20. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/troubleshooting.md +45 -1
  21. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/workflow-bundles.md +12 -0
  22. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/llms-full.txt +480 -30
  23. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/llms.txt +12 -4
  24. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/pyproject.toml +7 -4
  25. abstractruntime-0.17.0/release-notes.md +46 -0
  26. abstractruntime-0.17.0/scripts/changelog.py +210 -0
  27. abstractruntime-0.17.0/skills/abstractruntime/SKILL.md +273 -0
  28. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/__init__.py +2 -0
  29. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/attention.py +11 -1
  30. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/conversation_search.py +3 -1
  31. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/effect_cancellation.py +15 -0
  32. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/live_deltas.py +1 -0
  33. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/models.py +4 -1
  34. abstractruntime-0.17.0/src/abstractruntime/core/questions.py +54 -0
  35. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/runtime.py +315 -20
  36. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/history_bundle.py +40 -6
  37. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/visit_workflow.py +74 -0
  38. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +75 -3
  39. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +18 -0
  40. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +98 -115
  41. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +516 -35
  42. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +1 -1
  43. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +43 -0
  44. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +11 -0
  45. abstractruntime-0.17.0/src/abstractruntime/integrations/abstractcore/structured_output.py +152 -0
  46. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +4 -0
  47. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +2 -0
  48. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +2 -0
  49. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +2 -0
  50. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +1 -0
  51. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +1 -0
  52. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/view.py +97 -4
  53. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/multi_store.py +3 -2
  54. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/in_memory.py +2 -2
  55. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/json_files.py +2 -2
  56. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/sqlite.py +3 -2
  57. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +6 -0
  58. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/compiler.py +65 -1
  59. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +101 -27
  60. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +128 -8
  61. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +6 -0
  62. abstractruntime-0.17.0/tests/fixtures/visualflow/compare_text_operands.json +38 -0
  63. abstractruntime-0.17.0/tests/fixtures/visualflow/typed_literals_flow.json +223 -0
  64. abstractruntime-0.17.0/tests/fixtures/visualflow/typed_literals_flow.legacy.json +219 -0
  65. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_abstractcore_server_facade.py +29 -0
  66. abstractruntime-0.17.0/tests/test_automation_occurrence_error.py +41 -0
  67. abstractruntime-0.17.0/tests/test_changelog_fragments.py +158 -0
  68. abstractruntime-0.17.0/tests/test_config_facade_model_contexts.py +44 -0
  69. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_config_facade_models_engines.py +34 -0
  70. abstractruntime-0.17.0/tests/test_conversational_questions.py +234 -0
  71. abstractruntime-0.17.0/tests/test_decision_facade_and_node.py +878 -0
  72. abstractruntime-0.17.0/tests/test_decision_output.py +466 -0
  73. abstractruntime-0.17.0/tests/test_discovery_facade_model_errors.py +24 -0
  74. abstractruntime-0.17.0/tests/test_effect_interrupted.py +144 -0
  75. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_execution_capability_discovery.py +6 -2
  76. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_hf_process_residency_merge.py +16 -0
  77. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_kg_learn_and_recall_contract.py +2 -2
  78. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_response_schema_normalization.py +19 -29
  79. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_structured_output_fallback.py +2 -2
  80. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_retry_classification.py +33 -0
  81. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_model_residency_clean_switch.py +5 -2
  82. abstractruntime-0.17.0/tests/test_model_residency_release_and_readable_holders.py +207 -0
  83. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_packaging_extras.py +3 -3
  84. abstractruntime-0.17.0/tests/test_public_action_approval_context.py +89 -0
  85. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_remote_llm_client.py +32 -0
  86. abstractruntime-0.17.0/tests/test_replay_public_updates.py +144 -0
  87. abstractruntime-0.17.0/tests/test_residency_fit_refusal_broadcast.py +80 -0
  88. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_run_history_bundle.py +56 -0
  89. abstractruntime-0.17.0/tests/test_structured_schema_execution_client.py +206 -0
  90. abstractruntime-0.17.0/tests/test_visit_live_guidance.py +81 -0
  91. abstractruntime-0.17.0/tests/test_visual_compare_typed_values.py +117 -0
  92. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_schema_enum_switch.py +3 -14
  93. abstractruntime-0.17.0/tests/test_voice_projection_contract.py +216 -0
  94. abstractruntime-0.15.3/release-notes.md +0 -14
  95. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/.github/workflows/ci.yml +0 -0
  96. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/.github/workflows/release.yml +0 -0
  97. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/.gitignore +0 -0
  98. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/ACKNOWLEDGMENTS.md +0 -0
  99. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/CODE_OF_CONDUCT.md +0 -0
  100. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/LICENSE +0 -0
  101. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/ROADMAP.md +0 -0
  102. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/SECURITY.md +0 -0
  103. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  104. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  105. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  106. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  107. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  108. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  109. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
  110. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0010_one_replay_many_views.md +0 -0
  111. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
  112. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/adr/README.md +0 -0
  113. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/artifacts.md +0 -0
  114. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/automations.md +0 -0
  115. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  116. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  117. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  118. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  119. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  120. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  121. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  122. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  123. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
  124. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  125. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  126. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  127. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  128. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  129. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  130. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  131. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  132. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/009_artifact_store.md +0 -0
  133. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  134. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  135. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  136. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  137. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  138. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  139. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  140. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  141. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  142. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  143. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  144. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  145. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  146. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  147. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  148. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  149. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
  150. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
  151. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
  152. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
  153. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
  154. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
  155. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
  156. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  157. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  158. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  159. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  160. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  161. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  162. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  163. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  164. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/004_tests.md +0 -0
  165. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  166. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  167. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  168. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  169. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/README.md +0 -0
  170. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  171. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  172. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  173. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  174. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  175. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  176. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  177. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  178. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  179. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  180. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  181. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  182. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
  183. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
  184. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0854_replay_view.md +0 -0
  185. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
  186. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
  187. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
  188. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  189. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  190. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
  191. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  192. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  193. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  194. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  195. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  196. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  197. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  198. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  199. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  200. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  201. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  202. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  203. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  204. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  205. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  206. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  207. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  208. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  209. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  210. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  211. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
  212. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
  213. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
  214. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
  215. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
  216. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  217. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  218. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  219. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  220. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  221. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  222. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  223. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  224. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  225. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/email.md +0 -0
  226. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/evidence.md +0 -0
  227. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/integrations/abstractmemory.md +0 -0
  228. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/limits.md +0 -0
  229. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/manual_testing.md +0 -0
  230. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/mcp-worker.md +0 -0
  231. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/proposal.md +0 -0
  232. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/provenance.md +0 -0
  233. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/snapshots.md +0 -0
  234. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/tool-approval.md +0 -0
  235. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/docs/tools-comms.md +0 -0
  236. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/examples/01_hello_world.py +0 -0
  237. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/examples/02_ask_user.py +0 -0
  238. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/examples/03_wait_until.py +0 -0
  239. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/examples/04_multi_step.py +0 -0
  240. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/examples/05_persistence.py +0 -0
  241. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/examples/06_llm_integration.py +0 -0
  242. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/examples/07_react_agent.py +0 -0
  243. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/examples/README.md +0 -0
  244. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/mkdocs.yml +0 -0
  245. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/pytest.ini +0 -0
  246. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/scripts/backfill_diary_edges.py +0 -0
  247. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/scripts/generate_llms_full.py +0 -0
  248. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/scripts/regen_replay_conformance.py +0 -0
  249. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automation_queries.py +0 -0
  250. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/__init__.py +0 -0
  251. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/adapters.py +0 -0
  252. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundle.py +0 -0
  253. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
  254. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
  255. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/commands.py +0 -0
  256. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/consumers.py +0 -0
  257. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/controller.py +0 -0
  258. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/ledger.py +0 -0
  259. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/models.py +0 -0
  260. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/samples.py +0 -0
  261. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/service.py +0 -0
  262. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/automations/wakes.py +0 -0
  263. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/__init__.py +0 -0
  264. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/config.py +0 -0
  265. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/event_keys.py +0 -0
  266. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/health.py +0 -0
  267. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/policy.py +0 -0
  268. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/progress_channel.py +0 -0
  269. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/publish.py +0 -0
  270. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/run_attribution.py +0 -0
  271. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/run_identity.py +0 -0
  272. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
  273. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/run_origin.py +0 -0
  274. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/spec.py +0 -0
  275. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/step_context.py +0 -0
  276. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/tool_scope.py +0 -0
  277. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/core/vars.py +0 -0
  278. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/documents/__init__.py +0 -0
  279. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/documents/charts.py +0 -0
  280. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/documents/docx.py +0 -0
  281. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/documents/pdf.py +0 -0
  282. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/email/__init__.py +0 -0
  283. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/email/actions.py +0 -0
  284. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/email/automations.py +0 -0
  285. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/email/binding.py +0 -0
  286. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/email/feeder.py +0 -0
  287. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/email/frame.py +0 -0
  288. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/email/inbox.py +0 -0
  289. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/evidence/__init__.py +0 -0
  290. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/evidence/recorder.py +0 -0
  291. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/__init__.py +0 -0
  292. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/act_only.py +0 -0
  293. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/chat.py +0 -0
  294. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/communities.py +0 -0
  295. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/diary.py +0 -0
  296. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/digest.py +0 -0
  297. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
  298. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/fingerprint.py +0 -0
  299. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/lease.py +0 -0
  300. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/life.py +0 -0
  301. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/memory_reader.py +0 -0
  302. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/night_voice.py +0 -0
  303. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/phase_graph.py +0 -0
  304. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/phase_spec.py +0 -0
  305. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/prelude.py +0 -0
  306. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  307. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/reflection.py +0 -0
  308. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  309. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/substrate.py +0 -0
  310. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/tool_effects.py +0 -0
  311. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/tool_policy.py +0 -0
  312. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/identity/tools.py +0 -0
  313. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/__init__.py +0 -0
  314. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  315. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  316. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
  317. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  318. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  319. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  320. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  321. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  322. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
  323. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  324. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  325. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  326. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  327. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  328. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
  329. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  330. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  331. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  332. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  333. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
  334. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  335. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  336. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
  337. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  338. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  339. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
  340. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
  341. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  342. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  343. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  344. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  345. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  346. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
  347. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  348. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/mail_verbs.py +0 -0
  349. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/memory/__init__.py +0 -0
  350. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/memory/active_context.py +0 -0
  351. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/memory/active_memory.py +0 -0
  352. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/memory/compaction.py +0 -0
  353. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/memory/kg_packets.py +0 -0
  354. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/memory/memact_composer.py +0 -0
  355. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/memory/recall_levels.py +0 -0
  356. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/memory/token_budget.py +0 -0
  357. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/rendering/__init__.py +0 -0
  358. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  359. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
  360. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/__init__.py +0 -0
  361. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/__init__.py +0 -0
  362. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
  363. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
  364. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
  365. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
  366. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
  367. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
  368. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
  369. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
  370. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
  371. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
  372. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
  373. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
  374. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
  375. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
  376. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
  377. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
  378. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
  379. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
  380. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
  381. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
  382. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
  383. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
  384. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
  385. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
  386. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
  387. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
  388. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
  389. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
  390. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
  391. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
  392. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
  393. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
  394. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
  395. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
  396. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
  397. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
  398. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
  399. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
  400. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
  401. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
  402. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
  403. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
  404. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
  405. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
  406. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
  407. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
  408. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
  409. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
  410. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
  411. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
  412. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
  413. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
  414. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
  415. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
  416. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/delta.py +0 -0
  417. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/replay/executions.py +0 -0
  418. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/__init__.py +0 -0
  419. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/convenience.py +0 -0
  420. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/registry.py +0 -0
  421. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
  422. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/session_history.py +0 -0
  423. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/session_turns.py +0 -0
  424. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/__init__.py +0 -0
  425. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/artifacts.py +0 -0
  426. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/base.py +0 -0
  427. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/change_ring.py +0 -0
  428. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/commands.py +0 -0
  429. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/lease.py +0 -0
  430. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
  431. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
  432. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/observable.py +0 -0
  433. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/offloading.py +0 -0
  434. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/serialize.py +0 -0
  435. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/session_tool_policy.py +0 -0
  436. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/snapshots.py +0 -0
  437. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  438. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/__init__.py +0 -0
  439. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
  440. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/connection_events.py +0 -0
  441. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/connections.py +0 -0
  442. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/email_received.py +0 -0
  443. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/event_frame.py +0 -0
  444. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/feed.py +0 -0
  445. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/manual.py +0 -0
  446. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/protocol.py +0 -0
  447. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/registry.py +0 -0
  448. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/schedule.py +0 -0
  449. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/triggers/webhook.py +0 -0
  450. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/turn_grounding.py +0 -0
  451. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/utils/__init__.py +0 -0
  452. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/utils/atomic_files.py +0 -0
  453. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/utils/file_filters.py +0 -0
  454. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
  455. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  456. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  457. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  458. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  459. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  460. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  461. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  462. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  463. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  464. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  465. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  466. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  467. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  468. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  469. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  470. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
  471. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
  472. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
  473. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  474. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  475. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
  476. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  477. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
  478. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  479. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  480. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  481. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/README.md +0 -0
  482. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/automation_harness.py +0 -0
  483. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/conftest.py +0 -0
  484. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/email_wp2_support.py +0 -0
  485. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/fixtures/feeds/atom.xml +0 -0
  486. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
  487. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
  488. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss1.xml +0 -0
  489. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss2.xml +0 -0
  490. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
  491. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/live_email/conftest.py +0 -0
  492. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/live_email/live_email_support.py +0 -0
  493. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/live_email/test_email_live_runtime.py +0 -0
  494. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/media_endpoint_profile_probe.py +0 -0
  495. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_abstractcore_comms_facade.py +0 -0
  496. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_abstractcore_discovery_facade.py +0 -0
  497. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_abstractcore_host_facade.py +0 -0
  498. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_abstractcore_run_facade.py +0 -0
  499. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_abstractcore_structured_facade.py +0 -0
  500. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_abstractcore_telegram_facade.py +0 -0
  501. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_active_consumers_index.py +0 -0
  502. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_active_context_policy.py +0 -0
  503. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_active_index.py +0 -0
  504. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_active_memory.py +0 -0
  505. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_agora_agent_alias_identity.py +0 -0
  506. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_agora_tools_http.py +0 -0
  507. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  508. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_answer_user_effect.py +0 -0
  509. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_artifact_session_candidates.py +0 -0
  510. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_artifacts.py +0 -0
  511. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_calendar_schedule.py +0 -0
  512. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_commands.py +0 -0
  513. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_controller.py +0 -0
  514. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_controller_recovery.py +0 -0
  515. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_definition.py +0 -0
  516. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_discussion_isolation.py +0 -0
  517. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_email_results.py +0 -0
  518. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_growing_context.py +0 -0
  519. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_index.py +0 -0
  520. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_list_reads.py +0 -0
  521. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_named_policy_compiler.py +0 -0
  522. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_next_fire.py +0 -0
  523. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
  524. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_occurrence_recovery.py +0 -0
  525. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_replay_read_only.py +0 -0
  526. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_retry.py +0 -0
  527. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_session_turns.py +0 -0
  528. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_status.py +0 -0
  529. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_automation_tool_approval.py +0 -0
  530. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_browser_probe_target_walling.py +0 -0
  531. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  532. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_capability_default_reasoning.py +0 -0
  533. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_chat_summarizer_integration.py +0 -0
  534. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_code_node_imports.py +0 -0
  535. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_code_node_restricted_python.py +0 -0
  536. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_command_sandbox_host_facade.py +0 -0
  537. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_command_store.py +0 -0
  538. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_compaction_helpers.py +0 -0
  539. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_compaction_summarizer_route.py +0 -0
  540. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_config_facade_voice_input_hint.py +0 -0
  541. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_control_adapter_while.py +0 -0
  542. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_controller_bundle_packaged.py +0 -0
  543. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_conversation_search.py +0 -0
  544. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_crash_ordering_inversions.py +0 -0
  545. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_create_if_absent.py +0 -0
  546. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_data_registry_facade.py +0 -0
  547. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_default_model_warmup_switch.py +0 -0
  548. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_default_tools_camera_gating.py +0 -0
  549. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_default_tools_comms_gating.py +0 -0
  550. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_files.py +0 -0
  551. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_folders.py +0 -0
  552. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_web.py +0 -0
  553. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_default_tools_search_files_executor.py +0 -0
  554. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_diary_capture.py +0 -0
  555. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_diary_write_rescue.py +0 -0
  556. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_directory_lease.py +0 -0
  557. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_disabled_toolsets_seam.py +0 -0
  558. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  559. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
  560. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
  561. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_discussion_session_anchor.py +0 -0
  562. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_document_markdown_tables.py +0 -0
  563. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_document_renderers_hr_quote.py +0 -0
  564. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_durable_toolsets.py +0 -0
  565. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_durable_write_discipline.py +0 -0
  566. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  567. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_effect_cancellation.py +0 -0
  568. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_effect_issuance_idempotency.py +0 -0
  569. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  570. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_election_consequence_teaching.py +0 -0
  571. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_binding_and_refiner.py +0 -0
  572. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_feeder_batched.py +0 -0
  573. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_feeder_flags.py +0 -0
  574. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_gate_fixes.py +0 -0
  575. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_inbox_and_trigger.py +0 -0
  576. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_received_mailbox_id.py +0 -0
  577. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_regate_fixes.py +0 -0
  578. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_review_fixes.py +0 -0
  579. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_self_trigger_loop.py +0 -0
  580. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_stream_consumers.py +0 -0
  581. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_email_toolset_and_walls.py +0 -0
  582. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_emergence_experiment.py +0 -0
  583. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_emit_event_uses_wait_index.py +0 -0
  584. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
  585. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
  586. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
  587. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
  588. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_endpoint_profile_route_context.py +0 -0
  589. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_awake_memory_fixes.py +0 -0
  590. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_brain_effects.py +0 -0
  591. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_chat_driver.py +0 -0
  592. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_chat_tools_reflection.py +0 -0
  593. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_diary.py +0 -0
  594. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_execute_tool.py +0 -0
  595. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_fetch_url_tool.py +0 -0
  596. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_history_window.py +0 -0
  597. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_life_loop.py +0 -0
  598. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_memory_richness.py +0 -0
  599. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_phase_graph_conformance.py +0 -0
  600. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_react_visit_window.py +0 -0
  601. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_recent_memories.py +0 -0
  602. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_runtime.py +0 -0
  603. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_search_memory.py +0 -0
  604. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  605. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_substrate_resolution.py +0 -0
  606. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_visit_honesty.py +0 -0
  607. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_workspace_cap.py +0 -0
  608. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_entity_workspace_tools.py +0 -0
  609. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_event_index_cross_process.py +0 -0
  610. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_event_wait_index.py +0 -0
  611. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  612. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_evidence_recorder.py +0 -0
  613. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  614. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_execute_command_output_offload.py +0 -0
  615. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_explicit_eject_other_clients.py +0 -0
  616. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_factory_default_retry_policy.py +0 -0
  617. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  618. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_format_repair_nudge.py +0 -0
  619. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_fresh_install_no_provider.py +0 -0
  620. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_gateway_facades_c4899.py +0 -0
  621. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_git_read_only_refiner.py +0 -0
  622. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_history_window_multimodal.py +0 -0
  623. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_hot_path_store_reads.py +0 -0
  624. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_indexed_idempotency_lookup.py +0 -0
  625. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_integration_abstractcore.py +0 -0
  626. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_integrations_abstractcore.py +0 -0
  627. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_json_file_run_store_change_token_after_build.py +0 -0
  628. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_json_file_run_store_children_index.py +0 -0
  629. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_json_file_run_store_index_build_race.py +0 -0
  630. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_json_run_cache_bound.py +0 -0
  631. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_json_store_scan_memo.py +0 -0
  632. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_jsonl_ledger_recovery.py +0 -0
  633. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
  634. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_jsonl_row_index.py +0 -0
  635. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_ledger_chain.py +0 -0
  636. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_ledger_cursor_invariants.py +0 -0
  637. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_ledger_get_record.py +0 -0
  638. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_ledger_record_slimming.py +0 -0
  639. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_ledger_subscription.py +0 -0
  640. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_live_token_deltas.py +0 -0
  641. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
  642. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  643. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  644. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  645. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_prefix_stability_contract.py +0 -0
  646. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_requires_prompt.py +0 -0
  647. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_text_phase_progress.py +0 -0
  648. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  649. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  650. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  651. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_client_grounding_tail.py +0 -0
  652. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_client_media_artifacts.py +0 -0
  653. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_client_system_context.py +0 -0
  654. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
  655. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_llm_streaming_on_token.py +0 -0
  656. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_local_helper_tool_exposure.py +0 -0
  657. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_local_residency_host_sweep.py +0 -0
  658. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  659. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mail_verbs.py +0 -0
  660. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mailbox_index.py +0 -0
  661. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_max_iterations_ceiling.py +0 -0
  662. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mcp_remote_tool_executor.py +0 -0
  663. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
  664. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mcp_worker_logging.py +0 -0
  665. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mcp_worker_security.py +0 -0
  666. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mcp_worker_stdio.py +0 -0
  667. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_media_artifact_resolution.py +0 -0
  668. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_media_capability_default_routing.py +0 -0
  669. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_media_host_endpoint_resolver.py +0 -0
  670. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
  671. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_media_subprocess.py +0 -0
  672. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memact_composer_from_kg_result.py +0 -0
  673. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_appraise_handler.py +0 -0
  674. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_communities.py +0 -0
  675. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_facade.py +0 -0
  676. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  677. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_kg_packets.py +0 -0
  678. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  679. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  680. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  681. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  682. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_note_effect.py +0 -0
  683. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_query_effect.py +0 -0
  684. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_query_rich_filters.py +0 -0
  685. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_revise.py +0 -0
  686. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  687. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_seam_handlers.py +0 -0
  688. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
  689. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_step_provenance.py +0 -0
  690. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_memory_tag_effect.py +0 -0
  691. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mlx_generation_serialization.py +0 -0
  692. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_mlx_process_residency_merge.py +0 -0
  693. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_model_eject_cancel.py +0 -0
  694. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_model_residency_control_plane.py +0 -0
  695. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  696. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_multi_store_scheduler.py +0 -0
  697. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
  698. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_native_mlx_application_wiring.py +0 -0
  699. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
  700. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_native_tool_channel.py +0 -0
  701. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_night_voice.py +0 -0
  702. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
  703. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_occurrence_named_inputs.py +0 -0
  704. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_occurrence_samples.py +0 -0
  705. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_offload_answer_chain_c4978.py +0 -0
  706. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  707. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_offloading.py +0 -0
  708. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
  709. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_pause_resume.py +0 -0
  710. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_pdf_unicode_rendering.py +0 -0
  711. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_personal_cycle.py +0 -0
  712. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_phantom_attachment_index.py +0 -0
  713. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_phase_graph_artifact_control.py +0 -0
  714. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_phase_graph_obedience.py +0 -0
  715. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_phase_vocabulary_migration.py +0 -0
  716. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  717. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_prompt_cache_export_import.py +0 -0
  718. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  719. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_prompt_cache_modules.py +0 -0
  720. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  721. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  722. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_prompt_overlay.py +0 -0
  723. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  724. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_provider_pin_routing_isolation.py +0 -0
  725. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_publish_event.py +0 -0
  726. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_queryable_run_store.py +0 -0
  727. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_r12_workspace_sandbox.py +0 -0
  728. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  729. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_read_idle_threading.py +0 -0
  730. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_readoption_experiment.py +0 -0
  731. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_real_integration.py +0 -0
  732. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_realize_election.py +0 -0
  733. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_recall_levels_policy.py +0 -0
  734. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_remote_client_cancel.py +0 -0
  735. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_remote_speculation_defaults.py +0 -0
  736. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_rendering_agent_trace_report.py +0 -0
  737. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_rendering_json_stringify.py +0 -0
  738. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_replay_conformance.py +0 -0
  739. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_replay_conformance_package.py +0 -0
  740. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_replay_cursor_token.py +0 -0
  741. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_replay_delta_cost.py +0 -0
  742. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_replay_invariants.py +0 -0
  743. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_replay_review_findings.py +0 -0
  744. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_replay_tool_policy.py +0 -0
  745. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_report_branding.py +0 -0
  746. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_resident_media_generation.py +0 -0
  747. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_resume_concurrent_same_wait.py +0 -0
  748. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_retry_idempotency.py +0 -0
  749. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_run_index_workspace_root.py +0 -0
  750. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_run_mutation_lock.py +0 -0
  751. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_run_origin.py +0 -0
  752. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_run_scoped_tool_policy.py +0 -0
  753. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_run_store_change_token.py +0 -0
  754. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_run_tool_scope_ceiling.py +0 -0
  755. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_browser_session_boundary.py +0 -0
  756. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  757. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  758. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
  759. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  760. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_install_boundary.py +0 -0
  761. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  762. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_node_traces.py +0 -0
  763. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  764. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_runtime_tick_step_gate.py +0 -0
  765. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_schedule_run.py +0 -0
  766. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_schedule_v1_corpus.py +0 -0
  767. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_schedule_v2_calendar.py +0 -0
  768. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_scheduler.py +0 -0
  769. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_send_email_refiner.py +0 -0
  770. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_send_email_self_default_policy.py +0 -0
  771. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  772. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_session_history.py +0 -0
  773. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_session_prompt_cache_attribution.py +0 -0
  774. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_session_prompt_cache_visibility.py +0 -0
  775. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_session_route_stamp.py +0 -0
  776. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_session_start_cost.py +0 -0
  777. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_session_tool_policy.py +0 -0
  778. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_shell_tool_exposure.py +0 -0
  779. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_snapshots.py +0 -0
  780. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_speculation_inheritance.py +0 -0
  781. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
  782. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_sqlite_ledger_store.py +0 -0
  783. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_start_subworkflow_async_wait.py +0 -0
  784. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  785. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  786. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_steer_sidecar.py +0 -0
  787. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_step_context.py +0 -0
  788. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_storage_deletion.py +0 -0
  789. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_streamed_voice_namespace.py +0 -0
  790. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_structured_output_schema_enum.py +0 -0
  791. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_subworkflow.py +0 -0
  792. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_terminal_effect_completion.py +0 -0
  793. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  794. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_thinking_inheritance.py +0 -0
  795. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  796. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_approval_executor.py +0 -0
  797. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_approval_resume_executes.py +0 -0
  798. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
  799. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
  800. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_catalog.py +0 -0
  801. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_descriptor_registry.py +0 -0
  802. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
  803. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_executor_error_output_detection.py +0 -0
  804. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_executor_filename_alias.py +0 -0
  805. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  806. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
  807. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_executor_timeout.py +0 -0
  808. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_inventory_facade.py +0 -0
  809. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_invoke_effect.py +0 -0
  810. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_policy_and_mounts.py +0 -0
  811. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
  812. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_topic_election_world_model.py +0 -0
  813. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trace_context_propagation.py +0 -0
  814. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trigger_cloudevents.py +0 -0
  815. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trigger_connection_listening.py +0 -0
  816. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trigger_connections.py +0 -0
  817. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trigger_feed.py +0 -0
  818. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trigger_registry.py +0 -0
  819. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trigger_schedule_math.py +0 -0
  820. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trigger_webhook.py +0 -0
  821. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_trusted_run_index.py +0 -0
  822. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_turn_grounding_byte_stability.py +0 -0
  823. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
  824. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_vars_query_effect.py +0 -0
  825. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visit_ab_fixture.py +0 -0
  826. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visit_midturn_elections.py +0 -0
  827. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visit_midturn_resume.py +0 -0
  828. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visit_workflow.py +0 -0
  829. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  830. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  831. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  832. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  833. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  834. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  835. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_entity_memory_nodes.py +0 -0
  836. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  837. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_llm_call_partial_override.py +0 -0
  838. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  839. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
  840. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
  841. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
  842. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_memact_compose_node.py +0 -0
  843. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  844. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  845. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  846. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_reroute_lowering.py +0 -0
  847. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_set_vars_pins.py +0 -0
  848. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  849. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  850. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_add_message_builtin.py +0 -0
  851. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  852. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_agora_react_agent.py +0 -0
  853. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_call_tool_node.py +0 -0
  854. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  855. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_compiler_basic.py +0 -0
  856. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  857. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_continue_on_error.py +0 -0
  858. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  859. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  860. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  861. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_function_library.py +0 -0
  862. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_get_element_node.py +0 -0
  863. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_get_random_element_node.py +0 -0
  864. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_get_var_node.py +0 -0
  865. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
  866. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  867. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  868. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_make_object_node.py +0 -0
  869. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_media_nodes.py +0 -0
  870. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  871. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_memory_source_pins.py +0 -0
  872. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_pin_expressions.py +0 -0
  873. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_prompt_only.py +0 -0
  874. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_random_nodes.py +0 -0
  875. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_string_contains_replace.py +0 -0
  876. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
  877. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_voice_library_facade.py +0 -0
  878. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_voice_openai_api_key_path.py +0 -0
  879. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
  880. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_w4_feelings_lens.py +0 -0
  881. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_wait_event_deadline.py +0 -0
  882. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_wait_event_prompt_metadata.py +0 -0
  883. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_wait_until_streak.py +0 -0
  884. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_wait_until_utc_normalization.py +0 -0
  885. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workflow_bundle_registry.py +0 -0
  886. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_builtin_deny.py +0 -0
  887. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
  888. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  889. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  890. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  891. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  892. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_prompt_context.py +0 -0
  893. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_read_only.py +0 -0
  894. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_workspace_writable_paths.py +0 -0
  895. {abstractruntime-0.15.3 → abstractruntime-0.17.0}/tests/test_write_chart.py +0 -0
@@ -0,0 +1,23 @@
1
+ name: Changelog
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ jobs:
10
+ changelog:
11
+ # A pull request that changes src/ adds a fragment, changelog.d/<pr-or-slug>.md, instead of
12
+ # editing CHANGELOG.md (scripts/changelog.py; changelog.d/README.md).
13
+ runs-on: ubuntu-latest
14
+ timeout-minutes: 5
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+ - uses: actions/setup-python@v5
20
+ with:
21
+ python-version: "3.12"
22
+ - name: Fragment present and well formed
23
+ run: python scripts/changelog.py check --base "origin/${{ github.base_ref }}"
@@ -5,8 +5,139 @@ 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
+ Unreleased changes live in [`changelog.d/`](changelog.d/README.md), one file per pull request;
9
+ `python scripts/changelog.py assemble X.Y.Z` writes them here at release.
10
+
8
11
  ## [Unreleased]
9
12
 
13
+ ## [0.17.0] - 2026-11-03
14
+
15
+ ### Added
16
+
17
+ - **`EffectInterrupted`: a host stop interrupts an effect, it never fails it** (`core/effect_cancellation.py`,
18
+ exported as `abstractruntime.EffectInterrupted`; gateway backlog 1103). A host that stops on purpose (a gateway stop
19
+ or restart, a model-host restart for an update) raises it into the effect in flight. The runtime writes no terminal
20
+ record and re-raises: the ledger tail stays STARTED, the run stays RUNNING at its last durable step, and the next
21
+ tick (after the host is back) sends the effect again under the same idempotency key as attempt 1, so no retry is
22
+ consumed and nothing reaches an automation's outcome. A BaseException like `EffectKilled`, so no `except Exception`
23
+ on the way turns it into a failure. The interrupted call's live text ends `cancelled` with `detail: "interrupted"`.
24
+ - **Public updates carry their type in replay** (`replay/view.py`). A `public_update` message has
25
+ `update_kind`: `"finding"` when the actor typed the event `kind: "finding"` (a fact or piece of
26
+ evidence it established), otherwise `"progress"` (what it is doing), including events written
27
+ before the field existed. Clients use it as given, for example to list the findings of a
28
+ conversation. See [docs/replay.md](docs/replay.md#public-conversation-messages).
29
+ - **Hosts tell model errors apart through the discovery facade** (`integrations/abstractcore/discovery_facade.py`):
30
+ `ModelNotDownloadedError` and `ModelNotFoundError` are AbstractCore's own classes, so a host (the gateway's
31
+ "model not downloaded" sentence) catches exactly what Core raises and reads `model` / `provider` without importing
32
+ AbstractCore.
33
+ - **Replayed tool calls keep the model's call id** (`replay/view.py`). An `activities[].tool_calls[]`
34
+ row keyed by a runtime call id (`id`) also carries `call_id`, the model's own id, which is what a
35
+ public update's `source_call_ids` cite; a client can now resolve a finding to the results it cites.
36
+
37
+ ### Changed
38
+
39
+ - **Compare reads text next to a number or true/false exactly** (`visual/builtins.py` `_exact_from_text`, ADR 0049 as
40
+ amended 2026-11-03: "we must have automatic conversion"). When one side is a number or true/false and the other is
41
+ text, the text is read as that type by the Flow editor's literal grammar (a decimal number, ASCII, no `_`, finite,
42
+ a whole number kept exact beyond 2**53; or `true`/`false` in any case), so `5 == "5"` and `"9" < 10` are true. This
43
+ covers flows saved by AbstractFlow 0.13.0 (a typed value stored as text next to a wired number) and text arriving at
44
+ run time from a form, an API input or a model, with no re-save. `"1_000"`, `"0x10"`, `"inf"`, `"nan"`, full-width
45
+ digits and empty text are refused. Text against text is never converted (`"10" > "9"` compares text). The table is
46
+ `tests/fixtures/visualflow/compare_text_operands.json`.
47
+ - **Compare refuses values it cannot compare instead of answering False** (`visual/builtins.py` `control_compare`,
48
+ ADR 0049). Text that is not a number next to a number, or not `true`/`false` next to true/false (`5 == "five"`,
49
+ every operator; text that is a number or true/false is read as one, see "Compare reads text next to a number or true/false exactly" above), and `<`/`<=`/`>`/`>=` between values Python cannot order
50
+ (`None > 3`, a list and a number), now fail the step with an error naming the node and pins: "Compare 'Is five'
51
+ (node same) ==: b is text ('five'), not a number; a is a number (5)." Before, these answered False silently.
52
+ Equality of same-type values and Python's equality across other types (`None == 5`) are unchanged; true/false
53
+ compares with numbers as Python's booleans do (`True == 1`).
54
+ - **AbstractCore floor 2.33.0** in the base install and the `apple` and `gpu` extras (was 2.32.0).
55
+
56
+ ### Fixed
57
+
58
+ - **An automation occurrence whose agent completed with `success: false` names the agent's reason**
59
+ (`automations/attention.py`). The attention item and the `automation_failed` email said "completed" (the run's status
60
+ word); the reason is now read from the Agent node's `meta.error`, and when there is none it says so plainly.
61
+
62
+ ## [0.16.0] - 2026-11-02
63
+
64
+ ### Added
65
+
66
+ - A package agent skill documents operating durable workflows, waits, storage and structured execution through the public Python API.
67
+
68
+ - **`config_facade.model_catalog(..., hub_page=, hub_page_size=)`** (backlog 0864) passes a page of Hugging Face search
69
+ results through to AbstractCore, which reports it in `hub.search`. It is passed only when asked. An AbstractCore
70
+ whose catalog has no `hub_page` raises `AbstractCoreTooOld` in words instead of answering page 1.
71
+ `AbstractCoreTooOld` accepts a `required=` description. `extended=True` (every quant of a row's own GGUF repos,
72
+ AbstractCore 0865) is passed the same way and refused in words on an AbstractCore without it.
73
+ - **Fit refusals (AbstractCore ADR 0010) reach every surface.** A load refused with `ModelDoesNotFitError` (the model
74
+ does not fit even after evicting what is not locked) is never retried (a retry would only evict more); its
75
+ sentence is the effect error, its fields (needed/free bytes, kept models, suggestions) are kept on the ledger
76
+ record (`result.error_details`, `EffectOutcome.error_details`) and in the residency diagnostics (`refusals`, the
77
+ last five), and the default pair keeps the sentence instead of the configuration hint.
78
+ - Opt-in public actor updates and explicit human-guidance acceptance messages share durable replay history, with host-origin checks and exact original human words.
79
+ - Conversational ASK_USER policies distinguish indefinite essential questions from 120–300 second clarifications with predeclared safe fallbacks. Fresh question keys, strict server cutoffs, durable outcomes, retained late replies and pause/restart behavior reuse the existing due-wait indexes.
80
+ - Participant-checked live entity-visit corrections use the existing durable sidecar and fresh attributed recall before the next actor reasoning boundary.
81
+ - The package agent skill documents these question and guidance contracts.
82
+ - **A decision is an `LLM_CALL` whose output spec says `modality: "decision"`** (`integrations/abstractcore/llm_client.py`, `effect_handlers.py`). Payload `{"prompt": <state>, "output": {"modality": "decision", "questions": {...}, "truncate"?, "model"?}}`; the result is the usual normalized shape plus `decision` (the System One body: `model`, `answers`, `usage`, `latency_ms`[, `truncated`]) and `answers` (= `decision.answers`), with `content` the answers as JSON, `outputs`/`resources` empty and `provider`/`model` the decision model that answered. No artifact, no store, no `generated_media` tag; the resolved action id is `decision`. Local: the resolved spec (the `output.decision` capability default, or the spec's own route) reaches `generate(prompt, output=[spec])` and core runs it through its decision pool on any text provider; the pooled client serves a decision-only request on the capability host without building the text model. Remote: `POST {core}/v1/decisions` with `model` = `provider/model`, `state`, `questions`, `truncate`; the server's body maps to the same result.
83
+ - **`decide`: a calibrated decision as a durable child run and a VisualFlow node** (`integrations/abstractcore/run_facade.py`, `visualflow_compiler/visual/executor.py`, `visualflow_compiler/compiler.py`). `run_facade.decide(run_id, state=..., questions=..., model=None, truncate=None)` starts a child `LLM_CALL` whose output spec is `{"modality": "decision", "questions": ...}` (plus `truncate` and `model` when given); a `model` written as `provider/model` (`mlx/jaredpalmer/kev-4b`) travels whole and AbstractCore splits it. The `decide` VisualFlow node asks one typed question (inputs `state`, `question`, `question_type` = `choice` | `noul` | `score`, `options` / `levels`, `provider`, `model`, `truncate`) and fills that type's output pins (`answer`, then `choice`/`confidence`/`probabilities`, `noul`/`verdict`, or `score`/`level`/`confidence`/`probabilities`, plus `model`, `success`); a wired `questions` object asks several System One questions at once and fills `answers`. It lowers to the same `LLM_CALL`; the result sync also carries `decision` (the System One body), `content` and `meta` (`abstractflow.decide.v1.meta`).
84
+ - **A local model's loaded context, through the config facade** (`integrations/abstractcore/config_facade.py`).
85
+ `configured_model_context(provider, model)` and `set_model_context(provider, model, tokens)` read and set the
86
+ per-model context AbstractCore loads a model with (AbstractCore ADR 0010 point 8: a set context is a pin, loaded
87
+ as is or refused, never shrunk). The gateway's Resources page "Set context" calls them instead of importing
88
+ AbstractCore. On a Core without `abstractcore.config.model_contexts` (every release up to 2.31.1) they raise
89
+ `AbstractCoreTooOld` naming what is missing.
90
+ - Tool approval waits can carry optional `details.public_action` (`text`, `update_id`, `run_id`,
91
+ `iteration`, `call_ids`) supplied by an actor adapter alongside its proposed effect batch.
92
+ Runtime validates its owning run and exact call identities, narrows it to the actual gated
93
+ subset, and withholds mismatched or private-fenced context. The canonical replay preserves
94
+ this public explanation; approval decisions and policies are unchanged.
95
+ - Hosts can start Core's independently authenticated HTTP listener through a lazy Runtime lifecycle facade; unused server dependencies stay unloaded.
96
+
97
+ ### Changed
98
+
99
+ - **Changelog entries are fragments** (`changelog.d/`, `scripts/changelog.py`). A pull request adds
100
+ `changelog.d/<pr-or-slug>.md` instead of editing `CHANGELOG.md`'s `[Unreleased]` section, which conflicted on every
101
+ merge of main; the release assembles the fragments (`python scripts/changelog.py assemble X.Y.Z`) and CI fails a pull
102
+ request that changes `src/` without one.
103
+ - **AbstractCore floor `>=2.32.0`** (`pyproject.toml`, `integrations/abstractcore/output_specs.py`): the `decision` output modality (`output.decision` route, `/v1/decisions`, `MultimodalGenerateResponse.decision`, `output_has_generated_media` False for it).
104
+ - **Voice transport is not a conversation attachment** (`history_bundle.py`, `conversation_search.py`). A session turn in
105
+ a history bundle no longer lists the recording of a spoken question or the read-aloud audio of an answer among its
106
+ `attachments` and `artifacts`; `is_voice_transport(tags)` recognizes them (`purpose` `voice_playback` or
107
+ `voice_dictation`, `artifact_space` `voice`, a `voice/` or `client:voice/` path). The bundle's own `artifacts`
108
+ section still lists every artifact. Clients that showed voice recordings as turn attachments stop doing so.
109
+
110
+ ### Fixed
111
+
112
+ - **A console change to a non-text default no longer reloads the text model, and a runtime never
113
+ leaves a dropped copy resident.** Found on the Linux test server (two accounts, a 9B GGUF):
114
+ changing the embedding default evicted the admin runtime's whole text pool; the boot-warmed copy
115
+ was dropped, its eject skipped because both accounts' runtimes named the same default, and the
116
+ copy stayed in memory with no pool holding it ("resident ~5.4 GiB + 8.3 GiB cache ... still in
117
+ use by runtime client 70a5b844f350, runtime client 70a72f833890; not ejected"), with nothing
118
+ running. Now: (1) a capability-only refresh keeps every pooled text client and hands it the new
119
+ routes in place (a move of the `input.text` route itself still rebuilds); (2) a configured default
120
+ the client has not built is no longer a residency claim (a loaded one is its `pool` claim, one
121
+ loading is `building`); (3) when another runtime really keeps its own copy, the dropping runtime
122
+ still unloads its OWN HuggingFace copy (`released_own_copies`; MLX shares weights and is left to
123
+ the process-wide eject); (4) holders are named in words: `MultiLocalAbstractCoreLLMClient
124
+ .residency_owner_label` (hosts set it; the gateway: "the runtime of account default/bob"), claims
125
+ carry `owner_label`, residency records carry `held_by`, and the skip reason reads "the runtime of
126
+ account default/bob (loaded) still uses it". HuggingFace process rows also carry the loaded
127
+ `context_length` and `kv_cache_bytes` (AbstractCore 2.31.1).
128
+ - **A standalone `LocalAbstractCoreLLMClient` claims the model it holds** (ROOT backlog 0897): another
129
+ client's default switch or a server unload no longer ejects weights it still uses (its next call
130
+ silently reloaded them). A pool unregisters the clients it adopts (its own claims cover them).
131
+ A dropped HuggingFace copy is never lent to another request again, a copy a call just started on
132
+ is freed when that call ends, and one waiter per model frees every copy a later switch drops.
133
+ - Conversational answer and retained-reply replay preserves original human whitespace and the actual question generation identity, including after another question has opened.
134
+ - Completed flows with an explicit structured `result` and no prose now retain a final JSON message in replay. Generic agent envelopes are not serialized; internal-bearing results are withheld from the public projection while their technical run output remains available.
135
+ - **A pin expression that is a single bare word explains how to pass text** (`visualflow_compiler/visual/pin_expressions.py`).
136
+ `hello` is read as a Python name; its `NameError` now says to write `'hello'` with quotes or to set the pin's value
137
+ instead of an expression.
138
+ - **The residency listing carries the model's slot pool** (`integrations/abstractcore/llm_client.py`, core ADR 0011, OVH 8080 pass four). A GGUF row now carries `slots`, `slots_max`, `active`, `queued`, `copies`, `slot_bytes`, `shared_weights` and `slot_refusal_reason`, folded from Core's process row. Before, only the gateway's `/host/state` showed them, so the Resources table could not say that requests were waiting, or why another slot is not built. A row whose holders share one weights instance no longer says "each a full copy of the weights".
139
+ - Structured generation carries JSON schemas across execution-client boundaries and creates validators where inference runs, preserving nested validation and defaults without serializing Python classes. Remote Core calls forward their structured response format and explicitly refuse Python validator classes that cannot cross HTTP. Local explicit validator classes remain supported. Request serialization failures are not retried, and execution diagnostics include the actual ledger step identity.
140
+
10
141
  ## [0.15.3] - 2026-10-29
11
142
 
12
143
  ### Fixed
@@ -81,7 +81,8 @@ When behavior changes, update:
81
81
  - `docs/api.md` (public API surface + imports)
82
82
  - `docs/getting-started.md` (onboarding examples)
83
83
  - `docs/architecture.md` (semantics/invariants)
84
- - `CHANGELOG.md` (user-visible changes)
84
+ - a changelog fragment, `changelog.d/<pr-or-slug>.md` (user-visible changes; never an edit of
85
+ `CHANGELOG.md`: [changelog.d/README.md](changelog.d/README.md), checked by CI)
85
86
 
86
87
  List every `docs/*.md` page in `docs/README.md`. Keep `llms.txt` (the hand-curated index) and
87
88
  `llms-full.txt` in step with the documentation in the same change. `llms-full.txt` is generated:
@@ -92,4 +93,5 @@ is stale). Add a page to the script's `DOCUMENTS` list when it joins the core se
92
93
  ## Releases
93
94
 
94
95
  - Bump `version` in `pyproject.toml`
95
- - Add a dated section to `CHANGELOG.md` (Keep a Changelog format)
96
+ - Assemble the changelog: `python scripts/changelog.py assemble X.Y.Z` (the dated section from
97
+ `changelog.d/`, fragments deleted)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.15.3
3
+ Version: 0.17.0
4
4
  Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
5
5
  Project-URL: AbstractCore (website), https://www.abstractcore.ai/
6
6
  Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Programming Language :: Python :: 3.13
22
22
  Requires-Python: >=3.10
23
- Requires-Dist: abstractcore>=2.30.0
23
+ Requires-Dist: abstractcore>=2.33.0
24
24
  Requires-Dist: abstractmemory>=0.4.0
25
25
  Requires-Dist: abstractsemantics>=0.0.5
26
26
  Requires-Dist: anyio<5.0.0,>=4.12.1
@@ -35,14 +35,14 @@ Requires-Dist: reportlab<5.0.0,>=4.0.0
35
35
  Requires-Dist: restrictedpython>=7.0
36
36
  Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
37
37
  Provides-Extra: apple
38
- Requires-Dist: abstractcore[apple]>=2.30.0; extra == 'apple'
38
+ Requires-Dist: abstractcore[apple]>=2.33.0; extra == 'apple'
39
39
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
40
40
  Provides-Extra: docs
41
41
  Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
42
42
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
43
43
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
44
44
  Provides-Extra: gpu
45
- Requires-Dist: abstractcore[gpu]>=2.30.0; extra == 'gpu'
45
+ Requires-Dist: abstractcore[gpu]>=2.33.0; extra == 'gpu'
46
46
  Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
47
47
  Provides-Extra: test
48
48
  Requires-Dist: aiosmtpd<2.0.0,>=1.4.4; extra == 'test'
@@ -55,10 +55,43 @@ Description-Content-Type: text/markdown
55
55
 
56
56
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
57
57
 
58
- **Version:** 0.15.3 • **Python:** 3.10+
58
+ **Version:** 0.17.0 • **Python:** 3.10+
59
59
 
60
60
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
61
61
 
62
+ ## What's new in 0.17.0
63
+
64
+ - **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
65
+ the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
66
+ the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
67
+ - **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
68
+ piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
69
+ findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
70
+ - **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
71
+ a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
72
+ - **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
73
+ cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
74
+ text against text is never converted.
75
+ - **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
76
+ the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
77
+
78
+ ## What's new in 0.16.0
79
+
80
+ - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
81
+ (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
82
+ durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
83
+ 2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
84
+ - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
85
+ clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
86
+ words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
87
+ - **Model residency in words**: fit refusals are never retried and keep their typed fields on the ledger, residency
88
+ rows carry the slot pool (`slots`, `active`, `queued`, ...) and name who holds a model, and the config facade reads
89
+ and sets a local model's loaded context (`configured_model_context`, `set_model_context`).
90
+ - **Structured output across process boundaries**: JSON schemas travel as data and validators are built where
91
+ inference runs, for local, remote and hybrid clients alike.
92
+ - **Voice transport is not a turn attachment** in history bundles and conversation search. Full list:
93
+ [CHANGELOG.md](CHANGELOG.md#0160---2026-11-02).
94
+
62
95
  ## What's new in 0.15.3
63
96
 
64
97
  - **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
@@ -128,8 +161,8 @@ Remote-light runtime:
128
161
  pip install abstractruntime
129
162
  ```
130
163
 
131
- The base install includes AbstractCore 2.30.0 or newer (its light install:
132
- remote providers, tools, vision, voice, audio, and music integration), plus the
164
+ The base install includes AbstractCore 2.33.0 or newer (its light install:
165
+ remote providers, tools, vision, voice, audio, music, and decision integration), plus the
133
166
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
134
167
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
135
168
  sentence-transformer embeddings are not selected unless you choose a hardware
@@ -238,7 +271,7 @@ Drivers + distribution:
238
271
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
239
272
 
240
273
  Runtime-owned integrations:
241
- - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
274
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, calibrated decisions (`decide`), host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
242
275
  - AbstractCore models and engines for hosts: `config_facade` passes through the host profile, local-engine status and installs, the model catalog with fit verdicts, installed models, deletes, host jobs (with who-cancelled attribution) and the embeddable console screens: `docs/integrations/abstractcore.md#models-engines-and-host-jobs-config-facade`
243
276
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
244
277
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
@@ -274,6 +307,14 @@ sr = create_scheduled_runtime(
274
307
  )
275
308
  ```
276
309
 
310
+ ## For AI agents
311
+
312
+ Register and use the [`abstractruntime` agent skill](https://github.com/lpalbou/AbstractRuntime/tree/main/skills/abstractruntime)
313
+ to operate durable workflows, waits, storage and AbstractCore integration. Copy
314
+ `skills/abstractruntime/` from the checkout matching your package version into
315
+ your agent's skills directory. Start with its install verification, then use the
316
+ linked documentation for the installed version.
317
+
277
318
  ## Documentation
278
319
 
279
320
  | Document | Description |
@@ -4,10 +4,43 @@
4
4
 
5
5
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
6
6
 
7
- **Version:** 0.15.3 • **Python:** 3.10+
7
+ **Version:** 0.17.0 • **Python:** 3.10+
8
8
 
9
9
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
10
10
 
11
+ ## What's new in 0.17.0
12
+
13
+ - **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
14
+ the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
15
+ the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
16
+ - **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
17
+ piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
18
+ findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
19
+ - **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
20
+ a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
21
+ - **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
22
+ cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
23
+ text against text is never converted.
24
+ - **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
25
+ the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
26
+
27
+ ## What's new in 0.16.0
28
+
29
+ - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
30
+ (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
31
+ durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
32
+ 2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
33
+ - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
34
+ clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
35
+ words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
36
+ - **Model residency in words**: fit refusals are never retried and keep their typed fields on the ledger, residency
37
+ rows carry the slot pool (`slots`, `active`, `queued`, ...) and name who holds a model, and the config facade reads
38
+ and sets a local model's loaded context (`configured_model_context`, `set_model_context`).
39
+ - **Structured output across process boundaries**: JSON schemas travel as data and validators are built where
40
+ inference runs, for local, remote and hybrid clients alike.
41
+ - **Voice transport is not a turn attachment** in history bundles and conversation search. Full list:
42
+ [CHANGELOG.md](CHANGELOG.md#0160---2026-11-02).
43
+
11
44
  ## What's new in 0.15.3
12
45
 
13
46
  - **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
@@ -77,8 +110,8 @@ Remote-light runtime:
77
110
  pip install abstractruntime
78
111
  ```
79
112
 
80
- The base install includes AbstractCore 2.30.0 or newer (its light install:
81
- remote providers, tools, vision, voice, audio, and music integration), plus the
113
+ The base install includes AbstractCore 2.33.0 or newer (its light install:
114
+ remote providers, tools, vision, voice, audio, music, and decision integration), plus the
82
115
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
83
116
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
84
117
  sentence-transformer embeddings are not selected unless you choose a hardware
@@ -187,7 +220,7 @@ Drivers + distribution:
187
220
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
188
221
 
189
222
  Runtime-owned integrations:
190
- - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
223
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, calibrated decisions (`decide`), host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
191
224
  - AbstractCore models and engines for hosts: `config_facade` passes through the host profile, local-engine status and installs, the model catalog with fit verdicts, installed models, deletes, host jobs (with who-cancelled attribution) and the embeddable console screens: `docs/integrations/abstractcore.md#models-engines-and-host-jobs-config-facade`
192
225
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
193
226
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
@@ -223,6 +256,14 @@ sr = create_scheduled_runtime(
223
256
  )
224
257
  ```
225
258
 
259
+ ## For AI agents
260
+
261
+ Register and use the [`abstractruntime` agent skill](https://github.com/lpalbou/AbstractRuntime/tree/main/skills/abstractruntime)
262
+ to operate durable workflows, waits, storage and AbstractCore integration. Copy
263
+ `skills/abstractruntime/` from the checkout matching your package version into
264
+ your agent's skills directory. Start with its install verification, then use the
265
+ linked documentation for the installed version.
266
+
226
267
  ## Documentation
227
268
 
228
269
  | Document | Description |
@@ -0,0 +1,21 @@
1
+ # Changelog fragments
2
+
3
+ Each pull request that changes `src/` adds ONE file here instead of editing `CHANGELOG.md`:
4
+ `changelog.d/<pr-number-or-slug>.md` (for example `changelog.d/123.md` or `changelog.d/a-short-slug.md`). A new file never
5
+ conflicts with another branch; the `[Unreleased]` section did on every merge.
6
+
7
+ A fragment is Keep a Changelog markdown: one or more of `### Added`, `### Changed`, `### Deprecated`,
8
+ `### Removed`, `### Fixed`, `### Security`, each followed by its entries, written as before:
9
+
10
+ ```markdown
11
+ ### Fixed
12
+
13
+ - **A stop signal is what a reader needs** (`module.py`). What was wrong, what is true now,
14
+ and how to use it ...
15
+ ```
16
+
17
+ - CI (`changelog` job): a pull request that changes `src/` without adding a fragment fails, and so does a
18
+ malformed fragment. `python scripts/changelog.py check` runs the same check locally.
19
+ - `python scripts/changelog.py preview` prints what the next release section will say.
20
+ - Release: `python scripts/changelog.py assemble X.Y.Z` writes `## [X.Y.Z] - <date>` from every fragment
21
+ (sections in Keep a Changelog order) and deletes the fragments; commit that with the version bump.
@@ -23,10 +23,14 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
23
23
 
24
24
  ## Guides
25
25
 
26
+ - [AbstractRuntime agent skill](../skills/abstractruntime/SKILL.md) — a self-contained operating guide for agents using workflows, durable waits, stores and AbstractCore execution
27
+ - [Structured responses](integrations/abstractcore.md#structured-responses) — JSON schemas across execution boundaries, local and remote validation, and streaming behavior
28
+ - [Host-managed serving](integrations/abstractcore.md#host-managed-serving) — optional Core-owned HTTP lifecycle and host-admitted ASGI requests
29
+
26
30
  - `faq.md` — common questions (recommended)
27
31
  - `manual_testing.md` — manual smoke tests and how to run the test suite
28
32
  - `artifacts.md` — Runtime artifact identity, descriptors, provenance, catalog search, and access stats
29
- - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, the `config_facade` models/engines/host-jobs passthroughs for hosts, the `structured_facade` response_format check for hosts, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, model-residency listings, locks and model switching, live token streaming, workspace-scoped tools, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
33
+ - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, the `config_facade` models/engines/host-jobs passthroughs for hosts, the `structured_facade` response_format check for hosts, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, model-residency listings, locks and model switching, live token streaming, workspace-scoped tools, durable bloc prompt-cache control, media inputs, generated media outputs, calibrated decisions (`output.modality: "decision"`, `run_facade.decide`, the `decide` node), video progress events, and tool approval waits via AbstractCore
30
34
  - `integrations/abstractmemory.md` — the AbstractMemory memory facade (ADR 0011): open a mind, stamp provenance from the step context, reconstruct a source from the ledger (`get_record`), history and revisions, and the `MEMORY_REVISE` effect / `memory_revise` node
31
35
  - `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
32
36
  - `email.md` — email for each user: run-scoped account binding and the host resolver, sending without asking (self and pre-authorised recipients), the durable event inbox and mail feeder, the `email.received@1` trigger on the primary or any other mailbox of the user, mail verbs for flows (changes and sends only on a Read and write mailbox: `email_mailbox_read_only`, `email_mailbox_cannot_send`), and the send-email action
@@ -30,6 +30,7 @@ effect payloads, client construction arguments, or Runtime-owned environment var
30
30
  - Thin-mode clients can run the workflow logic while delegating inference to a server.
31
31
  - Remote mode supports AbstractCore per-request `base_url` routing (dynamic endpoint selection).
32
32
  - Tool execution can be gated by trust/sandbox policy outside the router.
33
+ - In every mode, a host stop interrupts an effect (`EffectInterrupted`: no terminal record, re-issued on the next tick); only a failure the effect itself met is recorded as failed.
33
34
 
34
35
  ### See Also
35
36
  - Implementation: [`backlog/completed/005_abstractcore_integration.md`](../backlog/completed/005_abstractcore_integration.md)