AbstractRuntime 0.4.29__tar.gz → 0.4.32__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 (606) hide show
  1. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/.gitignore +22 -0
  2. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/CHANGELOG.md +212 -1
  3. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/PKG-INFO +28 -18
  4. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/README.md +18 -10
  5. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/README.md +5 -2
  6. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/api.md +34 -6
  7. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/architecture.md +37 -9
  8. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/artifacts.md +27 -0
  9. abstractruntime-0.4.32/docs/backlog/README.md +179 -0
  10. abstractruntime-0.4.32/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +96 -0
  11. abstractruntime-0.4.32/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +90 -0
  12. abstractruntime-0.4.32/docs/backlog/planned/0233_real_run_cancellation.md +22 -0
  13. abstractruntime-0.4.32/docs/backlog/planned/026_context_checkpoint_self_compression.md +51 -0
  14. abstractruntime-0.4.32/docs/backlog/planned/027_quote_provenance_discipline.md +41 -0
  15. abstractruntime-0.4.32/docs/backlog/planned/028_selective_artifact_rehydration.md +43 -0
  16. abstractruntime-0.4.32/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +109 -0
  17. abstractruntime-0.4.32/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +182 -0
  18. abstractruntime-0.4.32/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +139 -0
  19. abstractruntime-0.4.32/docs/backlog/planned/runtime_portability/README.md +68 -0
  20. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +166 -0
  21. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +125 -0
  22. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +102 -0
  23. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +103 -0
  24. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +89 -0
  25. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +90 -0
  26. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +95 -0
  27. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +76 -0
  28. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +65 -0
  29. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +105 -0
  30. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +113 -0
  31. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +69 -0
  32. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +123 -0
  33. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +171 -0
  34. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +146 -0
  35. abstractruntime-0.4.32/docs/backlog/planned/runtime_systemic_reliability/README.md +113 -0
  36. abstractruntime-0.4.32/docs/backlog/proposed/0069_document_renderer_professional_figures.md +43 -0
  37. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +60 -0
  38. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +56 -0
  39. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +56 -0
  40. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +53 -0
  41. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +53 -0
  42. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +55 -0
  43. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +54 -0
  44. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +64 -0
  45. abstractruntime-0.4.32/docs/backlog/proposed/runtime_systemic_reliability/README.md +49 -0
  46. abstractruntime-0.4.32/docs/entity-runtime.md +142 -0
  47. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/faq.md +1 -1
  48. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/getting-started.md +1 -1
  49. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/integrations/abstractcore.md +172 -5
  50. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/limits.md +1 -1
  51. abstractruntime-0.4.32/docs/tool-approval.md +91 -0
  52. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/troubleshooting.md +1 -1
  53. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/llms-full.txt +602 -52
  54. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/llms.txt +8 -5
  55. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/pyproject.toml +17 -7
  56. abstractruntime-0.4.32/release-notes.md +140 -0
  57. abstractruntime-0.4.32/scripts/backfill_diary_edges.py +147 -0
  58. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/__init__.py +69 -0
  59. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/core/config.py +3 -3
  60. abstractruntime-0.4.32/src/abstractruntime/core/effect_cancellation.py +354 -0
  61. abstractruntime-0.4.32/src/abstractruntime/core/event_keys.py +140 -0
  62. abstractruntime-0.4.32/src/abstractruntime/core/health.py +122 -0
  63. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/core/models.py +78 -0
  64. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/core/policy.py +39 -8
  65. abstractruntime-0.4.32/src/abstractruntime/core/progress_channel.py +108 -0
  66. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/core/runtime.py +1736 -137
  67. abstractruntime-0.4.32/src/abstractruntime/core/tool_scope.py +71 -0
  68. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/core/vars.py +20 -1
  69. abstractruntime-0.4.32/src/abstractruntime/documents/__init__.py +13 -0
  70. abstractruntime-0.4.32/src/abstractruntime/documents/charts.py +373 -0
  71. abstractruntime-0.4.32/src/abstractruntime/documents/docx.py +596 -0
  72. abstractruntime-0.4.32/src/abstractruntime/documents/pdf.py +978 -0
  73. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/evidence/recorder.py +132 -2
  74. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/history_bundle.py +391 -38
  75. abstractruntime-0.4.32/src/abstractruntime/identity/__init__.py +17 -0
  76. abstractruntime-0.4.32/src/abstractruntime/identity/act_only.py +393 -0
  77. abstractruntime-0.4.32/src/abstractruntime/identity/chat.py +3769 -0
  78. abstractruntime-0.4.32/src/abstractruntime/identity/communities.py +432 -0
  79. abstractruntime-0.4.32/src/abstractruntime/identity/diary.py +605 -0
  80. abstractruntime-0.4.32/src/abstractruntime/identity/digest.py +274 -0
  81. abstractruntime-0.4.32/src/abstractruntime/identity/entity_runtime.py +211 -0
  82. abstractruntime-0.4.32/src/abstractruntime/identity/lease.py +43 -0
  83. abstractruntime-0.4.32/src/abstractruntime/identity/life.py +4386 -0
  84. abstractruntime-0.4.32/src/abstractruntime/identity/memory_reader.py +780 -0
  85. abstractruntime-0.4.32/src/abstractruntime/identity/night_voice.py +248 -0
  86. abstractruntime-0.4.32/src/abstractruntime/identity/phase_graph.py +538 -0
  87. abstractruntime-0.4.32/src/abstractruntime/identity/phase_spec.py +187 -0
  88. abstractruntime-0.4.32/src/abstractruntime/identity/prelude.py +306 -0
  89. abstractruntime-0.4.32/src/abstractruntime/identity/prompt_overlay.py +192 -0
  90. abstractruntime-0.4.32/src/abstractruntime/identity/reflection.py +595 -0
  91. abstractruntime-0.4.32/src/abstractruntime/identity/spec/entity_phases.vendored.json +687 -0
  92. abstractruntime-0.4.32/src/abstractruntime/identity/substrate.py +159 -0
  93. abstractruntime-0.4.32/src/abstractruntime/identity/tool_effects.py +205 -0
  94. abstractruntime-0.4.32/src/abstractruntime/identity/tool_policy.py +447 -0
  95. abstractruntime-0.4.32/src/abstractruntime/identity/tools.py +1567 -0
  96. abstractruntime-0.4.32/src/abstractruntime/identity/visit_workflow.py +1227 -0
  97. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/__init__.py +15 -0
  98. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractcore/agora_tools.py +568 -0
  99. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractcore/config_facade.py +627 -0
  100. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractcore/constants.py +50 -0
  101. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +82 -0
  102. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractcore/default_tools.py +759 -0
  103. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +14 -0
  104. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +155 -13
  105. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +1600 -86
  106. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/factory.py +176 -15
  107. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/host_facade.py +149 -1
  108. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/llm_client.py +3918 -201
  109. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +426 -0
  110. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +1 -1
  111. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/output_specs.py +60 -4
  112. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/run_facade.py +243 -0
  113. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/session_attachments.py +238 -10
  114. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/tool_executor.py +391 -62
  115. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +263 -0
  116. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +341 -2
  117. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractmemory/__init__.py +11 -0
  118. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +512 -0
  119. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractmemory/identity_support.py +269 -0
  120. abstractruntime-0.4.32/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +842 -0
  121. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/memory/token_budget.py +44 -1
  122. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/rendering/agent_trace_report.py +11 -1
  123. abstractruntime-0.4.32/src/abstractruntime/scheduler/__init__.py +31 -0
  124. abstractruntime-0.4.32/src/abstractruntime/scheduler/multi_store.py +379 -0
  125. abstractruntime-0.4.32/src/abstractruntime/session_history.py +249 -0
  126. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/__init__.py +22 -0
  127. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/base.py +70 -4
  128. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/commands.py +10 -0
  129. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/in_memory.py +6 -4
  130. abstractruntime-0.4.32/src/abstractruntime/storage/json_files.py +1206 -0
  131. abstractruntime-0.4.32/src/abstractruntime/storage/lease.py +255 -0
  132. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/ledger_chain.py +70 -30
  133. abstractruntime-0.4.32/src/abstractruntime/storage/ledger_slim.py +698 -0
  134. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/observable.py +9 -0
  135. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/offloading.py +175 -4
  136. abstractruntime-0.4.32/src/abstractruntime/storage/serialize.py +106 -0
  137. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/sqlite.py +507 -46
  138. abstractruntime-0.4.32/src/abstractruntime/storage/steer_sidecar.py +308 -0
  139. abstractruntime-0.4.32/src/abstractruntime/turn_grounding.py +220 -0
  140. abstractruntime-0.4.32/src/abstractruntime/utils/atomic_files.py +59 -0
  141. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +1 -1
  142. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +21 -1
  143. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/compiler.py +710 -97
  144. abstractruntime-0.4.32/src/abstractruntime/visualflow_compiler/visual/code_executor.py +535 -0
  145. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/visual/executor.py +709 -11
  146. abstractruntime-0.4.32/src/abstractruntime/visualflow_compiler/visual/function_library.py +322 -0
  147. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/visual/models.py +23 -0
  148. abstractruntime-0.4.32/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +411 -0
  149. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/workflow_bundle/packer.py +23 -1
  150. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/conftest.py +15 -0
  151. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_abstractcore_discovery_facade.py +36 -0
  152. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_abstractcore_host_facade.py +61 -0
  153. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_abstractcore_run_facade.py +132 -0
  154. abstractruntime-0.4.32/tests/test_agora_agent_alias_identity.py +295 -0
  155. abstractruntime-0.4.32/tests/test_agora_tools_http.py +374 -0
  156. abstractruntime-0.4.32/tests/test_analyze_media_addressing_and_walling.py +390 -0
  157. abstractruntime-0.4.32/tests/test_browser_probe_target_walling.py +71 -0
  158. abstractruntime-0.4.32/tests/test_budget_law_no_unrequested_caps.py +238 -0
  159. abstractruntime-0.4.32/tests/test_capability_default_reasoning.py +158 -0
  160. abstractruntime-0.4.32/tests/test_code_node_restricted_python.py +95 -0
  161. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_command_store.py +35 -0
  162. abstractruntime-0.4.32/tests/test_crash_ordering_inversions.py +105 -0
  163. abstractruntime-0.4.32/tests/test_data_registry_facade.py +95 -0
  164. abstractruntime-0.4.32/tests/test_default_tools_camera_gating.py +343 -0
  165. abstractruntime-0.4.32/tests/test_default_tools_include_skim_web.py +19 -0
  166. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_default_tools_search_files_executor.py +6 -4
  167. abstractruntime-0.4.32/tests/test_diary_capture.py +171 -0
  168. abstractruntime-0.4.32/tests/test_diary_write_rescue.py +120 -0
  169. abstractruntime-0.4.32/tests/test_directory_lease.py +525 -0
  170. abstractruntime-0.4.32/tests/test_disabled_toolsets_seam.py +55 -0
  171. abstractruntime-0.4.32/tests/test_discovery_survives_unbuildable_default.py +152 -0
  172. abstractruntime-0.4.32/tests/test_document_markdown_tables.py +123 -0
  173. abstractruntime-0.4.32/tests/test_document_renderers_hr_quote.py +58 -0
  174. abstractruntime-0.4.32/tests/test_durable_write_discipline.py +287 -0
  175. abstractruntime-0.4.32/tests/test_effect_cancellation.py +441 -0
  176. abstractruntime-0.4.32/tests/test_effect_issuance_idempotency.py +248 -0
  177. abstractruntime-0.4.32/tests/test_effect_payload_stays_json_serializable.py +271 -0
  178. abstractruntime-0.4.32/tests/test_election_consequence_teaching.py +1373 -0
  179. abstractruntime-0.4.32/tests/test_emergence_experiment.py +552 -0
  180. abstractruntime-0.4.32/tests/test_emit_event_uses_wait_index.py +228 -0
  181. abstractruntime-0.4.32/tests/test_endpoint_profile_route_context.py +211 -0
  182. abstractruntime-0.4.32/tests/test_entity_awake_memory_fixes.py +1037 -0
  183. abstractruntime-0.4.32/tests/test_entity_brain_effects.py +592 -0
  184. abstractruntime-0.4.32/tests/test_entity_chat_driver.py +392 -0
  185. abstractruntime-0.4.32/tests/test_entity_chat_tools_reflection.py +598 -0
  186. abstractruntime-0.4.32/tests/test_entity_diary.py +571 -0
  187. abstractruntime-0.4.32/tests/test_entity_execute_tool.py +163 -0
  188. abstractruntime-0.4.32/tests/test_entity_fetch_url_tool.py +84 -0
  189. abstractruntime-0.4.32/tests/test_entity_life_loop.py +1924 -0
  190. abstractruntime-0.4.32/tests/test_entity_memory_richness.py +825 -0
  191. abstractruntime-0.4.32/tests/test_entity_phase_graph_conformance.py +219 -0
  192. abstractruntime-0.4.32/tests/test_entity_recent_memories.py +196 -0
  193. abstractruntime-0.4.32/tests/test_entity_runtime.py +245 -0
  194. abstractruntime-0.4.32/tests/test_entity_search_memory.py +268 -0
  195. abstractruntime-0.4.32/tests/test_entity_sleep_bound_and_yield_attribution.py +117 -0
  196. abstractruntime-0.4.32/tests/test_entity_substrate_resolution.py +180 -0
  197. abstractruntime-0.4.32/tests/test_entity_visit_honesty.py +274 -0
  198. abstractruntime-0.4.32/tests/test_entity_workspace_cap.py +166 -0
  199. abstractruntime-0.4.32/tests/test_entity_workspace_tools.py +209 -0
  200. abstractruntime-0.4.32/tests/test_event_wait_index.py +239 -0
  201. abstractruntime-0.4.32/tests/test_every_path_bearing_tool_is_walled.py +102 -0
  202. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_evidence_recorder.py +46 -1
  203. abstractruntime-0.4.32/tests/test_evidence_recorder_post_policy_envelope.py +152 -0
  204. abstractruntime-0.4.32/tests/test_execute_command_output_offload.py +164 -0
  205. abstractruntime-0.4.32/tests/test_execution_capability_discovery.py +131 -0
  206. abstractruntime-0.4.32/tests/test_factory_default_retry_policy.py +62 -0
  207. abstractruntime-0.4.32/tests/test_format_repair_nudge.py +229 -0
  208. abstractruntime-0.4.32/tests/test_fresh_install_no_provider.py +75 -0
  209. abstractruntime-0.4.32/tests/test_gateway_facades_c4899.py +137 -0
  210. abstractruntime-0.4.32/tests/test_git_read_only_refiner.py +122 -0
  211. abstractruntime-0.4.32/tests/test_hot_path_store_reads.py +466 -0
  212. abstractruntime-0.4.32/tests/test_indexed_idempotency_lookup.py +524 -0
  213. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_json_file_run_store_children_index.py +15 -8
  214. abstractruntime-0.4.32/tests/test_json_run_cache_bound.py +48 -0
  215. abstractruntime-0.4.32/tests/test_json_store_scan_memo.py +375 -0
  216. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_kg_learn_and_recall_contract.py +13 -2
  217. abstractruntime-0.4.32/tests/test_ledger_chain.py +104 -0
  218. abstractruntime-0.4.32/tests/test_ledger_record_slimming.py +693 -0
  219. abstractruntime-0.4.32/tests/test_llm_call_payload_shape_refusal.py +104 -0
  220. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_call_requires_prompt.py +4 -1
  221. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_call_structured_output_fallback.py +63 -0
  222. abstractruntime-0.4.32/tests/test_llm_call_text_phase_progress.py +187 -0
  223. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_call_truncation_retry_contract.py +41 -10
  224. abstractruntime-0.4.32/tests/test_llm_call_verbatim_payload_capture.py +76 -0
  225. abstractruntime-0.4.32/tests/test_llm_client_grounding_tail.py +470 -0
  226. abstractruntime-0.4.32/tests/test_llm_retry_classification.py +171 -0
  227. abstractruntime-0.4.32/tests/test_llm_streaming_on_token.py +219 -0
  228. abstractruntime-0.4.32/tests/test_local_helper_tool_exposure.py +169 -0
  229. abstractruntime-0.4.32/tests/test_local_residency_host_sweep.py +268 -0
  230. abstractruntime-0.4.32/tests/test_max_iterations_ceiling.py +88 -0
  231. abstractruntime-0.4.32/tests/test_media_capability_default_routing.py +309 -0
  232. abstractruntime-0.4.32/tests/test_media_subprocess.py +152 -0
  233. abstractruntime-0.4.32/tests/test_memory_appraise_handler.py +303 -0
  234. abstractruntime-0.4.32/tests/test_memory_communities.py +202 -0
  235. abstractruntime-0.4.32/tests/test_memory_seam_handlers.py +488 -0
  236. abstractruntime-0.4.32/tests/test_memory_seam_sqlite_durability.py +169 -0
  237. abstractruntime-0.4.32/tests/test_model_eject_cancel.py +58 -0
  238. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_model_residency_control_plane.py +4 -0
  239. abstractruntime-0.4.32/tests/test_model_residency_lock_and_context_estimate.py +1943 -0
  240. abstractruntime-0.4.32/tests/test_multi_store_scheduler.py +297 -0
  241. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_multimodal_abstractcore_integration.py +109 -0
  242. abstractruntime-0.4.32/tests/test_native_mlx_application_wiring.py +313 -0
  243. abstractruntime-0.4.32/tests/test_native_mlx_execution_controls_live.py +133 -0
  244. abstractruntime-0.4.32/tests/test_native_tool_channel.py +275 -0
  245. abstractruntime-0.4.32/tests/test_night_voice.py +105 -0
  246. abstractruntime-0.4.32/tests/test_no_default_provider_refusal_ux.py +96 -0
  247. abstractruntime-0.4.32/tests/test_offload_answer_chain_c4978.py +154 -0
  248. abstractruntime-0.4.32/tests/test_offloaded_node_traces_report_unknown_not_zero.py +69 -0
  249. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_packaging_extras.py +6 -6
  250. abstractruntime-0.4.32/tests/test_parallel_readonly_tool_execution.py +191 -0
  251. abstractruntime-0.4.32/tests/test_pdf_unicode_rendering.py +74 -0
  252. abstractruntime-0.4.32/tests/test_personal_cycle.py +556 -0
  253. abstractruntime-0.4.32/tests/test_phantom_attachment_index.py +187 -0
  254. abstractruntime-0.4.32/tests/test_phase_graph_artifact_control.py +183 -0
  255. abstractruntime-0.4.32/tests/test_phase_graph_obedience.py +428 -0
  256. abstractruntime-0.4.32/tests/test_phase_vocabulary_migration.py +329 -0
  257. abstractruntime-0.4.32/tests/test_pooled_client_strips_construction_cache_key.py +33 -0
  258. abstractruntime-0.4.32/tests/test_prompt_cache_fingerprint_stability.py +109 -0
  259. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_prompt_cache_modules.py +208 -45
  260. abstractruntime-0.4.32/tests/test_prompt_cache_posture_inheritance.py +228 -0
  261. abstractruntime-0.4.32/tests/test_prompt_cache_thinking_and_prompt_only.py +361 -0
  262. abstractruntime-0.4.32/tests/test_prompt_overlay.py +361 -0
  263. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_provider_endpoint_profile_resolution.py +119 -0
  264. abstractruntime-0.4.32/tests/test_provider_pin_routing_isolation.py +170 -0
  265. abstractruntime-0.4.32/tests/test_read_idle_threading.py +88 -0
  266. abstractruntime-0.4.32/tests/test_readoption_experiment.py +505 -0
  267. abstractruntime-0.4.32/tests/test_realize_election.py +272 -0
  268. abstractruntime-0.4.32/tests/test_remote_client_cancel.py +141 -0
  269. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_remote_llm_client.py +41 -0
  270. abstractruntime-0.4.32/tests/test_remote_speculation_defaults.py +174 -0
  271. abstractruntime-0.4.32/tests/test_report_branding.py +157 -0
  272. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_retry_idempotency.py +8 -1
  273. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_run_history_bundle.py +290 -1
  274. abstractruntime-0.4.32/tests/test_run_scoped_tool_policy.py +85 -0
  275. abstractruntime-0.4.32/tests/test_run_tool_scope_ceiling.py +308 -0
  276. abstractruntime-0.4.32/tests/test_runtime_browser_session_boundary.py +58 -0
  277. abstractruntime-0.4.32/tests/test_runtime_default_provider_model_refresh.py +251 -0
  278. abstractruntime-0.4.32/tests/test_runtime_health_and_bounded_vars.py +495 -0
  279. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_runtime_install_boundary.py +31 -3
  280. abstractruntime-0.4.32/tests/test_runtime_start_seeds_tool_support.py +147 -0
  281. abstractruntime-0.4.32/tests/test_runtime_tick_step_gate.py +141 -0
  282. abstractruntime-0.4.32/tests/test_send_email_refiner.py +89 -0
  283. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_session_attachments_registry_and_open_tool.py +78 -2
  284. abstractruntime-0.4.32/tests/test_session_history.py +445 -0
  285. abstractruntime-0.4.32/tests/test_session_prompt_cache_attribution.py +382 -0
  286. abstractruntime-0.4.32/tests/test_session_prompt_cache_visibility.py +413 -0
  287. abstractruntime-0.4.32/tests/test_session_route_stamp.py +132 -0
  288. abstractruntime-0.4.32/tests/test_shell_tool_exposure.py +275 -0
  289. abstractruntime-0.4.32/tests/test_speculation_inheritance.py +165 -0
  290. abstractruntime-0.4.32/tests/test_speculation_reaches_provider_construction.py +128 -0
  291. abstractruntime-0.4.32/tests/test_start_subworkflow_async_wait.py +177 -0
  292. abstractruntime-0.4.32/tests/test_start_subworkflow_workspace_inheritance.py +246 -0
  293. abstractruntime-0.4.32/tests/test_steer_sidecar.py +432 -0
  294. abstractruntime-0.4.32/tests/test_thinking_inheritance.py +437 -0
  295. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_approval_executor.py +11 -1
  296. abstractruntime-0.4.32/tests/test_tool_approval_wait_key_identity.py +243 -0
  297. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_calls_idempotency_keys.py +6 -1
  298. abstractruntime-0.4.32/tests/test_tool_catalog.py +86 -0
  299. abstractruntime-0.4.32/tests/test_tool_descriptor_registry.py +381 -0
  300. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_executor_error_output_detection.py +12 -0
  301. abstractruntime-0.4.32/tests/test_tool_inventory_facade.py +48 -0
  302. abstractruntime-0.4.32/tests/test_tool_invoke_effect.py +123 -0
  303. abstractruntime-0.4.32/tests/test_tool_policy_and_mounts.py +358 -0
  304. abstractruntime-0.4.32/tests/test_topic_election_world_model.py +362 -0
  305. abstractruntime-0.4.32/tests/test_turn_grounding_byte_stability.py +384 -0
  306. abstractruntime-0.4.32/tests/test_turn_grounding_carriers_a3.py +141 -0
  307. abstractruntime-0.4.32/tests/test_visit_ab_fixture.py +294 -0
  308. abstractruntime-0.4.32/tests/test_visit_history_replay_caps.py +161 -0
  309. abstractruntime-0.4.32/tests/test_visit_midturn_elections.py +205 -0
  310. abstractruntime-0.4.32/tests/test_visit_midturn_resume.py +281 -0
  311. abstractruntime-0.4.32/tests/test_visit_workflow.py +537 -0
  312. abstractruntime-0.4.32/tests/test_visual_agent_output_context_includes_messages.py +355 -0
  313. abstractruntime-0.4.32/tests/test_visual_agent_skills_block_passthrough.py +137 -0
  314. abstractruntime-0.4.32/tests/test_visual_entity_memory_nodes.py +244 -0
  315. abstractruntime-0.4.32/tests/test_visual_flow_end_effect_only_persistence.py +86 -0
  316. abstractruntime-0.4.32/tests/test_visual_llm_call_partial_override.py +86 -0
  317. abstractruntime-0.4.32/tests/test_visual_unknown_node_type_refuses.py +137 -0
  318. abstractruntime-0.4.32/tests/test_visual_wait_event_deadline_passthrough.py +47 -0
  319. abstractruntime-0.4.32/tests/test_visualflow_agora_react_agent.py +227 -0
  320. abstractruntime-0.4.32/tests/test_visualflow_continue_on_error.py +124 -0
  321. abstractruntime-0.4.32/tests/test_visualflow_event_inbox_react_agent.py +221 -0
  322. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_file_nodes_workspace.py +83 -0
  323. abstractruntime-0.4.32/tests/test_visualflow_function_library.py +500 -0
  324. abstractruntime-0.4.32/tests/test_visualflow_get_var_node.py +74 -0
  325. abstractruntime-0.4.32/tests/test_visualflow_pin_expressions.py +931 -0
  326. abstractruntime-0.4.32/tests/test_w4_feelings_lens.py +141 -0
  327. abstractruntime-0.4.32/tests/test_wait_event_deadline.py +161 -0
  328. abstractruntime-0.4.32/tests/test_wait_until_streak.py +164 -0
  329. abstractruntime-0.4.32/tests/test_wait_until_utc_normalization.py +102 -0
  330. abstractruntime-0.4.32/tests/test_workspace_policy_absolute_reanchor.py +208 -0
  331. abstractruntime-0.4.32/tests/test_workspace_prompt_context.py +82 -0
  332. abstractruntime-0.4.32/tests/test_write_chart.py +249 -0
  333. abstractruntime-0.4.29/docs/backlog/README.md +0 -99
  334. abstractruntime-0.4.29/release-notes.md +0 -2
  335. abstractruntime-0.4.29/src/abstractruntime/core/event_keys.py +0 -62
  336. abstractruntime-0.4.29/src/abstractruntime/documents/__init__.py +0 -5
  337. abstractruntime-0.4.29/src/abstractruntime/documents/pdf.py +0 -369
  338. abstractruntime-0.4.29/src/abstractruntime/identity/__init__.py +0 -7
  339. abstractruntime-0.4.29/src/abstractruntime/integrations/abstractcore/constants.py +0 -19
  340. abstractruntime-0.4.29/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -258
  341. abstractruntime-0.4.29/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -3
  342. abstractruntime-0.4.29/src/abstractruntime/scheduler/__init__.py +0 -13
  343. abstractruntime-0.4.29/src/abstractruntime/storage/json_files.py +0 -469
  344. abstractruntime-0.4.29/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -315
  345. abstractruntime-0.4.29/tests/test_ledger_chain.py +0 -57
  346. abstractruntime-0.4.29/tests/test_llm_call_verbatim_payload_capture.py +0 -31
  347. abstractruntime-0.4.29/tests/test_runtime_start_seeds_tool_support.py +0 -37
  348. abstractruntime-0.4.29/tests/test_start_subworkflow_async_wait.py +0 -61
  349. abstractruntime-0.4.29/tests/test_start_subworkflow_workspace_inheritance.py +0 -108
  350. abstractruntime-0.4.29/tests/test_visual_agent_output_context_includes_messages.py +0 -159
  351. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/.github/workflows/ci.yml +0 -0
  352. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/.github/workflows/release.yml +0 -0
  353. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/ACKNOWLEDGMENTS.md +0 -0
  354. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/CODE_OF_CONDUCT.md +0 -0
  355. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/CONTRIBUTING.md +0 -0
  356. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/LICENSE +0 -0
  357. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/ROADMAP.md +0 -0
  358. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/SECURITY.md +0 -0
  359. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  360. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  361. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  362. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  363. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  364. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  365. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  366. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/adr/README.md +0 -0
  367. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  368. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  369. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  370. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  371. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  372. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  373. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  374. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  375. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/003_wait_primitives.md +0 -0
  376. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  377. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  378. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  379. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  380. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  381. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  382. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  383. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  384. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/009_artifact_store.md +0 -0
  385. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  386. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  387. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  388. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  389. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  390. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  391. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  392. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  393. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  394. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  395. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  396. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  397. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  398. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  399. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  400. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  401. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  402. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  403. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  404. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  405. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  406. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  407. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  408. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/004_tests.md +0 -0
  409. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  410. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  411. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  412. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  413. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/README.md +0 -0
  414. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  415. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  416. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  417. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  418. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  419. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  420. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  421. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  422. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  423. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/evidence.md +0 -0
  424. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/manual_testing.md +0 -0
  425. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/mcp-worker.md +0 -0
  426. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/proposal.md +0 -0
  427. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/provenance.md +0 -0
  428. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/snapshots.md +0 -0
  429. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/tools-comms.md +0 -0
  430. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/docs/workflow-bundles.md +0 -0
  431. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/emails.config.example.yaml +0 -0
  432. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/examples/01_hello_world.py +0 -0
  433. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/examples/02_ask_user.py +0 -0
  434. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/examples/03_wait_until.py +0 -0
  435. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/examples/04_multi_step.py +0 -0
  436. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/examples/05_persistence.py +0 -0
  437. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/examples/06_llm_integration.py +0 -0
  438. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/examples/07_react_agent.py +0 -0
  439. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/examples/README.md +0 -0
  440. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/mkdocs.yml +0 -0
  441. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/pytest.ini +0 -0
  442. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/core/__init__.py +0 -0
  443. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/core/run_lifecycle.py +0 -0
  444. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/core/spec.py +0 -0
  445. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/evidence/__init__.py +0 -0
  446. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/identity/fingerprint.py +0 -0
  447. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/__init__.py +0 -0
  448. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  449. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  450. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  451. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  452. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  453. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  454. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  455. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  456. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/memory/__init__.py +0 -0
  457. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/memory/active_context.py +0 -0
  458. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/memory/active_memory.py +0 -0
  459. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/memory/compaction.py +0 -0
  460. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/memory/kg_packets.py +0 -0
  461. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/memory/memact_composer.py +0 -0
  462. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/memory/recall_levels.py +0 -0
  463. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/rendering/__init__.py +0 -0
  464. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/rendering/json_stringify.py +0 -0
  465. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/scheduler/convenience.py +0 -0
  466. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/scheduler/registry.py +0 -0
  467. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/scheduler/scheduler.py +0 -0
  468. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/artifacts.py +0 -0
  469. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/storage/snapshots.py +0 -0
  470. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/utils/__init__.py +0 -0
  471. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/utils/file_filters.py +0 -0
  472. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/utils/workspace_paths.py +0 -0
  473. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  474. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  475. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  476. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  477. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  478. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  479. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  480. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  481. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  482. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  483. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  484. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  485. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  486. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  487. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  488. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  489. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/workflow_bundle/models.py +0 -0
  490. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  491. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  492. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/README.md +0 -0
  493. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_abstractcore_comms_facade.py +0 -0
  494. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_abstractcore_telegram_facade.py +0 -0
  495. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_active_context_policy.py +0 -0
  496. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_active_memory.py +0 -0
  497. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_answer_user_effect.py +0 -0
  498. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_artifacts.py +0 -0
  499. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_chat_summarizer_integration.py +0 -0
  500. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_compaction_helpers.py +0 -0
  501. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_control_adapter_while.py +0 -0
  502. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_default_tools_comms_gating.py +0 -0
  503. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_default_tools_include_skim_files.py +0 -0
  504. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_default_tools_include_skim_folders.py +0 -0
  505. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_durable_toolsets.py +0 -0
  506. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  507. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_emit_event_without_workflow_registry.py +0 -0
  508. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  509. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_integration_abstractcore.py +0 -0
  510. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_integrations_abstractcore.py +0 -0
  511. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_jsonl_ledger_recovery.py +0 -0
  512. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_ledger_subscription.py +0 -0
  513. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_call_media_artifact_refs.py +0 -0
  514. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  515. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  516. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_call_response_schema_normalization.py +0 -0
  517. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  518. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_client_media_artifacts.py +0 -0
  519. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_client_system_context.py +0 -0
  520. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_llm_client_tool_call_parsing.py +0 -0
  521. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  522. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_mcp_remote_tool_executor.py +0 -0
  523. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_mcp_worker_logging.py +0 -0
  524. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_mcp_worker_security.py +0 -0
  525. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_mcp_worker_stdio.py +0 -0
  526. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_media_artifact_resolution.py +0 -0
  527. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memact_composer_from_kg_result.py +0 -0
  528. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  529. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_kg_packets.py +0 -0
  530. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  531. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  532. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  533. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  534. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_note_effect.py +0 -0
  535. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_query_effect.py +0 -0
  536. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_query_rich_filters.py +0 -0
  537. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  538. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_memory_tag_effect.py +0 -0
  539. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_mlx_generation_serialization.py +0 -0
  540. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_offloading.py +0 -0
  541. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_pause_resume.py +0 -0
  542. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_prompt_cache_export_import.py +0 -0
  543. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_queryable_run_store.py +0 -0
  544. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  545. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_real_integration.py +0 -0
  546. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_recall_levels_policy.py +0 -0
  547. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_rendering_agent_trace_report.py +0 -0
  548. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_rendering_json_stringify.py +0 -0
  549. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  550. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_runtime_effect_invocation_trace.py +0 -0
  551. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  552. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_runtime_node_traces.py +0 -0
  553. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_scheduler.py +0 -0
  554. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_snapshots.py +0 -0
  555. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_sqlite_ledger_store.py +0 -0
  556. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  557. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_storage_deletion.py +0 -0
  558. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_structured_output_schema_enum.py +0 -0
  559. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_subworkflow.py +0 -0
  560. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_terminal_effect_completion.py +0 -0
  561. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  562. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  563. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_approval_resume_executes.py +0 -0
  564. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_executor_argument_sanitization.py +0 -0
  565. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_executor_filename_alias.py +0 -0
  566. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  567. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_executor_read_file_aliases.py +0 -0
  568. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_executor_timeout.py +0 -0
  569. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_tool_wait_allowlist_safety.py +0 -0
  570. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_trace_context_propagation.py +0 -0
  571. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_vars_query_effect.py +0 -0
  572. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  573. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  574. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  575. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  576. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  577. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_memact_compose_node.py +0 -0
  578. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  579. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  580. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  581. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_add_message_builtin.py +0 -0
  582. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  583. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_call_tool_node.py +0 -0
  584. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  585. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_compiler_basic.py +0 -0
  586. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  587. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  588. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_get_element_node.py +0 -0
  589. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_get_random_element_node.py +0 -0
  590. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_has_tools_builtin.py +0 -0
  591. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  592. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  593. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_make_object_node.py +0 -0
  594. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_media_nodes.py +0 -0
  595. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  596. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_memory_source_pins.py +0 -0
  597. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_prompt_only.py +0 -0
  598. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_random_nodes.py +0 -0
  599. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_schema_enum_switch.py +0 -0
  600. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_string_contains_replace.py +0 -0
  601. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_visualflow_tool_parameters_node.py +0 -0
  602. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_wait_event_prompt_metadata.py +0 -0
  603. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_workflow_bundle_registry.py +0 -0
  604. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  605. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  606. {abstractruntime-0.4.29 → abstractruntime-0.4.32}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
