AbstractRuntime 0.4.11__tar.gz → 0.4.12__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.11 → abstractruntime-0.4.12}/.github/workflows/release.yml +45 -22
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/CHANGELOG.md +9 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/PKG-INFO +8 -8
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/integrations/abstractcore.md +15 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/pyproject.toml +8 -8
- abstractruntime-0.4.12/release-notes.md +6 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/core/runtime.py +20 -2
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/llm_client.py +292 -52
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +89 -5
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/compiler.py +22 -6
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/visual/executor.py +44 -48
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_client_system_context.py +73 -35
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_multimodal_abstractcore_integration.py +101 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_runtime_llm_call_grounding_in_ledger.py +16 -3
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_multi_entry_loop_overrides.py +32 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_media_nodes.py +7 -5
- abstractruntime-0.4.11/release-notes.md +0 -6
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/.gitignore +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/LICENSE +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/README.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/ROADMAP.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/SECURITY.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/README.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/api.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/architecture.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/README.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/planned/015_agent_integration_improvements.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/proposed/2026-05-08_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/proposed/2026-05-08_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/backlog/proposed/2026-05-09_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/evidence.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/faq.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/getting-started.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/limits.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/proposal.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/provenance.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/tools-comms.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/examples/README.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/llms-full.txt +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/llms.txt +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/mkdocs.yml +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/pytest.ini +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/README.md +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/conftest.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_packaging_extras.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.11 → abstractruntime-0.4.12}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
name: Release
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.*.*"
|
|
4
7
|
workflow_dispatch:
|
|
5
8
|
inputs:
|
|
6
9
|
version:
|
|
@@ -111,7 +114,9 @@ jobs:
|
|
|
111
114
|
import urllib.request
|
|
112
115
|
from pathlib import Path
|
|
113
116
|
|
|
114
|
-
|
|
117
|
+
version_input = os.environ.get("RELEASE_INPUT_VERSION", "").strip()
|
|
118
|
+
ref_name = os.environ.get("GITHUB_REF_NAME", "").strip()
|
|
119
|
+
raw_version = version_input or ref_name
|
|
115
120
|
version = raw_version[1:] if raw_version.startswith("v") else raw_version
|
|
116
121
|
if not re.fullmatch(r"\d+\.\d+\.\d+(?:[a-zA-Z0-9.-]+)?", version):
|
|
117
122
|
raise SystemExit(f"Invalid release version: {raw_version!r}")
|
|
@@ -136,28 +141,36 @@ jobs:
|
|
|
136
141
|
raise SystemExit(f"CHANGELOG.md entry for {version} is empty")
|
|
137
142
|
Path("release-notes.md").write_text(notes + "\n", encoding="utf-8")
|
|
138
143
|
|
|
139
|
-
|
|
144
|
+
event_name = os.environ.get("GITHUB_EVENT_NAME", "")
|
|
145
|
+
publish = event_name == "push" or os.environ["RELEASE_PUBLISH"].lower() == "true"
|
|
140
146
|
if publish:
|
|
141
|
-
if os.environ.get("GITHUB_REF") != "refs/heads/main":
|
|
147
|
+
if event_name == "workflow_dispatch" and os.environ.get("GITHUB_REF") != "refs/heads/main":
|
|
142
148
|
raise SystemExit("Publishing is only allowed from the main branch.")
|
|
143
149
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
+
if event_name == "workflow_dispatch":
|
|
151
|
+
expected = f"publish-abstractruntime-{version}"
|
|
152
|
+
confirmation = os.environ.get("RELEASE_CONFIRMATION", "").strip()
|
|
153
|
+
if confirmation != expected:
|
|
154
|
+
raise SystemExit(
|
|
155
|
+
f"publish_confirmation must be exactly {expected!r}; got {confirmation!r}"
|
|
156
|
+
)
|
|
150
157
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
if event_name == "workflow_dispatch":
|
|
159
|
+
tag_check = subprocess.run(
|
|
160
|
+
["git", "ls-remote", "--exit-code", "--tags", "origin", f"refs/tags/{tag}^{{}}"],
|
|
161
|
+
check=False,
|
|
162
|
+
capture_output=True,
|
|
163
|
+
text=True,
|
|
164
|
+
)
|
|
165
|
+
if tag_check.returncode == 0:
|
|
166
|
+
remote_sha = tag_check.stdout.split()[0].strip() if tag_check.stdout.split() else ""
|
|
167
|
+
local_sha = subprocess.check_output(["git", "rev-parse", "HEAD"], text=True).strip()
|
|
168
|
+
if remote_sha != local_sha:
|
|
169
|
+
raise SystemExit(
|
|
170
|
+
f"Remote tag {tag} already exists at {remote_sha}, but current commit is {local_sha}."
|
|
171
|
+
)
|
|
172
|
+
elif tag_check.returncode != 2:
|
|
173
|
+
raise SystemExit(f"Could not check remote tag {tag}.")
|
|
161
174
|
|
|
162
175
|
try:
|
|
163
176
|
with urllib.request.urlopen(
|
|
@@ -200,17 +213,27 @@ jobs:
|
|
|
200
213
|
- uses: actions/checkout@v4
|
|
201
214
|
with:
|
|
202
215
|
fetch-depth: 0
|
|
203
|
-
- name: Create annotated tag
|
|
216
|
+
- name: Create annotated tag for manual releases
|
|
217
|
+
if: github.event_name == 'workflow_dispatch'
|
|
204
218
|
run: |
|
|
205
219
|
tag="${{ needs.build.outputs.tag }}"
|
|
206
220
|
if git ls-remote --exit-code --tags origin "refs/tags/${tag}" >/dev/null 2>&1; then
|
|
207
|
-
|
|
208
|
-
|
|
221
|
+
remote_sha="$(git ls-remote --tags origin "refs/tags/${tag}^{}" | awk '{print $1}')"
|
|
222
|
+
local_sha="$(git rev-parse HEAD)"
|
|
223
|
+
if [ "${remote_sha}" != "${local_sha}" ]; then
|
|
224
|
+
echo "Tag ${tag} already exists at ${remote_sha}, but current commit is ${local_sha}."
|
|
225
|
+
exit 1
|
|
226
|
+
fi
|
|
227
|
+
echo "Tag ${tag} already exists on origin for the same commit. Reusing it."
|
|
228
|
+
exit 0
|
|
209
229
|
fi
|
|
210
230
|
git config user.name "github-actions[bot]"
|
|
211
231
|
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
212
232
|
git tag -a "${tag}" -m "AbstractRuntime ${tag}"
|
|
213
233
|
git push origin "${tag}"
|
|
234
|
+
- name: Tag already supplied by push trigger
|
|
235
|
+
if: github.event_name != 'workflow_dispatch'
|
|
236
|
+
run: echo "Using existing tag ${{ needs.build.outputs.tag }}"
|
|
214
237
|
|
|
215
238
|
publish-pypi:
|
|
216
239
|
name: Publish to PyPI
|
|
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.12] - 2026-05-19
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- Remote AbstractCore transcription now uses provider-scoped audio routes such as `/{provider}/v1/audio/transcriptions` when an STT provider is selected.
|
|
14
|
+
- VisualFlow generated media nodes now keep LLM `provider`/`model` routing separate from image, TTS, and STT provider/model pins.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- Minimum AbstractCore optional dependency floor is now `abstractcore>=2.13.15`.
|
|
18
|
+
|
|
10
19
|
## [0.4.11] - 2026-05-13
|
|
11
20
|
|
|
12
21
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.12
|
|
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
|
|
@@ -23,23 +23,23 @@ Requires-Python: >=3.10
|
|
|
23
23
|
Requires-Dist: abstractmemory>=0.2.6
|
|
24
24
|
Requires-Dist: abstractsemantics>=0.0.3
|
|
25
25
|
Provides-Extra: abstractcore
|
|
26
|
-
Requires-Dist: abstractcore>=2.13.
|
|
26
|
+
Requires-Dist: abstractcore>=2.13.15; extra == 'abstractcore'
|
|
27
27
|
Provides-Extra: all-apple
|
|
28
|
-
Requires-Dist: abstractcore[all-apple]>=2.13.
|
|
28
|
+
Requires-Dist: abstractcore[all-apple]>=2.13.15; extra == 'all-apple'
|
|
29
29
|
Provides-Extra: all-gpu
|
|
30
|
-
Requires-Dist: abstractcore[all-gpu]>=2.13.
|
|
30
|
+
Requires-Dist: abstractcore[all-gpu]>=2.13.15; extra == 'all-gpu'
|
|
31
31
|
Provides-Extra: apple
|
|
32
|
-
Requires-Dist: abstractcore[apple]>=2.13.
|
|
32
|
+
Requires-Dist: abstractcore[apple]>=2.13.15; extra == 'apple'
|
|
33
33
|
Provides-Extra: docs
|
|
34
34
|
Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
|
|
35
35
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
36
36
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
37
37
|
Provides-Extra: gpu
|
|
38
|
-
Requires-Dist: abstractcore[gpu]>=2.13.
|
|
38
|
+
Requires-Dist: abstractcore[gpu]>=2.13.15; extra == 'gpu'
|
|
39
39
|
Provides-Extra: mcp-worker
|
|
40
|
-
Requires-Dist: abstractcore[tools]>=2.13.
|
|
40
|
+
Requires-Dist: abstractcore[tools]>=2.13.15; extra == 'mcp-worker'
|
|
41
41
|
Provides-Extra: multimodal
|
|
42
|
-
Requires-Dist: abstractcore[audio,media,openai,vision,voice]>=2.13.
|
|
42
|
+
Requires-Dist: abstractcore[audio,media,openai,vision,voice]>=2.13.15; extra == 'multimodal'
|
|
43
43
|
Provides-Extra: test
|
|
44
44
|
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
45
45
|
Description-Content-Type: text/markdown
|
|
@@ -115,6 +115,21 @@ Notes:
|
|
|
115
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
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.
|
|
117
117
|
|
|
118
|
+
## Runtime grounding
|
|
119
|
+
|
|
120
|
+
AbstractRuntime records per-call grounding as structured response metadata under `metadata.runtime_grounding`. The current fields include local datetime, timezone when detectable, country, source, whether prompt injection occurred, and an optional user identity when supplied by trace metadata or local environment.
|
|
121
|
+
|
|
122
|
+
For text/chat LLM calls only, the same grounding is rendered into the current user turn as a tagged runtime envelope:
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
<runtime_metadata>{"country":"FR","local_datetime":"2026-05-13T18:00:00+02:00"}</runtime_metadata>
|
|
126
|
+
hello
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
This makes time/location/user context visible to the LLM without mutating the durable human message into a natural-language prefix. If a model echoes the runtime-owned envelope, AbstractRuntime removes that envelope from user-facing response text while preserving `metadata.runtime_grounding` for audit.
|
|
130
|
+
|
|
131
|
+
Direct media requests, including image generation, TTS, and transcription, do not receive prompt-injected grounding. They still receive trace headers/tags for observability and artifact ownership, but TTS `input` and image prompts remain the literal text supplied by the workflow.
|
|
132
|
+
|
|
118
133
|
## Multimodal generation
|
|
119
134
|
|
|
120
135
|
AbstractRuntime forwards AbstractCore's unified `generate(..., output=...)` selector and normalizes multimodal responses into JSON-safe, artifact-backed results.
|
|
@@ -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.12"
|
|
8
8
|
description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -46,34 +46,34 @@ dependencies = [
|
|
|
46
46
|
[project.optional-dependencies]
|
|
47
47
|
# Enables `abstractruntime.integrations.abstractcore.*` imports.
|
|
48
48
|
abstractcore = [
|
|
49
|
-
"abstractcore>=2.13.
|
|
49
|
+
"abstractcore>=2.13.15",
|
|
50
50
|
]
|
|
51
51
|
|
|
52
52
|
apple = [
|
|
53
|
-
"abstractcore[apple]>=2.13.
|
|
53
|
+
"abstractcore[apple]>=2.13.15",
|
|
54
54
|
]
|
|
55
55
|
|
|
56
56
|
gpu = [
|
|
57
|
-
"abstractcore[gpu]>=2.13.
|
|
57
|
+
"abstractcore[gpu]>=2.13.15",
|
|
58
58
|
]
|
|
59
59
|
|
|
60
60
|
all-apple = [
|
|
61
|
-
"abstractcore[all-apple]>=2.13.
|
|
61
|
+
"abstractcore[all-apple]>=2.13.15",
|
|
62
62
|
]
|
|
63
63
|
|
|
64
64
|
all-gpu = [
|
|
65
|
-
"abstractcore[all-gpu]>=2.13.
|
|
65
|
+
"abstractcore[all-gpu]>=2.13.15",
|
|
66
66
|
]
|
|
67
67
|
|
|
68
68
|
# Enables AbstractCore multimodal generation helpers with common OpenAI-backed
|
|
69
69
|
# image/voice capability packages.
|
|
70
70
|
multimodal = [
|
|
71
|
-
"abstractcore[media,openai,vision,voice,audio]>=2.13.
|
|
71
|
+
"abstractcore[media,openai,vision,voice,audio]>=2.13.15",
|
|
72
72
|
]
|
|
73
73
|
|
|
74
74
|
# Enables `abstractruntime-mcp-worker` with the default toolsets (includes bs4/lxml).
|
|
75
75
|
mcp-worker = [
|
|
76
|
-
"abstractcore[tools]>=2.13.
|
|
76
|
+
"abstractcore[tools]>=2.13.15",
|
|
77
77
|
]
|
|
78
78
|
|
|
79
79
|
# CI/test dependencies. The workflow runs the basic contract suite plus focused
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
### Fixed
|
|
2
|
+
- Remote AbstractCore transcription now uses provider-scoped audio routes such as `/{provider}/v1/audio/transcriptions` when an STT provider is selected.
|
|
3
|
+
- VisualFlow generated media nodes now keep LLM `provider`/`model` routing separate from image, TTS, and STT provider/model pins.
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
- Minimum AbstractCore optional dependency floor is now `abstractcore>=2.13.15`.
|
|
@@ -291,12 +291,30 @@ def _maybe_inject_llm_call_grounding_for_ledger(*, effect: Effect) -> Effect:
|
|
|
291
291
|
prompt_str = str(prompt or "")
|
|
292
292
|
messages_list = messages if isinstance(messages, list) else None
|
|
293
293
|
|
|
294
|
+
output_request = payload.get("output")
|
|
295
|
+
if output_request is None:
|
|
296
|
+
output_request = payload.get("outputs")
|
|
297
|
+
|
|
294
298
|
try:
|
|
295
|
-
from abstractruntime.integrations.abstractcore.llm_client import
|
|
299
|
+
from abstractruntime.integrations.abstractcore.llm_client import (
|
|
300
|
+
_mark_grounding_prompt_injected,
|
|
301
|
+
_normalize_turn_grounding,
|
|
302
|
+
_output_request_has_non_text_result,
|
|
303
|
+
_runtime_grounding_metadata,
|
|
304
|
+
)
|
|
296
305
|
except Exception:
|
|
297
306
|
return effect
|
|
298
307
|
|
|
299
|
-
|
|
308
|
+
skip_turn_grounding = _output_request_has_non_text_result(output_request)
|
|
309
|
+
grounding = None
|
|
310
|
+
if not skip_turn_grounding:
|
|
311
|
+
grounding = _mark_grounding_prompt_injected(_runtime_grounding_metadata(), True)
|
|
312
|
+
|
|
313
|
+
updated_prompt, updated_messages = _normalize_turn_grounding(
|
|
314
|
+
prompt=prompt_str,
|
|
315
|
+
messages=messages_list,
|
|
316
|
+
grounding=grounding,
|
|
317
|
+
)
|
|
300
318
|
|
|
301
319
|
changed = False
|
|
302
320
|
if updated_prompt != prompt_str:
|