AbstractRuntime 0.13.1__tar.gz → 0.14.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 (844) hide show
  1. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/CHANGELOG.md +70 -0
  2. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/PKG-INFO +14 -2
  3. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/README.md +13 -1
  4. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/README.md +2 -1
  5. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +6 -0
  6. abstractruntime-0.14.0/docs/adr/0010_one_replay_many_views.md +104 -0
  7. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/README.md +3 -1
  8. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/api.md +25 -0
  9. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/README.md +3 -1
  10. abstractruntime-0.14.0/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +59 -0
  11. abstractruntime-0.14.0/docs/backlog/planned/0854_replay_view.md +576 -0
  12. abstractruntime-0.14.0/docs/replay.md +113 -0
  13. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/tool-approval.md +58 -0
  14. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/llms-full.txt +221 -3
  15. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/llms.txt +3 -2
  16. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/pyproject.toml +1 -1
  17. abstractruntime-0.14.0/release-notes.md +67 -0
  18. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/scripts/generate_llms_full.py +1 -0
  19. abstractruntime-0.14.0/scripts/regen_replay_conformance.py +73 -0
  20. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/runtime.py +66 -4
  21. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +187 -7
  22. abstractruntime-0.14.0/src/abstractruntime/replay/__init__.py +30 -0
  23. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/__init__.py +51 -0
  24. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +842 -0
  25. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +38 -0
  26. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +2962 -0
  27. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +294 -0
  28. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +537 -0
  29. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +34 -0
  30. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +1052 -0
  31. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +149 -0
  32. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +151 -0
  33. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +22 -0
  34. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +186 -0
  35. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +26 -0
  36. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +451 -0
  37. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +38 -0
  38. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +1171 -0
  39. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +170 -0
  40. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +252 -0
  41. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +32 -0
  42. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/d_cancellation/records.json +672 -0
  43. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/d_cancellation/runs.json +63 -0
  44. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +521 -0
  45. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +28 -0
  46. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +1512 -0
  47. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +162 -0
  48. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +320 -0
  49. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +38 -0
  50. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +955 -0
  51. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +132 -0
  52. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +293 -0
  53. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +28 -0
  54. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +194 -0
  55. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +131 -0
  56. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +248 -0
  57. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +20 -0
  58. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/g_ask_user/records.json +428 -0
  59. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/g_ask_user/runs.json +134 -0
  60. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +297 -0
  61. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +26 -0
  62. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/h_denied_approval/records.json +886 -0
  63. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +155 -0
  64. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +498 -0
  65. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +7 -0
  66. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +487 -0
  67. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +124 -0
  68. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +199 -0
  69. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +7 -0
  70. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +211 -0
  71. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +31 -0
  72. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +267 -0
  73. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +7 -0
  74. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +404 -0
  75. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +72 -0
  76. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +174 -0
  77. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +7 -0
  78. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +141 -0
  79. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +22 -0
  80. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +444 -0
  81. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +7 -0
  82. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +672 -0
  83. abstractruntime-0.14.0/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +34 -0
  84. abstractruntime-0.14.0/src/abstractruntime/replay/delta.py +136 -0
  85. abstractruntime-0.14.0/src/abstractruntime/replay/executions.py +125 -0
  86. abstractruntime-0.14.0/src/abstractruntime/replay/view.py +1332 -0
  87. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/__init__.py +10 -0
  88. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/base.py +27 -2
  89. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/in_memory.py +6 -2
  90. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/json_files.py +206 -7
  91. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/ledger_chain.py +9 -5
  92. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/observable.py +9 -3
  93. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/offloading.py +6 -2
  94. abstractruntime-0.14.0/src/abstractruntime/storage/session_tool_policy.py +443 -0
  95. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/sqlite.py +49 -6
  96. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_durable_write_discipline.py +2 -1
  97. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_jsonl_ledger_recovery.py +6 -2
  98. abstractruntime-0.14.0/tests/test_jsonl_ledger_seq_cross_process.py +88 -0
  99. abstractruntime-0.14.0/tests/test_ledger_cursor_invariants.py +318 -0
  100. abstractruntime-0.14.0/tests/test_replay_conformance.py +373 -0
  101. abstractruntime-0.14.0/tests/test_replay_conformance_package.py +25 -0
  102. abstractruntime-0.14.0/tests/test_replay_cursor_token.py +41 -0
  103. abstractruntime-0.14.0/tests/test_replay_delta_cost.py +48 -0
  104. abstractruntime-0.14.0/tests/test_replay_invariants.py +210 -0
  105. abstractruntime-0.14.0/tests/test_replay_review_findings.py +96 -0
  106. abstractruntime-0.14.0/tests/test_replay_tool_policy.py +88 -0
  107. abstractruntime-0.14.0/tests/test_session_tool_policy.py +376 -0
  108. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trigger_webhook.py +4 -2
  109. abstractruntime-0.13.1/release-notes.md +0 -4
  110. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/.github/workflows/ci.yml +0 -0
  111. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/.github/workflows/release.yml +0 -0
  112. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/.gitignore +0 -0
  113. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/ACKNOWLEDGMENTS.md +0 -0
  114. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/CODE_OF_CONDUCT.md +0 -0
  115. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/CONTRIBUTING.md +0 -0
  116. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/LICENSE +0 -0
  117. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/ROADMAP.md +0 -0
  118. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/SECURITY.md +0 -0
  119. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  120. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  121. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  122. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  123. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  124. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  125. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  126. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/architecture.md +0 -0
  127. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/artifacts.md +0 -0
  128. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/automations.md +0 -0
  129. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  130. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  131. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  132. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  133. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  134. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  135. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  136. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  137. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
  138. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  139. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  140. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  141. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  142. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  143. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  144. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  145. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  146. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/009_artifact_store.md +0 -0
  147. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  148. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  149. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  150. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  151. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  152. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  153. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  154. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  155. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  156. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  157. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  158. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  159. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  160. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  161. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  162. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  163. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
  164. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
  165. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
  166. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  167. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  168. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  169. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  170. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  171. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  172. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  173. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  174. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/004_tests.md +0 -0
  175. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  176. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  177. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  178. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  179. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/README.md +0 -0
  180. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  181. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  182. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  183. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  184. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  185. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  186. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  187. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  188. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  189. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  190. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  191. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  192. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
  193. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  194. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  195. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
  196. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  197. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  198. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  199. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  200. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  201. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  202. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  203. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  204. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  205. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  206. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  207. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  208. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  209. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  210. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  211. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  212. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  213. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  214. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  215. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  216. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
  217. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
  218. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  219. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  220. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  221. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  222. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  223. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  224. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  225. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  226. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  227. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/email.md +0 -0
  228. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/entity-runtime.md +0 -0
  229. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/evidence.md +0 -0
  230. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/faq.md +0 -0
  231. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/getting-started.md +0 -0
  232. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/integrations/abstractcore.md +0 -0
  233. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/limits.md +0 -0
  234. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/manual_testing.md +0 -0
  235. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/mcp-worker.md +0 -0
  236. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/proposal.md +0 -0
  237. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/provenance.md +0 -0
  238. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/snapshots.md +0 -0
  239. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/tools-comms.md +0 -0
  240. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/troubleshooting.md +0 -0
  241. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/docs/workflow-bundles.md +0 -0
  242. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/examples/01_hello_world.py +0 -0
  243. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/examples/02_ask_user.py +0 -0
  244. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/examples/03_wait_until.py +0 -0
  245. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/examples/04_multi_step.py +0 -0
  246. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/examples/05_persistence.py +0 -0
  247. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/examples/06_llm_integration.py +0 -0
  248. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/examples/07_react_agent.py +0 -0
  249. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/examples/README.md +0 -0
  250. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/mkdocs.yml +0 -0
  251. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/pytest.ini +0 -0
  252. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/scripts/backfill_diary_edges.py +0 -0
  253. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/__init__.py +0 -0
  254. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automation_queries.py +0 -0
  255. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/__init__.py +0 -0
  256. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/adapters.py +0 -0
  257. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/attention.py +0 -0
  258. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/bundle.py +0 -0
  259. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
  260. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
  261. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/commands.py +0 -0
  262. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/consumers.py +0 -0
  263. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/controller.py +0 -0
  264. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/ledger.py +0 -0
  265. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/models.py +0 -0
  266. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/samples.py +0 -0
  267. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/service.py +0 -0
  268. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/automations/wakes.py +0 -0
  269. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/conversation_search.py +0 -0
  270. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/__init__.py +0 -0
  271. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/config.py +0 -0
  272. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/effect_cancellation.py +0 -0
  273. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/event_keys.py +0 -0
  274. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/health.py +0 -0
  275. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/live_deltas.py +0 -0
  276. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/models.py +0 -0
  277. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/policy.py +0 -0
  278. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/progress_channel.py +0 -0
  279. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/publish.py +0 -0
  280. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/run_attribution.py +0 -0
  281. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/run_identity.py +0 -0
  282. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
  283. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/run_origin.py +0 -0
  284. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/spec.py +0 -0
  285. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/tool_scope.py +0 -0
  286. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/core/vars.py +0 -0
  287. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/documents/__init__.py +0 -0
  288. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/documents/charts.py +0 -0
  289. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/documents/docx.py +0 -0
  290. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/documents/pdf.py +0 -0
  291. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/email/__init__.py +0 -0
  292. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/email/actions.py +0 -0
  293. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/email/automations.py +0 -0
  294. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/email/binding.py +0 -0
  295. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/email/feeder.py +0 -0
  296. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/email/frame.py +0 -0
  297. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/email/inbox.py +0 -0
  298. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/evidence/__init__.py +0 -0
  299. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/evidence/recorder.py +0 -0
  300. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/history_bundle.py +0 -0
  301. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/__init__.py +0 -0
  302. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/act_only.py +0 -0
  303. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/chat.py +0 -0
  304. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/communities.py +0 -0
  305. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/diary.py +0 -0
  306. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/digest.py +0 -0
  307. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
  308. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/fingerprint.py +0 -0
  309. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/lease.py +0 -0
  310. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/life.py +0 -0
  311. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/memory_reader.py +0 -0
  312. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/night_voice.py +0 -0
  313. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/phase_graph.py +0 -0
  314. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/phase_spec.py +0 -0
  315. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/prelude.py +0 -0
  316. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  317. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/reflection.py +0 -0
  318. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  319. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/substrate.py +0 -0
  320. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/tool_effects.py +0 -0
  321. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/tool_policy.py +0 -0
  322. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/tools.py +0 -0
  323. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/identity/visit_workflow.py +0 -0
  324. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/__init__.py +0 -0
  325. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  326. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  327. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
  328. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  329. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
  330. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  331. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  332. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  333. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
  334. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  335. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
  336. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  337. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  338. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  339. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
  340. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  341. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  342. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
  343. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  344. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  345. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  346. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
  347. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
  348. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
  349. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  350. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
  351. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  352. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  353. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
  354. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  355. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  356. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
  357. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
  358. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  359. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  360. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  361. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  362. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  363. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  364. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/mail_verbs.py +0 -0
  365. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/memory/__init__.py +0 -0
  366. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/memory/active_context.py +0 -0
  367. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/memory/active_memory.py +0 -0
  368. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/memory/compaction.py +0 -0
  369. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/memory/kg_packets.py +0 -0
  370. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/memory/memact_composer.py +0 -0
  371. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/memory/recall_levels.py +0 -0
  372. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/memory/token_budget.py +0 -0
  373. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/rendering/__init__.py +0 -0
  374. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  375. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
  376. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/scheduler/__init__.py +0 -0
  377. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/scheduler/convenience.py +0 -0
  378. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/scheduler/multi_store.py +0 -0
  379. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/scheduler/registry.py +0 -0
  380. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
  381. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/session_history.py +0 -0
  382. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/session_turns.py +0 -0
  383. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/artifacts.py +0 -0
  384. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/change_ring.py +0 -0
  385. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/commands.py +0 -0
  386. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/lease.py +0 -0
  387. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
  388. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/serialize.py +0 -0
  389. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/snapshots.py +0 -0
  390. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  391. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/__init__.py +0 -0
  392. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
  393. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/connection_events.py +0 -0
  394. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/connections.py +0 -0
  395. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/email_received.py +0 -0
  396. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/event_frame.py +0 -0
  397. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/feed.py +0 -0
  398. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/manual.py +0 -0
  399. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/protocol.py +0 -0
  400. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/registry.py +0 -0
  401. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/schedule.py +0 -0
  402. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/triggers/webhook.py +0 -0
  403. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/turn_grounding.py +0 -0
  404. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/utils/__init__.py +0 -0
  405. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/utils/atomic_files.py +0 -0
  406. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/utils/file_filters.py +0 -0
  407. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
  408. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  409. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  410. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  411. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  412. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  413. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  414. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  415. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  416. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  417. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  418. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  419. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
  420. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  421. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  422. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  423. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  424. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  425. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  426. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
  427. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
  428. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
  429. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
  430. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  431. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  432. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
  433. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
  434. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  435. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
  436. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  437. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  438. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  439. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/README.md +0 -0
  440. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/automation_harness.py +0 -0
  441. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/conftest.py +0 -0
  442. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/email_wp2_support.py +0 -0
  443. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/fixtures/feeds/atom.xml +0 -0
  444. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
  445. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
  446. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/fixtures/feeds/rss1.xml +0 -0
  447. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/fixtures/feeds/rss2.xml +0 -0
  448. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
  449. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/live_email/conftest.py +0 -0
  450. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/live_email/live_email_support.py +0 -0
  451. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/live_email/test_email_live_runtime.py +0 -0
  452. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/media_endpoint_profile_probe.py +0 -0
  453. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_abstractcore_comms_facade.py +0 -0
  454. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_abstractcore_discovery_facade.py +0 -0
  455. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_abstractcore_host_facade.py +0 -0
  456. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_abstractcore_run_facade.py +0 -0
  457. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_abstractcore_server_facade.py +0 -0
  458. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_abstractcore_structured_facade.py +0 -0
  459. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_abstractcore_telegram_facade.py +0 -0
  460. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_active_consumers_index.py +0 -0
  461. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_active_context_policy.py +0 -0
  462. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_active_index.py +0 -0
  463. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_active_memory.py +0 -0
  464. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_agora_agent_alias_identity.py +0 -0
  465. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_agora_tools_http.py +0 -0
  466. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  467. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_answer_user_effect.py +0 -0
  468. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_artifact_session_candidates.py +0 -0
  469. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_artifacts.py +0 -0
  470. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_calendar_schedule.py +0 -0
  471. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_commands.py +0 -0
  472. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_controller.py +0 -0
  473. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_controller_recovery.py +0 -0
  474. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_definition.py +0 -0
  475. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_discussion_isolation.py +0 -0
  476. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_email_results.py +0 -0
  477. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_growing_context.py +0 -0
  478. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_index.py +0 -0
  479. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_list_reads.py +0 -0
  480. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_named_policy_compiler.py +0 -0
  481. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_next_fire.py +0 -0
  482. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
  483. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_occurrence_recovery.py +0 -0
  484. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_replay_read_only.py +0 -0
  485. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_retry.py +0 -0
  486. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_session_turns.py +0 -0
  487. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_status.py +0 -0
  488. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_automation_tool_approval.py +0 -0
  489. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_browser_probe_target_walling.py +0 -0
  490. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  491. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_capability_default_reasoning.py +0 -0
  492. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_chat_summarizer_integration.py +0 -0
  493. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_code_node_imports.py +0 -0
  494. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_code_node_restricted_python.py +0 -0
  495. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_command_sandbox_host_facade.py +0 -0
  496. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_command_store.py +0 -0
  497. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_compaction_helpers.py +0 -0
  498. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_compaction_summarizer_route.py +0 -0
  499. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_config_facade_models_engines.py +0 -0
  500. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_config_facade_voice_input_hint.py +0 -0
  501. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_control_adapter_while.py +0 -0
  502. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_controller_bundle_packaged.py +0 -0
  503. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_conversation_search.py +0 -0
  504. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_crash_ordering_inversions.py +0 -0
  505. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_create_if_absent.py +0 -0
  506. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_data_registry_facade.py +0 -0
  507. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_default_model_warmup_switch.py +0 -0
  508. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_default_tools_camera_gating.py +0 -0
  509. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_default_tools_comms_gating.py +0 -0
  510. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_default_tools_include_skim_files.py +0 -0
  511. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_default_tools_include_skim_folders.py +0 -0
  512. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_default_tools_include_skim_web.py +0 -0
  513. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_default_tools_search_files_executor.py +0 -0
  514. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_diary_capture.py +0 -0
  515. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_diary_write_rescue.py +0 -0
  516. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_directory_lease.py +0 -0
  517. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_disabled_toolsets_seam.py +0 -0
  518. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  519. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
  520. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
  521. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_discussion_session_anchor.py +0 -0
  522. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_document_markdown_tables.py +0 -0
  523. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_document_renderers_hr_quote.py +0 -0
  524. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_durable_toolsets.py +0 -0
  525. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  526. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_effect_cancellation.py +0 -0
  527. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_effect_issuance_idempotency.py +0 -0
  528. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  529. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_election_consequence_teaching.py +0 -0
  530. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_binding_and_refiner.py +0 -0
  531. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_feeder_batched.py +0 -0
  532. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_feeder_flags.py +0 -0
  533. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_gate_fixes.py +0 -0
  534. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_inbox_and_trigger.py +0 -0
  535. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_received_mailbox_id.py +0 -0
  536. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_regate_fixes.py +0 -0
  537. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_review_fixes.py +0 -0
  538. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_self_trigger_loop.py +0 -0
  539. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_stream_consumers.py +0 -0
  540. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_email_toolset_and_walls.py +0 -0
  541. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_emergence_experiment.py +0 -0
  542. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_emit_event_uses_wait_index.py +0 -0
  543. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
  544. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
  545. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
  546. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
  547. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_endpoint_profile_route_context.py +0 -0
  548. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_awake_memory_fixes.py +0 -0
  549. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_brain_effects.py +0 -0
  550. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_chat_driver.py +0 -0
  551. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_chat_tools_reflection.py +0 -0
  552. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_diary.py +0 -0
  553. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_execute_tool.py +0 -0
  554. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_fetch_url_tool.py +0 -0
  555. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_history_window.py +0 -0
  556. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_life_loop.py +0 -0
  557. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_memory_richness.py +0 -0
  558. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_phase_graph_conformance.py +0 -0
  559. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_react_visit_window.py +0 -0
  560. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_recent_memories.py +0 -0
  561. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_runtime.py +0 -0
  562. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_search_memory.py +0 -0
  563. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  564. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_substrate_resolution.py +0 -0
  565. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_visit_honesty.py +0 -0
  566. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_workspace_cap.py +0 -0
  567. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_entity_workspace_tools.py +0 -0
  568. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_event_index_cross_process.py +0 -0
  569. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_event_wait_index.py +0 -0
  570. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  571. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_evidence_recorder.py +0 -0
  572. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  573. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_execute_command_output_offload.py +0 -0
  574. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_execution_capability_discovery.py +0 -0
  575. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_explicit_eject_other_clients.py +0 -0
  576. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_factory_default_retry_policy.py +0 -0
  577. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  578. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_format_repair_nudge.py +0 -0
  579. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_fresh_install_no_provider.py +0 -0
  580. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_gateway_facades_c4899.py +0 -0
  581. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_git_read_only_refiner.py +0 -0
  582. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_hf_process_residency_merge.py +0 -0
  583. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_history_window_multimodal.py +0 -0
  584. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_hot_path_store_reads.py +0 -0
  585. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_indexed_idempotency_lookup.py +0 -0
  586. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_integration_abstractcore.py +0 -0
  587. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_integrations_abstractcore.py +0 -0
  588. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_json_file_run_store_children_index.py +0 -0
  589. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_json_run_cache_bound.py +0 -0
  590. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_json_store_scan_memo.py +0 -0
  591. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_kg_learn_and_recall_contract.py +0 -0
  592. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_ledger_chain.py +0 -0
  593. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_ledger_record_slimming.py +0 -0
  594. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_ledger_subscription.py +0 -0
  595. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_live_token_deltas.py +0 -0
  596. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
  597. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  598. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  599. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  600. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_requires_prompt.py +0 -0
  601. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_response_schema_normalization.py +0 -0
  602. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_structured_output_fallback.py +0 -0
  603. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_text_phase_progress.py +0 -0
  604. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  605. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  606. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  607. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_client_grounding_tail.py +0 -0
  608. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_client_media_artifacts.py +0 -0
  609. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_client_system_context.py +0 -0
  610. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
  611. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_retry_classification.py +0 -0
  612. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_llm_streaming_on_token.py +0 -0
  613. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_local_helper_tool_exposure.py +0 -0
  614. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_local_residency_host_sweep.py +0 -0
  615. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  616. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mail_verbs.py +0 -0
  617. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mailbox_index.py +0 -0
  618. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_max_iterations_ceiling.py +0 -0
  619. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mcp_remote_tool_executor.py +0 -0
  620. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
  621. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mcp_worker_logging.py +0 -0
  622. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mcp_worker_security.py +0 -0
  623. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mcp_worker_stdio.py +0 -0
  624. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_media_artifact_resolution.py +0 -0
  625. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_media_capability_default_routing.py +0 -0
  626. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_media_host_endpoint_resolver.py +0 -0
  627. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
  628. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_media_subprocess.py +0 -0
  629. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memact_composer_from_kg_result.py +0 -0
  630. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_appraise_handler.py +0 -0
  631. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_communities.py +0 -0
  632. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  633. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_kg_packets.py +0 -0
  634. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  635. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  636. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  637. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  638. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_note_effect.py +0 -0
  639. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_query_effect.py +0 -0
  640. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_query_rich_filters.py +0 -0
  641. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  642. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_seam_handlers.py +0 -0
  643. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
  644. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_memory_tag_effect.py +0 -0
  645. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mlx_generation_serialization.py +0 -0
  646. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_mlx_process_residency_merge.py +0 -0
  647. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_model_eject_cancel.py +0 -0
  648. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_model_residency_clean_switch.py +0 -0
  649. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_model_residency_control_plane.py +0 -0
  650. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  651. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_multi_store_scheduler.py +0 -0
  652. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
  653. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_native_mlx_application_wiring.py +0 -0
  654. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
  655. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_native_tool_channel.py +0 -0
  656. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_night_voice.py +0 -0
  657. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
  658. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_occurrence_named_inputs.py +0 -0
  659. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_occurrence_samples.py +0 -0
  660. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_offload_answer_chain_c4978.py +0 -0
  661. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  662. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_offloading.py +0 -0
  663. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_packaging_extras.py +0 -0
  664. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
  665. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_pause_resume.py +0 -0
  666. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_pdf_unicode_rendering.py +0 -0
  667. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_personal_cycle.py +0 -0
  668. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_phantom_attachment_index.py +0 -0
  669. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_phase_graph_artifact_control.py +0 -0
  670. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_phase_graph_obedience.py +0 -0
  671. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_phase_vocabulary_migration.py +0 -0
  672. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  673. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_prompt_cache_export_import.py +0 -0
  674. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  675. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_prompt_cache_modules.py +0 -0
  676. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  677. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  678. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_prompt_overlay.py +0 -0
  679. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  680. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_provider_pin_routing_isolation.py +0 -0
  681. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_publish_event.py +0 -0
  682. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_queryable_run_store.py +0 -0
  683. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_r12_workspace_sandbox.py +0 -0
  684. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  685. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_read_idle_threading.py +0 -0
  686. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_readoption_experiment.py +0 -0
  687. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_real_integration.py +0 -0
  688. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_realize_election.py +0 -0
  689. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_recall_levels_policy.py +0 -0
  690. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_remote_client_cancel.py +0 -0
  691. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_remote_llm_client.py +0 -0
  692. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_remote_speculation_defaults.py +0 -0
  693. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_rendering_agent_trace_report.py +0 -0
  694. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_rendering_json_stringify.py +0 -0
  695. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_report_branding.py +0 -0
  696. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_resident_media_generation.py +0 -0
  697. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_resume_concurrent_same_wait.py +0 -0
  698. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_retry_idempotency.py +0 -0
  699. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_run_history_bundle.py +0 -0
  700. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_run_index_workspace_root.py +0 -0
  701. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_run_mutation_lock.py +0 -0
  702. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_run_origin.py +0 -0
  703. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_run_scoped_tool_policy.py +0 -0
  704. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_run_store_change_token.py +0 -0
  705. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_run_tool_scope_ceiling.py +0 -0
  706. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_browser_session_boundary.py +0 -0
  707. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  708. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  709. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
  710. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  711. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_install_boundary.py +0 -0
  712. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  713. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_node_traces.py +0 -0
  714. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  715. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_runtime_tick_step_gate.py +0 -0
  716. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_schedule_run.py +0 -0
  717. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_schedule_v1_corpus.py +0 -0
  718. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_schedule_v2_calendar.py +0 -0
  719. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_scheduler.py +0 -0
  720. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_send_email_refiner.py +0 -0
  721. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_send_email_self_default_policy.py +0 -0
  722. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  723. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_session_history.py +0 -0
  724. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_session_prompt_cache_attribution.py +0 -0
  725. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_session_prompt_cache_visibility.py +0 -0
  726. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_session_route_stamp.py +0 -0
  727. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_session_start_cost.py +0 -0
  728. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_shell_tool_exposure.py +0 -0
  729. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_snapshots.py +0 -0
  730. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_speculation_inheritance.py +0 -0
  731. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
  732. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_sqlite_ledger_store.py +0 -0
  733. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_start_subworkflow_async_wait.py +0 -0
  734. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  735. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  736. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_steer_sidecar.py +0 -0
  737. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_storage_deletion.py +0 -0
  738. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_streamed_voice_namespace.py +0 -0
  739. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_structured_output_schema_enum.py +0 -0
  740. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_subworkflow.py +0 -0
  741. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_terminal_effect_completion.py +0 -0
  742. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  743. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_thinking_inheritance.py +0 -0
  744. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  745. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_approval_executor.py +0 -0
  746. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_approval_resume_executes.py +0 -0
  747. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
  748. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
  749. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_catalog.py +0 -0
  750. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_descriptor_registry.py +0 -0
  751. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
  752. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_executor_error_output_detection.py +0 -0
  753. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_executor_filename_alias.py +0 -0
  754. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  755. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
  756. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_executor_timeout.py +0 -0
  757. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_inventory_facade.py +0 -0
  758. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_invoke_effect.py +0 -0
  759. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_policy_and_mounts.py +0 -0
  760. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
  761. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_topic_election_world_model.py +0 -0
  762. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trace_context_propagation.py +0 -0
  763. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trigger_cloudevents.py +0 -0
  764. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trigger_connection_listening.py +0 -0
  765. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trigger_connections.py +0 -0
  766. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trigger_feed.py +0 -0
  767. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trigger_registry.py +0 -0
  768. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trigger_schedule_math.py +0 -0
  769. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_trusted_run_index.py +0 -0
  770. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_turn_grounding_byte_stability.py +0 -0
  771. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
  772. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_vars_query_effect.py +0 -0
  773. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visit_ab_fixture.py +0 -0
  774. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visit_midturn_elections.py +0 -0
  775. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visit_midturn_resume.py +0 -0
  776. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visit_workflow.py +0 -0
  777. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  778. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  779. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  780. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  781. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  782. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  783. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_entity_memory_nodes.py +0 -0
  784. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  785. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_llm_call_partial_override.py +0 -0
  786. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  787. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
  788. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
  789. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
  790. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_memact_compose_node.py +0 -0
  791. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  792. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  793. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  794. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_reroute_lowering.py +0 -0
  795. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_set_vars_pins.py +0 -0
  796. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  797. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  798. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_add_message_builtin.py +0 -0
  799. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  800. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_agora_react_agent.py +0 -0
  801. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_call_tool_node.py +0 -0
  802. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  803. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_compiler_basic.py +0 -0
  804. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  805. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_continue_on_error.py +0 -0
  806. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  807. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  808. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  809. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_function_library.py +0 -0
  810. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_get_element_node.py +0 -0
  811. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_get_random_element_node.py +0 -0
  812. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_get_var_node.py +0 -0
  813. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
  814. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  815. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  816. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_make_object_node.py +0 -0
  817. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_media_nodes.py +0 -0
  818. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  819. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_memory_source_pins.py +0 -0
  820. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_pin_expressions.py +0 -0
  821. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_prompt_only.py +0 -0
  822. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_random_nodes.py +0 -0
  823. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_schema_enum_switch.py +0 -0
  824. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_string_contains_replace.py +0 -0
  825. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
  826. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_voice_library_facade.py +0 -0
  827. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_voice_openai_api_key_path.py +0 -0
  828. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
  829. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_w4_feelings_lens.py +0 -0
  830. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_wait_event_deadline.py +0 -0
  831. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_wait_event_prompt_metadata.py +0 -0
  832. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_wait_until_streak.py +0 -0
  833. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_wait_until_utc_normalization.py +0 -0
  834. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workflow_bundle_registry.py +0 -0
  835. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_builtin_deny.py +0 -0
  836. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
  837. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  838. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  839. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  840. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  841. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_prompt_context.py +0 -0
  842. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_read_only.py +0 -0
  843. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_workspace_writable_paths.py +0 -0
  844. {abstractruntime-0.13.1 → abstractruntime-0.14.0}/tests/test_write_chart.py +0 -0