@@ -87,3 +87,25 @@ venv.bak/
87
87
  ```
88
88
 
89
89
  .DS_Store
90
+
91
+ # Agent session artifacts
92
+ .cursor/
93
+
94
+ # ---------------------------------------------------------------------------
95
+ # Agent harness and local tooling
96
+ #
97
+ # This repository is worked on with coding agents, and their configuration
98
+ # embeds absolute local paths, hook commands, seat identities and empty API-key
99
+ # slots. None of it belongs in a public repository.
100
+ # ---------------------------------------------------------------------------
101
+ .claude/
102
+ .codex/
103
+ .cursor/
104
+ .agora/
105
+ .abstractcode/
106
+ .mcp.json
107
+ CLAUDE.md
108
+ /AGENTS.md
109
+ abstractcode-export-*.md
110
+ untracked/
111
+ .venv/
@@ -7,6 +7,216 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.32] - 2026-09-23
11
+
12
+ This release also contains everything listed under 0.4.31, which was never
13
+ published on its own.
14
+
15
+ ### Added
16
+ - **Stop reaches the running effect.** `Runtime.cancel_run(...)` now signals the
17
+ effect that is executing for the run (and for its in-flight descendants), not
18
+ only the stored status. The `LLM_CALL` handler passes the signal to
19
+ AbstractCore as `cancel_event=`, so a local provider stops within one token,
20
+ and the remote client closes its request to the AbstractCore server, which
21
+ treats the disconnect as a cancel. The stopped attempt is recorded as
22
+ `cancelled` (new `StepStatus.CANCELLED`, `EffectOutcome.cancelled`) with
23
+ `cancelled_by`, `reason` and timing fields, is never retried, and nothing
24
+ after it runs. Remaining calls of a tool batch are reported as not started.
25
+ `cancel_run(..., cancelled_by=...)` is a new keyword (default `"api"`).
26
+ - `core/effect_cancellation.py`: `inflight_effects()` lists executing effects;
27
+ `request_model_effects_cancel(provider, model)` stops the effects using a
28
+ model; `kill_inflight_effect(step_id, killed_by=...)` is an in-process hard
29
+ stop for a call that ignores its cancel event.
30
+ - **Model eject stops its calls first.** Local `unload_model_residency`
31
+ cancels the effects using the unloaded model before unloading it, and the
32
+ ledger records `cancelled_by: "model_eject"` with the model named.
33
+ - **Speculation (MTP) controls.** `LLM_CALL.params.speculation` (`False`,
34
+ `True`, or a Core speculation object) and boolean or string `thinking` are
35
+ forwarded by local and remote clients. `_runtime.speculation` sets a
36
+ run-wide preference inherited by subworkflows, Agent loops, delegated
37
+ children and structured-output follow-up calls; an explicit `False` stays
38
+ Off across every boundary. VisualFlow LLM Call and Agent nodes accept a
39
+ `speculation` input. Scoped AbstractCore defaults reach provider
40
+ construction, and `config_facade.normalize_speculation_control()` validates
41
+ host values with Core's vocabulary.
42
+ - **Native MLX execution controls.** Local clients admit concurrent calls only
43
+ when the loaded MLX instance advertises safe scheduling; other instances
44
+ stay serialized through streamed completion. Remote results expose Core's
45
+ `execution`, `speculation`, `performance` and `prompt_cache` metadata.
46
+ New `get_execution_capabilities(model_name=None, provider=None)` on the
47
+ clients and the discovery facade asks the actual execution host without
48
+ loading a model.
49
+ - **Text phase progress.** Every `LLM_CALL` is offered the durable progress
50
+ channel. Providers that report prefill/generation phases produce
51
+ `abstract.progress` ledger events with `kind: "llm"` (`phase`,
52
+ `prompt_tokens`, `cached_tokens`, `fed_tokens`, `generated_tokens`,
53
+ `ttft_s`, `tokens_per_second`). The callback travels beside the effect
54
+ (`core/progress_channel.py`), so `effect.payload` stays JSON-serializable.
55
+ - **Run-tree tool ceiling.** An explicit `allowed_tools` list in `_runtime`, in
56
+ a child run, or in a tool payload is intersected across the run tree
57
+ (`core/tool_scope.py`). Approval policy can remove a prompt but never grant
58
+ a tool outside the ceiling; malformed lists and broken ancestry fail closed.
59
+ - `Runtime.tick(..., step_gate=callable)` lets a host pause a run at the next
60
+ step boundary; the run stays `RUNNING` and a later tick continues.
61
+ - `Runtime.set_default_provider_model(...)` and the pooled client's
62
+ `set_default_provider_model(...)` / `set_capability_defaults(...)` re-point
63
+ the default provider/model without a restart.
64
+ - `abstractruntime.turn_grounding`: `stamp_user_turn_grounding()` writes the
65
+ grounding envelope once into the stored user turn, so each turn's prompt is
66
+ a byte prefix of the next one and provider prompt caches survive across
67
+ turns. Session replay returns the stored bytes.
68
+ - `JsonFileRunStore.list_event_waiters(...)` / `list_event_waiters_by_prefix(...)`
69
+ (optional `EventWaiterQueryableRunStore` protocol, also forwarded by
70
+ `OffloadingRunStore`). `emit_event` uses this index instead of scanning
71
+ every run file.
72
+ - The model receives a description of its workspace scope (default directory,
73
+ access mode, extra roots and exclusions), and out-of-scope path errors list
74
+ the authorized roots.
75
+ - VisualFlow: inline pin expressions (`node.data.pinExpressions`, sandboxed
76
+ with RestrictedPython), `continueOnError` on effect nodes, a `write_chart`
77
+ node, a `write_docx` node, image embedding and branded exports in PDF/DOCX
78
+ renderers, and `shq` / `text_of` sandbox helpers.
79
+ - `abstractruntime.__version__`.
80
+ - The configured reasoning effort on AbstractCore's text capability route is
81
+ applied when a call names no `thinking`.
82
+ - `config_facade.read_email_settings()` and `read_maintenance_settings()`.
83
+ - LLM results carry `route` (the provider, model and `base_url` that actually
84
+ served the call, with a `mismatch` flag).
85
+ - In-process `on_token` streaming callbacks (`set_on_token`) on local and
86
+ pooled clients; `read_idle_timeout_s` for LLM calls.
87
+ - `WAIT_EVENT` accepts a deadline; `_runtime.wait_until_streak` counts
88
+ consecutive `WAIT_UNTIL` parks.
89
+ - `RuntimeHealth` counters, bounded run-vars growth for long-running runs,
90
+ an indexed idempotency lookup, fair scheduling across several run stores
91
+ (`scheduler/multi_store.py`), a steer sidecar store, and durable session
92
+ conversation replay.
93
+ - `history_bundle`: a `detail="replay"` profile and in-band `warnings[]` when a
94
+ bundle cannot be complete.
95
+ - Entity runtime (`abstractruntime.identity`): the per-entity home runtime,
96
+ chat driver, visit workflow, life loop, diary and memory effects
97
+ (`MEMORY_CONSOLIDATE`, `MEMORY_PROBE`, `MEMORY_TEND`, `LIFE_QUERY`,
98
+ `ENTITY_TOOLS_QUERY`, `ENTITY_TOOLS_EXECUTE`), phase graph and entity tools.
99
+ See `docs/entity-runtime.md`.
100
+ - Tool surfaces: `browser_probe` in the `web` toolset (asks for approval by
101
+ default), a camera toolset registered when `abstractcamera` is installed,
102
+ a `git_read_only@v1` approval refiner, and agora hub tools.
103
+
104
+ ### Changed
105
+ - Dependency floors: `abstractcore[remote,tools,vision,voice,audio,music]>=2.13.41`,
106
+ `abstractcore[all-apple]>=2.13.41` (`apple` extra),
107
+ `abstractcore[all-gpu]>=2.13.41` (`gpu` extra), `AbstractMemory>=0.3.0`,
108
+ `abstractsemantics>=0.0.5`. `RestrictedPython>=7.0` and `pyyaml>=6.0` are
109
+ declared dependencies.
110
+ - The `gpu` extra's setuptools floor is `>=77.0.3` (was `>=80.10.2`), which
111
+ vLLM's `setuptools<80` requirement can satisfy.
112
+ - Migration: with RestrictedPython installed, VisualFlow Code nodes always run
113
+ under its policy. Augmented assignment on subscripts (`d["k"] += 1`) is
114
+ refused; rewrite it as read, modify, write.
115
+ - The default iteration budget (`RuntimeConfig.max_iterations` and the
116
+ Agent-node fallback) is 20. Workflow-declared values still win.
117
+ - LLM calls default to `read_idle_timeout_s=300`: a stream that delivers
118
+ nothing for 5 minutes is aborted. Pass `read_idle_timeout_s: None` in
119
+ `llm_kwargs` to disable it.
120
+ - Tool approval waits use a unique, replay-stable key per approval
121
+ (`tool_approval:{run_id}:{node_id}:{effect_identity}`). Runs already
122
+ waiting on an older key can still be approved.
123
+ - A connected VisualFlow node of an unknown type fails compilation with
124
+ `UnknownNodeTypeError` instead of running as a no-op.
125
+ - Terminal ledger records are slimmer, the offloading ledger store is used by
126
+ the durable factories, and hot-path store reads avoid full-document parses.
127
+ - Deterministic LLM client errors and prompt-cache binding failures are not
128
+ retried.
129
+
130
+ ### Fixed
131
+ - A per-call provider pin reaches the provider it names: pooled clients no
132
+ longer hand the default endpoint's `base_url` / `api_key` to other providers.
133
+ - Catalog discovery works when the default text client cannot be built.
134
+ - A fresh install with no provider configured constructs its runtime; calls
135
+ without a provider fail with a message naming what to configure.
136
+ - The session prompt-cache prefix is prepared with the `thinking` value the
137
+ call generates with, and prompt-only calls under a runtime-derived key no
138
+ longer append to their own cache.
139
+ - The remote client forwards `thinking`; streamed reasoning keeps the complete
140
+ final text.
141
+ - Effect-only paths into a VisualFlow End node no longer copy runtime
142
+ bookkeeping into the result.
143
+ - Visual `llm_call` nodes forward provider and model independently.
144
+ - Native tool calls are kept by the chat driver.
145
+ - `JsonlCommandStore.append` fsyncs before returning.
146
+ - Run-output offload reduces the largest children first, so a small answer
147
+ stays inline next to a large scratchpad.
148
+ - The JSON run store cache is LRU-bounded; hash-chained ledgers no longer fork
149
+ under concurrent handles.
150
+ - Entity-lane `execute_command` kills its whole process tree on timeout.
151
+ - PDF export renders scientific and typographic glyphs.
152
+
153
+ ## [0.4.31] - 2026-08-27
154
+
155
+ Never published separately; these changes ship in 0.4.32.
156
+
157
+ ### Added
158
+ - Host facade methods `get_memory_snapshot()`, `list_session_prompt_caches(session_id=None)`, and
159
+ `clear_session_prompt_caches(session_id)`. Hosts can read the Core-owned host memory snapshot
160
+ (RAM, process RSS, device allocation) and enumerate or clear live session prompt caches per
161
+ session across local, multi-local, and remote runtimes. The three methods are optional in the
162
+ LLM-client contract: a configured client that does not implement one still binds, and the facade
163
+ answers `{"ok": false, "supported": false, ...}` for that call.
164
+ - Session attribution on derived prompt-cache keys. When Runtime injects the session-scoped
165
+ prompt-cache key for a text/chat `LLM_CALL`, the client stamps `session_id`, `run_id`,
166
+ `workflow_id`, `node_id`, and `namespace` into the cache entry's metadata after each generate —
167
+ locally through the provider's key-meta contract, remotely via `POST /acore/prompt_cache/key_meta`
168
+ (skipped for servers without the route). Caller-supplied `prompt_cache_key`s and binding keys are
169
+ never stamped, so clearing a session cannot destroy caches shared across sessions. Session caches
170
+ are not cleared automatically when a run ends; clearing stays an explicit host operation.
171
+ - Local `list_model_residency` merges AbstractCore's host-wide loaded-model sweep into
172
+ text-generation listings: models resident on host-local provider servers (for example Ollama or
173
+ LM Studio) now appear with `source: "provider_server"` even when they were not loaded through
174
+ this runtime. Rows loaded by this runtime win deduplication and absorb the sweep's size fields.
175
+ - Model-residency locks. The host facade and all execution modes expose
176
+ `lock_model_residency(...)`, `unlock_model_residency(...)`, and `get_context_estimate(...)`,
177
+ each accepting an optional payload mapping and/or keyword arguments (keyword arguments win on
178
+ conflicts). A locked model refuses `unload_model_residency` with a structured
179
+ `{"ok": false, "error": "model_locked", ...}` payload instead of an exception; `force=true`
180
+ unloads it, and the lock is released only after the unload succeeds. Lock requires
181
+ provider-verified residency: a warm client or configured default alone is configuration, not
182
+ memory, and locking a non-resident pair refuses with
183
+ `{"ok": false, "error": "model_not_resident", ...}` (load with `lock: true` instead); unlock
184
+ never requires residency, so a locked-but-since-evicted pair can always be released, and the
185
+ Ollama keep-alive restore is skipped for a non-resident model so unlock never loads it back as
186
+ a side effect. Local clients enforce the
187
+ lock per `(provider, model)` pair, reinforce it best-effort with Ollama's `keep_alive` knob
188
+ (reported under `provider_side`), refuse foreign runtime ids with a not-found payload, and
189
+ exempt locked pairs from the multi-local pool eviction when the default provider/model is
190
+ re-pointed (a locked pair that becomes the new default identity is rebuilt and its lock cleared,
191
+ with a logged warning). Remote clients relay `POST /acore/models/lock|unlock` and convert the
192
+ server's HTTP 409 refusals into the same structured payloads (`model_locked` on unload,
193
+ `model_not_resident` on lock). The three methods are
194
+ optional in the LLM-client contract, degrading to `{"ok": false, "supported": false, ...}` at
195
+ the facade; locks apply to text-generation runtimes only.
196
+ - `MODEL_RESIDENCY` effect operations `lock` and `unlock`, with the same soft-fail semantics as
197
+ the existing operations; on `unload`, `force` is forwarded only when authored in the effect
198
+ payload.
199
+ - `get_context_estimate(...)` relays AbstractCore's analytical context-fit estimator: in-process
200
+ for local clients (defaulting to the client's provider/model identity), via
201
+ `GET /acore/models/context_estimate` for remote clients.
202
+ - Local text-residency rows carry AbstractCore's registry-declared `modalities` (omitted on a
203
+ registry miss; `input.image` is stripped with `modalities_note: "vision_unusable"` when the
204
+ provider reports its vision lane unusable), the serving host's identity (`host_id` /
205
+ `host_name`), and runtime-owned lock truth (`locked` / `lockable`); provider claims cannot
206
+ supply lock state. `pinned` on local rows is a truthful alias of `locked` (same value, Core
207
+ parity), never the default-identity flag — `default` alone marks the client's default pair, so
208
+ a configured capability default is no longer presented as pinned. Remote listings keep the
209
+ Core server's row identity and are never re-stamped
210
+ with the client's.
211
+
212
+ ### Changed
213
+ - Residency rows normalize provider-reported `size` / `size_vram` extras to `size_bytes` /
214
+ `size_vram_bytes` across local and remote listings; the original fields are kept.
215
+ - `unload_model_residency` also drops the runtime's client-side prompt-cache mirrors for the
216
+ unloaded model, alongside AbstractCore's clearing of the in-provider cache stores.
217
+ - Raised the AbstractCore dependency floor to `abstractcore>=2.13.40`, the release that provides
218
+ the shared memory/residency utility surface and the prompt-cache `key_meta` endpoint.
219
+
10
220
  ## [0.4.29] - 2026-06-14
11
221
 
12
222
  ### Changed
@@ -617,7 +827,8 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
617
827
 
618
828
  Initial development version with basic proof-of-concept features.
619
829
 
620
- [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.29...HEAD
830
+ [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.31...HEAD
831
+ [0.4.31]: https://github.com/lpalbou/abstractruntime/compare/v0.4.29...v0.4.31
621
832
  [0.4.29]: https://github.com/lpalbou/abstractruntime/compare/v0.4.28...v0.4.29
622
833
  [0.4.28]: https://github.com/lpalbou/abstractruntime/compare/v0.4.27...v0.4.28
623
834
  [0.4.27]: https://github.com/lpalbou/abstractruntime/compare/v0.4.26...v0.4.27
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.4.29
3
+ Version: 0.4.32
4
4
  Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
5
5
  Project-URL: AbstractCore (website), https://www.abstractcore.ai/
6
6
  Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
@@ -20,9 +20,9 @@ Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Programming Language :: Python :: 3.13
22
22
  Requires-Python: >=3.10
23
- Requires-Dist: abstractcore[audio,music,remote,tools,vision,voice]>=2.13.38
24
- Requires-Dist: abstractmemory>=0.2.6
25
- Requires-Dist: abstractsemantics>=0.0.3
23
+ Requires-Dist: abstractcore[audio,music,remote,tools,vision,voice]>=2.13.41
24
+ Requires-Dist: abstractmemory>=0.3.0
25
+ Requires-Dist: abstractsemantics>=0.0.5
26
26
  Requires-Dist: anyio<5.0.0,>=4.12.1
27
27
  Requires-Dist: httpx<1.0.0,>=0.28.1
28
28
  Requires-Dist: openai<2.0.0,>=1.109.1
@@ -30,18 +30,20 @@ Requires-Dist: pandas<3.0.0,>=1.0.0
30
30
  Requires-Dist: pillow<13.0.0,>=10.0.0
31
31
  Requires-Dist: pypdf<7.0.0,>=6.0.0
32
32
  Requires-Dist: python-pptx<2.0.0,>=1.0.2
33
+ Requires-Dist: pyyaml>=6.0
33
34
  Requires-Dist: reportlab<5.0.0,>=4.0.0
35
+ Requires-Dist: restrictedpython>=7.0
34
36
  Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
35
37
  Provides-Extra: apple
36
- Requires-Dist: abstractcore[all-apple]>=2.13.38; extra == 'apple'
38
+ Requires-Dist: abstractcore[all-apple]>=2.13.41; extra == 'apple'
37
39
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
38
40
  Provides-Extra: docs
39
41
  Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
40
42
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
41
43
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
42
44
  Provides-Extra: gpu
43
- Requires-Dist: abstractcore[all-gpu]>=2.13.38; extra == 'gpu'
44
- Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'gpu'
45
+ Requires-Dist: abstractcore[all-gpu]>=2.13.41; extra == 'gpu'
46
+ Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
45
47
  Provides-Extra: test
46
48
  Requires-Dist: pytest>=7.0.0; extra == 'test'
47
49
  Description-Content-Type: text/markdown
@@ -52,7 +54,7 @@ Description-Content-Type: text/markdown
52
54
 
53
55
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
54
56
 
55
- **Version:** 0.4.29 • **Python:** 3.10+
57
+ **Version:** 0.4.32 • **Python:** 3.10+
56
58
 
57
59
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
58
60
 
@@ -80,17 +82,18 @@ Remote-light runtime:
80
82
  pip install abstractruntime
81
83
  ```
