AbstractRuntime 0.4.6__tar.gz → 0.4.7__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.6 → abstractruntime-0.4.7}/CHANGELOG.md +16 -1
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/PKG-INFO +7 -7
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/README.md +3 -3
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/adr/0002_execution_modes_local_remote_hybrid.md +9 -2
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/api.md +6 -2
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/architecture.md +4 -2
- abstractruntime-0.4.7/docs/backlog/proposed/2026-05-08_runtime_gateway_env_namespace_cleanup.md +163 -0
- abstractruntime-0.4.7/docs/backlog/proposed/2026-05-08_runtime_gateway_install_boundary.md +117 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/faq.md +3 -1
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/getting-started.md +1 -1
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/integrations/abstractcore.md +17 -2
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/limits.md +1 -1
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/proposal.md +1 -1
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/provenance.md +1 -1
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/workflow-bundles.md +2 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/llms-full.txt +8 -4
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/llms.txt +6 -4
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/pyproject.toml +4 -4
- abstractruntime-0.4.7/release-notes.md +11 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +25 -10
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/output_specs.py +4 -3
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/workflow_bundle/registry.py +4 -6
- abstractruntime-0.4.7/tests/test_packaging_extras.py +65 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_prompt_cache_modules.py +57 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_remote_llm_client.py +22 -0
- abstractruntime-0.4.7/tests/test_runtime_install_boundary.py +77 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_session_attachments_registry_and_open_tool.py +72 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_workflow_bundle_registry.py +18 -0
- abstractruntime-0.4.6/release-notes.md +0 -5
- abstractruntime-0.4.6/tests/test_packaging_extras.py +0 -34
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/.gitignore +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/LICENSE +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/ROADMAP.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/SECURITY.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/README.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/README.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/planned/015_agent_integration_improvements.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/evidence.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/tools-comms.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/examples/README.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/mkdocs.yml +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/pytest.ini +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/README.md +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/conftest.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.6 → abstractruntime-0.4.7}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.7] - 2026-05-08
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Minimum `abstractcore` optional dependency increased to `>=2.13.11` for the `abstractcore`, `multimodal`, and `mcp-worker` extras so Runtime aligns with the current Core server-auth, provider-key, generated-media, and capability-catalog contracts.
|
|
14
|
+
- AbstractCore integration imports now fail fast when a stale local AbstractCore install is older than the 2.13.11 Gateway/Core deployment baseline.
|
|
15
|
+
- Documentation now makes the Gateway handoff explicit: hosts choose Runtime plus the Core/capability/memory profile, pass Core server URLs/auth headers deliberately, and keep provider clients, auth objects, model handles, and sessions out of durable runtime state.
|
|
16
|
+
- Runtime no longer reads Gateway-owned environment variables directly. Prompt-cache defaults use explicit Runtime state or `ABSTRACTRUNTIME_PROMPT_CACHE`, read-file attachment registration limits use explicit Runtime state/payload values or `ABSTRACTRUNTIME_MAX_ATTACHMENT_BYTES`, and workflow bundle registries use shared/framework or explicit directories.
|
|
17
|
+
|
|
18
|
+
### Testing
|
|
19
|
+
- Added packaging boundary coverage proving Runtime exposes no fake hardware profile extras (`apple`, `gpu`, `all-apple`, `all-gpu`) and keeps the Core floors aligned.
|
|
20
|
+
- Added import-boundary coverage proving the runtime kernel and package root do not import optional Core/Vision/Voice/Memory/Music stacks.
|
|
21
|
+
- Added a remote client regression test proving Gateway auth/provider-key environment variables are not inherited as AbstractCore server auth or provider-key headers.
|
|
22
|
+
- Added regression tests proving Gateway env vars alone do not enable prompt-cache keys, shrink attachment registration limits, or select workflow bundle registry directories.
|
|
23
|
+
|
|
10
24
|
## [0.4.6] - 2026-05-07
|
|
11
25
|
|
|
12
26
|
### Changed
|
|
@@ -340,7 +354,8 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
340
354
|
|
|
341
355
|
Initial development version with basic proof-of-concept features.
|
|
342
356
|
|
|
343
|
-
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.
|
|
357
|
+
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.7...HEAD
|
|
358
|
+
[0.4.7]: https://github.com/lpalbou/abstractruntime/compare/v0.4.6...v0.4.7
|
|
344
359
|
[0.4.6]: https://github.com/lpalbou/abstractruntime/compare/v0.4.5...v0.4.6
|
|
345
360
|
[0.4.5]: https://github.com/lpalbou/abstractruntime/compare/v0.4.4...v0.4.5
|
|
346
361
|
[0.4.4]: https://github.com/lpalbou/abstractruntime/releases/tag/v0.4.4
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.7
|
|
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.11; 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.11; 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.11; 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.7 • **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.11 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool catalog, 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.7)
|
|
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.7 • **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.11 or newer so the hardened server auth model, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool catalog, 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.7)
|
|
91
91
|
|
|
92
92
|
Kernel (dependency-light):
|
|
93
93
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
{abstractruntime-0.4.6 → abstractruntime-0.4.7}/docs/adr/0002_execution_modes_local_remote_hybrid.md
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
## ADR 0002: Execution modes (local, remote, hybrid)
|
|
2
2
|
|
|
3
3
|
### Status
|
|
4
|
-
Accepted (2025-12-11)
|
|
4
|
+
Accepted (2025-12-11); clarified 2026-05-08 by framework ADR-0033
|
|
5
5
|
|
|
6
6
|
### Context
|
|
7
7
|
Agents/workflows must run in multiple deployment topologies:
|
|
@@ -20,6 +20,12 @@ AbstractRuntime supports three execution modes:
|
|
|
20
20
|
- **Remote**: HTTP to AbstractCore server; tools default to passthrough (untrusted)
|
|
21
21
|
- **Hybrid**: remote LLM + local tool execution
|
|
22
22
|
|
|
23
|
+
Remote AbstractCore server mode uses the Core server's own URL, auth token, base URL allowlists,
|
|
24
|
+
and provider-key override rules. It must not inherit Gateway bearer tokens or browser origin policy
|
|
25
|
+
implicitly. If Gateway is the caller, Gateway acts as an explicit Core-server client.
|
|
26
|
+
Gateway-specific env/config is consumed by Gateway and passed to Runtime through explicit run state,
|
|
27
|
+
effect payloads, client construction arguments, or Runtime-owned environment variables.
|
|
28
|
+
|
|
23
29
|
### Consequences
|
|
24
30
|
- Thin-mode clients can run the workflow logic while delegating inference to a server.
|
|
25
31
|
- Remote mode supports AbstractCore per-request `base_url` routing (dynamic endpoint selection).
|
|
@@ -28,5 +34,6 @@ AbstractRuntime supports three execution modes:
|
|
|
28
34
|
### See Also
|
|
29
35
|
- Implementation: [`backlog/completed/005_abstractcore_integration.md`](../backlog/completed/005_abstractcore_integration.md)
|
|
30
36
|
- Integration guide: [`integrations/abstractcore.md`](../integrations/abstractcore.md)
|
|
37
|
+
- Gateway install boundary: [`backlog/proposed/2026-05-08_runtime_gateway_install_boundary.md`](../backlog/proposed/2026-05-08_runtime_gateway_install_boundary.md)
|
|
31
38
|
- Code: `src/abstractruntime/integrations/abstractcore/factory.py`
|
|
32
|
-
|
|
39
|
+
- Framework ADR: `../../../docs/adr/0033-install-profiles-config-entrypoints-and-server-boundaries.md`
|
|
@@ -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.11 or newer).
|
|
180
180
|
|
|
181
181
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
182
182
|
|
|
@@ -198,12 +198,16 @@ Multimodal support:
|
|
|
198
198
|
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, speech, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
199
199
|
- remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
|
|
200
200
|
- generated image/voice/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
201
|
+
- Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected Core/capability install profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
|
|
201
202
|
|
|
202
203
|
Prompt cache / cached sessions:
|
|
203
204
|
- LLM clients expose cache control methods listed above for host-side preparation and inspection
|
|
204
|
-
- `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]`
|
|
205
|
+
- `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]` or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default
|
|
205
206
|
- provider cache/session handles are not durable runtime state and should not be stored in `RunState.vars`
|
|
206
207
|
|
|
208
|
+
Attachment registration limits:
|
|
209
|
+
- `TOOL_CALLS.payload.max_attachment_bytes`, `run.vars["_runtime"]["max_attachment_bytes"]`, or `ABSTRACTRUNTIME_MAX_ATTACHMENT_BYTES` bound the bytes Runtime stores when local `read_file` outputs are captured as session attachments
|
|
210
|
+
|
|
207
211
|
Docs: `integrations/abstractcore.md`.
|
|
208
212
|
|
|
209
213
|
### AbstractMemory bridge (KG effects)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AbstractRuntime — Architecture
|
|
2
2
|
|
|
3
|
-
> Updated: 2026-05-
|
|
4
|
-
> Version: 0.4.
|
|
3
|
+
> Updated: 2026-05-08
|
|
4
|
+
> Version: 0.4.7
|
|
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.
|
|
@@ -37,6 +37,8 @@ The boundary is intentionally narrow:
|
|
|
37
37
|
- Remote chat media is sent to AbstractCore Server as provider-ready content arrays, but persisted provider-request metadata redacts data URLs so checkpoints and ledgers do not embed media bytes.
|
|
38
38
|
- Provider sessions and prompt-cache objects are not runtime state. Runtime may carry stable cache keys, while AbstractCore clients/servers manage warm caches.
|
|
39
39
|
- Local execution can use richer AbstractCore capability plugins. Remote and hybrid execution map the common media cases to AbstractCore Server endpoints and OpenAI-compatible content arrays, while hybrid keeps tool execution local.
|
|
40
|
+
- Gateway and other hosts compose Runtime with the desired Core/capability/memory profile. Runtime's base package does not expose hardware profile extras such as `apple`, `gpu`, `all-apple`, or `all-gpu`; those cascade through AbstractCore when a host selects them.
|
|
41
|
+
- Remote and hybrid clients use explicit Core server URLs and auth headers supplied by the host. Runtime does not read Gateway auth environment variables for provider/model/auth decisions or treat Gateway bearer tokens as Core server/provider credentials.
|
|
40
42
|
|
|
41
43
|
This keeps the runtime usable by `../abstractgateway` and application layers such as `../abstractflow`, `../abstractassistant`, `../abstractobserver`, and `../abstractcode` without embedding provider-specific model logic in the durable kernel.
|
|
42
44
|
|
abstractruntime-0.4.7/docs/backlog/proposed/2026-05-08_runtime_gateway_env_namespace_cleanup.md
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Completed: Runtime Gateway Env Namespace Cleanup
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
- Created: 2026-05-08
|
|
5
|
+
- Status: Completed
|
|
6
|
+
- Completed: 2026-05-08
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
AbstractRuntime should remain a lower-level durable runner. Gateway may compose Runtime and pass
|
|
11
|
+
run-scoped defaults, policy, and deployment choices into Runtime, but Runtime should not learn
|
|
12
|
+
Gateway-specific environment variable names.
|
|
13
|
+
|
|
14
|
+
This matters for the two-entry-point design:
|
|
15
|
+
|
|
16
|
+
- developers may use Runtime/Core without Gateway;
|
|
17
|
+
- Gateway may deploy Runtime as one component in a larger server;
|
|
18
|
+
- config precedence should be explicit and testable;
|
|
19
|
+
- lower packages should not depend on higher-package env namespaces.
|
|
20
|
+
|
|
21
|
+
## Current Code Reality
|
|
22
|
+
|
|
23
|
+
Runtime 0.4.7 largely carried out the install-boundary work:
|
|
24
|
+
|
|
25
|
+
- `pyproject.toml` now points Runtime AbstractCore extras at `abstractcore>=2.13.11`.
|
|
26
|
+
- Runtime does not expose `apple`, `gpu`, `all-apple`, or `all-gpu` extras.
|
|
27
|
+
- `tests/test_packaging_extras.py` verifies the Core floor and absence of fake hardware extras.
|
|
28
|
+
- `tests/test_runtime_install_boundary.py` verifies the package root/kernel import boundary.
|
|
29
|
+
- `tests/test_remote_llm_client.py` verifies remote AbstractCore clients do not inherit Gateway auth
|
|
30
|
+
or provider-key env vars.
|
|
31
|
+
|
|
32
|
+
Before this cleanup, Runtime still had Gateway namespace reads in implementation code:
|
|
33
|
+
|
|
34
|
+
- prompt cache auto-enable reads both `ABSTRACTRUNTIME_PROMPT_CACHE` and
|
|
35
|
+
`ABSTRACTGATEWAY_PROMPT_CACHE`;
|
|
36
|
+
- pending-media attachment limits read `ABSTRACTGATEWAY_MAX_ATTACHMENT_BYTES`.
|
|
37
|
+
- workflow bundle default registry resolution reads `ABSTRACTGATEWAY_FLOWS_DIR`.
|
|
38
|
+
|
|
39
|
+
Runtime also reads Runtime-owned or generic env vars such as
|
|
40
|
+
`ABSTRACTRUNTIME_GLOBAL_MEMORY_RUN_ID`, `ABSTRACTRUNTIME_MAX_INLINE_BYTES`, and
|
|
41
|
+
`ABSTRACT_WORKSPACE_BASE_DIR`. Those are not the problem; the problem is Runtime directly reading
|
|
42
|
+
Gateway-owned names.
|
|
43
|
+
|
|
44
|
+
## Problem
|
|
45
|
+
|
|
46
|
+
The current behavior partially violates the desired config cascade:
|
|
47
|
+
|
|
48
|
+
1. Gateway config/env should be consumed by Gateway.
|
|
49
|
+
2. Gateway should pass Runtime-relevant values explicitly through run state, effect payloads,
|
|
50
|
+
constructor/config arguments, or a Runtime-owned env name.
|
|
51
|
+
3. Runtime should not read `ABSTRACTGATEWAY_*` directly.
|
|
52
|
+
|
|
53
|
+
Leaving these reads in Runtime creates subtle deployment coupling:
|
|
54
|
+
|
|
55
|
+
- a standalone Runtime/Core process can change behavior because a Gateway env var happens to be set;
|
|
56
|
+
- Gateway cannot cleanly document its config precedence because Runtime also consumes some of it;
|
|
57
|
+
- tests currently cover auth/key leakage but not non-auth Gateway env leakage;
|
|
58
|
+
- future Gateway settings may be copied into Runtime ad hoc instead of using explicit handoff.
|
|
59
|
+
|
|
60
|
+
## What We Want To Do
|
|
61
|
+
|
|
62
|
+
Remove Gateway-specific env reads from Runtime and make the handoff explicit.
|
|
63
|
+
|
|
64
|
+
Prompt cache:
|
|
65
|
+
|
|
66
|
+
- keep `_runtime.prompt_cache` as the preferred run-scoped control plane;
|
|
67
|
+
- allow a Runtime-owned process default such as `ABSTRACTRUNTIME_PROMPT_CACHE`;
|
|
68
|
+
- Gateway should read `ABSTRACTGATEWAY_PROMPT_CACHE` itself and write `_runtime.prompt_cache` when
|
|
69
|
+
it wants prompt cache enabled for a run/session.
|
|
70
|
+
|
|
71
|
+
Attachment/media limits:
|
|
72
|
+
|
|
73
|
+
- add an explicit Runtime-side control such as `_runtime.max_attachment_bytes`, effect payload
|
|
74
|
+
`max_attachment_bytes`, or a small typed attachment policy object;
|
|
75
|
+
- allow a Runtime-owned process default such as `ABSTRACTRUNTIME_MAX_ATTACHMENT_BYTES` if a process
|
|
76
|
+
env fallback is still needed;
|
|
77
|
+
- Gateway should read `ABSTRACTGATEWAY_MAX_ATTACHMENT_BYTES` itself and pass the effective limit to
|
|
78
|
+
Runtime explicitly.
|
|
79
|
+
|
|
80
|
+
## Requirements
|
|
81
|
+
|
|
82
|
+
- Runtime must not read `ABSTRACTGATEWAY_*` env vars.
|
|
83
|
+
- Runtime may keep `ABSTRACTRUNTIME_*` env vars for Runtime-owned process defaults.
|
|
84
|
+
- Gateway-provided values must travel through explicit run state, effect payloads, Runtime config, or
|
|
85
|
+
constructor arguments.
|
|
86
|
+
- Existing `_runtime.prompt_cache` behavior should remain supported.
|
|
87
|
+
- Add regression tests proving Gateway env vars alone do not change Runtime behavior.
|
|
88
|
+
- Add tests proving explicit Runtime controls still work.
|
|
89
|
+
- Any compatibility fallback for old Gateway env names must be temporary, documented with
|
|
90
|
+
`#FALLBACK`, and preferably implemented in Gateway instead of Runtime.
|
|
91
|
+
|
|
92
|
+
## Suggested Implementation
|
|
93
|
+
|
|
94
|
+
1. Update `_maybe_inject_prompt_cache_key(...)` to remove the
|
|
95
|
+
`ABSTRACTGATEWAY_PROMPT_CACHE` branch.
|
|
96
|
+
2. Update the pending-media attachment byte limit resolver to prefer explicit Runtime state/payload
|
|
97
|
+
and then `ABSTRACTRUNTIME_MAX_ATTACHMENT_BYTES`; remove `ABSTRACTGATEWAY_MAX_ATTACHMENT_BYTES`.
|
|
98
|
+
3. Add focused tests in `tests/test_remote_llm_client.py` or a new effect-handler test module:
|
|
99
|
+
- setting `ABSTRACTGATEWAY_PROMPT_CACHE=1` alone does not inject a prompt cache key;
|
|
100
|
+
- setting `_runtime.prompt_cache=True` does inject a prompt cache key when session/provider/model
|
|
101
|
+
are present;
|
|
102
|
+
- setting `ABSTRACTGATEWAY_MAX_ATTACHMENT_BYTES` alone does not alter Runtime attachment limits;
|
|
103
|
+
- the chosen explicit Runtime limit path does alter Runtime attachment limits.
|
|
104
|
+
4. Update Runtime docs that mention prompt cache or attachment limits.
|
|
105
|
+
5. Update the Gateway backlog/implementation to translate Gateway config/env into Runtime handoff
|
|
106
|
+
values instead of relying on Runtime to read Gateway env names.
|
|
107
|
+
|
|
108
|
+
## Implementation Notes
|
|
109
|
+
|
|
110
|
+
Runtime 0.4.7 applies this cleanup directly:
|
|
111
|
+
|
|
112
|
+
- `_maybe_inject_prompt_cache_key(...)` no longer reads `ABSTRACTGATEWAY_PROMPT_CACHE`.
|
|
113
|
+
- Prompt cache auto-keying still supports explicit `LLM_CALL.params.prompt_cache_key`,
|
|
114
|
+
`_runtime.prompt_cache`, and Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE`.
|
|
115
|
+
- Read-file session attachment registration now resolves byte limits from
|
|
116
|
+
`TOOL_CALLS.payload.max_attachment_bytes`, `_runtime.max_attachment_bytes`,
|
|
117
|
+
`ABSTRACTRUNTIME_MAX_ATTACHMENT_BYTES`, then the default 25 MiB.
|
|
118
|
+
- `default_workflow_bundles_dir()` no longer reads `ABSTRACTGATEWAY_FLOWS_DIR`; Gateway should pass
|
|
119
|
+
`bundles_dir` explicitly or translate to `ABSTRACTFRAMEWORK_WORKFLOWS_DIR`.
|
|
120
|
+
- Regression tests cover prompt-cache env isolation, attachment-limit env isolation, explicit
|
|
121
|
+
Runtime namespace and effect payload attachment limits, and workflow bundle registry env
|
|
122
|
+
isolation.
|
|
123
|
+
|
|
124
|
+
## Scope
|
|
125
|
+
|
|
126
|
+
Included:
|
|
127
|
+
|
|
128
|
+
- Runtime AbstractCore effect-handler config lookup cleanup.
|
|
129
|
+
- Runtime tests for env namespace isolation.
|
|
130
|
+
- Runtime docs/backlog notes required to preserve the boundary.
|
|
131
|
+
|
|
132
|
+
Excluded:
|
|
133
|
+
|
|
134
|
+
- Gateway config implementation.
|
|
135
|
+
- Gateway package extras.
|
|
136
|
+
- Gateway server route behavior.
|
|
137
|
+
- Provider/model/auth decisions, which are already separately covered by existing tests.
|
|
138
|
+
|
|
139
|
+
## Promotion Criteria
|
|
140
|
+
|
|
141
|
+
Promote this before declaring Runtime fully clean for a production Gateway release if either of
|
|
142
|
+
these is true:
|
|
143
|
+
|
|
144
|
+
- Gateway still relies on `ABSTRACTGATEWAY_PROMPT_CACHE` or `ABSTRACTGATEWAY_MAX_ATTACHMENT_BYTES`
|
|
145
|
+
being read by Runtime;
|
|
146
|
+
- Runtime is being released as the official Gateway-aligned baseline.
|
|
147
|
+
|
|
148
|
+
If Gateway is updated first to pass explicit Runtime state and no production deployment relies on the
|
|
149
|
+
old env reads, this can be implemented as a small cleanup immediately after Gateway config lands.
|
|
150
|
+
|
|
151
|
+
## Validation
|
|
152
|
+
|
|
153
|
+
- [x] `python -m pytest tests/test_runtime_install_boundary.py tests/test_packaging_extras.py`
|
|
154
|
+
- [x] focused prompt-cache/env isolation tests;
|
|
155
|
+
- [x] focused attachment-limit/env isolation tests;
|
|
156
|
+
- [x] `rg -n "ABSTRACTGATEWAY" src tests docs` should show no Runtime implementation reads, except
|
|
157
|
+
tests that assert the env name is ignored and docs/backlog references explaining the cleanup.
|
|
158
|
+
|
|
159
|
+
## Guidance For The Implementing Agent
|
|
160
|
+
|
|
161
|
+
Re-check current Gateway behavior before deleting compatibility assumptions. The clean target is not
|
|
162
|
+
"no env vars"; it is "Runtime owns Runtime env vars, Gateway owns Gateway env vars, and Gateway
|
|
163
|
+
passes Runtime-relevant values explicitly."
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Proposed: Runtime Gateway Install Boundary
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
- Created: 2026-05-08
|
|
5
|
+
- Status: Completed
|
|
6
|
+
- Completed: 2026-05-08
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
AbstractRuntime is the durable graph runner. It persists runs, effects, waits, ledgers, artifacts,
|
|
11
|
+
snapshots, and resume behavior. It should remain stable and dependency-light even when Gateway
|
|
12
|
+
deployments pull in Core, agents, media, memory, tools, and provider SDKs.
|
|
13
|
+
|
|
14
|
+
## Current Code Reality
|
|
15
|
+
|
|
16
|
+
- Runtime base depends on `abstractsemantics>=0.0.2`.
|
|
17
|
+
- AbstractCore integration is explicit through `abstractruntime[abstractcore]`.
|
|
18
|
+
- Multimodal helper dependencies are explicit through `abstractruntime[multimodal]`.
|
|
19
|
+
- Runtime does not directly depend on AbstractMemory; memory effects are integration/host-wired.
|
|
20
|
+
- Runtime config contains run-level defaults and limits, not deployment auth or provider secrets.
|
|
21
|
+
- As of the AbstractCore `2.13.11` release, Core exposes the canonical install-profile aliases
|
|
22
|
+
`abstractcore[apple]`, `abstractcore[gpu]`, `abstractcore[all-apple]`, and
|
|
23
|
+
`abstractcore[all-gpu]`, plus the released Voice/Vision catalog-capable floors
|
|
24
|
+
`abstractvoice>=0.9.1` and `abstractvision>=0.3.2`.
|
|
25
|
+
- Runtime's package metadata now points its AbstractCore extras at `abstractcore>=2.13.11`
|
|
26
|
+
for Gateway deployment alignment.
|
|
27
|
+
|
|
28
|
+
## Problem
|
|
29
|
+
|
|
30
|
+
The desire for cascading Gateway installs can accidentally push Core/Vision/Voice/Memory/local
|
|
31
|
+
engine dependencies down into Runtime. That would weaken the clean boundary:
|
|
32
|
+
|
|
33
|
+
- Runtime should be able to execute non-LLM workflows without Core.
|
|
34
|
+
- Runtime should not own provider configuration.
|
|
35
|
+
- Runtime should not import Vision, Voice, Music, or Memory in its kernel.
|
|
36
|
+
- Runtime should persist artifact refs and JSON-safe results, not model/provider clients.
|
|
37
|
+
|
|
38
|
+
## Proposed Direction
|
|
39
|
+
|
|
40
|
+
Keep Runtime base minimal.
|
|
41
|
+
|
|
42
|
+
Profile guidance:
|
|
43
|
+
|
|
44
|
+
- `abstractruntime`: durable kernel plus Semantics schema refs.
|
|
45
|
+
- `abstractruntime[abstractcore]`: LLM/tool integration, with a floor of
|
|
46
|
+
`abstractcore>=2.13.11` so Gateway receives the current Core server-auth, provider-key,
|
|
47
|
+
generated-media, and capability-catalog contracts.
|
|
48
|
+
- `abstractruntime[multimodal]`: Core media/capability helpers for generated images, voice/audio,
|
|
49
|
+
and media inputs, also with `abstractcore>=2.13.11`.
|
|
50
|
+
- Do not add `apple`, `gpu`, `all-apple`, or `all-gpu` to Runtime unless Runtime itself owns a
|
|
51
|
+
hardware-specific dependency, which it currently does not.
|
|
52
|
+
|
|
53
|
+
Gateway should compose Runtime with the selected Core/capability/memory profile. The cascade belongs
|
|
54
|
+
to Gateway, not Runtime.
|
|
55
|
+
|
|
56
|
+
## Gateway Configuration Handoff Rules
|
|
57
|
+
|
|
58
|
+
Runtime should stay explicit about configuration handoff:
|
|
59
|
+
|
|
60
|
+
- Gateway may pass run defaults in JSON-safe run state, such as `run.vars["_runtime"]["provider"]`
|
|
61
|
+
and `run.vars["_runtime"]["model"]`.
|
|
62
|
+
- Gateway may pass effect-level overrides in LLM/media effect payloads when workflow pins or request
|
|
63
|
+
values require them.
|
|
64
|
+
- Gateway may construct local/remote/hybrid AbstractCore clients with explicit Core server URL,
|
|
65
|
+
Core server auth headers, provider/model defaults, tool executor, retry policy, and artifact
|
|
66
|
+
store.
|
|
67
|
+
- Runtime should not read `ABSTRACTGATEWAY_*` env vars directly; Gateway-owned config must be
|
|
68
|
+
translated into explicit Runtime inputs or Runtime-owned env names.
|
|
69
|
+
- Runtime should not reinterpret Gateway auth tokens as Core server auth tokens or provider keys.
|
|
70
|
+
- Runtime should keep persisted run state JSON-safe: provider names, model ids, policy flags, and
|
|
71
|
+
artifact refs are fine; provider clients, auth objects, downloaded model handles, and server
|
|
72
|
+
sessions are not.
|
|
73
|
+
|
|
74
|
+
## Implementation Notes
|
|
75
|
+
|
|
76
|
+
Runtime was touched only for release-alignment and boundary validation.
|
|
77
|
+
|
|
78
|
+
What changed in Runtime 0.4.7:
|
|
79
|
+
|
|
80
|
+
- `abstractruntime[abstractcore]`, `abstractruntime[multimodal]`, and
|
|
81
|
+
`abstractruntime[mcp-worker]` now require `abstractcore>=2.13.11`.
|
|
82
|
+
- Runtime still exposes no `apple`, `gpu`, `all-apple`, or `all-gpu` extras.
|
|
83
|
+
- The AbstractCore integration version guard now fails fast on stale Core installs older than
|
|
84
|
+
2.13.11.
|
|
85
|
+
- Runtime no longer reads Gateway-owned environment variables for prompt-cache defaults,
|
|
86
|
+
attachment registration limits, or workflow bundle registry paths.
|
|
87
|
+
- Tests now cover the optional-stack import boundary, package metadata floor, missing hardware
|
|
88
|
+
profile extras, Gateway env namespace isolation, and the rule that Gateway auth/provider-key
|
|
89
|
+
environment variables are not inherited by remote AbstractCore clients.
|
|
90
|
+
|
|
91
|
+
Related package guidance remains:
|
|
92
|
+
|
|
93
|
+
- Gateway should keep Runtime base as the dependency for minimal installs.
|
|
94
|
+
- Gateway server profiles may choose `AbstractRuntime[multimodal]`.
|
|
95
|
+
- Gateway Apple/GPU profiles should cascade through Core profile names such as
|
|
96
|
+
`abstractcore[all-apple]` or `abstractcore[all-gpu]`; Runtime should remain unchanged.
|
|
97
|
+
- Root `abstractframework` should update Runtime version floors to match the current Gateway/Core
|
|
98
|
+
integration baseline.
|
|
99
|
+
- AbstractAgent should tighten its Runtime dependency floor.
|
|
100
|
+
|
|
101
|
+
## Promotion Criteria
|
|
102
|
+
|
|
103
|
+
Promoted because the Runtime release needed package metadata alignment, clearer install-boundary
|
|
104
|
+
docs, and regression tests for the Gateway handoff.
|
|
105
|
+
|
|
106
|
+
## Validation
|
|
107
|
+
|
|
108
|
+
- [x] Subprocess import test for `abstractruntime` with Core/Vision/Voice/Memory/Music blocked.
|
|
109
|
+
- [x] Fresh venv import test for `abstractruntime` without AbstractCore installed.
|
|
110
|
+
- [x] Fresh venv import test for `abstractruntime[abstractcore]`.
|
|
111
|
+
- [x] Runtime LLM/media integration tests gated behind extras.
|
|
112
|
+
- [x] Static import checks that Runtime kernel modules do not import Core, Vision, Voice, Memory, or
|
|
113
|
+
Music.
|
|
114
|
+
- [x] Package metadata test proving Runtime exposes no fake `apple`, `gpu`, `all-apple`, or `all-gpu`
|
|
115
|
+
extras.
|
|
116
|
+
- [x] Package metadata test proving `abstractruntime[abstractcore]` and `abstractruntime[multimodal]`
|
|
117
|
+
depend on `abstractcore>=2.13.11`.
|
|
@@ -107,7 +107,9 @@ No. AbstractRuntime provides the durable graph runner, checkpoint/ledger model,
|
|
|
107
107
|
|
|
108
108
|
## Where should cached session or prompt-cache state live?
|
|
109
109
|
|
|
110
|
-
Store stable cache keys or cache configuration in runtime-visible JSON, for example `payload.params.prompt_cache_key` or `run.vars["_runtime"]["prompt_cache"]`. Do not store provider session objects, cache handles, clients, or warm-cache state in `RunState.vars`. AbstractCore clients/servers own those objects, and runtime correctness should still hold when a cache is cold.
|
|
110
|
+
Store stable cache keys or cache configuration in runtime-visible JSON, for example `payload.params.prompt_cache_key` or `run.vars["_runtime"]["prompt_cache"]`. A Runtime process can also opt in with `ABSTRACTRUNTIME_PROMPT_CACHE`. Do not store provider session objects, cache handles, clients, or warm-cache state in `RunState.vars`. AbstractCore clients/servers own those objects, and runtime correctness should still hold when a cache is cold.
|
|
111
|
+
|
|
112
|
+
Gateway-specific prompt-cache environment variables should be consumed by Gateway and passed to Runtime explicitly; Runtime does not read the Gateway env namespace directly.
|
|
111
113
|
|
|
112
114
|
Hosts can inspect or prepare caches through the configured `_abstractcore_llm_client` control-plane methods (`get_prompt_cache_capabilities`, `prompt_cache_prepare_modules`, and related methods).
|
|
113
115
|
Docs: `integrations/abstractcore.md`. Code: `src/abstractruntime/integrations/abstractcore/llm_client.py`.
|
|
@@ -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.11 or newer, which matches the documented server auth, provider-key header routing, generated-media contracts, capability catalog, prompt-cache control plane, current tool behavior, 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.11 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), generated-media contracts, capability catalog, prompt-cache control-plane endpoints, current tool catalog, 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.11`. 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
|
|
|
@@ -44,6 +44,8 @@ Factory functions (exported from `abstractruntime.integrations.abstractcore`):
|
|
|
44
44
|
- `create_remote_runtime(...)`
|
|
45
45
|
- `create_hybrid_runtime(...)`
|
|
46
46
|
|
|
47
|
+
Runtime stays explicit at the boundary: Gateway/hosts construct these clients with the Core server URL, Core server auth headers, provider/model defaults, retry policy, tool executor, and artifact store they intend to use. Runtime does not read `ABSTRACTGATEWAY_*` environment variables directly and does not reinterpret Gateway bearer tokens as Core server tokens or provider keys. Gateway-owned config should be consumed by Gateway, then passed to Runtime through explicit run state, effect payloads, constructor arguments, or Runtime-owned environment variables.
|
|
48
|
+
|
|
47
49
|
## Minimal LLM workflow
|
|
48
50
|
|
|
49
51
|
```python
|
|
@@ -111,6 +113,7 @@ Notes:
|
|
|
111
113
|
- `media` accepts one item or a list. Durable artifact refs such as `{"$artifact": "...", "filename": "speech.wav"}` are materialized to temporary files for AbstractCore and never stored as raw bytes in `RunState`.
|
|
112
114
|
- `output` may be top-level or inside `params`; top-level `outputs` is accepted as a runtime alias for AbstractCore's `output`.
|
|
113
115
|
- `output.tags`, when present, are merged into the generated artifact metadata. Runtime metadata such as `run_id` and `tags` is used by AbstractRuntime's ArtifactStore boundary and is not forwarded as provider-specific generation kwargs.
|
|
116
|
+
- Host-supplied run defaults such as `run.vars["_runtime"]["provider"]` and `run.vars["_runtime"]["model"]` are persisted as JSON-safe routing metadata; provider clients, auth objects, downloaded model handles, and server sessions are not durable runtime state.
|
|
114
117
|
|
|
115
118
|
## Multimodal generation
|
|
116
119
|
|
|
@@ -282,6 +285,7 @@ Contract notes:
|
|
|
282
285
|
- When a provider reports `mode=local_control_plane` (for example MLX, or GGUF models whose llama.cpp chat format has an exact cached renderer), the runtime can maintain a compartmentalized `system | tools | history` cache path automatically.
|
|
283
286
|
- When a provider reports `mode=keyed`, the runtime still forwards stable `prompt_cache_key`s but skips module preparation/fork/update orchestration.
|
|
284
287
|
- This surface is intentionally host-oriented; the runtime effect handlers still only use prompt caching during LLM execution, but gateway/CLI hosts can now manage prompt caches without reaching through to provider internals.
|
|
288
|
+
- Automatic per-session prompt-cache keys are enabled by `run.vars["_runtime"]["prompt_cache"]`, `LLM_CALL.params.prompt_cache_key`, or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default. Gateway-specific prompt-cache env vars should be translated by Gateway into `_runtime.prompt_cache`.
|
|
285
289
|
|
|
286
290
|
Host-side prompt-cache example:
|
|
287
291
|
|
|
@@ -300,6 +304,17 @@ if caps.get("capabilities", {}).get("supports_prepare_modules"):
|
|
|
300
304
|
)
|
|
301
305
|
```
|
|
302
306
|
|
|
307
|
+
## Attachment registration limits
|
|
308
|
+
|
|
309
|
+
When local `read_file` tool outputs are captured as session attachments, Runtime bounds the file bytes it stores. The limit is resolved in this order:
|
|
310
|
+
|
|
311
|
+
- `TOOL_CALLS.payload.max_attachment_bytes`
|
|
312
|
+
- `run.vars["_runtime"]["max_attachment_bytes"]`
|
|
313
|
+
- `ABSTRACTRUNTIME_MAX_ATTACHMENT_BYTES`
|
|
314
|
+
- the default of 25 MiB
|
|
315
|
+
|
|
316
|
+
Gateway-specific attachment env vars should be translated by Gateway into one of the explicit Runtime inputs above.
|
|
317
|
+
|
|
303
318
|
## Default toolsets (incl. comms)
|
|
304
319
|
|
|
305
320
|
`default_tools.get_default_toolsets()` provides a host-side convenience catalog of common tools:
|
|
@@ -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.7, 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.7:
|
|
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.7)
|
|
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
|
|
@@ -58,6 +58,8 @@ print([ep.flow_id for ep in b.manifest.entrypoints])
|
|
|
58
58
|
- default directory resolution: `default_workflow_bundles_dir()` (`src/abstractruntime/workflow_bundle/registry.py`)
|
|
59
59
|
- resolve `bundle_id[@version]` and entrypoints (`resolve_bundle`, `resolve_entrypoint`)
|
|
60
60
|
|
|
61
|
+
Default directory resolution checks `ABSTRACTFRAMEWORK_WORKFLOWS_DIR`, then AbstractFlow authoring env names, then `./flows/bundles/`, then `~/.abstractframework/workflows/`. Hosts with Gateway-specific flow settings should pass `bundles_dir` explicitly or translate them to the shared framework env name before constructing the registry.
|
|
62
|
+
|
|
61
63
|
## VisualFlow multi-entry fan-in
|
|
62
64
|
|
|
63
65
|
Visual authoring tools may connect more than one execution edge into the same target `exec-in` pin. For example, a first prompt can enter a node from `on_flow_start`, while a later loop can re-enter the same node with a different prompt produced by the previous turn.
|
|
@@ -10,11 +10,12 @@ 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.7
|
|
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.11`
|
|
17
|
+
- Multimodal extra: `abstractruntime[multimodal]` installs `abstractcore[media,openai,vision,voice,audio]>=2.13.11`
|
|
18
|
+
- Config boundary: Runtime does not read `ABSTRACTGATEWAY_*`; Gateway-owned env/config should be translated into explicit Runtime inputs or Runtime-owned env names.
|
|
18
19
|
|
|
19
20
|
```mermaid
|
|
20
21
|
flowchart LR
|
|
@@ -219,9 +220,11 @@ Notes:
|
|
|
219
220
|
- Tool calls and results are durable (ledger + checkpoints). Keep secrets out of tool arguments.
|
|
220
221
|
- Use `ApprovalToolExecutor(delegate=..., policy=ToolApprovalPolicy())` when a local host should auto-run safe tools but pause for user approval before write/command/unknown tools.
|
|
221
222
|
- Remote `params.api_key` and `params.provider_api_key` are compatibility inputs; runtime converts them to `X-AbstractCore-Provider-API-Key` headers for current AbstractCore servers.
|
|
223
|
+
- Gateway/hosts choose Core server URLs, Core server auth headers, provider/model defaults, tool executors, artifact stores, and any Gateway env/config translation before Runtime sees the call.
|
|
222
224
|
- Hosts can access the configured LLM client via the factory-set `_abstractcore_llm_client` attribute for prompt-cache operations such as `get_prompt_cache_capabilities()` and `prompt_cache_prepare_modules(...)`.
|
|
223
225
|
- Use `pip install "abstractruntime[multimodal]"` for common AbstractCore media, vision, voice, and audio dependencies.
|
|
224
226
|
- Optional comms tools (email/WhatsApp/Telegram) are gated by env vars; see `docs/tools-comms.md` and code `src/abstractruntime/integrations/abstractcore/default_tools.py`.
|
|
227
|
+
- Read-file session attachment registration is bounded by `TOOL_CALLS.payload.max_attachment_bytes`, `run.vars["_runtime"]["max_attachment_bytes"]`, `ABSTRACTRUNTIME_MAX_ATTACHMENT_BYTES`, then the 25 MiB default.
|
|
225
228
|
|
|
226
229
|
Minimal approval executor wiring:
|
|
227
230
|
|
|
@@ -307,7 +310,8 @@ Remote multimodal guardrails:
|
|
|
307
310
|
- provider-request metadata redacts data URLs before persistence so ledger/checkpoints do not embed media bytes
|
|
308
311
|
|
|
309
312
|
Cached sessions / prompt cache:
|
|
310
|
-
- Prefer stable `params.prompt_cache_key` values or `run.vars["_runtime"]["prompt_cache"]` config to select cache namespaces.
|
|
313
|
+
- Prefer stable `params.prompt_cache_key` values or `run.vars["_runtime"]["prompt_cache"]` config to select cache namespaces; Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` is the process-wide opt-in.
|
|
314
|
+
- Gateway prompt-cache env vars should be consumed by Gateway and translated into `_runtime.prompt_cache`; Runtime does not read Gateway env names directly.
|
|
311
315
|
- Keep provider cache handles, session objects, and warm-cache state inside AbstractCore clients or servers.
|
|
312
316
|
- Runtime correctness must not depend on a warm cache; a cold cache may be slower but should produce the same durable graph behavior.
|
|
313
317
|
- Use `_abstractcore_llm_client` only as a host-side control-plane escape hatch for cache inspection/preparation, not as data stored in `RunState.vars`.
|