AbstractRuntime 0.4.5__tar.gz → 0.4.6__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.
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/CHANGELOG.md +10 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/PKG-INFO +7 -7
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/README.md +3 -3
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/api.md +1 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/architecture.md +1 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/getting-started.md +1 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/integrations/abstractcore.md +2 -2
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/limits.md +1 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/proposal.md +1 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/provenance.md +1 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/llms-full.txt +3 -3
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/llms.txt +3 -3
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/pyproject.toml +4 -4
- abstractruntime-0.4.6/release-notes.md +5 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/output_specs.py +26 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_multimodal_abstractcore_integration.py +14 -1
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_packaging_extras.py +3 -2
- abstractruntime-0.4.5/release-notes.md +0 -6
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/.gitignore +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/LICENSE +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/ROADMAP.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/SECURITY.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/README.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/README.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/015_agent_integration_improvements.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/evidence.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/faq.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/tools-comms.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/examples/README.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/mkdocs.yml +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/pytest.ini +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/README.md +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/conftest.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.6] - 2026-05-07
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Minimum `abstractcore` optional dependency increased to `>=2.13.10` so Runtime picks up AbstractCore's async/sync text-generation output-selector parity in addition to the public output-selector contract.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- AbstractCore output-selector imports now fail fast when an older local AbstractCore install exposes the helper module but does not include the 2.13.10 async parity fix.
|
|
17
|
+
|
|
10
18
|
## [0.4.5] - 2026-05-07
|
|
11
19
|
|
|
12
20
|
### Changed
|
|
@@ -332,7 +340,8 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
332
340
|
|
|
333
341
|
Initial development version with basic proof-of-concept features.
|
|
334
342
|
|
|
335
|
-
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.
|
|
343
|
+
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.6...HEAD
|
|
344
|
+
[0.4.6]: https://github.com/lpalbou/abstractruntime/compare/v0.4.5...v0.4.6
|
|
336
345
|
[0.4.5]: https://github.com/lpalbou/abstractruntime/compare/v0.4.4...v0.4.5
|
|
337
346
|
[0.4.4]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.4.4
|
|
338
347
|
[0.4.3]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.4.3
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.6
|
|
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
|
|
@@ -22,15 +22,15 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
23
|
Requires-Dist: abstractsemantics>=0.0.2
|
|
24
24
|
Provides-Extra: abstractcore
|
|
25
|
-
Requires-Dist: abstractcore>=2.13.
|
|
25
|
+
Requires-Dist: abstractcore>=2.13.10; extra == 'abstractcore'
|
|
26
26
|
Provides-Extra: docs
|
|
27
27
|
Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
|
|
28
28
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
29
29
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
30
30
|
Provides-Extra: mcp-worker
|
|
31
|
-
Requires-Dist: abstractcore[tools]>=2.13.
|
|
31
|
+
Requires-Dist: abstractcore[tools]>=2.13.10; extra == 'mcp-worker'
|
|
32
32
|
Provides-Extra: multimodal
|
|
33
|
-
Requires-Dist: abstractcore[audio,media,openai,vision,voice]>=2.13.
|
|
33
|
+
Requires-Dist: abstractcore[audio,media,openai,vision,voice]>=2.13.10; extra == 'multimodal'
|
|
34
34
|
Provides-Extra: test
|
|
35
35
|
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
@@ -41,7 +41,7 @@ Description-Content-Type: text/markdown
|
|
|
41
41
|
|
|
42
42
|
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.
|
|
43
43
|
|
|
44
|
-
**Version:** 0.4.
|
|
44
|
+
**Version:** 0.4.6 • **Python:** 3.10+
|
|
45
45
|
|
|
46
46
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
47
47
|
|
|
@@ -75,7 +75,7 @@ AbstractCore integration (LLM + tools):
|
|
|
75
75
|
pip install "abstractruntime[abstractcore]"
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
The `abstractcore` extra installs AbstractCore 2.13.
|
|
78
|
+
The `abstractcore` extra installs AbstractCore 2.13.10 or newer so the hardened server auth model, provider-key header routing, prompt-cache control plane, current tool catalog, unified multimodal generation response types, public output-selector contract, and async/sync text-generation output-selector parity are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
|
|
79
79
|
|
|
80
80
|
MCP worker entrypoint (default toolsets over stdio):
|
|
81
81
|
|
|
@@ -124,7 +124,7 @@ state = rt.resume(
|
|
|
124
124
|
assert state.status.value == "completed"
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
## What’s included (v0.4.
|
|
127
|
+
## What’s included (v0.4.6)
|
|
128
128
|
|
|
129
129
|
Kernel (dependency-light):
|
|
130
130
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -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.
|
|
7
|
+
**Version:** 0.4.6 • **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
|
|
|
@@ -38,7 +38,7 @@ AbstractCore integration (LLM + tools):
|
|
|
38
38
|
pip install "abstractruntime[abstractcore]"
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
The `abstractcore` extra installs AbstractCore 2.13.
|
|
41
|
+
The `abstractcore` extra installs AbstractCore 2.13.10 or newer so the hardened server auth model, provider-key header routing, prompt-cache control plane, current tool catalog, unified multimodal generation response types, public output-selector contract, and async/sync text-generation output-selector parity are available. Use `abstractruntime[multimodal]` when you need common media, vision, voice, and audio dependencies.
|
|
42
42
|
|
|
43
43
|
MCP worker entrypoint (default toolsets over stdio):
|
|
44
44
|
|
|
@@ -87,7 +87,7 @@ state = rt.resume(
|
|
|
87
87
|
assert state.status.value == "completed"
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
## What’s included (v0.4.
|
|
90
|
+
## What’s included (v0.4.6)
|
|
91
91
|
|
|
92
92
|
Kernel (dependency-light):
|
|
93
93
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -176,7 +176,7 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
|
|
|
176
176
|
|
|
177
177
|
### AbstractCore (LLM + tools)
|
|
178
178
|
|
|
179
|
-
Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.
|
|
179
|
+
Requires: `pip install "abstractruntime[abstractcore]"` (AbstractCore 2.13.10 or newer).
|
|
180
180
|
|
|
181
181
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
182
182
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AbstractRuntime — Architecture
|
|
2
2
|
|
|
3
3
|
> Updated: 2026-05-07
|
|
4
|
-
> Version: 0.4.
|
|
4
|
+
> Version: 0.4.6
|
|
5
5
|
> Scope: this describes **what is implemented in this repository**.
|
|
6
6
|
|
|
7
7
|
AbstractRuntime is a **durable workflow runtime**: it executes workflow graphs as a persisted state machine with explicit waits (user, time, events, jobs, subworkflows). A run can pause for hours/days and resume **without** keeping Python stacks/coroutines alive.
|
|
@@ -18,7 +18,7 @@ Optional (LLM + tools via AbstractCore):
|
|
|
18
18
|
pip install "abstractruntime[abstractcore]"
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
This installs AbstractCore 2.13.
|
|
21
|
+
This installs AbstractCore 2.13.10 or newer, which matches the documented server auth, provider-key header routing, prompt-cache control plane, current tool behavior, unified multimodal generation response types, public output-selector contract, and async/sync text-generation output-selector parity. Use `abstractruntime[multimodal]` when your workflows need common media, vision, voice, or audio dependencies.
|
|
22
22
|
|
|
23
23
|
## Mental model (source of truth)
|
|
24
24
|
|
|
@@ -16,7 +16,7 @@ Implementation pointers (this repo):
|
|
|
16
16
|
pip install "abstractruntime[abstractcore]"
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
This extra installs AbstractCore 2.13.
|
|
19
|
+
This extra installs AbstractCore 2.13.10 or newer. That is the supported baseline for the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), prompt-cache control-plane endpoints, current tool catalog, the unified multimodal `generate(..., output=...)` response types, AbstractCore's public output-selector contract, and async/sync text-generation output-selector parity.
|
|
20
20
|
|
|
21
21
|
For AbstractCore's multimodal `generate(..., output=...)` path, use the newer baseline and optional media packages:
|
|
22
22
|
|
|
@@ -24,7 +24,7 @@ For AbstractCore's multimodal `generate(..., output=...)` path, use the newer ba
|
|
|
24
24
|
pip install "abstractruntime[multimodal]"
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
This installs `abstractcore[media,openai,vision,voice,audio]>=2.13.
|
|
27
|
+
This installs `abstractcore[media,openai,vision,voice,audio]>=2.13.10`. Local image/voice generation still depends on the configured AbstractCore capability backends (for example AbstractVision and AbstractVoice, or OpenAI/OpenAI-compatible remote engines).
|
|
28
28
|
|
|
29
29
|
The MCP worker entrypoint uses the `mcp-worker` extra:
|
|
30
30
|
|
|
@@ -62,7 +62,7 @@ Returns a structured dict for UI/status display. (`src/abstractruntime/core/runt
|
|
|
62
62
|
|
|
63
63
|
Returns a list of `LimitWarning` objects for limits approaching/exceeded. (`src/abstractruntime/core/models.py`, `src/abstractruntime/core/runtime.py`)
|
|
64
64
|
|
|
65
|
-
As of v0.4.
|
|
65
|
+
As of v0.4.6, warnings are computed for:
|
|
66
66
|
- `iterations` (`current_iteration` vs `max_iterations`)
|
|
67
67
|
- `tokens` (`estimated_tokens_used` vs `max_tokens`)
|
|
68
68
|
|
|
@@ -79,7 +79,7 @@ AbstractRuntime stays dependency-light at the kernel level; concrete integration
|
|
|
79
79
|
|
|
80
80
|
## Status (implemented in this repository)
|
|
81
81
|
|
|
82
|
-
As of v0.4.
|
|
82
|
+
As of v0.4.6:
|
|
83
83
|
- durable kernel: `RunState`, `WaitState`, `Runtime.start/tick/resume`
|
|
84
84
|
- built-in waits + events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
|
|
85
85
|
- persistence backends: in-memory, JSON/JSONL, SQLite
|
|
@@ -8,7 +8,7 @@ Implementation pointers:
|
|
|
8
8
|
- model fields: `src/abstractruntime/core/models.py` (`StepRecord.prev_hash`, `StepRecord.record_hash`, `StepRecord.signature`)
|
|
9
9
|
- hash-chain decorator + verifier: `src/abstractruntime/storage/ledger_chain.py`
|
|
10
10
|
|
|
11
|
-
## What is implemented (v0.4.
|
|
11
|
+
## What is implemented (v0.4.6)
|
|
12
12
|
|
|
13
13
|
- `HashChainedLedgerStore(inner_store)` — wraps any `LedgerStore` to compute hashes on append
|
|
14
14
|
- `verify_ledger_chain(records)` — validates the chain and returns a verification report
|
|
@@ -10,11 +10,11 @@ This file is an **agent-oriented build guide** for the AbstractRuntime *library*
|
|
|
10
10
|
|
|
11
11
|
Quick facts:
|
|
12
12
|
- Python: 3.10+ (`pyproject.toml`)
|
|
13
|
-
- Version: 0.4.
|
|
13
|
+
- Version: 0.4.6
|
|
14
14
|
- Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella; pairs with [AbstractCore](https://github.com/lpalbou/abstractcore)
|
|
15
15
|
- Public export surface (source of truth): `src/abstractruntime/__init__.py`
|
|
16
|
-
- Optional AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.
|
|
17
|
-
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.
|
|
16
|
+
- Optional AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.10`
|
|
17
|
+
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.10`
|
|
18
18
|
|
|
19
19
|
```mermaid
|
|
20
20
|
flowchart LR
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
> Durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
|
|
4
4
|
|
|
5
5
|
- Python: 3.10+ (see `pyproject.toml`)
|
|
6
|
-
- Version: 0.4.
|
|
6
|
+
- Version: 0.4.6
|
|
7
7
|
- Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella, integrates with [AbstractCore](https://github.com/lpalbou/abstractcore)
|
|
8
8
|
- Hard invariant: `RunState.vars` must be JSON-serializable (`src/abstractruntime/core/models.py`)
|
|
9
|
-
- Current AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.
|
|
10
|
-
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.
|
|
9
|
+
- Current AbstractCore baseline: `abstractruntime[abstractcore]` installs `abstractcore>=2.13.10`
|
|
10
|
+
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.10`
|
|
11
11
|
|
|
12
12
|
## Start here
|
|
13
13
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "AbstractRuntime"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.6"
|
|
8
8
|
description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -42,18 +42,18 @@ dependencies = [
|
|
|
42
42
|
[project.optional-dependencies]
|
|
43
43
|
# Enables `abstractruntime.integrations.abstractcore.*` imports.
|
|
44
44
|
abstractcore = [
|
|
45
|
-
"abstractcore>=2.13.
|
|
45
|
+
"abstractcore>=2.13.10",
|
|
46
46
|
]
|
|
47
47
|
|
|
48
48
|
# Enables AbstractCore multimodal generation helpers with common OpenAI-backed
|
|
49
49
|
# image/voice capability packages.
|
|
50
50
|
multimodal = [
|
|
51
|
-
"abstractcore[media,openai,vision,voice,audio]>=2.13.
|
|
51
|
+
"abstractcore[media,openai,vision,voice,audio]>=2.13.10",
|
|
52
52
|
]
|
|
53
53
|
|
|
54
54
|
# Enables `abstractruntime-mcp-worker` with the default toolsets (includes bs4/lxml).
|
|
55
55
|
mcp-worker = [
|
|
56
|
-
"abstractcore[tools]>=2.13.
|
|
56
|
+
"abstractcore[tools]>=2.13.10",
|
|
57
57
|
]
|
|
58
58
|
|
|
59
59
|
# CI/test dependencies. The workflow runs the basic contract suite plus focused
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
### Changed
|
|
2
|
+
- Minimum `abstractcore` optional dependency increased to `>=2.13.10` so Runtime picks up AbstractCore's async/sync text-generation output-selector parity in addition to the public output-selector contract.
|
|
3
|
+
|
|
4
|
+
### Fixed
|
|
5
|
+
- AbstractCore output-selector imports now fail fast when an older local AbstractCore install exposes the helper module but does not include the 2.13.10 async parity fix.
|
|
@@ -4,7 +4,26 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import Any, Dict, List, Optional
|
|
6
6
|
|
|
7
|
+
_MIN_ABSTRACTCORE_VERSION = (2, 13, 10)
|
|
8
|
+
_MIN_ABSTRACTCORE_VERSION_TEXT = "2.13.10"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _version_tuple(value: str) -> tuple[int, int, int]:
|
|
12
|
+
parts: list[int] = []
|
|
13
|
+
for raw in str(value or "").split(".")[:3]:
|
|
14
|
+
digits = []
|
|
15
|
+
for char in raw:
|
|
16
|
+
if not char.isdigit():
|
|
17
|
+
break
|
|
18
|
+
digits.append(char)
|
|
19
|
+
parts.append(int("".join(digits) or "0"))
|
|
20
|
+
while len(parts) < 3:
|
|
21
|
+
parts.append(0)
|
|
22
|
+
return parts[0], parts[1], parts[2]
|
|
23
|
+
|
|
24
|
+
|
|
7
25
|
try:
|
|
26
|
+
from abstractcore.utils.version import __version__ as _abstractcore_version
|
|
8
27
|
from abstractcore.core.output_specs import (
|
|
9
28
|
is_output_request,
|
|
10
29
|
normalize_output_spec,
|
|
@@ -15,10 +34,16 @@ try:
|
|
|
15
34
|
)
|
|
16
35
|
except ImportError as exc: # pragma: no cover - import-time dependency guard
|
|
17
36
|
raise ImportError(
|
|
18
|
-
"abstractruntime.integrations.abstractcore requires abstractcore>=
|
|
37
|
+
f"abstractruntime.integrations.abstractcore requires abstractcore>={_MIN_ABSTRACTCORE_VERSION_TEXT} "
|
|
19
38
|
"for the public output selector contract."
|
|
20
39
|
) from exc
|
|
21
40
|
|
|
41
|
+
if _version_tuple(_abstractcore_version) < _MIN_ABSTRACTCORE_VERSION: # pragma: no cover - environment guard
|
|
42
|
+
raise ImportError(
|
|
43
|
+
f"abstractruntime.integrations.abstractcore requires abstractcore>={_MIN_ABSTRACTCORE_VERSION_TEXT} "
|
|
44
|
+
f"for async/sync output-selector parity; found abstractcore {_abstractcore_version}."
|
|
45
|
+
)
|
|
46
|
+
|
|
22
47
|
|
|
23
48
|
def is_abstractcore_output_request(output: Any) -> bool:
|
|
24
49
|
"""Return True when `output` is AbstractCore's multimodal output selector."""
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/tests/test_multimodal_abstractcore_integration.py
RENAMED
|
@@ -15,7 +15,9 @@ from abstractruntime.integrations.abstractcore.llm_client import (
|
|
|
15
15
|
)
|
|
16
16
|
from abstractruntime.integrations.abstractcore.output_specs import (
|
|
17
17
|
is_abstractcore_output_request,
|
|
18
|
+
normalize_output_specs_for_runtime,
|
|
18
19
|
output_request_has_generated_media,
|
|
20
|
+
output_request_has_non_text_result,
|
|
19
21
|
)
|
|
20
22
|
from abstractruntime.storage.artifacts import InMemoryArtifactStore
|
|
21
23
|
from abstractruntime.storage.in_memory import InMemoryLedgerStore, InMemoryRunStore
|
|
@@ -243,7 +245,12 @@ def test_llm_call_generated_media_requires_artifact_store() -> None:
|
|
|
243
245
|
|
|
244
246
|
|
|
245
247
|
def test_runtime_output_selector_adapter_delegates_to_public_abstractcore_contract() -> None:
|
|
246
|
-
from abstractcore.core.output_specs import
|
|
248
|
+
from abstractcore.core.output_specs import (
|
|
249
|
+
is_output_request,
|
|
250
|
+
normalize_output_specs,
|
|
251
|
+
output_has_generated_media,
|
|
252
|
+
output_requires_non_chat_dispatch,
|
|
253
|
+
)
|
|
247
254
|
|
|
248
255
|
cases = [
|
|
249
256
|
"text",
|
|
@@ -251,6 +258,7 @@ def test_runtime_output_selector_adapter_delegates_to_public_abstractcore_contra
|
|
|
251
258
|
{"modality": "audio"},
|
|
252
259
|
{"modality": "voice"},
|
|
253
260
|
{"task": "tts"},
|
|
261
|
+
{"task": "text_generation"},
|
|
254
262
|
{"task": "image_edit"},
|
|
255
263
|
[{"modality": "text"}, {"modality": "image"}],
|
|
256
264
|
"json",
|
|
@@ -260,7 +268,12 @@ def test_runtime_output_selector_adapter_delegates_to_public_abstractcore_contra
|
|
|
260
268
|
for case in cases:
|
|
261
269
|
assert is_abstractcore_output_request(case) is is_output_request(case)
|
|
262
270
|
|
|
271
|
+
text_generation = {"task": "text_generation"}
|
|
272
|
+
assert normalize_output_specs_for_runtime(text_generation) == normalize_output_specs(text_generation)
|
|
263
273
|
assert output_request_has_generated_media("image") is output_has_generated_media("image")
|
|
274
|
+
assert output_request_has_generated_media(text_generation) is False
|
|
275
|
+
assert output_request_has_non_text_result(text_generation) is output_requires_non_chat_dispatch(text_generation)
|
|
276
|
+
assert output_request_has_non_text_result(text_generation) is False
|
|
264
277
|
assert output_request_has_generated_media({"task": "voice_clone"}) is False
|
|
265
278
|
|
|
266
279
|
|
|
@@ -27,7 +27,8 @@ def test_runtime_exposes_abstractcore_and_worker_extras() -> None:
|
|
|
27
27
|
assert "[project.optional-dependencies]" in text
|
|
28
28
|
assert "abstractcore = [" in text
|
|
29
29
|
assert "mcp-worker = [" in text
|
|
30
|
+
assert '"abstractcore>=2.13.10"' in text
|
|
31
|
+
assert '"abstractcore[media,openai,vision,voice,audio]>=2.13.10"' in text
|
|
30
32
|
|
|
31
33
|
worker_block = _extract_optional_dependency_block(text, key="mcp-worker")
|
|
32
|
-
assert "abstractcore[tools]" in worker_block
|
|
33
|
-
|
|
34
|
+
assert '"abstractcore[tools]>=2.13.10"' in worker_block
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
### Changed
|
|
2
|
-
- Minimum `abstractcore` optional dependency increased to `>=2.13.9` so Runtime can use AbstractCore's public output-selector contract instead of mirroring provider-private multimodal selector logic.
|
|
3
|
-
- Runtime's AbstractCore output-spec adapter now delegates selector detection, normalization, generated-media detection, non-chat dispatch detection, and runtime metadata stripping to `abstractcore.core.output_specs`.
|
|
4
|
-
|
|
5
|
-
### Fixed
|
|
6
|
-
- Explicit `voice_clone` output specs no longer require a Runtime `ArtifactStore` before dispatch because AbstractCore exposes them as generated resources rather than binary media outputs.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/0001_layered_coupling_with_abstractcore.md
RENAMED
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/adr/0002_execution_modes_local_remote_hybrid.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/001_runtime_kernel.md
RENAMED
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/002_persistence_and_ledger.md
RENAMED
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/003_wait_primitives.md
RENAMED
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/004_scheduler_driver.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/006_snapshots_bookmarks.md
RENAMED
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/007_provenance_hash_chain.md
RENAMED
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/009_artifact_store.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/completed/011_subworkflow_support.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/001_runtime_kernel.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/002_snapshots_bookmarks.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/deprecated/DEPRECATED_README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/docs/backlog/planned/008_signatures_and_keys.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.4.5 → abstractruntime-0.4.6}/src/abstractruntime/integrations/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|