82
84
 
83
- The base install includes AbstractCore 2.13.38 or newer with remote provider,
85
+ The base install includes AbstractCore 2.13.41 or newer with remote provider,
84
86
  tool, vision, voice, audio, and music integration, plus the
85
87
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
86
88
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
87
89
  sentence-transformer embeddings are not selected unless you choose a hardware
88
90
  profile or another package-specific local extra.
89
91
 
90
- VisualFlow PDF document nodes use permissive dependencies in Runtime's base
91
- install: `Read PDF` extracts text and metadata with `pypdf`, and `Write PDF`
92
- renders text or Markdown-style report content to real PDF bytes with
93
- `reportlab`.
92
+ VisualFlow document nodes use permissive dependencies in Runtime's base install:
93
+ `Read PDF` extracts text and metadata with `pypdf`, `Write PDF` renders text or
94
+ Markdown-style report content to real PDF bytes with `reportlab`, and
95
+ `Write DOCX` renders Markdown-style report content to Word-compatible `.docx`
96
+ bytes with the Python standard library.
94
97
 
95
98
  Native Python hardware profiles add local inferencer stacks:
96
99
 
@@ -143,7 +146,7 @@ state = rt.resume(
143
146
  assert state.status.value == "completed"
144
147
  ```
145
148
 
146
- ## What’s included (v0.4.26)
149
+ ## What’s included (v0.4.32)
147
150
 
148
151
  Kernel (import-light):
149
152
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
@@ -151,7 +154,10 @@ Kernel (import-light):
151
154
  - durable waits/events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
152
155
  - append-only ledger (`StepRecord`) + node traces (`vars["_runtime"]["node_traces"]`)
153
156
  - retries/idempotency hooks: `src/abstractruntime/core/policy.py`
154
- - runtime-aware limits (`_limits`) with a default iteration budget of 50 (`docs/limits.md`)
157
+ - runtime-aware limits (`_limits`) with a default iteration budget of 20 (`docs/limits.md`)
158
+ - Stop that reaches the running effect: `Runtime.cancel_run(...)` signals the in-flight model or tool call, which ends as a `cancelled` ledger record (never retried); a model unload stops the calls using that model first (`docs/api.md`)
159
+ - host pause at step boundaries: `Runtime.tick(..., step_gate=...)`
160
+ - run-tree tool ceiling: an explicit `allowed_tools` list can only narrow across child runs, and approval policy never widens it
155
161
 
156
162
  Durability + storage:
157
163
  - stores: in-memory, JSON/JSONL, SQLite (`src/abstractruntime/storage/*`)
@@ -165,20 +171,24 @@ Drivers + distribution:
165
171
  - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
166
172
  - VisualFlow multi-entry execution lowering for fan-in routes and per-entry input overrides (`docs/workflow-bundles.md`)
167
173
  - VisualFlow LLM Call and Agent nodes propagate Core generation params such as
168
- `thinking` through Runtime effects. Provider Models nodes can apply Core
174
+ `thinking` and `speculation` through Runtime effects; `_runtime.speculation`
175
+ sets a run-wide MTP preference that nested workflows and Agent loops inherit. Provider Models nodes can apply Core
169
176
  `capability_route` filters so run-time model discovery matches Gateway/Flow
170
177
  authoring.
171
178
  - VisualFlow image/video nodes and Runtime media helpers preserve task-specific
172
179
  Core media controls, including `count`/`n`, `seeds`, ordered
173
180
  `lora_adapters`, and video `flow_shift`, while keeping provider/model/task
174
181
  truth in AbstractCore and AbstractVision.
182
+ - `history_bundle` now exports replay-safe `resolved_actions` summaries derived
183
+ from Core request/output route resolution, so thin clients can reconstruct
184
+ what capability ran without reverse-engineering prompt prose.
175
185
  - VisualFlow structured LLM/Agent results preserve `response` as text and expose
176
186
  the schema-conformant object on `data`, so Break Object and Switch can consume
177
187
  fields without reparsing the response string.
178
188
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
179
189
 
180
190
  Runtime-owned integrations:
181
- - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
191
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
182
192
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
183
193
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
184
194
  depends on the light AbstractMemory contract; hosts choose storage backends
@@ -4,7 +4,7 @@
4
4
 
5
5
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
6
6
 
7
- **Version:** 0.4.29 • **Python:** 3.10+
7
+ **Version:** 0.4.32 • **Python:** 3.10+
8
8
 
9
9
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
10
10
 
@@ -32,17 +32,18 @@ Remote-light runtime:
32
32
  pip install abstractruntime
33
33
  ```
34
34
 
35
- The base install includes AbstractCore 2.13.38 or newer with remote provider,
35
+ The base install includes AbstractCore 2.13.41 or newer with remote provider,
36
36
  tool, vision, voice, audio, and music integration, plus the
37
37
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
38
38
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
39
39
  sentence-transformer embeddings are not selected unless you choose a hardware
40
40
  profile or another package-specific local extra.
41
41
 
42
- VisualFlow PDF document nodes use permissive dependencies in Runtime's base
43
- install: `Read PDF` extracts text and metadata with `pypdf`, and `Write PDF`
44
- renders text or Markdown-style report content to real PDF bytes with
45
- `reportlab`.
42
+ VisualFlow document nodes use permissive dependencies in Runtime's base install:
43
+ `Read PDF` extracts text and metadata with `pypdf`, `Write PDF` renders text or
44
+ Markdown-style report content to real PDF bytes with `reportlab`, and
45
+ `Write DOCX` renders Markdown-style report content to Word-compatible `.docx`
46
+ bytes with the Python standard library.
46
47
 
47
48
  Native Python hardware profiles add local inferencer stacks:
48
49
 
@@ -95,7 +96,7 @@ state = rt.resume(
95
96
  assert state.status.value == "completed"
96
97
  ```
97
98
 
98
- ## What’s included (v0.4.26)
99
+ ## What’s included (v0.4.32)
99
100
 
100
101
  Kernel (import-light):
101
102
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
@@ -103,7 +104,10 @@ Kernel (import-light):
103
104
  - durable waits/events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
104
105
  - append-only ledger (`StepRecord`) + node traces (`vars["_runtime"]["node_traces"]`)
105
106
  - retries/idempotency hooks: `src/abstractruntime/core/policy.py`
106
- - runtime-aware limits (`_limits`) with a default iteration budget of 50 (`docs/limits.md`)
107
+ - runtime-aware limits (`_limits`) with a default iteration budget of 20 (`docs/limits.md`)
108
+ - Stop that reaches the running effect: `Runtime.cancel_run(...)` signals the in-flight model or tool call, which ends as a `cancelled` ledger record (never retried); a model unload stops the calls using that model first (`docs/api.md`)
109
+ - host pause at step boundaries: `Runtime.tick(..., step_gate=...)`
110
+ - run-tree tool ceiling: an explicit `allowed_tools` list can only narrow across child runs, and approval policy never widens it
107
111
 
108
112
  Durability + storage:
109
113
  - stores: in-memory, JSON/JSONL, SQLite (`src/abstractruntime/storage/*`)
@@ -117,20 +121,24 @@ Drivers + distribution:
117
121
  - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
118
122
  - VisualFlow multi-entry execution lowering for fan-in routes and per-entry input overrides (`docs/workflow-bundles.md`)
119
123
  - VisualFlow LLM Call and Agent nodes propagate Core generation params such as
120
- `thinking` through Runtime effects. Provider Models nodes can apply Core
124
+ `thinking` and `speculation` through Runtime effects; `_runtime.speculation`
125
+ sets a run-wide MTP preference that nested workflows and Agent loops inherit. Provider Models nodes can apply Core
121
126
  `capability_route` filters so run-time model discovery matches Gateway/Flow
122
127
  authoring.
123
128
  - VisualFlow image/video nodes and Runtime media helpers preserve task-specific
124
129
  Core media controls, including `count`/`n`, `seeds`, ordered
125
130
  `lora_adapters`, and video `flow_shift`, while keeping provider/model/task
126
131
  truth in AbstractCore and AbstractVision.
132
+ - `history_bundle` now exports replay-safe `resolved_actions` summaries derived
133
+ from Core request/output route resolution, so thin clients can reconstruct
134
+ what capability ran without reverse-engineering prompt prose.
127
135
  - VisualFlow structured LLM/Agent results preserve `response` as text and expose
128
136
  the schema-conformant object on `data`, so Break Object and Switch can consume
129
137
  fields without reparsing the response string.
130
138
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
131
139
 
132
140
  Runtime-owned integrations:
133
- - AbstractCore (LLM + tools, `MODEL_RESIDENCY`, public discovery/host/run facades, cached sessions, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
141
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
134
142
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
135
143
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
136
144
  depends on the light AbstractMemory contract; hosts choose storage backends
@@ -27,12 +27,15 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
27
27
  - `troubleshooting.md` — symptom-oriented setup, runtime, and integration fixes
28
28
  - `manual_testing.md` — manual smoke tests and how to run the test suite
29
29
  - `artifacts.md` — Runtime artifact identity, descriptors, provenance, catalog search, and access stats
30
- - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
30
+ - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, model-residency listings and locks, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
31
+ - run history bundle replay now also exports `resolved_actions` summaries for cross-client capability replay; see `api.md` and `integrations/abstractcore.md`
31
32
  - `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
32
- - `api.md#workflowbundles-flow-and-visualflow-distribution` — VisualFlow compiler APIs, media nodes, and PDF document nodes (`read_pdf` / `write_pdf`)
33
+ - `tool-approval.md` — tool risk tiers, the run-policy rank ceiling, and per-call refiners (the `send_email` self-recipient rule)
34
+ - `api.md#workflowbundles-flow-and-visualflow-distribution` — VisualFlow compiler APIs, media nodes, and document nodes (`read_pdf` / `write_pdf` / `write_docx`)
33
35
 
34
36
  ## Features (reference)
35
37
 
38
+ - `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
36
39
  - `evidence.md` — artifact-backed evidence capture for external-boundary tools
37
40
  - `mcp-worker.md` — MCP worker CLI (`abstractruntime-mcp-worker`)
38
41
  - `snapshots.md` — snapshot/bookmark model and stores
@@ -64,12 +64,24 @@ Implementation: `src/abstractruntime/core/runtime.py`.
64
64
 
65
65
  - `Runtime.start(workflow, vars=..., actor_id=..., session_id=...) -> run_id`
66
66
  - creates and persists a new `RunState`
67
- - `Runtime.tick(workflow, run_id, max_steps=...) -> RunState`
67
+ - `Runtime.tick(workflow, run_id, max_steps=..., step_gate=None) -> RunState`
68
68
  - executes node handlers and effects until the run becomes `WAITING`, `COMPLETED`, `FAILED`, or `CANCELLED`
69
+ - optional `step_gate()` is consulted at every step boundary; when it returns `False` the tick returns the persisted state and the run stays `RUNNING` (a later tick continues where it stopped)
69
70
  - `Runtime.resume(workflow, run_id, wait_key, payload, max_steps=...) -> RunState`
70
71
  - validates the `wait_key`, writes `payload` to `WaitState.result_key` (if set), and continues from `WaitState.resume_to_node`
71
72
  - `Runtime.get_state(run_id) -> RunState` and `Runtime.get_ledger(run_id) -> list[dict]`
72
73
  - host-facing read APIs for checkpoints and the append-only ledger
74
+ - `Runtime.cancel_run(run_id, reason=None, cancelled_by="api") -> RunState`
75
+ - persists `CANCELLED`, then signals every effect of that run (and its in-flight descendants) executing in this process; the running attempt is recorded as `cancelled` (`StepStatus.CANCELLED`, never retried) with `cancelled_by` and `reason`, and no further effect starts
76
+ - `Runtime.set_default_provider_model(provider=..., model=...)`
77
+ - re-points the default provider/model seeded into new runs; pair it with the pooled client's `set_default_provider_model(...)` so both agree
78
+
79
+ Effect cancellation helpers (`src/abstractruntime/core/effect_cancellation.py`):
80
+ - `inflight_effects(run_ids=None)` lists executing effects (run, step, provider, model, elapsed time)
81
+ - `request_model_effects_cancel(provider, model, cancelled_by="model_eject")` stops the effects using a model before it is unloaded; local `unload_model_residency` calls it for you
82
+ - `kill_inflight_effect(step_id, killed_by=...)` is an in-process hard stop for a call that ignores its cancel event (it cannot interrupt a thread blocked inside one native call)
83
+
84
+ Tool scope: an explicit `allowed_tools` list in `run.vars["_runtime"]`, in a child run's `_runtime`, or in a `TOOL_CALLS` payload is a ceiling intersected across the run tree (`src/abstractruntime/core/tool_scope.py`). Approval policy can remove a prompt but can never grant a tool outside it; a missing key means unrestricted and an empty list denies every tool.
73
85
 
74
86
  For the execution model (ledger records, effect outcomes, waits), see `architecture.md`.
75
87
 
@@ -170,12 +182,14 @@ VisualFlow authoring note (media and document nodes):
170
182
  follow the shared canonical contract: `rel/path` for the main workspace root
171
183
  and `mount_alias/rel/path` for approved mounts. `read_pdf` extracts text and
172
184
  metadata from PDF paths with `pypdf`; `write_pdf` renders text or
173
- Markdown-style content to real PDF bytes with `reportlab`; `list_folder_files`
174
- enumerates workspace-scoped folders with family/extension filters;
185
+ Markdown-style content to real PDF bytes with `reportlab`; `write_docx`
186
+ renders Markdown-style content to real `.docx` bytes with the standard
187
+ library; `list_folder_files` enumerates workspace-scoped folders with
188
+ family/extension filters;
175
189
  `import_workspace_file` snapshots a workspace file into a durable artifact;
176
190
  `read_artifact` projects saved file content back out as text/JSON/bounded
177
191
  binary metadata; and `export_artifact` writes a durable artifact back to a
178
- workspace path. PDF bytes are written to the workspace path and only
192
+ workspace path. PDF/DOCX bytes are written to the workspace path and only
179
193
  JSON-safe metadata/path values are stored in run state. In local Runtime-only
180
194
  runs with no workspace scope, relative file-node paths still fall back to the
181
195
  process working directory.
@@ -195,12 +209,14 @@ Implementation: `src/abstractruntime/history_bundle.py`.
195
209
  - `persist_workflow_snapshot(...)`
196
210
 
197
211
  This produces a portable record of a run’s state + ledger + artifacts suitable for debugging/review.
212
+ When available, it also includes `resolved_actions`: bounded capability/action summaries derived
213
+ from Core route resolution and persisted from `LLM_CALL` results.
198
214
 
199
215
  ## Runtime-owned integrations
200
216
 
201
217
  ### AbstractCore (LLM + tools)
202
218
 
203
- Requires: `pip install abstractruntime` (AbstractCore 2.13.38 or newer is part of the base install).
219
+ Requires: `pip install abstractruntime` (AbstractCore 2.13.41 or newer is part of the base install).
204
220
 
205
221
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
206
222
 
@@ -214,7 +230,10 @@ Entry points:
214
230
  - effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
215
231
  - tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
216
232
  - discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`, `list_vision_adapters`)
217
- - host-facade client delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `get_model_residency_capabilities`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
233
+ - host-facade client delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `get_model_residency_capabilities`, `list_model_residency`, `load_model_residency`, `unload_model_residency`, `get_memory_snapshot`, `list_session_prompt_caches`, `clear_session_prompt_caches`, `lock_model_residency`, `unlock_model_residency`, `get_context_estimate`); the last six are optional in the client contract, and the facade returns `{"ok": false, "supported": false, ...}` when the configured client does not implement one
234
+ - `lock_model_residency`, `unlock_model_residency`, and `get_context_estimate` accept an optional payload mapping and/or keyword arguments (keyword arguments win on conflicts); a lock requires provider-verified residency — locking a non-resident pair refuses with a structured `model_not_resident` payload (load with `lock: true` instead; remotely the Core server's HTTP 409 refusal is converted to the same payload), while unlock never requires residency so a locked-but-evicted pair is always releasable; a locked model refuses `unload_model_residency` with a structured `model_locked` payload — locally as a client-side per-`(provider, model)` lock, remotely by converting the Core server's HTTP 409 refusal — and unloads only with `force=true`, releasing the lock only after the unload succeeds
235
+ - the `MODEL_RESIDENCY` effect supports `list_loaded`, `load`, `unload`, `lock`, and `unlock` operations with the same soft-fail semantics; on `unload`, `force` is forwarded only when authored in the effect payload
236
+ - local `list_model_residency` merges AbstractCore's host-wide loaded-model sweep into text-generation listings (sweep-only rows carry `source: "provider_server"` and no `task` label), and residency rows normalize provider size extras to `size_bytes` / `size_vram_bytes` while keeping the originals; local text rows also carry registry-declared `modalities` (omitted on a registry miss), host identity (`host_id` / `host_name`), and runtime-owned lock truth (`locked` / `lockable`, with `pinned` a truthful alias of `locked` — never the default-identity flag, which `default` alone carries), while remote listings keep the Core server's row identity
218
237
  - host-local prompt-cache export/import admin also lives on the host facade and client delegation layer (`list_prompt_cache_exports`, `prompt_cache_export`, `prompt_cache_import`) and is intentionally local-only
219
238
  - host-facade email helpers delegate to Runtime's host-local comms facade/export layer (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
220
239
  - run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `upscale_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
@@ -222,6 +241,13 @@ Entry points:
222
241
  `count`/`n`, `seeds`, ordered `lora_adapters`, and video `flow_shift`; local
223
242
  subprocess isolation stays within the same public contract.
224
243
 
244
+ Execution controls and cancellation:
245
+ - `params.thinking` (bool or reasoning level) and `params.speculation` (`False`, `True`, or a Core speculation object such as `{"mode": "native_mtp", "num_draft_tokens": 2}`) are forwarded locally and remotely; `run.vars["_runtime"]["speculation"]` sets a run-wide preference inherited by subworkflows, Agent loops and delegated calls, and `False` stays Off across every boundary (see `integrations/abstractcore.md#execution-controls-and-local-concurrency`)
246
+ - `get_abstractcore_discovery_facade(...).get_execution_capabilities(model_name=None, provider=None)` asks the actual execution host (local or remote) what it supports, without loading a model
247
+ - the `LLM_CALL` handler hands the effect's cancel event to AbstractCore (`generate(..., cancel_event=...)`); remote clients close the request to the AbstractCore server on Stop, which the server treats as a cancel
248
+ - every `LLM_CALL` is offered a progress callback; providers that report text phases (prefill / generate / complete) produce `abstract.progress` ledger events with `kind: "llm"`
249
+ - `abstractruntime.turn_grounding.stamp_user_turn_grounding(messages, grounding=...)` writes the grounding envelope once into the stored user turn, so the prompt sent to the model stays a byte prefix of the next turn's prompt
250
+
225
251
  `LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
226
252
  - `prompt`, `messages`, `system_prompt`, and convenience `text`
227
253
  - `media`: a media path, artifact ref (`{"$artifact": "..."}` or `{"artifact_id": "..."}`), media dict, or list of those
@@ -243,6 +269,8 @@ Prompt cache / cached sessions:
243
269
  - `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]` or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default
244
270
  - `LLM_CALL.params.prompt_cache_binding` is the durable exact-reuse input for bloc-backed prompt caching; if a binding includes `key`, Runtime adopts it as the effective prompt-cache key and refuses mismatches before provider execution
245
271
  - Runtime only auto-derives session prompt-cache keys for text/chat calls; non-text output selectors such as image, voice, music, and transcription keep explicit `prompt_cache_binding` support but do not receive an inferred cache key
272
+ - when Runtime injects the derived session key, the client stamps session attribution (`session_id`, `run_id`, `workflow_id`, `node_id`, `namespace`) into the cache entry's metadata after each generate; caller-supplied `prompt_cache_key`s and binding keys are never stamped, so session-scoped clearing cannot destroy caches shared across sessions
273
+ - `get_abstractcore_host_facade(...)` exposes `get_memory_snapshot()`, `list_session_prompt_caches(session_id=None)`, and `clear_session_prompt_caches(session_id)`; session caches persist until a host clears them, the owning model is unloaded, or the provider evicts them — completing a run does not clear them
246
274
  - `get_abstractcore_host_facade(...)` also exposes durable bloc helpers (`upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`)
247
275
  - local Runtime owns the bloc root policy: `~/.abstractruntime/blocs` by default, `<base_dir>/blocs` for `create_local_file_runtime(...)`, and explicit `bloc_root_dir=...` overrides when needed
248
276
  - provider cache/session handles are not durable runtime state and should not be stored in `RunState.vars`