AbstractRuntime 0.16.0__tar.gz → 0.17.0__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.16.0 → abstractruntime-0.17.0}/CHANGELOG.md +49 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/PKG-INFO +23 -7
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/README.md +19 -3
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +1 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/api.md +5 -3
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/architecture.md +6 -0
- abstractruntime-0.17.0/docs/backlog/proposed/0865_model_loaded_ledger_event.md +27 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/getting-started.md +1 -1
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/integrations/abstractcore.md +2 -2
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/replay.md +5 -2
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/troubleshooting.md +16 -1
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/workflow-bundles.md +12 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/llms-full.txt +66 -12
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/llms.txt +2 -2
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/pyproject.toml +5 -4
- abstractruntime-0.17.0/release-notes.md +46 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/scripts/changelog.py +63 -1
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/skills/abstractruntime/SKILL.md +8 -2
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/__init__.py +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/attention.py +11 -1
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/effect_cancellation.py +15 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/live_deltas.py +1 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/runtime.py +19 -1
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +18 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +1 -1
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +4 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +2 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +1 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +1 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/view.py +8 -1
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +101 -27
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +7 -1
- abstractruntime-0.17.0/tests/fixtures/visualflow/compare_text_operands.json +38 -0
- abstractruntime-0.17.0/tests/fixtures/visualflow/typed_literals_flow.json +223 -0
- abstractruntime-0.17.0/tests/fixtures/visualflow/typed_literals_flow.legacy.json +219 -0
- abstractruntime-0.17.0/tests/test_automation_occurrence_error.py +41 -0
- abstractruntime-0.17.0/tests/test_changelog_fragments.py +158 -0
- abstractruntime-0.17.0/tests/test_discovery_facade_model_errors.py +24 -0
- abstractruntime-0.17.0/tests/test_effect_interrupted.py +144 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_packaging_extras.py +3 -3
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_public_updates.py +8 -0
- abstractruntime-0.17.0/tests/test_visual_compare_typed_values.py +117 -0
- abstractruntime-0.16.0/release-notes.md +0 -76
- abstractruntime-0.16.0/tests/test_changelog_fragments.py +0 -78
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/.github/workflows/changelog.yml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/.gitignore +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/LICENSE +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/ROADMAP.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/SECURITY.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/changelog.d/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0010_one_replay_many_views.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/artifacts.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/automations.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0864_facade_catalog_hub_search_pages.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0854_replay_view.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0866_queued_state_in_the_ledger_and_pools_lend_never_build.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/email.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/entity-runtime.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/evidence.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/faq.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/integrations/abstractmemory.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/limits.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/manual_testing.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/proposal.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/provenance.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/snapshots.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/tool-approval.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/tools-comms.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/05_persistence.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/mkdocs.yml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/pytest.ini +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/scripts/backfill_diary_edges.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/scripts/generate_llms_full.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/scripts/regen_replay_conformance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automation_queries.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/adapters.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/commands.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/consumers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/controller.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/ledger.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/models.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/samples.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/service.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/wakes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/conversation_search.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/health.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/progress_channel.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/publish.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/questions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/run_attribution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/run_identity.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/run_origin.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/step_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/tool_scope.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/documents/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/documents/charts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/documents/docx.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/documents/pdf.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/actions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/automations.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/binding.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/feeder.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/frame.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/inbox.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/act_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/chat.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/communities.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/diary.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/digest.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/lease.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/life.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/memory_reader.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/night_voice.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/phase_graph.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/phase_spec.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/prelude.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/reflection.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/substrate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/tool_effects.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/visit_workflow.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/structured_output.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/mail_verbs.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/delta.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/executions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/multi_store.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/session_history.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/session_turns.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/change_ring.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/lease.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/serialize.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/session_tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/connection_events.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/connections.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/email_received.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/event_frame.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/feed.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/manual.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/protocol.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/schedule.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/webhook.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/turn_grounding.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/utils/atomic_files.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/README.md +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/automation_harness.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/conftest.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/email_wp2_support.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/atom.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss1.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss2.xml +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/live_email/conftest.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/live_email/live_email_support.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/live_email/test_email_live_runtime.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/media_endpoint_profile_probe.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_server_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_structured_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_active_consumers_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_active_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_agora_agent_alias_identity.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_agora_tools_http.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_artifact_session_candidates.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_calendar_schedule.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_commands.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_controller.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_controller_recovery.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_definition.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_discussion_isolation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_email_results.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_growing_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_list_reads.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_named_policy_compiler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_next_fire.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_occurrence_recovery.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_replay_read_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_retry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_session_turns.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_status.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_tool_approval.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_browser_probe_target_walling.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_capability_default_reasoning.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_code_node_imports.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_code_node_restricted_python.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_command_sandbox_host_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_command_store.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_compaction_summarizer_route.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_config_facade_model_contexts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_config_facade_models_engines.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_config_facade_voice_input_hint.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_controller_bundle_packaged.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_conversation_search.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_conversational_questions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_crash_ordering_inversions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_create_if_absent.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_data_registry_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_decision_facade_and_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_decision_output.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_model_warmup_switch.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_camera_gating.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_web.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_diary_capture.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_diary_write_rescue.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_directory_lease.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_disabled_toolsets_seam.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_discussion_session_anchor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_document_markdown_tables.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_document_renderers_hr_quote.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_durable_write_discipline.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_effect_cancellation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_effect_issuance_idempotency.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_election_consequence_teaching.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_binding_and_refiner.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_feeder_batched.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_feeder_flags.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_gate_fixes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_inbox_and_trigger.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_received_mailbox_id.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_regate_fixes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_review_fixes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_self_trigger_loop.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_stream_consumers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_toolset_and_walls.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_emergence_experiment.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_emit_event_uses_wait_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_endpoint_profile_route_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_awake_memory_fixes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_brain_effects.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_chat_driver.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_chat_tools_reflection.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_diary.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_execute_tool.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_fetch_url_tool.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_history_window.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_life_loop.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_memory_richness.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_phase_graph_conformance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_react_visit_window.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_recent_memories.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_runtime.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_search_memory.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_substrate_resolution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_visit_honesty.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_workspace_cap.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_workspace_tools.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_event_index_cross_process.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_event_wait_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_execute_command_output_offload.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_execution_capability_discovery.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_explicit_eject_other_clients.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_factory_default_retry_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_format_repair_nudge.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_fresh_install_no_provider.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_gateway_facades_c4899.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_git_read_only_refiner.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_hf_process_residency_merge.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_history_window_multimodal.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_hot_path_store_reads.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_indexed_idempotency_lookup.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_file_run_store_change_token_after_build.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_file_run_store_index_build_race.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_run_cache_bound.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_store_scan_memo.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_jsonl_row_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_cursor_invariants.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_get_record.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_record_slimming.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_live_token_deltas.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_prefix_stability_contract.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_text_phase_progress.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_client_grounding_tail.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_retry_classification.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_streaming_on_token.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_local_helper_tool_exposure.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_local_residency_host_sweep.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mail_verbs.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mailbox_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_max_iterations_ceiling.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_capability_default_routing.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_host_endpoint_resolver.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_subprocess.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_appraise_handler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_communities.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_revise.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_seam_handlers.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_step_provenance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mlx_process_residency_merge.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_eject_cancel.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_residency_clean_switch.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_residency_release_and_readable_holders.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_multi_store_scheduler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_native_mlx_application_wiring.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_native_tool_channel.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_night_voice.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_occurrence_named_inputs.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_occurrence_samples.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_offload_answer_chain_c4978.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_offloading.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_pdf_unicode_rendering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_personal_cycle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_phantom_attachment_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_phase_graph_artifact_control.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_phase_graph_obedience.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_phase_vocabulary_migration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_overlay.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_provider_pin_routing_isolation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_public_action_approval_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_publish_event.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_r12_workspace_sandbox.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_read_idle_threading.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_readoption_experiment.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_realize_election.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_remote_client_cancel.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_remote_speculation_defaults.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_conformance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_conformance_package.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_cursor_token.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_delta_cost.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_invariants.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_review_findings.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_report_branding.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_residency_fit_refusal_broadcast.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_resident_media_generation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_resume_concurrent_same_wait.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_index_workspace_root.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_mutation_lock.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_origin.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_scoped_tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_store_change_token.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_tool_scope_ceiling.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_browser_session_boundary.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_tick_step_gate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_schedule_run.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_schedule_v1_corpus.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_schedule_v2_calendar.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_send_email_refiner.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_send_email_self_default_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_history.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_prompt_cache_attribution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_prompt_cache_visibility.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_route_stamp.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_start_cost.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_tool_policy.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_shell_tool_exposure.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_speculation_inheritance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_steer_sidecar.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_step_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_streamed_voice_namespace.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_structured_schema_execution_client.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_thinking_inheritance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_catalog.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_descriptor_registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_inventory_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_invoke_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_policy_and_mounts.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_topic_election_world_model.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_cloudevents.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_connection_listening.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_connections.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_feed.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_schedule_math.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_webhook.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trusted_run_index.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_turn_grounding_byte_stability.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_ab_fixture.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_live_guidance.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_midturn_elections.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_midturn_resume.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_workflow.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_entity_memory_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_llm_call_partial_override.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_reroute_lowering.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_set_vars_pins.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_agora_react_agent.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_continue_on_error.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_function_library.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_get_var_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_pin_expressions.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_schema_enum_switch.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_voice_library_facade.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_voice_openai_api_key_path.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_voice_projection_contract.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_w4_feelings_lens.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_wait_event_deadline.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_wait_until_streak.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_wait_until_utc_normalization.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_builtin_deny.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_prompt_context.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_read_only.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_writable_paths.py +0 -0
- {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_write_chart.py +0 -0
|
@@ -10,6 +10,55 @@ Unreleased changes live in [`changelog.d/`](changelog.d/README.md), one file per
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.17.0] - 2026-11-03
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **`EffectInterrupted`: a host stop interrupts an effect, it never fails it** (`core/effect_cancellation.py`,
|
|
18
|
+
exported as `abstractruntime.EffectInterrupted`; gateway backlog 1103). A host that stops on purpose (a gateway stop
|
|
19
|
+
or restart, a model-host restart for an update) raises it into the effect in flight. The runtime writes no terminal
|
|
20
|
+
record and re-raises: the ledger tail stays STARTED, the run stays RUNNING at its last durable step, and the next
|
|
21
|
+
tick (after the host is back) sends the effect again under the same idempotency key as attempt 1, so no retry is
|
|
22
|
+
consumed and nothing reaches an automation's outcome. A BaseException like `EffectKilled`, so no `except Exception`
|
|
23
|
+
on the way turns it into a failure. The interrupted call's live text ends `cancelled` with `detail: "interrupted"`.
|
|
24
|
+
- **Public updates carry their type in replay** (`replay/view.py`). A `public_update` message has
|
|
25
|
+
`update_kind`: `"finding"` when the actor typed the event `kind: "finding"` (a fact or piece of
|
|
26
|
+
evidence it established), otherwise `"progress"` (what it is doing), including events written
|
|
27
|
+
before the field existed. Clients use it as given, for example to list the findings of a
|
|
28
|
+
conversation. See [docs/replay.md](docs/replay.md#public-conversation-messages).
|
|
29
|
+
- **Hosts tell model errors apart through the discovery facade** (`integrations/abstractcore/discovery_facade.py`):
|
|
30
|
+
`ModelNotDownloadedError` and `ModelNotFoundError` are AbstractCore's own classes, so a host (the gateway's
|
|
31
|
+
"model not downloaded" sentence) catches exactly what Core raises and reads `model` / `provider` without importing
|
|
32
|
+
AbstractCore.
|
|
33
|
+
- **Replayed tool calls keep the model's call id** (`replay/view.py`). An `activities[].tool_calls[]`
|
|
34
|
+
row keyed by a runtime call id (`id`) also carries `call_id`, the model's own id, which is what a
|
|
35
|
+
public update's `source_call_ids` cite; a client can now resolve a finding to the results it cites.
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- **Compare reads text next to a number or true/false exactly** (`visual/builtins.py` `_exact_from_text`, ADR 0049 as
|
|
40
|
+
amended 2026-11-03: "we must have automatic conversion"). When one side is a number or true/false and the other is
|
|
41
|
+
text, the text is read as that type by the Flow editor's literal grammar (a decimal number, ASCII, no `_`, finite,
|
|
42
|
+
a whole number kept exact beyond 2**53; or `true`/`false` in any case), so `5 == "5"` and `"9" < 10` are true. This
|
|
43
|
+
covers flows saved by AbstractFlow 0.13.0 (a typed value stored as text next to a wired number) and text arriving at
|
|
44
|
+
run time from a form, an API input or a model, with no re-save. `"1_000"`, `"0x10"`, `"inf"`, `"nan"`, full-width
|
|
45
|
+
digits and empty text are refused. Text against text is never converted (`"10" > "9"` compares text). The table is
|
|
46
|
+
`tests/fixtures/visualflow/compare_text_operands.json`.
|
|
47
|
+
- **Compare refuses values it cannot compare instead of answering False** (`visual/builtins.py` `control_compare`,
|
|
48
|
+
ADR 0049). Text that is not a number next to a number, or not `true`/`false` next to true/false (`5 == "five"`,
|
|
49
|
+
every operator; text that is a number or true/false is read as one, see "Compare reads text next to a number or true/false exactly" above), and `<`/`<=`/`>`/`>=` between values Python cannot order
|
|
50
|
+
(`None > 3`, a list and a number), now fail the step with an error naming the node and pins: "Compare 'Is five'
|
|
51
|
+
(node same) ==: b is text ('five'), not a number; a is a number (5)." Before, these answered False silently.
|
|
52
|
+
Equality of same-type values and Python's equality across other types (`None == 5`) are unchanged; true/false
|
|
53
|
+
compares with numbers as Python's booleans do (`True == 1`).
|
|
54
|
+
- **AbstractCore floor 2.33.0** in the base install and the `apple` and `gpu` extras (was 2.32.0).
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- **An automation occurrence whose agent completed with `success: false` names the agent's reason**
|
|
59
|
+
(`automations/attention.py`). The attention item and the `automation_failed` email said "completed" (the run's status
|
|
60
|
+
word); the reason is now read from the Agent node's `meta.error`, and when there is none it says so plainly.
|
|
61
|
+
|
|
13
62
|
## [0.16.0] - 2026-11-02
|
|
14
63
|
|
|
15
64
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.17.0
|
|
4
4
|
Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
|
|
5
5
|
Project-URL: AbstractCore (website), https://www.abstractcore.ai/
|
|
6
6
|
Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
|
|
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
|
-
Requires-Dist: abstractcore>=2.
|
|
23
|
+
Requires-Dist: abstractcore>=2.33.0
|
|
24
24
|
Requires-Dist: abstractmemory>=0.4.0
|
|
25
25
|
Requires-Dist: abstractsemantics>=0.0.5
|
|
26
26
|
Requires-Dist: anyio<5.0.0,>=4.12.1
|
|
@@ -35,14 +35,14 @@ Requires-Dist: reportlab<5.0.0,>=4.0.0
|
|
|
35
35
|
Requires-Dist: restrictedpython>=7.0
|
|
36
36
|
Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
|
|
37
37
|
Provides-Extra: apple
|
|
38
|
-
Requires-Dist: abstractcore[apple]>=2.
|
|
38
|
+
Requires-Dist: abstractcore[apple]>=2.33.0; extra == 'apple'
|
|
39
39
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
|
|
40
40
|
Provides-Extra: docs
|
|
41
41
|
Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
|
|
42
42
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
43
43
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
44
44
|
Provides-Extra: gpu
|
|
45
|
-
Requires-Dist: abstractcore[gpu]>=2.
|
|
45
|
+
Requires-Dist: abstractcore[gpu]>=2.33.0; extra == 'gpu'
|
|
46
46
|
Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
|
|
47
47
|
Provides-Extra: test
|
|
48
48
|
Requires-Dist: aiosmtpd<2.0.0,>=1.4.4; extra == 'test'
|
|
@@ -55,16 +55,32 @@ Description-Content-Type: text/markdown
|
|
|
55
55
|
|
|
56
56
|
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.
|
|
57
57
|
|
|
58
|
-
**Version:** 0.
|
|
58
|
+
**Version:** 0.17.0 • **Python:** 3.10+
|
|
59
59
|
|
|
60
60
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
61
61
|
|
|
62
|
+
## What's new in 0.17.0
|
|
63
|
+
|
|
64
|
+
- **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
|
|
65
|
+
the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
|
|
66
|
+
the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
|
|
67
|
+
- **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
|
|
68
|
+
piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
|
|
69
|
+
findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
|
|
70
|
+
- **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
|
|
71
|
+
a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
|
|
72
|
+
- **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
|
|
73
|
+
cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
|
|
74
|
+
text against text is never converted.
|
|
75
|
+
- **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
|
|
76
|
+
the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
|
|
77
|
+
|
|
62
78
|
## What's new in 0.16.0
|
|
63
79
|
|
|
64
80
|
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
65
81
|
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
66
82
|
durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
|
|
67
|
-
2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
83
|
+
2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
68
84
|
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
69
85
|
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
70
86
|
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
@@ -145,7 +161,7 @@ Remote-light runtime:
|
|
|
145
161
|
pip install abstractruntime
|
|
146
162
|
```
|
|
147
163
|
|
|
148
|
-
The base install includes AbstractCore 2.
|
|
164
|
+
The base install includes AbstractCore 2.33.0 or newer (its light install:
|
|
149
165
|
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
150
166
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
151
167
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -4,16 +4,32 @@
|
|
|
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.
|
|
7
|
+
**Version:** 0.17.0 • **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
|
|
|
11
|
+
## What's new in 0.17.0
|
|
12
|
+
|
|
13
|
+
- **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
|
|
14
|
+
the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
|
|
15
|
+
the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
|
|
16
|
+
- **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
|
|
17
|
+
piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
|
|
18
|
+
findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
|
|
19
|
+
- **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
|
|
20
|
+
a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
|
|
21
|
+
- **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
|
|
22
|
+
cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
|
|
23
|
+
text against text is never converted.
|
|
24
|
+
- **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
|
|
25
|
+
the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
|
|
26
|
+
|
|
11
27
|
## What's new in 0.16.0
|
|
12
28
|
|
|
13
29
|
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
14
30
|
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
15
31
|
durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
|
|
16
|
-
2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
32
|
+
2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
17
33
|
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
18
34
|
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
19
35
|
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
@@ -94,7 +110,7 @@ Remote-light runtime:
|
|
|
94
110
|
pip install abstractruntime
|
|
95
111
|
```
|
|
96
112
|
|
|
97
|
-
The base install includes AbstractCore 2.
|
|
113
|
+
The base install includes AbstractCore 2.33.0 or newer (its light install:
|
|
98
114
|
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
99
115
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
100
116
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -30,6 +30,7 @@ effect payloads, client construction arguments, or Runtime-owned environment var
|
|
|
30
30
|
- Thin-mode clients can run the workflow logic while delegating inference to a server.
|
|
31
31
|
- Remote mode supports AbstractCore per-request `base_url` routing (dynamic endpoint selection).
|
|
32
32
|
- Tool execution can be gated by trust/sandbox policy outside the router.
|
|
33
|
+
- In every mode, a host stop interrupts an effect (`EffectInterrupted`: no terminal record, re-issued on the next tick); only a failure the effect itself met is recorded as failed.
|
|
33
34
|
|
|
34
35
|
### See Also
|
|
35
36
|
- Implementation: [`backlog/completed/005_abstractcore_integration.md`](../backlog/completed/005_abstractcore_integration.md)
|
|
@@ -139,8 +139,9 @@ tool-approval waits retain their own contracts.
|
|
|
139
139
|
An opt-in actor may inherit `_runtime.conversation: {enabled: true}` through native child
|
|
140
140
|
workflows and VisualFlow Agent nodes. This flag does not create an extra inference call.
|
|
141
141
|
Public updates enter replay only through an explicit completed `EMIT_EVENT` named
|
|
142
|
-
`public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration
|
|
143
|
-
`source_call_ids
|
|
142
|
+
`public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration`,
|
|
143
|
+
`source_call_ids` and optional `kind` (`"progress"` or `"finding"`, replayed as the message's
|
|
144
|
+
`update_kind`). The event's owner must match `run_id`; private diary/thinking fences are
|
|
144
145
|
excluded. See [replay.md](replay.md#public-conversation-messages).
|
|
145
146
|
|
|
146
147
|
Actors may attach `public_action` to a proposed `TOOL_CALLS` payload with `text`,
|
|
@@ -458,13 +459,14 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
|
|
|
458
459
|
|
|
459
460
|
### AbstractCore (LLM + tools)
|
|
460
461
|
|
|
461
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.
|
|
462
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.33.0 or newer is part of the base install).
|
|
462
463
|
|
|
463
464
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
464
465
|
|
|
465
466
|
Entry points:
|
|
466
467
|
- `create_local_runtime(...)`, `create_remote_runtime(...)`, `create_hybrid_runtime(...)` (`src/abstractruntime/integrations/abstractcore/factory.py`)
|
|
467
468
|
- public discovery facade: `AbstractCoreDiscoveryFacade`, `get_abstractcore_discovery_facade(...)` (`src/abstractruntime/integrations/abstractcore/discovery_facade.py`)
|
|
469
|
+
- model errors a host tells apart, AbstractCore's own classes: `from abstractruntime.integrations.abstractcore.discovery_facade import ModelNotDownloadedError, ModelNotFoundError` (`ModelNotDownloadedError` is a `ModelNotFoundError` whose `model` and `provider` name what to download); a host never imports `abstractcore` for them
|
|
468
470
|
- public host facade: `AbstractCoreHostFacade`, `get_abstractcore_host_facade(...)` (`src/abstractruntime/integrations/abstractcore/host_facade.py`)
|
|
469
471
|
- public voice library facade: `AbstractCoreVoiceFacade`, `get_abstractcore_voice_facade(...)`, `VoiceLibraryError` (`src/abstractruntime/integrations/abstractcore/voice_facade.py`): languages, cloned voices (list by language, read, rename or replace the transcript, delete), cloning from a recording, voice design, the capability catalog; local in process, remote over the AbstractCore server's `/v1` voice routes (see [Voice library](integrations/abstractcore.md#voice-library))
|
|
470
472
|
- email facade: `email_facade` (AbstractCore's mail library for hosts; see [Email](#email))
|
|
@@ -259,6 +259,12 @@ ONE ordering law ([backlog 0045](backlog/planned/runtime_systemic_reliability/00
|
|
|
259
259
|
completion/resume path increments `RuntimeHealth` (`record_error`) and
|
|
260
260
|
logs a warning. Best-effort observability records (progress events,
|
|
261
261
|
status events) may stay quiet; records that replay depends on may not.
|
|
262
|
+
4. **A requested host stop is a crash the host announces: identical replay, no terminal record.**
|
|
263
|
+
A host that stops on purpose (a gateway stop or restart, a model-host restart for an update)
|
|
264
|
+
raises `EffectInterrupted` (`core/effect_cancellation.py`) into the effect in flight. The
|
|
265
|
+
runtime appends nothing terminal and re-raises; the run stays RUNNING, and the next tick sends
|
|
266
|
+
the effect again under the same idempotency key as attempt 1 (no retry consumed). Only a
|
|
267
|
+
failure the effect itself met is recorded as failed.
|
|
262
268
|
|
|
263
269
|
Kill-and-replay coverage for this law lives in the crash harness
|
|
264
270
|
(`tests/harness.py`, backlog 0045): for every persistence point, kill →
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 0865 — A `model_loaded` ledger event with the reserved context
|
|
2
|
+
|
|
3
|
+
> Package: AbstractRuntime (with AbstractCore residency claims)
|
|
4
|
+
> Type: task
|
|
5
|
+
> Created: 2026-10-29
|
|
6
|
+
> Priority: normal
|
|
7
|
+
> Labels: residency, ledger, observability
|
|
8
|
+
|
|
9
|
+
## Summary
|
|
10
|
+
|
|
11
|
+
Operator ruling (2026-10-29): when a model loads it reserves the maximum context that fits (AbstractCore ADR 0010
|
|
12
|
+
point 8), and "never silently: the choice is written to the ledger (a model_loaded event with model, advertised context,
|
|
13
|
+
reserved context, free memory, buffer, reason) and to the log". AbstractCore already logs it and carries it on the
|
|
14
|
+
provider's residency claim (`context_reservation`: advertised, reserved, free_bytes, buffer, reason). The ledger event
|
|
15
|
+
is not written yet: a load happens inside a client build, outside any run's effect, so there is no step record to
|
|
16
|
+
attach it to.
|
|
17
|
+
|
|
18
|
+
## Scope
|
|
19
|
+
|
|
20
|
+
- When a pooled client is built for a local model (`MultiLocalAbstractCoreLLMClient._get_client`), read the provider's
|
|
21
|
+
`context_reservation` and append one `model_loaded` record to the ledger of the run that triggered the build (or a
|
|
22
|
+
host-level ledger when no run did), with model, advertised context, reserved context, free memory, buffer, reason.
|
|
23
|
+
- The replay view and Observer show it as one readable line.
|
|
24
|
+
|
|
25
|
+
## Acceptance criteria
|
|
26
|
+
|
|
27
|
+
- A chat that loads the default model leaves one `model_loaded` record with the numbers; a test is red without it.
|
|
@@ -12,7 +12,7 @@ Remote-light runtime:
|
|
|
12
12
|
pip install abstractruntime
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
This installs AbstractCore 2.
|
|
15
|
+
This installs AbstractCore 2.33.0 or newer with remote provider, vision,
|
|
16
16
|
voice, audio, music, decision, tool, and MCP-worker support. The base install is
|
|
17
17
|
remote-light: it can route multimodal workflows to hosted or OpenAI-compatible
|
|
18
18
|
endpoints, but it does not select local inferencer stacks such as MLX, vLLM,
|
|
@@ -16,7 +16,7 @@ Implementation pointers (this repo):
|
|
|
16
16
|
pip install abstractruntime
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
The base install includes AbstractCore 2.
|
|
19
|
+
The base install includes AbstractCore 2.33.0 or newer. That is the supported baseline for the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
|
|
20
20
|
|
|
21
21
|
The base install also includes the remote-light media/capability plugins needed
|
|
22
22
|
for AbstractCore's multimodal `generate(..., output=...)` path. Local
|
|
@@ -486,7 +486,7 @@ When both hold, every `LLM_CALL` of the run streams from the provider and the ru
|
|
|
486
486
|
- `call_id` is the `step_id` of the `LLM_CALL` ledger record that later holds the final answer, so a client can replace its live text with the durable result.
|
|
487
487
|
- `seq` counts the events of one call from 0, `llm.delta_end` included.
|
|
488
488
|
- `channel` is `content` (the answer) or `reasoning` (the model's thinking). Reasoning arrives from the provider's reasoning stream, and inline `<think>…</think>` markup is split out of the content live, so clients can hide or fold it. The markup itself is never sent.
|
|
489
|
-
- `reason` is `completed`, `failed`, `cancelled` or `unavailable`. Every live fragment of a call is sent before the call's durable record is written (the last batch is flushed first, and later fragments are dropped); every call then ends with exactly one `llm.delta_end`, sent after that record is in the ledger. Each retry attempt is its own call with its own `call_id`; so is the rare re-run of an attempt interrupted by a stray kill (`<step_id>:reinvoke`), whose interrupted first run ends `cancelled` with `detail: "reinvoked"` (the run goes on; a client can say "reply restarted" rather than "stopped").
|
|
489
|
+
- `reason` is `completed`, `failed`, `cancelled` or `unavailable`. Every live fragment of a call is sent before the call's durable record is written (the last batch is flushed first, and later fragments are dropped); every call then ends with exactly one `llm.delta_end`, sent after that record is in the ledger. Each retry attempt is its own call with its own `call_id`; so is the rare re-run of an attempt interrupted by a stray kill (`<step_id>:reinvoke`), whose interrupted first run ends `cancelled` with `detail: "reinvoked"` (the run goes on; a client can say "reply restarted" rather than "stopped"). A call interrupted because its host stopped on purpose (`EffectInterrupted`) ends `cancelled` with `detail: "interrupted"`: the run is suspended, not stopped, and the call is sent again when the host is back.
|
|
490
490
|
- Tool-call markup a local model writes as text (`<tool_call>`, `<|tool_call|>`, `<function_call>`, …) never reaches the live text. AbstractCore already removes it from streamed content; the runtime also stops the live content of a call at the first such marker. The final record carries the tool calls.
|
|
491
491
|
- Harmony transcripts (gpt-oss) are split live: the `final` channel streams as content, `analysis` as reasoning, and a tool call (`commentary to=functions.…`) is held back. The framing tokens are never sent.
|
|
492
492
|
- Text is coalesced: the first fragment is sent immediately, later fragments are grouped over about 40 ms.
|
|
@@ -25,7 +25,10 @@ client_copy = apply_delta(doc, delta) # == view.to_json()
|
|
|
25
25
|
|
|
26
26
|
Explicit completed `public_update` events become assistant messages with
|
|
27
27
|
`kind: "public_update"`, stable run-scoped `id`, `text`, `run_id`, optional `session_id`,
|
|
28
|
-
`iteration`, `source_call_ids`, and normal ledger provenance.
|
|
28
|
+
`iteration`, `source_call_ids`, `update_kind`, and normal ledger provenance. `update_kind` is
|
|
29
|
+
the producer's type for the update: `"finding"` (a fact or piece of evidence the actor
|
|
30
|
+
established) or `"progress"` (what it is doing); an event without a `kind` of `"finding"`
|
|
31
|
+
replays as `"progress"`. Replay copies the type and never infers it from the text. Replay does not turn reasoning,
|
|
29
32
|
raw tool output or a marker inside model text into public speech. Diary/thinking fences
|
|
30
33
|
are excluded. These are actor-authored updates; their wording alone is not proof of a fact
|
|
31
34
|
or of completed work.
|
|
@@ -102,7 +105,7 @@ Each rule below was once a divergence between clients:
|
|
|
102
105
|
| `interaction` | the person-facing wait, or `null`: `kind` (`tool_approval`, `ask_user`, `event`), `run_id`, `wait_key`, `step_id`, `seq`, `prompt`, `choices`, `allow_free_text`, `details`, `tool_calls` (resolved), `activity_id`, `answer_payload`, and `command` (the resume a client sends to answer it) |
|
|
103
106
|
| `open_waits[]` | every open wait of the tree, with `person_facing` |
|
|
104
107
|
| `messages[]` | verbatim turns: `role`, `kind` (`prompt`, `answer`, `question`, `final`, `event`), `text`, provenance (`run_id`, `step_ids`, `seqs`, `artifact_ids`, `source`) |
|
|
105
|
-
| `activities[]` | one per execution: `kind`, `name`, `status`, `node_id`, `execution_id`, `seqs`, `step_ids`, `tool_calls[]` (each call's status, output, error), `wait` (`kind`, `wait_key`, `ended_by`: `resume`, `later_step`, `terminal`), `usage`, `child_run_id`, `progress` |
|
|
108
|
+
| `activities[]` | one per execution: `kind`, `name`, `status`, `node_id`, `execution_id`, `seqs`, `step_ids`, `tool_calls[]` (each call's `id`, status, output, error, and `call_id`, the model's own call id, when `id` is a runtime call id; public updates cite `call_id`), `wait` (`kind`, `wait_key`, `ended_by`: `resume`, `later_step`, `terminal`), `usage`, `child_run_id`, `progress` |
|
|
106
109
|
| `artifacts[]` | every `{"$artifact": id}` reference, with the run, step, seq and JSON path that produced it |
|
|
107
110
|
| `usage` | tokens and LLM calls summed over the tree |
|
|
108
111
|
| `warnings[]` | what the view could not show (records before a window, an unresolved `$slim`) |
|
|
@@ -20,7 +20,7 @@ Fix:
|
|
|
20
20
|
- Install or upgrade the base Runtime package. LLM/tools integration, common
|
|
21
21
|
remote-light multimodal dependencies, and the MCP worker entry point are part
|
|
22
22
|
of the base install.
|
|
23
|
-
- The current AbstractCore integration expects `abstractcore>=2.
|
|
23
|
+
- The current AbstractCore integration expects `abstractcore>=2.33.0`.
|
|
24
24
|
|
|
25
25
|
Verify:
|
|
26
26
|
|
|
@@ -383,6 +383,21 @@ Cause and fix:
|
|
|
383
383
|
|
|
384
384
|
See [automations.md, `feed.item@1`](automations.md#feeditem1).
|
|
385
385
|
|
|
386
|
+
## A Compare step fails with "is text (...), not a number"
|
|
387
|
+
|
|
388
|
+
Symptom:
|
|
389
|
+
- A run stops at a Compare node: "Compare 'Is five' (node same) ==: b is text ('five'), not a number; a is a number
|
|
390
|
+
(5)."
|
|
391
|
+
|
|
392
|
+
Cause and fix:
|
|
393
|
+
- One side is a number (or true/false) and the other is text that is not one. Compare reads text next to a number as
|
|
394
|
+
that number (`"5"`, `" 5 "`, `"-2.5"`, `"1e3"`) and text next to true/false as `true` or `false` (any case), so
|
|
395
|
+
`5 == "5"` is true. Anything else is refused: words (`"five"`), `"1_000"`, `"0x10"`, `"inf"`, `"nan"`, full-width
|
|
396
|
+
digits, and empty text. Give that input a number (or true/false), or, if both sides are meant to be text, wire them
|
|
397
|
+
so both carry text. See [Pin defaults are typed values](workflow-bundles.md#pin-defaults-are-typed-values).
|
|
398
|
+
- An error ending in "these cannot be ordered" means `<`, `<=`, `>` or `>=` met values Python cannot order, often an
|
|
399
|
+
unset value (`None`): give the input a value, or compare with `==`.
|
|
400
|
+
|
|
386
401
|
## MCP worker command is not found
|
|
387
402
|
|
|
388
403
|
Symptom:
|
|
@@ -100,6 +100,18 @@ Authoring guidance:
|
|
|
100
100
|
- keep route keys unique per target node
|
|
101
101
|
- use one normal data edge or `pinDefaults` for the fallback value, then add `inputRouteOverrides` only for routes that need a different value
|
|
102
102
|
|
|
103
|
+
## Pin defaults are typed values
|
|
104
|
+
|
|
105
|
+
A `pinDefaults` value is a JSON value with its type (`5`, `"5"`, `true`, `[]`), and the runtime uses it as stored.
|
|
106
|
+
AbstractFlow stores a value typed on a node card with the type of its input (ADR 0049 in the AbstractFramework
|
|
107
|
+
repository). Compare (`compare`) makes one conversion: when one side is a number or true/false and the other is text,
|
|
108
|
+
the text is read exactly as that type, by the editor's grammar (a decimal number: `"5"`, `"-2.5"`, `".5"`, `"1e3"`; or
|
|
109
|
+
`true`/`false` in any case), so `5 == "5"` and `"9" < 10` are true, whether the text was saved by AbstractFlow 0.13.0
|
|
110
|
+
or arrives at run time from a form, an API input or a model. Text that is not such a value (`"five"`, `"1_000"`,
|
|
111
|
+
`"0x10"`, `"inf"`, empty), or an order between values Python cannot order (`None > 3`), fails the step with an error
|
|
112
|
+
that names the node, instead of answering `False`. Text against text is never converted (`"10" > "9"` compares text).
|
|
113
|
+
true/false compares with numbers as Python's booleans do (`True == 1`).
|
|
114
|
+
|
|
103
115
|
## See also
|
|
104
116
|
|
|
105
117
|
- `architecture.md` — VisualFlow → WorkflowSpec compilation path
|
|
@@ -55,16 +55,32 @@ See llms.txt for the linked index.
|
|
|
55
55
|
|
|
56
56
|
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.
|
|
57
57
|
|
|
58
|
-
**Version:** 0.
|
|
58
|
+
**Version:** 0.17.0 • **Python:** 3.10+
|
|
59
59
|
|
|
60
60
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
61
61
|
|
|
62
|
+
## What's new in 0.17.0
|
|
63
|
+
|
|
64
|
+
- **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
|
|
65
|
+
the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
|
|
66
|
+
the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
|
|
67
|
+
- **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
|
|
68
|
+
piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
|
|
69
|
+
findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
|
|
70
|
+
- **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
|
|
71
|
+
a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
|
|
72
|
+
- **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
|
|
73
|
+
cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
|
|
74
|
+
text against text is never converted.
|
|
75
|
+
- **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
|
|
76
|
+
the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
|
|
77
|
+
|
|
62
78
|
## What's new in 0.16.0
|
|
63
79
|
|
|
64
80
|
- **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
|
|
65
81
|
(`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
|
|
66
82
|
durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
|
|
67
|
-
2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
83
|
+
2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
|
|
68
84
|
- **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
|
|
69
85
|
clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
|
|
70
86
|
words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
|
|
@@ -145,7 +161,7 @@ Remote-light runtime:
|
|
|
145
161
|
pip install abstractruntime
|
|
146
162
|
```
|
|
147
163
|
|
|
148
|
-
The base install includes AbstractCore 2.
|
|
164
|
+
The base install includes AbstractCore 2.33.0 or newer (its light install:
|
|
149
165
|
remote providers, tools, vision, voice, audio, music, and decision integration), plus the
|
|
150
166
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
151
167
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
@@ -361,7 +377,7 @@ Remote-light runtime:
|
|
|
361
377
|
pip install abstractruntime
|
|
362
378
|
```
|
|
363
379
|
|
|
364
|
-
This installs AbstractCore 2.
|
|
380
|
+
This installs AbstractCore 2.33.0 or newer with remote provider, vision,
|
|
365
381
|
voice, audio, music, decision, tool, and MCP-worker support. The base install is
|
|
366
382
|
remote-light: it can route multimodal workflows to hosted or OpenAI-compatible
|
|
367
383
|
endpoints, but it does not select local inferencer stacks such as MLX, vLLM,
|
|
@@ -764,6 +780,12 @@ ONE ordering law ([backlog 0045](backlog/planned/runtime_systemic_reliability/00
|
|
|
764
780
|
completion/resume path increments `RuntimeHealth` (`record_error`) and
|
|
765
781
|
logs a warning. Best-effort observability records (progress events,
|
|
766
782
|
status events) may stay quiet; records that replay depends on may not.
|
|
783
|
+
4. **A requested host stop is a crash the host announces: identical replay, no terminal record.**
|
|
784
|
+
A host that stops on purpose (a gateway stop or restart, a model-host restart for an update)
|
|
785
|
+
raises `EffectInterrupted` (`core/effect_cancellation.py`) into the effect in flight. The
|
|
786
|
+
runtime appends nothing terminal and re-raises; the run stays RUNNING, and the next tick sends
|
|
787
|
+
the effect again under the same idempotency key as attempt 1 (no retry consumed). Only a
|
|
788
|
+
failure the effect itself met is recorded as failed.
|
|
767
789
|
|
|
768
790
|
Kill-and-replay coverage for this law lives in the crash harness
|
|
769
791
|
(`tests/harness.py`, backlog 0045): for every persistence point, kill →
|
|
@@ -1215,8 +1237,9 @@ tool-approval waits retain their own contracts.
|
|
|
1215
1237
|
An opt-in actor may inherit `_runtime.conversation: {enabled: true}` through native child
|
|
1216
1238
|
workflows and VisualFlow Agent nodes. This flag does not create an extra inference call.
|
|
1217
1239
|
Public updates enter replay only through an explicit completed `EMIT_EVENT` named
|
|
1218
|
-
`public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration
|
|
1219
|
-
`source_call_ids
|
|
1240
|
+
`public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration`,
|
|
1241
|
+
`source_call_ids` and optional `kind` (`"progress"` or `"finding"`, replayed as the message's
|
|
1242
|
+
`update_kind`). The event's owner must match `run_id`; private diary/thinking fences are
|
|
1220
1243
|
excluded. See [replay.md](replay.md#public-conversation-messages).
|
|
1221
1244
|
|
|
1222
1245
|
Actors may attach `public_action` to a proposed `TOOL_CALLS` payload with `text`,
|
|
@@ -1534,13 +1557,14 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
|
|
|
1534
1557
|
|
|
1535
1558
|
### AbstractCore (LLM + tools)
|
|
1536
1559
|
|
|
1537
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.
|
|
1560
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.33.0 or newer is part of the base install).
|
|
1538
1561
|
|
|
1539
1562
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
1540
1563
|
|
|
1541
1564
|
Entry points:
|
|
1542
1565
|
- `create_local_runtime(...)`, `create_remote_runtime(...)`, `create_hybrid_runtime(...)` (`src/abstractruntime/integrations/abstractcore/factory.py`)
|
|
1543
1566
|
- public discovery facade: `AbstractCoreDiscoveryFacade`, `get_abstractcore_discovery_facade(...)` (`src/abstractruntime/integrations/abstractcore/discovery_facade.py`)
|
|
1567
|
+
- model errors a host tells apart, AbstractCore's own classes: `from abstractruntime.integrations.abstractcore.discovery_facade import ModelNotDownloadedError, ModelNotFoundError` (`ModelNotDownloadedError` is a `ModelNotFoundError` whose `model` and `provider` name what to download); a host never imports `abstractcore` for them
|
|
1544
1568
|
- public host facade: `AbstractCoreHostFacade`, `get_abstractcore_host_facade(...)` (`src/abstractruntime/integrations/abstractcore/host_facade.py`)
|
|
1545
1569
|
- public voice library facade: `AbstractCoreVoiceFacade`, `get_abstractcore_voice_facade(...)`, `VoiceLibraryError` (`src/abstractruntime/integrations/abstractcore/voice_facade.py`): languages, cloned voices (list by language, read, rename or replace the transcript, delete), cloning from a recording, voice design, the capability catalog; local in process, remote over the AbstractCore server's `/v1` voice routes (see [Voice library](integrations/abstractcore.md#voice-library))
|
|
1546
1570
|
- email facade: `email_facade` (AbstractCore's mail library for hosts; see [Email](#email))
|
|
@@ -2114,7 +2138,7 @@ Fix:
|
|
|
2114
2138
|
- Install or upgrade the base Runtime package. LLM/tools integration, common
|
|
2115
2139
|
remote-light multimodal dependencies, and the MCP worker entry point are part
|
|
2116
2140
|
of the base install.
|
|
2117
|
-
- The current AbstractCore integration expects `abstractcore>=2.
|
|
2141
|
+
- The current AbstractCore integration expects `abstractcore>=2.33.0`.
|
|
2118
2142
|
|
|
2119
2143
|
Verify:
|
|
2120
2144
|
|
|
@@ -2477,6 +2501,21 @@ Cause and fix:
|
|
|
2477
2501
|
|
|
2478
2502
|
See [automations.md, `feed.item@1`](automations.md#feeditem1).
|
|
2479
2503
|
|
|
2504
|
+
## A Compare step fails with "is text (...), not a number"
|
|
2505
|
+
|
|
2506
|
+
Symptom:
|
|
2507
|
+
- A run stops at a Compare node: "Compare 'Is five' (node same) ==: b is text ('five'), not a number; a is a number
|
|
2508
|
+
(5)."
|
|
2509
|
+
|
|
2510
|
+
Cause and fix:
|
|
2511
|
+
- One side is a number (or true/false) and the other is text that is not one. Compare reads text next to a number as
|
|
2512
|
+
that number (`"5"`, `" 5 "`, `"-2.5"`, `"1e3"`) and text next to true/false as `true` or `false` (any case), so
|
|
2513
|
+
`5 == "5"` is true. Anything else is refused: words (`"five"`), `"1_000"`, `"0x10"`, `"inf"`, `"nan"`, full-width
|
|
2514
|
+
digits, and empty text. Give that input a number (or true/false), or, if both sides are meant to be text, wire them
|
|
2515
|
+
so both carry text. See [Pin defaults are typed values](workflow-bundles.md#pin-defaults-are-typed-values).
|
|
2516
|
+
- An error ending in "these cannot be ordered" means `<`, `<=`, `>` or `>=` met values Python cannot order, often an
|
|
2517
|
+
unset value (`None`): give the input a value, or compare with `==`.
|
|
2518
|
+
|
|
2480
2519
|
## MCP worker command is not found
|
|
2481
2520
|
|
|
2482
2521
|
Symptom:
|
|
@@ -2515,7 +2554,7 @@ Implementation pointers (this repo):
|
|
|
2515
2554
|
pip install abstractruntime
|
|
2516
2555
|
```
|
|
2517
2556
|
|
|
2518
|
-
The base install includes AbstractCore 2.
|
|
2557
|
+
The base install includes AbstractCore 2.33.0 or newer. That is the supported baseline for the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
|
|
2519
2558
|
|
|
2520
2559
|
The base install also includes the remote-light media/capability plugins needed
|
|
2521
2560
|
for AbstractCore's multimodal `generate(..., output=...)` path. Local
|
|
@@ -2985,7 +3024,7 @@ When both hold, every `LLM_CALL` of the run streams from the provider and the ru
|
|
|
2985
3024
|
- `call_id` is the `step_id` of the `LLM_CALL` ledger record that later holds the final answer, so a client can replace its live text with the durable result.
|
|
2986
3025
|
- `seq` counts the events of one call from 0, `llm.delta_end` included.
|
|
2987
3026
|
- `channel` is `content` (the answer) or `reasoning` (the model's thinking). Reasoning arrives from the provider's reasoning stream, and inline `<think>…</think>` markup is split out of the content live, so clients can hide or fold it. The markup itself is never sent.
|
|
2988
|
-
- `reason` is `completed`, `failed`, `cancelled` or `unavailable`. Every live fragment of a call is sent before the call's durable record is written (the last batch is flushed first, and later fragments are dropped); every call then ends with exactly one `llm.delta_end`, sent after that record is in the ledger. Each retry attempt is its own call with its own `call_id`; so is the rare re-run of an attempt interrupted by a stray kill (`<step_id>:reinvoke`), whose interrupted first run ends `cancelled` with `detail: "reinvoked"` (the run goes on; a client can say "reply restarted" rather than "stopped").
|
|
3027
|
+
- `reason` is `completed`, `failed`, `cancelled` or `unavailable`. Every live fragment of a call is sent before the call's durable record is written (the last batch is flushed first, and later fragments are dropped); every call then ends with exactly one `llm.delta_end`, sent after that record is in the ledger. Each retry attempt is its own call with its own `call_id`; so is the rare re-run of an attempt interrupted by a stray kill (`<step_id>:reinvoke`), whose interrupted first run ends `cancelled` with `detail: "reinvoked"` (the run goes on; a client can say "reply restarted" rather than "stopped"). A call interrupted because its host stopped on purpose (`EffectInterrupted`) ends `cancelled` with `detail: "interrupted"`: the run is suspended, not stopped, and the call is sent again when the host is back.
|
|
2989
3028
|
- Tool-call markup a local model writes as text (`<tool_call>`, `<|tool_call|>`, `<function_call>`, …) never reaches the live text. AbstractCore already removes it from streamed content; the runtime also stops the live content of a call at the first such marker. The final record carries the tool calls.
|
|
2990
3029
|
- Harmony transcripts (gpt-oss) are split live: the `final` channel streams as content, `analysis` as reasoning, and a tool call (`commentary to=functions.…`) is held back. The framing tokens are never sent.
|
|
2991
3030
|
- Text is coalesced: the first fragment is sent immediately, later fragments are grouped over about 40 ms.
|
|
@@ -6543,7 +6582,10 @@ client_copy = apply_delta(doc, delta) # == view.to_json()
|
|
|
6543
6582
|
|
|
6544
6583
|
Explicit completed `public_update` events become assistant messages with
|
|
6545
6584
|
`kind: "public_update"`, stable run-scoped `id`, `text`, `run_id`, optional `session_id`,
|
|
6546
|
-
`iteration`, `source_call_ids`, and normal ledger provenance.
|
|
6585
|
+
`iteration`, `source_call_ids`, `update_kind`, and normal ledger provenance. `update_kind` is
|
|
6586
|
+
the producer's type for the update: `"finding"` (a fact or piece of evidence the actor
|
|
6587
|
+
established) or `"progress"` (what it is doing); an event without a `kind` of `"finding"`
|
|
6588
|
+
replays as `"progress"`. Replay copies the type and never infers it from the text. Replay does not turn reasoning,
|
|
6547
6589
|
raw tool output or a marker inside model text into public speech. Diary/thinking fences
|
|
6548
6590
|
are excluded. These are actor-authored updates; their wording alone is not proof of a fact
|
|
6549
6591
|
or of completed work.
|
|
@@ -6620,7 +6662,7 @@ Each rule below was once a divergence between clients:
|
|
|
6620
6662
|
| `interaction` | the person-facing wait, or `null`: `kind` (`tool_approval`, `ask_user`, `event`), `run_id`, `wait_key`, `step_id`, `seq`, `prompt`, `choices`, `allow_free_text`, `details`, `tool_calls` (resolved), `activity_id`, `answer_payload`, and `command` (the resume a client sends to answer it) |
|
|
6621
6663
|
| `open_waits[]` | every open wait of the tree, with `person_facing` |
|
|
6622
6664
|
| `messages[]` | verbatim turns: `role`, `kind` (`prompt`, `answer`, `question`, `final`, `event`), `text`, provenance (`run_id`, `step_ids`, `seqs`, `artifact_ids`, `source`) |
|
|
6623
|
-
| `activities[]` | one per execution: `kind`, `name`, `status`, `node_id`, `execution_id`, `seqs`, `step_ids`, `tool_calls[]` (each call's status, output, error), `wait` (`kind`, `wait_key`, `ended_by`: `resume`, `later_step`, `terminal`), `usage`, `child_run_id`, `progress` |
|
|
6665
|
+
| `activities[]` | one per execution: `kind`, `name`, `status`, `node_id`, `execution_id`, `seqs`, `step_ids`, `tool_calls[]` (each call's `id`, status, output, error, and `call_id`, the model's own call id, when `id` is a runtime call id; public updates cite `call_id`), `wait` (`kind`, `wait_key`, `ended_by`: `resume`, `later_step`, `terminal`), `usage`, `child_run_id`, `progress` |
|
|
6624
6666
|
| `artifacts[]` | every `{"$artifact": id}` reference, with the run, step, seq and JSON path that produced it |
|
|
6625
6667
|
| `usage` | tokens and LLM calls summed over the tree |
|
|
6626
6668
|
| `warnings[]` | what the view could not show (records before a window, an unresolved `$slim`) |
|
|
@@ -6865,6 +6907,18 @@ Authoring guidance:
|
|
|
6865
6907
|
- keep route keys unique per target node
|
|
6866
6908
|
- use one normal data edge or `pinDefaults` for the fallback value, then add `inputRouteOverrides` only for routes that need a different value
|
|
6867
6909
|
|
|
6910
|
+
## Pin defaults are typed values
|
|
6911
|
+
|
|
6912
|
+
A `pinDefaults` value is a JSON value with its type (`5`, `"5"`, `true`, `[]`), and the runtime uses it as stored.
|
|
6913
|
+
AbstractFlow stores a value typed on a node card with the type of its input (ADR 0049 in the AbstractFramework
|
|
6914
|
+
repository). Compare (`compare`) makes one conversion: when one side is a number or true/false and the other is text,
|
|
6915
|
+
the text is read exactly as that type, by the editor's grammar (a decimal number: `"5"`, `"-2.5"`, `".5"`, `"1e3"`; or
|
|
6916
|
+
`true`/`false` in any case), so `5 == "5"` and `"9" < 10` are true, whether the text was saved by AbstractFlow 0.13.0
|
|
6917
|
+
or arrives at run time from a form, an API input or a model. Text that is not such a value (`"five"`, `"1_000"`,
|
|
6918
|
+
`"0x10"`, `"inf"`, empty), or an order between values Python cannot order (`None > 3`), fails the step with an error
|
|
6919
|
+
that names the node, instead of answering `False`. Text against text is never converted (`"10" > "9"` compares text).
|
|
6920
|
+
true/false compares with numbers as Python's booleans do (`True == 1`).
|
|
6921
|
+
|
|
6868
6922
|
## See also
|
|
6869
6923
|
|
|
6870
6924
|
- `architecture.md` — VisualFlow → WorkflowSpec compilation path
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
> Durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
|
|
4
4
|
|
|
5
5
|
- Python: 3.10+ (see `pyproject.toml`)
|
|
6
|
-
- Version: 0.
|
|
6
|
+
- Version: 0.17.0
|
|
7
7
|
- Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella, integrates with [AbstractCore](https://github.com/lpalbou/abstractcore)
|
|
8
8
|
- Hard invariant: `RunState.vars` must be JSON-serializable (`src/abstractruntime/core/models.py`)
|
|
9
|
-
- Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.
|
|
9
|
+
- Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.33.0 or newer with its light install (remote providers, tools and the MCP worker, media routing, the `decision` output modality); `abstractruntime[apple]` and `abstractruntime[gpu]` require AbstractCore's `apple` and `gpu` settings (`pyproject.toml`)
|
|
10
10
|
- Install profiles: base `abstractruntime` is remote-light with MCP, generated media routing, and Runtime-owned permissive PDF read/write nodes; `abstractruntime[apple]` and `abstractruntime[gpu]` add local inferencer stacks.
|
|
11
11
|
- Config boundary: Runtime does not read `ABSTRACTGATEWAY_*`; Gateway-owned config should be translated into explicit Runtime inputs or Runtime-owned env names. Hosts can attach `resolve_provider_endpoint_profile(provider_id)` to the LLM client; Runtime treats it as an optional resolver hook, injects transient provider/base URL/key params for the call, and redacts secret-like params from persisted observability.
|
|
12
12
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "AbstractRuntime"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.17.0"
|
|
8
8
|
description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -69,7 +69,8 @@ dependencies = [
|
|
|
69
69
|
# AbstractVoice/Vision/Music/3D plugin floors.
|
|
70
70
|
# 2.32.0: the `decision` output modality (`output.decision` route, `/v1/decisions`,
|
|
71
71
|
# `MultimodalGenerateResponse.decision`).
|
|
72
|
-
|
|
72
|
+
# 2.33.0: the release wave's Core (typed `ModelNotDownloadedError`, AbstractVoice 0.20.0 floor).
|
|
73
|
+
"abstractcore>=2.33.0",
|
|
73
74
|
"openai<3.0.0,>=1.109.1",
|
|
74
75
|
"httpx<1.0.0,>=0.28.1",
|
|
75
76
|
"anyio<5.0.0,>=4.12.1",
|
|
@@ -86,12 +87,12 @@ dependencies = [
|
|
|
86
87
|
|
|
87
88
|
[project.optional-dependencies]
|
|
88
89
|
apple = [
|
|
89
|
-
"abstractcore[apple]>=2.
|
|
90
|
+
"abstractcore[apple]>=2.33.0",
|
|
90
91
|
"setuptools<82.0.0,>=80.10.2",
|
|
91
92
|
]
|
|
92
93
|
|
|
93
94
|
gpu = [
|
|
94
|
-
"abstractcore[gpu]>=2.
|
|
95
|
+
"abstractcore[gpu]>=2.33.0",
|
|
95
96
|
# vLLM 0.9-0.19 caps setuptools below 80; 77.0.3 is still a modern floor.
|
|
96
97
|
"setuptools<82.0.0,>=77.0.3",
|
|
97
98
|
]
|