AbstractRuntime 0.4.0__tar.gz → 0.4.1__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 (294) hide show
  1. abstractruntime-0.4.1/0 +0 -0
  2. abstractruntime-0.4.1/ACKNOWLEDGMENTS.md +27 -0
  3. abstractruntime-0.4.1/ACKNOWLEDMENTS.md +4 -0
  4. abstractruntime-0.4.1/CHANGELOD.md +4 -0
  5. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/CHANGELOG.md +21 -8
  6. abstractruntime-0.4.1/CONTRIBUTING.md +58 -0
  7. abstractruntime-0.4.1/PKG-INFO +177 -0
  8. abstractruntime-0.4.1/README.md +150 -0
  9. abstractruntime-0.4.1/ROADMAP.md +36 -0
  10. abstractruntime-0.4.1/SECURITY.md +24 -0
  11. abstractruntime-0.4.1/docs/README.md +37 -0
  12. abstractruntime-0.4.1/docs/api.md +172 -0
  13. abstractruntime-0.4.1/docs/architecture.md +197 -0
  14. abstractruntime-0.4.1/docs/backlog/README.md +40 -0
  15. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/002_persistence_and_ledger.md +1 -2
  16. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/004_scheduler_driver.md +5 -11
  17. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +4 -10
  18. abstractruntime-0.4.1/docs/backlog/completed/016_runtime_aware_parameters.md +46 -0
  19. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/README.md +1 -2
  20. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +3 -3
  21. abstractruntime-0.4.1/docs/evidence.md +39 -0
  22. abstractruntime-0.4.1/docs/faq.md +138 -0
  23. abstractruntime-0.4.1/docs/getting-started.md +141 -0
  24. abstractruntime-0.4.1/docs/integrations/abstractcore.md +101 -0
  25. abstractruntime-0.4.1/docs/limits.md +83 -0
  26. abstractruntime-0.4.1/docs/manual_testing.md +243 -0
  27. abstractruntime-0.4.1/docs/mcp-worker.md +54 -0
  28. abstractruntime-0.4.1/docs/proposal.md +91 -0
  29. abstractruntime-0.4.1/docs/provenance.md +43 -0
  30. abstractruntime-0.4.1/docs/snapshots.md +43 -0
  31. abstractruntime-0.4.1/docs/tools-comms.md +83 -0
  32. abstractruntime-0.4.1/docs/workflow-bundles.md +62 -0
  33. abstractruntime-0.4.1/emails.config.example.yaml +44 -0
  34. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/examples/README.md +2 -1
  35. abstractruntime-0.4.1/llms-full.txt +85 -0
  36. abstractruntime-0.4.1/llms.txt +51 -0
  37. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/pyproject.toml +8 -4
  38. abstractruntime-0.4.1/pytest.ini +6 -0
  39. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/__init__.py +76 -1
  40. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/core/config.py +68 -1
  41. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/core/models.py +5 -0
  42. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/core/policy.py +74 -3
  43. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/core/runtime.py +1002 -126
  44. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/core/vars.py +8 -2
  45. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/evidence/recorder.py +1 -1
  46. abstractruntime-0.4.1/src/abstractruntime/history_bundle.py +772 -0
  47. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/__init__.py +3 -0
  48. abstractruntime-0.4.1/src/abstractruntime/integrations/abstractcore/default_tools.py +258 -0
  49. abstractruntime-0.4.1/src/abstractruntime/integrations/abstractcore/effect_handlers.py +2709 -0
  50. abstractruntime-0.4.1/src/abstractruntime/integrations/abstractcore/embeddings_client.py +69 -0
  51. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/factory.py +68 -20
  52. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/llm_client.py +447 -15
  53. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +1 -0
  54. abstractruntime-0.4.1/src/abstractruntime/integrations/abstractcore/session_attachments.py +946 -0
  55. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/tool_executor.py +31 -10
  56. abstractruntime-0.4.1/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +561 -0
  57. abstractruntime-0.4.1/src/abstractruntime/integrations/abstractmemory/__init__.py +3 -0
  58. abstractruntime-0.4.1/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +946 -0
  59. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/memory/active_context.py +6 -1
  60. abstractruntime-0.4.1/src/abstractruntime/memory/kg_packets.py +164 -0
  61. abstractruntime-0.4.1/src/abstractruntime/memory/memact_composer.py +175 -0
  62. abstractruntime-0.4.1/src/abstractruntime/memory/recall_levels.py +163 -0
  63. abstractruntime-0.4.1/src/abstractruntime/memory/token_budget.py +86 -0
  64. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/storage/__init__.py +4 -1
  65. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/storage/artifacts.py +158 -30
  66. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/storage/base.py +17 -1
  67. abstractruntime-0.4.1/src/abstractruntime/storage/commands.py +339 -0
  68. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/storage/in_memory.py +41 -1
  69. abstractruntime-0.4.1/src/abstractruntime/storage/json_files.py +404 -0
  70. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/storage/observable.py +38 -1
  71. abstractruntime-0.4.1/src/abstractruntime/storage/offloading.py +433 -0
  72. abstractruntime-0.4.1/src/abstractruntime/storage/sqlite.py +836 -0
  73. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/__init__.py +29 -0
  74. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/__init__.py +11 -0
  75. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +126 -0
  76. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +109 -0
  77. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +615 -0
  78. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +1051 -0
  79. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +307 -0
  80. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +97 -0
  81. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +114 -0
  82. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +74 -0
  83. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +316 -0
  84. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/compiler.py +3832 -0
  85. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/flow.py +247 -0
  86. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/visual/__init__.py +13 -0
  87. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +29 -0
  88. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/visual/builtins.py +1376 -0
  89. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/visual/code_executor.py +214 -0
  90. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/visual/executor.py +2804 -0
  91. abstractruntime-0.4.1/src/abstractruntime/visualflow_compiler/visual/models.py +211 -0
  92. abstractruntime-0.4.1/src/abstractruntime/workflow_bundle/__init__.py +52 -0
  93. abstractruntime-0.4.1/src/abstractruntime/workflow_bundle/models.py +236 -0
  94. abstractruntime-0.4.1/src/abstractruntime/workflow_bundle/packer.py +317 -0
  95. abstractruntime-0.4.1/src/abstractruntime/workflow_bundle/reader.py +87 -0
  96. abstractruntime-0.4.1/src/abstractruntime/workflow_bundle/registry.py +587 -0
  97. abstractruntime-0.4.1/tests/conftest.py +34 -0
  98. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_answer_user_effect.py +2 -3
  99. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_artifacts.py +41 -8
  100. abstractruntime-0.4.1/tests/test_command_store.py +113 -0
  101. abstractruntime-0.4.1/tests/test_default_tools_comms_gating.py +44 -0
  102. abstractruntime-0.4.1/tests/test_default_tools_include_skim_files.py +52 -0
  103. abstractruntime-0.4.1/tests/test_default_tools_include_skim_folders.py +53 -0
  104. abstractruntime-0.4.1/tests/test_default_tools_search_files_executor.py +62 -0
  105. abstractruntime-0.4.1/tests/test_e2e_tool_calls_idempotency_lmstudio.py +140 -0
  106. abstractruntime-0.4.1/tests/test_emit_event_without_workflow_registry.py +34 -0
  107. abstractruntime-0.4.1/tests/test_factory_timeouts_default_to_abstractcore_config.py +100 -0
  108. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_integrations_abstractcore.py +46 -0
  109. abstractruntime-0.4.1/tests/test_json_file_run_store_children_index.py +67 -0
  110. abstractruntime-0.4.1/tests/test_kg_learn_and_recall_contract.py +245 -0
  111. abstractruntime-0.4.1/tests/test_llm_call_media_artifact_refs.py +138 -0
  112. abstractruntime-0.4.1/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +112 -0
  113. abstractruntime-0.4.1/tests/test_llm_call_media_uses_source_path_label.py +31 -0
  114. abstractruntime-0.4.1/tests/test_llm_call_requires_prompt.py +57 -0
  115. abstractruntime-0.4.1/tests/test_llm_call_response_schema_normalization.py +154 -0
  116. abstractruntime-0.4.1/tests/test_llm_call_structured_output_fallback.py +77 -0
  117. abstractruntime-0.4.1/tests/test_llm_call_truncation_retry_contract.py +93 -0
  118. abstractruntime-0.4.1/tests/test_llm_call_use_context_appends_turn.py +37 -0
  119. abstractruntime-0.4.1/tests/test_llm_client_system_context.py +234 -0
  120. abstractruntime-0.4.1/tests/test_local_runtime_timeout_kwarg_policy.py +38 -0
  121. abstractruntime-0.4.1/tests/test_memact_composer_from_kg_result.py +76 -0
  122. abstractruntime-0.4.1/tests/test_memory_kg_assert_attributes_defaults.py +75 -0
  123. abstractruntime-0.4.1/tests/test_memory_kg_packets.py +73 -0
  124. abstractruntime-0.4.1/tests/test_memory_kg_predicate_aliasing.py +90 -0
  125. abstractruntime-0.4.1/tests/test_memory_kg_query_packetization_restart.py +114 -0
  126. abstractruntime-0.4.1/tests/test_memory_kg_query_recall_level_policy.py +112 -0
  127. abstractruntime-0.4.1/tests/test_memory_kg_semantic_query_ranking.py +96 -0
  128. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_memory_scope_and_rehydrate_effect.py +216 -7
  129. abstractruntime-0.4.1/tests/test_mlx_generation_serialization.py +65 -0
  130. abstractruntime-0.4.1/tests/test_offloading.py +109 -0
  131. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_queryable_run_store.py +61 -1
  132. abstractruntime-0.4.1/tests/test_read_file_fallback_to_session_attachments.py +226 -0
  133. abstractruntime-0.4.1/tests/test_recall_levels_policy.py +41 -0
  134. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_remote_llm_client.py +2 -2
  135. abstractruntime-0.4.1/tests/test_run_history_bundle.py +178 -0
  136. abstractruntime-0.4.1/tests/test_runtime_llm_call_grounding_in_ledger.py +63 -0
  137. abstractruntime-0.4.1/tests/test_session_attachments_registry_and_open_tool.py +1100 -0
  138. abstractruntime-0.4.1/tests/test_sqlite_ledger_store.py +239 -0
  139. abstractruntime-0.4.1/tests/test_start_subworkflow_inherit_context_merges_messages.py +89 -0
  140. abstractruntime-0.4.1/tests/test_start_subworkflow_workspace_inheritance.py +108 -0
  141. abstractruntime-0.4.1/tests/test_structured_output_schema_enum.py +38 -0
  142. abstractruntime-0.4.1/tests/test_terminal_resume_appends_ledger_completion.py +76 -0
  143. abstractruntime-0.4.1/tests/test_tick_completion_includes_output_in_ledger.py +55 -0
  144. abstractruntime-0.4.1/tests/test_tool_calls_idempotency_keys.py +179 -0
  145. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_trace_context_propagation.py +24 -0
  146. abstractruntime-0.4.1/tests/test_visual_agent_output_context_includes_messages.py +89 -0
  147. abstractruntime-0.4.1/tests/test_visual_agent_tool_observations_persist_across_restart.py +168 -0
  148. abstractruntime-0.4.1/tests/test_visual_agent_use_context_inherits_attachments.py +87 -0
  149. abstractruntime-0.4.1/tests/test_visual_agent_use_context_persists_tool_observations.py +98 -0
  150. abstractruntime-0.4.1/tests/test_visual_agent_use_context_persists_turn.py +65 -0
  151. abstractruntime-0.4.1/tests/test_visual_llm_call_schema_ref_resolution.py +86 -0
  152. abstractruntime-0.4.1/tests/test_visual_memact_compose_node.py +190 -0
  153. abstractruntime-0.4.1/tests/test_visual_memory_kg_query_outputs_propagate.py +172 -0
  154. abstractruntime-0.4.1/tests/test_visual_memory_kg_resolve_outputs_propagate.py +161 -0
  155. abstractruntime-0.4.1/tests/test_visualflow_add_message_builtin.py +24 -0
  156. abstractruntime-0.4.1/tests/test_visualflow_add_message_node_appends_to_active_context.py +54 -0
  157. abstractruntime-0.4.1/tests/test_visualflow_call_tool_node.py +159 -0
  158. abstractruntime-0.4.1/tests/test_visualflow_compiler_basic.py +79 -0
  159. abstractruntime-0.4.1/tests/test_visualflow_context_and_builder_nodes.py +175 -0
  160. abstractruntime-0.4.1/tests/test_visualflow_get_element_node.py +111 -0
  161. abstractruntime-0.4.1/tests/test_visualflow_get_random_element_node.py +88 -0
  162. abstractruntime-0.4.1/tests/test_visualflow_has_tools_builtin.py +14 -0
  163. abstractruntime-0.4.1/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +43 -0
  164. abstractruntime-0.4.1/tests/test_visualflow_make_object_node.py +75 -0
  165. abstractruntime-0.4.1/tests/test_visualflow_memory_effect_nodes.py +385 -0
  166. abstractruntime-0.4.1/tests/test_visualflow_memory_source_pins.py +363 -0
  167. abstractruntime-0.4.1/tests/test_visualflow_prompt_only.py +203 -0
  168. abstractruntime-0.4.1/tests/test_visualflow_random_nodes.py +82 -0
  169. abstractruntime-0.4.1/tests/test_visualflow_string_contains_replace.py +33 -0
  170. abstractruntime-0.4.1/tests/test_visualflow_tool_parameters_node.py +111 -0
  171. abstractruntime-0.4.1/tests/test_workflow_bundle_registry.py +82 -0
  172. abstractruntime-0.4.1/tests/test_workspace_policy_allowlist_mode.py +41 -0
  173. abstractruntime-0.4.1/tests/test_workspace_policy_mount_virtual_paths.py +56 -0
  174. abstractruntime-0.4.1/tests/test_workspace_policy_tool_calls_persist_across_restart.py +103 -0
  175. abstractruntime-0.4.0/PKG-INFO +0 -167
  176. abstractruntime-0.4.0/README.md +0 -141
  177. abstractruntime-0.4.0/ROADMAP.md +0 -235
  178. abstractruntime-0.4.0/docs/architecture.md +0 -165
  179. abstractruntime-0.4.0/docs/backlog/README.md +0 -42
  180. abstractruntime-0.4.0/docs/backlog/completed/016_runtime_aware_parameters.md +0 -240
  181. abstractruntime-0.4.0/docs/integrations/abstractcore.md +0 -97
  182. abstractruntime-0.4.0/docs/limits.md +0 -266
  183. abstractruntime-0.4.0/docs/manual_testing.md +0 -309
  184. abstractruntime-0.4.0/docs/proposal.md +0 -166
  185. abstractruntime-0.4.0/docs/provenance.md +0 -36
  186. abstractruntime-0.4.0/docs/snapshots.md +0 -47
  187. abstractruntime-0.4.0/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -134
  188. abstractruntime-0.4.0/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -368
  189. abstractruntime-0.4.0/src/abstractruntime/storage/json_files.py +0 -221
  190. abstractruntime-0.4.0/tests/conftest.py +0 -38
  191. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/.gitignore +0 -0
  192. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/LICENSE +0 -0
  193. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  194. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  195. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  196. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/adr/README.md +0 -0
  197. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  198. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/003_wait_primitives.md +0 -0
  199. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  200. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  201. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  202. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/009_artifact_store.md +0 -0
  203. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  204. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  205. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  206. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  207. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  208. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  209. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  210. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  211. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  212. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  213. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/004_tests.md +0 -0
  214. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  215. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  216. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  217. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  218. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  219. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  220. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/planned/015_agent_integration_improvements.md +0 -0
  221. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  222. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/examples/01_hello_world.py +0 -0
  223. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/examples/02_ask_user.py +0 -0
  224. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/examples/03_wait_until.py +0 -0
  225. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/examples/04_multi_step.py +0 -0
  226. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/examples/05_persistence.py +0 -0
  227. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/examples/06_llm_integration.py +0 -0
  228. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/examples/07_react_agent.py +0 -0
  229. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/core/__init__.py +0 -0
  230. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/core/event_keys.py +0 -0
  231. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/core/spec.py +0 -0
  232. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/evidence/__init__.py +0 -0
  233. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/identity/__init__.py +0 -0
  234. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/identity/fingerprint.py +0 -0
  235. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/__init__.py +0 -0
  236. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  237. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  238. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  239. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  240. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/memory/__init__.py +0 -0
  241. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/memory/active_memory.py +0 -0
  242. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/memory/compaction.py +0 -0
  243. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/rendering/__init__.py +0 -0
  244. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  245. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/rendering/json_stringify.py +0 -0
  246. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/scheduler/__init__.py +0 -0
  247. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/scheduler/convenience.py +0 -0
  248. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/scheduler/registry.py +0 -0
  249. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/scheduler/scheduler.py +0 -0
  250. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/storage/ledger_chain.py +0 -0
  251. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/src/abstractruntime/storage/snapshots.py +0 -0
  252. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/README.md +0 -0
  253. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_active_context_policy.py +0 -0
  254. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_active_memory.py +0 -0
  255. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_chat_summarizer_integration.py +0 -0
  256. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_compaction_helpers.py +0 -0
  257. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_durable_toolsets.py +0 -0
  258. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_evidence_recorder.py +0 -0
  259. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_integration_abstractcore.py +0 -0
  260. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_ledger_chain.py +0 -0
  261. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_ledger_subscription.py +0 -0
  262. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  263. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_llm_client_tool_call_parsing.py +0 -0
  264. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_mcp_remote_tool_executor.py +0 -0
  265. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_mcp_worker_logging.py +0 -0
  266. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_mcp_worker_security.py +0 -0
  267. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_mcp_worker_stdio.py +0 -0
  268. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_memory_note_effect.py +0 -0
  269. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_memory_query_effect.py +0 -0
  270. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_memory_query_rich_filters.py +0 -0
  271. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_memory_tag_effect.py +0 -0
  272. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_packaging_extras.py +0 -0
  273. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_pause_resume.py +0 -0
  274. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_real_integration.py +0 -0
  275. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_rendering_agent_trace_report.py +0 -0
  276. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_rendering_json_stringify.py +0 -0
  277. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_retry_idempotency.py +0 -0
  278. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  279. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_runtime_node_traces.py +0 -0
  280. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  281. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_scheduler.py +0 -0
  282. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_snapshots.py +0 -0
  283. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_start_subworkflow_async_wait.py +0 -0
  284. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_subworkflow.py +0 -0
  285. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_terminal_effect_completion.py +0 -0
  286. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_tool_executor_argument_sanitization.py +0 -0
  287. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_tool_executor_error_output_detection.py +0 -0
  288. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_tool_executor_filename_alias.py +0 -0
  289. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  290. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_tool_executor_read_file_aliases.py +0 -0
  291. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_tool_executor_timeout.py +0 -0
  292. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_tool_wait_allowlist_safety.py +0 -0
  293. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_vars_query_effect.py +0 -0
  294. {abstractruntime-0.4.0 → abstractruntime-0.4.1}/tests/test_wait_event_prompt_metadata.py +0 -0