@@ -7,6 +7,76 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.14.0] - 2026-10-27
11
+
12
+ Two features: the replay view with a durable per-run ledger cursor, and the session tool policy.
13
+ Upgrade note (one way): hash-chained JSONL ledgers written by 0.14.0 carry `seq` on each line, and
14
+ an older `verify_ledger_chain` reports those lines as tampered. Upgrade writers and verifiers together.
15
+
16
+ ### Added
17
+
18
+ - **Replay view** (`abstractruntime.replay`, ADR 0010, backlog 0854; framework root 0993). One
19
+ pure, deterministic reducer turns a run tree's ledger records and snapshots into the view every
20
+ client renders (`replay_view_v1`).
21
+ - What the view holds:
22
+ - the run tree through delegation waits, with the workflow each run executes (bundle,
23
+ version, flow, the root's entrypoint);
24
+ - the status;
25
+ - the person-facing interaction: a delegated child's approval, a question, or a prompted
26
+ event, with the resume command to send;
27
+ - verbatim messages with their provenance (run, steps, seqs, artifacts);
28
+ - one activity per node execution (AbstractFlow's `executionIdFor` rules), with tool calls
29
+ matched to results;
30
+ - artifacts and usage.
31
+ - `$slim` pointers are resolved, and a windowed history is named in `warnings`.
32
+ - A wait is over when a resume OR a later step of the same run exists.
33
+ - `ReplayView.apply` folds newer records and returns a delta. `apply_delta` and `diff_views`
34
+ are the client side. `replay(all)` equals the fold of any chunking.
35
+ - Wait kinds agree with `automations.attention`. The person-facing kinds are tool_approval,
36
+ ask_user, and an event that carries a prompt. The non-person-facing kinds are delegation,
37
+ timer, job, pause, automation_wake and signal. The interaction carries `answer_payload`.
38
+ - A session tool policy's `abstract.tool_policy_decision` record is an activity
39
+ (`tool_policy`: allowed or denied by the conversation's policy, its revision and who set it),
40
+ never an interaction. The tool rows it names carry `decided_by: "session_policy"`.
41
+ - Every delta carries typed `changes` (status, interaction opened or closed, run, message,
42
+ activity, artifact, each with its run and seq), for push dispatch.
43
+ - Cursor tokens name each run by a collision-free prefix that is safe in a header.
44
+ `resolve_cursor_token` maps a token back.
45
+ - The conformance cases ship with the package (`abstractruntime.replay.conformance`), so a host
46
+ or a client port can run them. Guide: `docs/replay.md`.
47
+ - **Durable ledger cursor** (gateway backlog 0082). A JSONL append after a torn last line (a
48
+ crash mid-write) now starts a new line; before, the fragment and the whole new record were
49
+ dropped together:
50
+ - Every ledger store numbers a run's records (`seq`). `JsonlLedgerStore` persists the number
51
+ on each line, allocated under an advisory file lock, so two processes never take the same
52
+ seq. Lines written before the field existed read as their position.
53
+ - `LedgerStore.list_after(run_id=, after=, limit=)` works on every store: an indexed read on
54
+ SQLite, a byte-offset seek on JSONL. `append()` returns the seq.
55
+ - `ObservableLedgerStore` passes `seq` to subscribers.
56
+ - `SqliteLedgerStore.import_records` copies a ledger in and keeps its `seq` values (migration).
57
+
58
+ - **Session tool policy**: a conversation's standing "approve / deny without asking", applied before any approval
59
+ wait. `abstractruntime.storage.session_tool_policy` (`SqliteSessionToolPolicyStore`,
60
+ `InMemorySessionToolPolicyStore`, `session_policy_names`), `Runtime(session_tool_policy_store=...)` /
61
+ `Runtime.set_session_tool_policy_store()`. The TOOL_CALLS handler reads the run's session row once per batch: an
62
+ approved call runs with no wait, a denied call is refused with no wait, and each decision writes an
63
+ `abstract.tool_policy_decision` ledger record (who set the policy, when, which selector matched). It applies to
64
+ every run of the session (the run tree's root session: delegated children, resumes, restarts); approvals never
65
+ reach untrusted-input runs or automation occurrences (a deny does, and also wins over an approval that was shown
66
+ before it); never beyond the run's `allowed_tools`. Before this, "approve all" lived in each
67
+ client, which answered the wait after it arrived: the gate flashed in every app and in the ledger. See
68
+ [tool-approval.md](docs/tool-approval.md#session-tool-policy-a-conversations-standing-word).
69
+
70
+ ### Changed
71
+
72
+ - Hash-chained ledgers: `seq` is persisted on each JSONL line and excluded from the hash by this
73
+ version's `compute_record_hash`. A verifier from an older version includes it, so it reports
74
+ every line written by this version as tampered. Upgrade every process that verifies a chain
75
+ (`verify_ledger_chain`) together with the writers.
76
+ - `LedgerStore.list()` records carry `seq`. A consumer that compared records to `asdict(record)`
77
+ sees one more key. The hash chain excludes `seq` (it is the store's position, assigned after
78
+ the hash).
79
+
10
80
  ## [0.13.1] - 2026-10-27
11
81
 
12
82
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.13.1
3
+ Version: 0.14.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
@@ -55,10 +55,22 @@ 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.8.2 • **Python:** 3.10+
58
+ **Version:** 0.14.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.14.0
63
+
64
+ - **Replay view** (`abstractruntime.replay`): one deterministic reducer turns a run tree's ledger
65
+ into the view every client renders (status, the interaction to answer, messages, activities,
66
+ artifacts), with incremental deltas. Every ledger store now numbers records with a durable
67
+ per-run `seq` cursor (`list_after`). See [docs/replay.md](docs/replay.md).
68
+ - **Session tool policy**: a conversation's standing approve/deny is applied before any approval
69
+ wait, with an `abstract.tool_policy_decision` audit record. See
70
+ [docs/tool-approval.md](docs/tool-approval.md#session-tool-policy-a-conversations-standing-word).
71
+ - Upgrade note: hash-chained JSONL ledgers written by 0.14.0 fail an older `verify_ledger_chain`;
72
+ upgrade writers and verifiers together.
73
+
62
74
  ## AbstractFramework ecosystem
63
75
 
64
76
  AbstractRuntime is one component of the wider [AbstractFramework](https://github.com/lpalbou/AbstractFramework) ecosystem:
@@ -4,10 +4,22 @@
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.8.2 • **Python:** 3.10+
7
+ **Version:** 0.14.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.14.0
12
+
13
+ - **Replay view** (`abstractruntime.replay`): one deterministic reducer turns a run tree's ledger
14
+ into the view every client renders (status, the interaction to answer, messages, activities,
15
+ artifacts), with incremental deltas. Every ledger store now numbers records with a durable
16
+ per-run `seq` cursor (`list_after`). See [docs/replay.md](docs/replay.md).
17
+ - **Session tool policy**: a conversation's standing approve/deny is applied before any approval
18
+ wait, with an `abstract.tool_policy_decision` audit record. See
19
+ [docs/tool-approval.md](docs/tool-approval.md#session-tool-policy-a-conversations-standing-word).
20
+ - Upgrade note: hash-chained JSONL ledgers written by 0.14.0 fail an older `verify_ledger_chain`;
21
+ upgrade writers and verifiers together.
22
+
11
23
  ## AbstractFramework ecosystem
12
24
 
13
25
  AbstractRuntime is one component of the wider [AbstractFramework](https://github.com/lpalbou/AbstractFramework) ecosystem:
@@ -29,7 +29,7 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
29
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
30
30
  - `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
31
31
  - `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
32
- - `tool-approval.md` — tool risk tiers, the run-policy rank ceiling, and per-call refiners (the `send_email` recipient rule: self and pre-authorised recipients)
32
+ - `tool-approval.md` — tool risk tiers, the run-policy rank ceiling, the session tool policy (a conversation's standing approve/deny, applied before any approval wait), and per-call refiners (the `send_email` recipient rule: self and pre-authorised recipients)
33
33
  - `api.md#workflowbundles-flow-and-visualflow-distribution` — VisualFlow compiler APIs, media nodes, and document nodes (`read_pdf` / `write_pdf` / `write_docx`)
34
34
  - `api.md#sessions-and-history` — session history replay: one window, the most recent 50,000 tokens of whole turns (`HISTORY_REPLAY_MAX_TOKENS`), returned as a `ReplayedHistory` whose `.report` records what was replayed and dropped
35
35
  - `api.md#conversation-search` — keyword search over a plane's conversations (`ConversationSearch`): questions, answers and the turn's artifacts, one SQLite FTS5 trigram index per plane, incremental `sync` with a time budget, exact then fuzzy matching
@@ -41,6 +41,7 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
41
41
  - `entity-runtime.md` — per-entity runtimes for summoned entities: homes, the one-writer lease, act-only diary privacy (`$act_only` refs), durable visit waits with deadlines
42
42
  - `evidence.md` — artifact-backed evidence capture for external-boundary tools
43
43
  - `mcp-worker.md` — MCP worker CLI (`abstractruntime-mcp-worker`)
44
+ - `replay.md` — the replay view: one reconstruction of a run tree (status, the interaction to answer, messages, one activity per execution, artifacts, usage, the workflow it executes) that every client renders; the durable cursor (`seq`, `list_after`); conformance fixtures
44
45
  - `snapshots.md` — snapshot/bookmark model and stores
45
46
  - `provenance.md` — tamper-evident hash-chained ledger
46
47
  - `limits.md` — runtime-aware `_limits` namespace and APIs
@@ -24,6 +24,12 @@ host needed, with no rule saying whose job it was to close the gap.
24
24
  2. A host never works around a missing name by importing `abstractcore` directly, vendoring the
25
25
  code, or guessing a replacement. It raises the gap to the runtime (backlog item or PR) and
26
26
  pins the runtime floor that carries the fix.
27
+ The same holds one level down and for whole capabilities, not only names: when a host finds
28
+ a FEATURE or CAPABILITY missing (a voice operation, a mail verb, a media task, a lookup), the
29
+ runtime, which does the integration, surfaces it through a facade, a typed refusal
30
+ (`CapabilityUnavailableError`, a 501 with the install hint) or a backlog item. A missing
31
+ capability is never a reason for a host to import a lower-level package (AbstractCore,
32
+ AbstractVoice, AbstractMemory, their dependencies) directly.
27
33
  3. A re-export is unchanged in identity (`facade.name is abstractcore.module.name`) and listed in
28
34
  the facade's `__all__`; the facade documents which AbstractCore version introduced the name.
29
35
  4. The facades are additive within a minor line: a name, once exported, is not removed without
@@ -0,0 +1,104 @@
1
+ # ADR 0010: One replay of the ledger, many views
2
+
3
+ Status: Accepted.
4
+ Date: 2026-10-27
5
+
6
+ ## Context
7
+
8
+ The run ledger is the record of a run. Every client that shows a run needs the same few facts
9
+ about it: its status, the approval or question it is waiting on, the replies, the tool calls and
10
+ the steps. Until this decision, each client worked those facts out for itself from raw ledger
11
+ records, run snapshots and its own memory. Panel-chat, the AbstractCode terminal client, the
12
+ desktop Assistant, the iPhone and watch apps, the Observer, AbstractFlow and both gateway
13
+ consoles each had their own reconstruction. The inventory, with file:line anchors, is in
14
+ [backlog 0854](../backlog/planned/0854_replay_view.md). The reconstructions disagreed on the same
15
+ run:
16
+
17
+ - 2026-09-29: a delegated child's tool approval showed as "Approval needed" on one client and as
18
+ "Running a tool" on another. A delegation wait displaced the person-facing wait, and a `$slim`
19
+ dedup pointer was left unresolved.
20
+ - 2026-10-04: a `wait_until` timer with no resume record left 182 of 3,278 runs showing "Waiting
21
+ for you" after they had completed.
22
+ - 2026-10-11: one Agent node execution showed as two steps, because nothing in the records names
23
+ the execution.
24
+
25
+ The operator's ruling (framework root backlog 0993,
26
+ `abstractframework/docs/backlog/planned/0993_one_ledger_replay_many_views.md`): "there should be
27
+ only one unified way to replay the ledger, on top of which we could have different views", and
28
+ "logic should not be in the thin client". Each client decides what to show and how to forward
29
+ the requests of the users and entities it serves.
30
+
31
+ Durability had a gap of its own. The SQLite ledger had a per-run `seq` and the JSONL ledger had
32
+ none. The gateway's cursor was a list position, and the file-to-SQLite migration renumbered
33
+ records (gateway backlog 0082).
34
+
35
+ ## Decision
36
+
37
+ 1. **One reducer, in the runtime.** `abstractruntime.replay` is the only code that turns ledger
38
+ records into run state for display:
39
+ - `replay(records_by_run, runs_by_id)` folds a run tree's records and durable snapshots into a
40
+ `ReplayView`.
41
+ - `ReplayView.apply(records)` folds newer records into it and returns the delta.
42
+ - `replay(all)` is `apply` over every record, so it equals folding the same records in chunks.
43
+
44
+ The reducer is pure and deterministic: no I/O and no clock, and its input is records plus
45
+ snapshots. Its JSON is versioned (`replay_view_v1`). A change in meaning is a new version,
46
+ never a silent change.
47
+ 2. **The reducer owns these rules.** Each rule below was a divergence between clients:
48
+ - The run tree comes from delegation waits (`subworkflow:<id>`), `start_subworkflow` results
49
+ and the snapshots' `parent_run_id`. When the two disagree, the ledger's link wins.
50
+ - A wait is over when its run records a `resume` for its key OR any later step of the same run
51
+ exists. Observability events are not steps.
52
+ - The person-facing interaction is the newest open approval, question or prompted event
53
+ anywhere in the tree. A delegation, a timer or a pause never is one.
54
+ - Status precedence: a terminal snapshot, then the ledger's terminal record, then an open wait,
55
+ then running.
56
+ - `$slim` pointers are resolved against the STARTED record. A pointer that cannot be resolved
57
+ is dropped and named in `warnings`.
58
+ - Executions follow AbstractFlow's `executionIdFor` rules.
59
+ - Each run names the workflow it executes (`bundle_id@version:flow_id`; the root's flow is its
60
+ entrypoint). Workflows are the framework's native unit.
61
+ 3. **The durable cursor is the per-run ledger `seq`.**
62
+ - Every ledger store numbers records 1, 2, 3, … per run. JSONL persists the number on append,
63
+ allocated under an advisory file lock. A line written before the field existed is numbered
64
+ by its position.
65
+ - Every store answers `list_after(run_id, after, limit)`.
66
+ - `SqliteLedgerStore.import_records` keeps `seq` across a migration.
67
+ - A view's cursor is the seq of each run in its tree. Its token `<run id prefix>:<seq>.…` is
68
+ the view's ETag and the SSE event id.
69
+ 4. **Hosts serve the view, and clients render it.**
70
+ - AbstractGateway serves `GET /runs/{id}/view` (ETag, 304, `?at=<token>`) and
71
+ `GET /runs/{id}/view/stream` (one `view`, then `delta` events, `Last-Event-ID`). There is
72
+ one cached view per run tree, folded once per appended record and fanned out to every
73
+ subscriber, with no timed re-parse.
74
+ - Clients act through the host's commands. The view's `interaction.command` is the resume to
75
+ send. Clients hold no run state that the server could replay.
76
+ - A client may keep a local view only as a cache of these deltas (`apply_delta`). It never
77
+ builds one from raw records.
78
+
79
+ ## Enforcement
80
+
81
+ - A client or host change that derives status, waits, tool rows or messages from raw ledger
82
+ records, outside `abstractruntime.replay`, conflicts with this ADR. The fix is a reducer change
83
+ with a fixture, or a view field.
84
+ - A reducer change that alters an existing fixture's expected view needs one of two things: the
85
+ fixture's diff in the PR and its reason, or a new `replay_view_vN` when the meaning of a field
86
+ changes.
87
+ - A new ledger store implements `list_after`, and its records carry `seq`. A migration between
88
+ stores preserves `seq`.
89
+
90
+ ## Validation
91
+
92
+ - `tests/test_replay_conformance.py`: the conformance cases shipped in
93
+ `abstractruntime.replay.conformance` (redacted real ledgers and synthetic cases), each with its
94
+ expected view and hand-written semantic checks.
95
+ - `tests/test_replay_invariants.py`: replay equals fold over any chunking and interleaving,
96
+ idempotence, delta round trips, and header-safe cursor tokens.
97
+ - `tests/test_ledger_cursor_invariants.py` and `tests/test_jsonl_ledger_seq_cross_process.py`:
98
+ the invariants of gateway backlog 0082 at store level (completeness, `list_after` equals a
99
+ replay from the same cursor, cursor stability across reopen and migration, recovery), and dense
100
+ seqs under concurrent processes.
101
+ - AbstractGateway `tests/test_gateway_replay_view.py`, `tests/test_migrate_preserves_ledger_seq.py`
102
+ and the principal isolation matrix: the routes through the real app.
103
+ - Every client that renders runs runs the conformance fixtures in its CI once it migrates
104
+ (backlog 0854).
@@ -20,7 +20,8 @@ When you ask "why is it designed this way?", the answer is in an ADR. ADRs are:
20
20
  | 0005 | [Runtime Owns AbstractCore Host Discovery Queries](0005_runtime_owns_abstractcore_host_discovery_queries.md) | Accepted | 2026-05-20 | Hosts should ask Runtime for Core discovery/catalog snapshots |
21
21
  | 0006 | [Runtime Owns Durable AbstractCore Bloc Prompt-Cache Control](0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md) | Accepted | 2026-05-20 | Hosts should use Runtime for durable bloc/KV controls and binding-aware execution |
22
22
  | 0007 | [Runtime Relays Core-Owned Model Residency Truth](0007_runtime_relays_core_owned_model_residency_truth.md) | Accepted | 2026-05-21 | Runtime reports loaded state only from AbstractCore residency truth |
23
- | 0008 | [Integration Facades Are the Complete Host Surface](0008_integration_facades_are_the_complete_host_surface.md) | Accepted | 2026-10-27 | Every AbstractCore name a host needs is a runtime facade re-export; a gap is a runtime patch, never a host import |
23
+ | 0008 | [Integration Facades Are the Complete Host Surface](0008_integration_facades_are_the_complete_host_surface.md) | Accepted | 2026-10-27 | Every AbstractCore name or capability a host needs is surfaced by the runtime (facade re-export, typed refusal, backlog); a gap is a runtime patch, never a host import of a lower-level package |
24
+ | 0010 | [One Replay of the Ledger, Many Views](0010_one_replay_many_views.md) | Accepted | 2026-10-27 | `abstractruntime.replay` is the only reconstruction of run state from the ledger; hosts serve its view, clients render it; the per-run ledger `seq` is the durable cursor |
24
25
 
25
26
  ## Relationship to Backlog
26
27
 
@@ -36,6 +37,7 @@ ADRs explain *why*. Backlog items explain *what* and *how*.
36
37
  | 0006 | `backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md` |
37
38
  | 0007 | `backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md`, `backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md` |
38
39
  | 0008 | AbstractGateway backlog 1044 (mailbox access) and `tests/test_gateway_import_boundary.py`; runtime 0.13.1 `email_facade.resolve_srv_default` |
40
+ | 0010 | `backlog/planned/0854_replay_view.md`; AbstractGateway backlog 0943 (view routes), 0082 (durable cursor); framework root 0993 |
39
41
 
40
42
  ## Adding New ADRs
41
43
 
@@ -133,6 +133,12 @@ Run index and creation (all built-in run stores, including the offloading wrappe
133
133
  - `JsonFileRunStore` event-wait and mailbox indexes (`list_event_waiters`, `list_event_waiters_by_prefix`, `list_mailbox_runs`) see what another process saved on the same folder (a split gateway: API process + runner process). Before each lookup the store reads its change signal (the creation log's size and the folder's mtime): when either moved, or at least every `EVENT_INDEX_REFRESH_S` (2 s), it stats each running or waiting run and re-reads the ones whose file changed since it last filed them. An idle store pays two stats per lookup; its own saves are never re-read. `event_index_stats()` returns `{refreshes, refiled, tracked}`.
134
134
  - `JsonFileRunStore.change_token()` answers "did any run of this folder change?" with one stat: `(creation-log size, active-index counter)`. Every save, create and delete through the store moves the counter; another process's create, delete or became-active line moves the log size. Not seen: another process re-saving a run that stays active (one ticking process per folder); ending a run, or re-saving a finished one, writes `=<run_id>`. `changed_run_ids(token)` names the runs this store changed since `token`, or `None` when that is unknown (the log moved, or more than 8,192 changes ago). `ObservableLedgerStore.change_token()` / `changed_run_ids(token)` do the same for ledger appends (process-local). The gateway runner's scan gate and its mail notification check compare these tokens instead of reading the directory.
135
135
 
136
+ The durable cursor (ADR 0010):
137
+ - Every ledger store numbers a run's records 1, 2, 3, … and `list()` returns each record with its `seq`. `JsonlLedgerStore` writes it on each line, allocated under an advisory file lock that spans the head read and the write, so another process appending to the same run never takes the same number. A line written before the field existed is numbered by its position. `append()` returns the seq.
138
+ - `LedgerStore.list_after(*, run_id, after, limit=1000) -> (records, last_seq)`: the records after a seq. SQLite does an indexed read; JSONL seeks to the byte offset where the previous read ended; the default implementation filters `list()`. The decorators (observable, hash-chained, offloading) delegate it.
139
+ - `ObservableLedgerStore` hands subscribers the record with its `seq`.
140
+ - `SqliteLedgerStore.import_records(run_id, records)` copies a run's ledger in, keeping each `seq`. A migration from files to SQLite therefore keeps every cursor valid. It refuses a run that already has records.
141
+
136
142
  Common decorators:
137
143
  - `ObservableLedgerStore` for subscriptions (`src/abstractruntime/storage/observable.py`)
138
144
  - `HashChainedLedgerStore` + `verify_ledger_chain(...)` for tamper-evidence (`src/abstractruntime/storage/ledger_chain.py`)
@@ -326,6 +332,25 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
326
332
  When available, it also includes `resolved_actions`: bounded capability/action summaries derived
327
333
  from Core route resolution and persisted from `LLM_CALL` results.
328
334
 
335
+ ## Replay view (one reconstruction of a run, every client)
336
+
337
+ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](replay.md).
338
+
339
+ - `replay(records_by_run, runs_by_id=None, *, root_run_id=None) -> ReplayView`: folds a run
340
+ tree's ledger records (`{run_id: [records in ledger order]}`) and durable snapshots
341
+ (`RunState` or dicts) into a view. Pure and deterministic.
342
+ - `ReplayView.apply(records, *, runs_by_id=None) -> delta`: folds newer records and snapshots.
343
+ The same delta is kept as `view.last_delta`. `apply(view, records)` is the module-level form.
344
+ - `ReplayView.to_json()`: the view, `replay_view_v1` (status, `interaction`, `open_waits`,
345
+ `runs`, `messages`, `activities`, `artifacts`, `usage`, `workflow`, `cursor`, `warnings`).
346
+ Other reads: `cursor`, `run_ids`, `last_seq(run_id)`, `status()`, `run_statuses()` and
347
+ `is_terminal()`.
348
+ - `apply_delta(view_json, delta)`, `diff_views(old, new)` and `parse_cursor_token(token)`: the
349
+ client side of a delta, the delta between two views, and a cursor token as `{run id prefix:
350
+ seq}`.
351
+ - `wait_kind(wait)`, `workflow_ref(workflow_id)`, `PERSON_FACING_KINDS`,
352
+ `TERMINAL_STATUSES`, `REPLAY_VIEW_VERSION`.
353
+
329
354
  ## Runtime-owned integrations
330
355
 
331
356
  ### AbstractCore (LLM + tools)
@@ -12,7 +12,7 @@ If you are new to the project, start with `../README.md` and `../architecture.md
12
12
 
13
13
  ## Counts
14
14
 
15
- - Planned: 29
15
+ - Planned: 31
16
16
  - Proposed: 14
17
17
  - Completed: 37
18
18
  - Deprecated: 13
@@ -145,6 +145,8 @@ mtime). The anticipated ADR ("an automation is its controller root run") is not
145
145
  | 028* | `planned/028_selective_artifact_rehydration.md` |
146
146
  | 0070 | `planned/0070_standalone_wui_browser_session_security_contract.md` |
147
147
  | 0848 | `planned/0848_automations_v2_external_event_inbox_and_run_triggers.md` (P2, after 0847's release; contracts pass 2026-09-27) |
148
+ | 0853 | `planned/0853_session_tool_policy_before_the_approval_wait.md` (P1; abstractruntime 0.14.0: a conversation's approve/deny stored per session and applied before any approval wait, with an `abstract.tool_policy_decision` ledger record; gateway routes and client wiring remain) |
149
+ | 0854 | `planned/0854_replay_view.md` (P0; abstractruntime 0.14.0 carries the reducer, the durable per-run `seq` cursor and the conformance cases; gateway routes and client migration remain; ADR 0010) |
148
150
  | 0044 | `planned/runtime_systemic_reliability/0044_meta_analysis_record.md` (track source record) |
149
151
  | 0045 | `planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md` |
150
152
  | 0046 | `planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md` |
@@ -0,0 +1,59 @@
1
+ # 0853-abstractruntime: [FEATURE] Session tool policy: a conversation's approve/deny applied before the approval wait
2
+
3
+ > Created: 2026-10-27
4
+ > Status: Planned (released in abstractruntime 0.14.0, 2026-10-27, PR #7 merge `ecfbb28`; remaining: the gateway floor and the follow-ups below)
5
+ > Type: feature
6
+ > Priority: P1
7
+ > Labels: tool-approval, ledger, replay, sessions
8
+ > Root: framework 1061 (cross-repo); related framework 0993 (one ledger replay, many views)
9
+
10
+ ## Summary
11
+
12
+ "Approve all" / "approve this kind" becomes a durable, server-side session policy that the
13
+ TOOL_CALLS handler consults before deciding whether a batch waits. Covered calls run with no wait
14
+ and no interaction; denied calls are refused with no wait. Each decision is an
15
+ `abstract.tool_policy_decision` ledger record.
16
+
17
+ ## Why
18
+
19
+ Operator, 2026-10-27, verbatim: "when a user gives permission to either all tools of a kind (e.g.
20
+ fetch url) OR all tools (all available/authorized for the user and authorized by the gateway), I
21
+ still see very quickly the gate approval showing up in apps and disappearing. Before sending the
22
+ gate approval, check whether the tool is already approved for the current session, and if so, do
23
+ not send the gate approval at all."
24
+
25
+ Before: the runtime knew only the start-time `_runtime.tool_policy`
26
+ (`effect_handlers.py` `_execute_with_run_policy_unscoped`), so it emitted `approval_required` for
27
+ every gated call; clients answered it after it arrived (panel-chat `autoApproveCurrentWait`,
28
+ desktop `should_auto_approve_tool_batch`, iPhone `applyConversationTrust`). The gate showed in
29
+ every client and in the replayable ledger.
30
+
31
+ ## What ships (branch `feat/session-tool-policy`)
32
+
33
+ - `src/abstractruntime/storage/session_tool_policy.py`: `SessionToolPolicyStore` protocol,
34
+ `InMemorySessionToolPolicyStore`, `SqliteSessionToolPolicyStore` (revision, `if_revision`
35
+ conflicts, append-only history), `session_policy_names`.
36
+ - `Runtime(session_tool_policy_store=...)`, `Runtime.set_session_tool_policy_store()`; the tick
37
+ attaches it to the run (`_runtime_session_tool_policy_store`).
38
+ - `effect_handlers.py`: `_session_tool_policy_for_run` (scope rules), deny in the pre-pass,
39
+ approve inside `_execute_with_run_policy` (both the run-policy and the static branch),
40
+ `_append_tool_policy_record` (no record, no auto-approval).
41
+ - Docs: `docs/tool-approval.md#session-tool-policy-a-conversations-standing-word`.
42
+ - Tests: `tests/test_session_tool_policy.py` (no wait + audit record, delegated child, mid-run
43
+ change with the one-off path intact, deny, mixed batch still waits, start-time require list
44
+ overridden, out-of-scope runs keep asking, reset, restart via sqlite, no record means no
45
+ auto-approval, store revisions/history). Mutation-checked.
46
+
47
+ ## Remaining
48
+
49
+ - The gateway's `ABSTRACTRUNTIME_FLOOR` raised to 0.14.0 (released 2026-10-27).
50
+ - Covering tools enabled after an `all` grant (today they ask until the person grants again).
51
+ - Answering waits that already exist when a policy is written (today the client answers the shown
52
+ one).
53
+
54
+ ## Acceptance criteria
55
+
56
+ - [x] No `approval_required` wait for a session-approved call, in the root run or a delegated
57
+ child; an audit record instead.
58
+ - [x] Deny refuses with no wait; out-of-scope runs unchanged.
59
+ - [ ] Released, and the gateway floor raised.