File without changes
@@ -0,0 +1,27 @@
1
+ # Acknowledgments
2
+
3
+ AbstractRuntime is designed to pair with the wider Abstract ecosystem and the open-source Python tooling community.
4
+
5
+ This project depends on (and is shaped by) the following libraries.
6
+ The canonical dependency list lives in `pyproject.toml`.
7
+
8
+ ## Runtime dependencies (core install)
9
+
10
+ - **abstractsemantics** — structured schema registry support (declared in `pyproject.toml`, used in `src/abstractruntime/integrations/abstractmemory/effect_handlers.py` and VisualFlow execution wiring).
11
+
12
+ ## Optional integrations (extras)
13
+
14
+ Installed only when you opt in to extras:
15
+ - **abstractcore** — LLM + tools integration used by `abstractruntime[abstractcore]` (declared in `pyproject.toml`, implementation under `src/abstractruntime/integrations/abstractcore/*`, docs: `docs/integrations/abstractcore.md`).
16
+ - The AbstractCore integration uses **httpx** for remote mode (`src/abstractruntime/integrations/abstractcore/llm_client.py`) and **pydantic** for structured validation (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`). These are provided by AbstractCore’s dependency set.
17
+ - **abstractcore[tools]** — toolchain extra used by `abstractruntime[mcp-worker]` (declared in `pyproject.toml`) and intended to include HTML parsing dependencies (see comments in `pyproject.toml`).
18
+ - **RestrictedPython** (optional) — used for sandboxed execution of VisualFlow “Code” nodes when available (`src/abstractruntime/visualflow_compiler/visual/code_executor.py`).
19
+
20
+ ## Build & test tooling
21
+
22
+ - **hatchling** — build backend (`pyproject.toml` `[build-system]`).
23
+ - **pytest** — test runner (`pytest.ini`, `tests/`).
24
+
25
+ And thanks to everyone who reports bugs, discusses design tradeoffs, and contributes improvements.
26
+
27
+ See also: `LICENSE`, `CONTRIBUTING.md`.
@@ -0,0 +1,4 @@
1
+ # Acknowledments (legacy filename)
2
+
3
+ This project uses `ACKNOWLEDGMENTS.md` (correct spelling). Please refer to that file.
4
+
@@ -0,0 +1,4 @@
1
+ # Changelog (legacy filename)
2
+
3
+ This project uses `CHANGELOG.md`. Please refer to that file.
4
+
@@ -7,13 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+ ### Changed
12
+
13
+ ### Fixed
14
+
15
+ ## [0.4.1] - 2026-02-04
16
+
10
17
  ### Added
11
18
  - **Durable prompt metadata for EVENT waits**:
12
19
  - `WAIT_EVENT` effects may include optional `prompt`, `choices`, and `allow_free_text` fields.
13
20
  - The runtime persists these fields onto `WaitState` so hosts (including remote/thin clients) can render a durable ask+wait UX without relying on in-process callbacks.
14
21
  - **Rendering utilities** (`abstractruntime.rendering`):
15
22
  - `stringify_json(...)` + `JsonStringifyMode` to render JSON/JSON-ish values into strings with `none|beautify|minified` modes.
16
- - `render_agent_trace_markdown(...)` to render runtime-owned `node_traces` scratchpads into a complete, review-friendly Markdown timeline (tool args + results untruncated).
23
+ - `render_agent_trace_markdown(...)` to render runtime-owned `node_traces` scratchpads into a complete, review-friendly Markdown timeline.
24
+ - **Documentation refresh**:
25
+ - clearer entrypoints: `README.md` → `docs/getting-started.md`
26
+ - new reference docs: `docs/api.md`, `docs/faq.md`, `docs/architecture.md`
27
+ - maintainer-facing orientation: `llms.txt`, `llms-full.txt`
28
+ - new repo policies: `CONTRIBUTING.md`, `SECURITY.md`, `ACKNOWLEDGMENTS.md`
29
+
30
+ ### Fixed
31
+ - Normalize AbstractCore tool specs for skim tools so `paths` is always an array parameter (improves JSON schema consistency for tool callers).
17
32
 
18
33
  ## [0.4.0] - 2025-01-06
19
34
 
@@ -203,15 +218,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
203
218
  - **Graph-Based Execution**: All workflows represented as state machines/graphs for visualization and composition
204
219
  - **JSON-Serializable State**: All run state and vars must be JSON-serializable for persistence
205
220
 
206
- #### Test Coverage
207
- - **81% Overall Coverage**: Comprehensive test suite with 57+ tests
208
- - **Integration Tests**: Tests for AbstractCore integration, subworkflows, trace propagation
209
- - **Core Tests**: Scheduler, snapshots, artifacts, pause/resume, retry/idempotency, ledger chain
210
- - **Storage Tests**: Queryable run store, durable toolsets
221
+ #### Testing
222
+ - Run the test suite with `python -m pytest -q` (see `docs/manual_testing.md`).
211
223
 
212
224
  #### Compatibility
213
225
  - **Python 3.10+**: Supports Python 3.10, 3.11, 3.12, and 3.13
214
- - **Development Status**: Planning/Alpha (moving toward Beta with 0.2.0)
215
226
 
216
227
  ### Known Limitations
217
228
 
@@ -236,5 +247,7 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
236
247
 
237
248
  Initial development version with basic proof-of-concept features.
238
249
 
239
- [0.2.0]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.2.0
250
+ [Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.1...HEAD
251
+ [0.4.1]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.4.1
252
+ [0.4.0]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.4.0
240
253
  [0.0.1]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.0.1
@@ -0,0 +1,58 @@
1
+ # Contributing to AbstractRuntime
2
+
3
+ Thanks for your interest in contributing!
4
+
5
+ AbstractRuntime is a **durable workflow runtime** (interrupt → checkpoint → resume) with an append-only execution ledger.
6
+
7
+ ## Quick start (dev setup)
8
+
9
+ Prereqs: **Python 3.10+**.
10
+
11
+ ```bash
12
+ python -m venv .venv
13
+ source .venv/bin/activate
14
+ python -m pip install -U pip
15
+
16
+ # Full dev install (kernel + optional integrations used by tests/examples)
17
+ python -m pip install -e ".[abstractcore,mcp-worker]"
18
+
19
+ python -m pytest -q
20
+ ```
21
+
22
+ ## Repo map (source of truth)
23
+
24
+ - Public exports: `src/abstractruntime/__init__.py` (keep this consistent with `docs/api.md`)
25
+ - Core kernel (durable semantics): `src/abstractruntime/core/`
26
+ - Durability backends: `src/abstractruntime/storage/`
27
+ - Driver loop (in-process): `src/abstractruntime/scheduler/`
28
+ - Optional integrations (extras): `src/abstractruntime/integrations/`
29
+ - Tests: `tests/`
30
+
31
+ Docs entrypoints:
32
+ - `README.md` → `docs/getting-started.md`
33
+ - Docs index: `docs/README.md`
34
+ - Architecture: `docs/architecture.md`
35
+
36
+ ## Change guidelines
37
+
38
+ ### Code
39
+
40
+ - Preserve durability invariants: values stored in `RunState.vars` must stay JSON-serializable (`src/abstractruntime/core/models.py`).
41
+ - Add/adjust tests for new behavior (see `tests/`).
42
+ - If you touch effect semantics, update `docs/architecture.md` and ensure handlers and models stay aligned.
43
+
44
+ ### Documentation
45
+
46
+ Docs should be **user-facing**, **actionable**, and anchored to code (prefer referencing `src/...` paths for claims).
47
+
48
+ When behavior changes, update:
49
+ - `docs/api.md` (public API surface + imports)
50
+ - `docs/getting-started.md` (onboarding examples)
51
+ - `docs/architecture.md` (semantics/invariants)
52
+ - `CHANGELOG.md` (user-visible changes)
53
+
54
+ ## Releases
55
+
56
+ - Bump `version` in `pyproject.toml`
57
+ - Add a dated section to `CHANGELOG.md` (Keep a Changelog format)
58
+
@@ -0,0 +1,177 @@
1
+ Metadata-Version: 2.4
2
+ Name: AbstractRuntime
3
+ Version: 0.4.1
4
+ Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
5
+ Project-URL: AbstractCore (website), https://www.abstractcore.ai/
6
+ Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
7
+ Author: Laurent-Philippe Albou
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Keywords: agents,checkpoint,durable,graph,llm,resume,workflow
11
+ Classifier: Development Status :: 1 - Planning
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Requires-Python: >=3.10
21
+ Requires-Dist: abstractsemantics>=0.0.1
22
+ Provides-Extra: abstractcore
23
+ Requires-Dist: abstractcore>=2.6.8; extra == 'abstractcore'
24
+ Provides-Extra: mcp-worker
25
+ Requires-Dist: abstractcore[tools]>=2.6.8; extra == 'mcp-worker'
26
+ Description-Content-Type: text/markdown
27
+
28
+ # AbstractRuntime
29
+
30
+ **AbstractRuntime** is a durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
31
+
32
+ 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.
33
+
34
+ **Version:** 0.4.1 (`pyproject.toml`) • **Python:** 3.10+
35
+
36
+ ## Install
37
+
38
+ Core runtime:
39
+
40
+ ```bash
41
+ pip install abstractruntime
42
+ ```
43
+
44
+ AbstractCore integration (LLM + tools):
45
+
46
+ ```bash
47
+ pip install "abstractruntime[abstractcore]"
48
+ ```
49
+
50
+ MCP worker entrypoint (default toolsets over stdio):
51
+
52
+ ```bash
53
+ pip install "abstractruntime[mcp-worker]"
54
+ ```
55
+
56
+ ## Quick start (pause + resume)
57
+
58
+ ```python
59
+ from abstractruntime import Effect, EffectType, Runtime, StepPlan, WorkflowSpec
60
+ from abstractruntime.storage import InMemoryLedgerStore, InMemoryRunStore
61
+
62
+
63
+ def ask(run, ctx):
64
+ return StepPlan(
65
+ node_id="ask",
66
+ effect=Effect(
67
+ type=EffectType.ASK_USER,
68
+ payload={"prompt": "Continue?"},
69
+ result_key="user_answer",
70
+ ),
71
+ next_node="done",
72
+ )
73
+
74
+
75
+ def done(run, ctx):
76
+ return StepPlan(node_id="done", complete_output={"answer": run.vars.get("user_answer")})
77
+
78
+
79
+ wf = WorkflowSpec(workflow_id="demo", entry_node="ask", nodes={"ask": ask, "done": done})
80
+ rt = Runtime(run_store=InMemoryRunStore(), ledger_store=InMemoryLedgerStore())
81
+
82
+ run_id = rt.start(workflow=wf)
83
+ state = rt.tick(workflow=wf, run_id=run_id)
84
+ assert state.status.value == "waiting"
85
+
86
+ state = rt.resume(
87
+ workflow=wf,
88
+ run_id=run_id,
89
+ wait_key=state.waiting.wait_key,
90
+ payload={"text": "yes"},
91
+ )
92
+ assert state.status.value == "completed"
93
+ ```
94
+
95
+ ## What’s included (v0.4.1)
96
+
97
+ Kernel (dependency-light):
98
+ - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
99
+ - durable execution: `Runtime.start/tick/resume` (`src/abstractruntime/core/runtime.py`)
100
+ - durable waits/events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
101
+ - append-only ledger (`StepRecord`) + node traces (`vars["_runtime"]["node_traces"]`)
102
+ - retries/idempotency hooks: `src/abstractruntime/core/policy.py`
103
+
104
+ Durability + storage:
105
+ - stores: in-memory, JSON/JSONL, SQLite (`src/abstractruntime/storage/*`)
106
+ - artifacts + offloading (store large payloads by reference)
107
+ - snapshots/bookmarks (`docs/snapshots.md`)
108
+ - tamper-evident hash-chained ledger (`docs/provenance.md`)
109
+
110
+ Drivers + distribution:
111
+ - scheduler: `create_scheduled_runtime()` (`src/abstractruntime/scheduler/*`)
112
+ - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
113
+ - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
114
+
115
+ Optional integrations:
116
+ - AbstractCore (LLM + tools): `docs/integrations/abstractcore.md`
117
+ - comms toolset gating (email/WhatsApp/Telegram): `docs/tools-comms.md`
118
+
119
+ ## Built-in scheduler (zero-config)
120
+
121
+ ```python
122
+ from abstractruntime import create_scheduled_runtime
123
+
124
+ sr = create_scheduled_runtime()
125
+ run_id, state = sr.run(my_workflow)
126
+
127
+ if state.status.value == "waiting":
128
+ state = sr.respond(run_id, {"answer": "yes"})
129
+
130
+ sr.stop()
131
+ ```
132
+
133
+ For persistent storage:
134
+
135
+ ```python
136
+ from abstractruntime import create_scheduled_runtime, JsonFileRunStore, JsonlLedgerStore
137
+
138
+ sr = create_scheduled_runtime(
139
+ run_store=JsonFileRunStore("./data"),
140
+ ledger_store=JsonlLedgerStore("./data"),
141
+ )
142
+ ```
143
+
144
+ ## Documentation
145
+
146
+ | Document | Description |
147
+ |----------|-------------|
148
+ | [Getting Started](docs/getting-started.md) | Install + first durable workflow |
149
+ | [API Reference](docs/api.md) | Public API surface (imports + pointers) |
150
+ | [Docs Index](docs/README.md) | Full docs map (guides + reference) |
151
+ | [FAQ](docs/faq.md) | Common questions and gotchas |
152
+ | [Architecture](docs/architecture.md) | Component map + diagrams |
153
+ | [Overview](docs/proposal.md) | Design goals, core concepts, and scope |
154
+ | [Integrations](docs/integrations/) | Integration guides (AbstractCore) |
155
+ | [Snapshots](docs/snapshots.md) | Named checkpoints for run state |
156
+ | [Provenance](docs/provenance.md) | Tamper-evident ledger documentation |
157
+ | [Evidence](docs/evidence.md) | Artifact-backed evidence capture for web/command tools |
158
+ | [Limits](docs/limits.md) | `_limits` namespace and RuntimeConfig |
159
+ | [WorkflowBundles](docs/workflow-bundles.md) | `.flow` bundle format (VisualFlow distribution) |
160
+ | [MCP Worker](docs/mcp-worker.md) | `abstractruntime-mcp-worker` CLI |
161
+ | [Changelog](CHANGELOG.md) | Release notes |
162
+ | [Contributing](CONTRIBUTING.md) | How to build/test and submit changes |
163
+ | [Security](SECURITY.md) | Responsible vulnerability reporting |
164
+ | [Acknowledgments](ACKNOWLEDGMENTS.md) | Credits |
165
+ | [ROADMAP](ROADMAP.md) | Prioritized next steps |
166
+
167
+ ## Development
168
+
169
+ ```bash
170
+ python -m venv .venv
171
+ source .venv/bin/activate
172
+ python -m pip install -U pip
173
+ python -m pip install -e ".[abstractcore,mcp-worker]"
174
+ python -m pytest -q
175
+ ```
176
+
177
+ See `CONTRIBUTING.md` for contribution guidelines and doc conventions.
@@ -0,0 +1,150 @@
1
+ # AbstractRuntime
2
+
3
+ **AbstractRuntime** is a durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
4
+
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
+
7
+ **Version:** 0.4.1 (`pyproject.toml`) • **Python:** 3.10+
8
+
9
+ ## Install
10
+
11
+ Core runtime:
12
+
13
+ ```bash
14
+ pip install abstractruntime
15
+ ```
16
+
17
+ AbstractCore integration (LLM + tools):
18
+
19
+ ```bash
20
+ pip install "abstractruntime[abstractcore]"
21
+ ```
22
+
23
+ MCP worker entrypoint (default toolsets over stdio):
24
+
25
+ ```bash
26
+ pip install "abstractruntime[mcp-worker]"
27
+ ```
28
+
29
+ ## Quick start (pause + resume)
30
+
31
+ ```python
32
+ from abstractruntime import Effect, EffectType, Runtime, StepPlan, WorkflowSpec
33
+ from abstractruntime.storage import InMemoryLedgerStore, InMemoryRunStore
34
+
35
+
36
+ def ask(run, ctx):
37
+ return StepPlan(
38
+ node_id="ask",
39
+ effect=Effect(
40
+ type=EffectType.ASK_USER,
41
+ payload={"prompt": "Continue?"},
42
+ result_key="user_answer",
43
+ ),
44
+ next_node="done",
45
+ )
46
+
47
+
48
+ def done(run, ctx):
49
+ return StepPlan(node_id="done", complete_output={"answer": run.vars.get("user_answer")})
50
+
51
+
52
+ wf = WorkflowSpec(workflow_id="demo", entry_node="ask", nodes={"ask": ask, "done": done})
53
+ rt = Runtime(run_store=InMemoryRunStore(), ledger_store=InMemoryLedgerStore())
54
+
55
+ run_id = rt.start(workflow=wf)
56
+ state = rt.tick(workflow=wf, run_id=run_id)
57
+ assert state.status.value == "waiting"
58
+
59
+ state = rt.resume(
60
+ workflow=wf,
61
+ run_id=run_id,
62
+ wait_key=state.waiting.wait_key,
63
+ payload={"text": "yes"},
64
+ )
65
+ assert state.status.value == "completed"
66
+ ```
67
+
68
+ ## What’s included (v0.4.1)
69
+
70
+ Kernel (dependency-light):
71
+ - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
72
+ - durable execution: `Runtime.start/tick/resume` (`src/abstractruntime/core/runtime.py`)
73
+ - durable waits/events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
74
+ - append-only ledger (`StepRecord`) + node traces (`vars["_runtime"]["node_traces"]`)
75
+ - retries/idempotency hooks: `src/abstractruntime/core/policy.py`
76
+
77
+ Durability + storage:
78
+ - stores: in-memory, JSON/JSONL, SQLite (`src/abstractruntime/storage/*`)
79
+ - artifacts + offloading (store large payloads by reference)
80
+ - snapshots/bookmarks (`docs/snapshots.md`)
81
+ - tamper-evident hash-chained ledger (`docs/provenance.md`)
82
+
83
+ Drivers + distribution:
84
+ - scheduler: `create_scheduled_runtime()` (`src/abstractruntime/scheduler/*`)
85
+ - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
86
+ - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
87
+
88
+ Optional integrations:
89
+ - AbstractCore (LLM + tools): `docs/integrations/abstractcore.md`
90
+ - comms toolset gating (email/WhatsApp/Telegram): `docs/tools-comms.md`
91
+
92
+ ## Built-in scheduler (zero-config)
93
+
94
+ ```python
95
+ from abstractruntime import create_scheduled_runtime
96
+
97
+ sr = create_scheduled_runtime()
98
+ run_id, state = sr.run(my_workflow)
99
+
100
+ if state.status.value == "waiting":
101
+ state = sr.respond(run_id, {"answer": "yes"})
102
+
103
+ sr.stop()
104
+ ```
105
+
106
+ For persistent storage:
107
+
108
+ ```python
109
+ from abstractruntime import create_scheduled_runtime, JsonFileRunStore, JsonlLedgerStore
110
+
111
+ sr = create_scheduled_runtime(
112
+ run_store=JsonFileRunStore("./data"),
113
+ ledger_store=JsonlLedgerStore("./data"),
114
+ )
115
+ ```
116
+
117
+ ## Documentation
118
+
119
+ | Document | Description |
120
+ |----------|-------------|
121
+ | [Getting Started](docs/getting-started.md) | Install + first durable workflow |
122
+ | [API Reference](docs/api.md) | Public API surface (imports + pointers) |
123
+ | [Docs Index](docs/README.md) | Full docs map (guides + reference) |
124
+ | [FAQ](docs/faq.md) | Common questions and gotchas |
125
+ | [Architecture](docs/architecture.md) | Component map + diagrams |
126
+ | [Overview](docs/proposal.md) | Design goals, core concepts, and scope |
127
+ | [Integrations](docs/integrations/) | Integration guides (AbstractCore) |
128
+ | [Snapshots](docs/snapshots.md) | Named checkpoints for run state |
129
+ | [Provenance](docs/provenance.md) | Tamper-evident ledger documentation |
130
+ | [Evidence](docs/evidence.md) | Artifact-backed evidence capture for web/command tools |
131
+ | [Limits](docs/limits.md) | `_limits` namespace and RuntimeConfig |
132
+ | [WorkflowBundles](docs/workflow-bundles.md) | `.flow` bundle format (VisualFlow distribution) |
133
+ | [MCP Worker](docs/mcp-worker.md) | `abstractruntime-mcp-worker` CLI |
134
+ | [Changelog](CHANGELOG.md) | Release notes |
135
+ | [Contributing](CONTRIBUTING.md) | How to build/test and submit changes |
136
+ | [Security](SECURITY.md) | Responsible vulnerability reporting |
137
+ | [Acknowledgments](ACKNOWLEDGMENTS.md) | Credits |
138
+ | [ROADMAP](ROADMAP.md) | Prioritized next steps |
139
+
140
+ ## Development
141
+
142
+ ```bash
143
+ python -m venv .venv
144
+ source .venv/bin/activate
145
+ python -m pip install -U pip
146
+ python -m pip install -e ".[abstractcore,mcp-worker]"
147
+ python -m pytest -q
148
+ ```
149
+
150
+ See `CONTRIBUTING.md` for contribution guidelines and doc conventions.
@@ -0,0 +1,36 @@
1
+ # AbstractRuntime Roadmap
2
+
3
+ ## Current status (v0.4.1)
4
+
5
+ AbstractRuntime provides a durable workflow kernel plus optional integrations:
6
+ - durable execution: `Runtime.start/tick/resume`, explicit `WaitState` (`src/abstractruntime/core/runtime.py`)
7
+ - append-only ledger (`StepRecord`) + persistent stores (JSON/JSONL, SQLite) (`src/abstractruntime/storage/*`)
8
+ - built-in scheduler (`Scheduler`, `ScheduledRuntime`) (`src/abstractruntime/scheduler/*`)
9
+ - snapshots/bookmarks (`src/abstractruntime/storage/snapshots.py`)
10
+ - tamper-evident hash-chained ledger (`src/abstractruntime/storage/ledger_chain.py`)
11
+ - artifacts + offloading for large payloads (`src/abstractruntime/storage/artifacts.py`, `src/abstractruntime/storage/offloading.py`)
12
+ - retries/idempotency hooks (`src/abstractruntime/core/policy.py`)
13
+ - VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
14
+ - AbstractCore integration for `LLM_CALL` / `TOOL_CALLS` (`docs/integrations/abstractcore.md`)
15
+
16
+ ## Near-term priorities
17
+
18
+ These are tracked in `docs/backlog/planned/`:
19
+
20
+ 1. **Signatures and keys** — non-forgeable provenance (beyond tamper-evidence)
21
+ `docs/backlog/planned/008_signatures_and_keys.md`
22
+
23
+ 2. **Remote tool worker executor** — first-class worker boundary for tool execution
24
+ `docs/backlog/planned/014_remote_tool_worker_executor.md`
25
+
26
+ 3. **Limit warnings + observability events** — surface `_limits` warnings durably/streaming
27
+ `docs/backlog/planned/017_limit_warnings_and_observability.md`
28
+
29
+ 4. **Agent integration improvements** — reduce friction for external agent loops building on runtime
30
+ `docs/backlog/planned/015_agent_integration_improvements.md`
31
+
32
+ ## Longer-term (not scheduled)
33
+
34
+ - distributed scheduling primitives (beyond in-process polling)
35
+ - workflow versioning/migration patterns for long-lived runs and snapshot restore
36
+ - stronger reproducibility contracts for replays (workflow snapshotting + run history bundles)
@@ -0,0 +1,24 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please report security issues **privately**.
6
+
7
+ Preferred channel:
8
+ - Use **GitHub Security Advisories** / the repository’s “Report a vulnerability” feature (private).
9
+
10
+ Include as much of the following as you can:
11
+ - affected versions (from `pyproject.toml` / `CHANGELOG.md`)
12
+ - impact and realistic attack scenario
13
+ - minimal reproduction steps or proof-of-concept
14
+ - environment details (OS, Python version, storage backend used)
15
+
16
+ ## Coordinated disclosure
17
+
18
+ - Do not open public issues/PRs for security vulnerabilities.
19
+ - Avoid data exfiltration, service disruption, or destructive testing; keep verification to the minimum needed.
20
+
21
+ ## Non-security bugs
22
+
23
+ If you are unsure whether an issue is security-related, prefer reporting it privately first.
24
+
@@ -0,0 +1,37 @@
1
+ # Documentation
2
+
3
+ This folder contains **user-facing docs** (how to use AbstractRuntime) and **maintainer docs** (ADRs/backlog).
4
+
5
+ ## Start here
6
+
7
+ - `../README.md` — install + quick start
8
+ - `getting-started.md` — first steps (recommended)
9
+ - `api.md` — public API surface (imports + pointers)
10
+ - `architecture.md` — how the runtime is structured (with diagrams)
11
+ - `proposal.md` — design goals and scope boundaries
12
+
13
+ ## Guides
14
+
15
+ - `faq.md` — common questions (recommended)
16
+ - `manual_testing.md` — manual smoke tests and how to run the test suite
17
+ - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS` via AbstractCore
18
+ - `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
19
+
20
+ ## Features (reference)
21
+
22
+ - `evidence.md` — artifact-backed evidence capture for external-boundary tools
23
+ - `mcp-worker.md` — MCP worker CLI (`abstractruntime-mcp-worker`)
24
+ - `snapshots.md` — snapshot/bookmark model and stores
25
+ - `provenance.md` — tamper-evident hash-chained ledger
26
+ - `limits.md` — runtime-aware `_limits` namespace and APIs
27
+ - `workflow-bundles.md` — `.flow` bundle format (VisualFlow distribution)
28
+
29
+ ## Maintainers
30
+
31
+ - `../CHANGELOG.md` — release notes
32
+ - `../CONTRIBUTING.md` — how to build/test and submit changes
33
+ - `../SECURITY.md` — responsible vulnerability reporting
34
+ - `../ACKNOWLEDGMENTS.md` — credits
35
+ - `../ROADMAP.md` — prioritized next steps
36
+ - `adr/README.md` — architectural decisions (why)
37
+ - `backlog/README.md` — implemented and planned work items (what/how)