AbstractRuntime 0.15.0__tar.gz → 0.15.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/CHANGELOG.md +6 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/PKG-INFO +7 -2
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/README.md +6 -1
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/README.md +10 -3
- abstractruntime-0.15.1/docs/backlog/completed/0857_is_empty_accepts_lists.md +29 -0
- abstractruntime-0.15.1/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +41 -0
- abstractruntime-0.15.1/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +27 -0
- abstractruntime-0.15.1/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +34 -0
- abstractruntime-0.15.1/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +34 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/llms-full.txt +6 -1
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/llms.txt +1 -1
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/pyproject.toml +1 -1
- abstractruntime-0.15.1/release-notes.md +3 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/builtins.py +9 -4
- abstractruntime-0.15.1/tests/test_visualflow_string_contains_replace.py +102 -0
- abstractruntime-0.15.0/release-notes.md +0 -54
- abstractruntime-0.15.0/tests/test_visualflow_string_contains_replace.py +0 -43
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/.gitignore +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/LICENSE +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/ROADMAP.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/SECURITY.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0010_one_replay_many_views.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/adr/README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/api.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/architecture.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/artifacts.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/automations.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/0854_replay_view.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_portability/README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/email.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/entity-runtime.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/evidence.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/faq.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/getting-started.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/integrations/abstractcore.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/integrations/abstractmemory.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/limits.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/manual_testing.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/proposal.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/provenance.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/replay.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/snapshots.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/tool-approval.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/tools-comms.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/troubleshooting.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/examples/05_persistence.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/examples/README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/mkdocs.yml +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/pytest.ini +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/scripts/backfill_diary_edges.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/scripts/generate_llms_full.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/scripts/regen_replay_conformance.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automation_queries.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/adapters.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/attention.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/bundle.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/commands.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/consumers.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/controller.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/ledger.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/models.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/samples.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/service.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/automations/wakes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/conversation_search.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/effect_cancellation.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/health.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/live_deltas.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/progress_channel.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/publish.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/run_attribution.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/run_identity.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/run_origin.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/step_context.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/tool_scope.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/documents/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/documents/charts.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/documents/docx.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/documents/pdf.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/email/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/email/actions.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/email/automations.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/email/binding.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/email/feeder.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/email/frame.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/email/inbox.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/act_only.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/chat.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/communities.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/diary.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/digest.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/entity_runtime.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/lease.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/life.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/memory_reader.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/night_voice.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/phase_graph.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/phase_spec.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/prelude.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/prompt_overlay.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/reflection.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/substrate.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/tool_effects.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/tool_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/tools.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/identity/visit_workflow.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/mail_verbs.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/delta.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/executions.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/replay/view.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/scheduler/multi_store.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/session_history.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/session_turns.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/change_ring.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/lease.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/ledger_slim.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/serialize.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/session_tool_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/storage/steer_sidecar.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/cloudevents.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/connection_events.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/connections.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/email_received.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/event_frame.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/feed.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/manual.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/protocol.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/registry.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/schedule.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/triggers/webhook.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/turn_grounding.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/utils/atomic_files.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/README.md +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/automation_harness.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/conftest.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/email_wp2_support.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/fixtures/feeds/atom.xml +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/fixtures/feeds/rss1.xml +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/fixtures/feeds/rss2.xml +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/fixtures/schedule_v1_corpus.json +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/live_email/conftest.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/live_email/live_email_support.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/live_email/test_email_live_runtime.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/media_endpoint_profile_probe.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_abstractcore_server_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_abstractcore_structured_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_active_consumers_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_active_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_agora_agent_alias_identity.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_agora_tools_http.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_analyze_media_addressing_and_walling.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_artifact_session_candidates.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_calendar_schedule.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_commands.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_controller.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_controller_recovery.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_definition.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_discussion_isolation.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_email_results.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_growing_context.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_list_reads.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_named_policy_compiler.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_next_fire.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_occurrence_input_resolver.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_occurrence_recovery.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_replay_read_only.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_retry.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_session_turns.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_status.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_automation_tool_approval.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_browser_probe_target_walling.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_budget_law_no_unrequested_caps.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_capability_default_reasoning.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_code_node_imports.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_code_node_restricted_python.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_command_sandbox_host_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_command_store.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_compaction_summarizer_route.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_config_facade_models_engines.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_config_facade_voice_input_hint.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_controller_bundle_packaged.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_conversation_search.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_crash_ordering_inversions.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_create_if_absent.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_data_registry_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_default_model_warmup_switch.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_default_tools_camera_gating.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_default_tools_include_skim_web.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_diary_capture.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_diary_write_rescue.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_directory_lease.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_disabled_toolsets_seam.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_discovery_survives_unbuildable_default.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_discovery_tts_unavailable_reason.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_discovery_voice_openai_api_key.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_discussion_session_anchor.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_document_markdown_tables.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_document_renderers_hr_quote.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_durable_write_discipline.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_effect_cancellation.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_effect_issuance_idempotency.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_effect_payload_stays_json_serializable.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_election_consequence_teaching.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_binding_and_refiner.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_feeder_batched.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_feeder_flags.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_gate_fixes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_inbox_and_trigger.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_received_mailbox_id.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_regate_fixes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_review_fixes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_self_trigger_loop.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_stream_consumers.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_email_toolset_and_walls.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_emergence_experiment.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_emit_event_uses_wait_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_endpoint_profile_media_in_process.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_endpoint_profile_route_context.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_awake_memory_fixes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_brain_effects.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_chat_driver.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_chat_tools_reflection.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_diary.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_execute_tool.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_fetch_url_tool.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_history_window.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_life_loop.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_memory_richness.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_phase_graph_conformance.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_react_visit_window.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_recent_memories.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_runtime.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_search_memory.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_substrate_resolution.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_visit_honesty.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_workspace_cap.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_entity_workspace_tools.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_event_index_cross_process.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_event_wait_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_execute_command_output_offload.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_execution_capability_discovery.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_explicit_eject_other_clients.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_factory_default_retry_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_format_repair_nudge.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_fresh_install_no_provider.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_gateway_facades_c4899.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_git_read_only_refiner.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_hf_process_residency_merge.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_history_window_multimodal.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_hot_path_store_reads.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_indexed_idempotency_lookup.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_json_run_cache_bound.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_json_store_scan_memo.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_jsonl_row_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_ledger_cursor_invariants.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_ledger_get_record.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_ledger_record_slimming.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_live_token_deltas.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_payload_shape_refusal.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_prefix_stability_contract.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_text_phase_progress.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_client_grounding_tail.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_retry_classification.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_llm_streaming_on_token.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_local_helper_tool_exposure.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_local_residency_host_sweep.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mail_verbs.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mailbox_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_max_iterations_ceiling.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_media_capability_default_routing.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_media_host_endpoint_resolver.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_media_only_requests_skip_text_client.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_media_subprocess.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_appraise_handler.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_communities.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_revise.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_seam_handlers.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_seam_sqlite_durability.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_step_provenance.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_mlx_process_residency_merge.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_model_eject_cancel.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_model_residency_clean_switch.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_multi_store_scheduler.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_native_mlx_application_wiring.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_native_mlx_execution_controls_live.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_native_tool_channel.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_night_voice.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_no_default_provider_refusal_ux.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_occurrence_named_inputs.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_occurrence_samples.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_offload_answer_chain_c4978.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_offloading.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_packaging_extras.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_parallel_readonly_tool_execution.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_pdf_unicode_rendering.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_personal_cycle.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_phantom_attachment_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_phase_graph_artifact_control.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_phase_graph_obedience.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_phase_vocabulary_migration.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_prompt_cache_posture_inheritance.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_prompt_overlay.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_provider_endpoint_profile_resolution.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_provider_pin_routing_isolation.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_publish_event.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_r12_workspace_sandbox.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_read_idle_threading.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_readoption_experiment.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_realize_election.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_remote_client_cancel.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_remote_speculation_defaults.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_replay_conformance.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_replay_conformance_package.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_replay_cursor_token.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_replay_delta_cost.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_replay_invariants.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_replay_review_findings.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_replay_tool_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_report_branding.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_resident_media_generation.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_resume_concurrent_same_wait.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_run_index_workspace_root.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_run_mutation_lock.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_run_origin.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_run_scoped_tool_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_run_store_change_token.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_run_tool_scope_ceiling.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_browser_session_boundary.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_default_provider_model_refresh.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_health_and_bounded_vars.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_runtime_tick_step_gate.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_schedule_run.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_schedule_v1_corpus.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_schedule_v2_calendar.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_send_email_refiner.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_send_email_self_default_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_session_history.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_session_prompt_cache_attribution.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_session_prompt_cache_visibility.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_session_route_stamp.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_session_start_cost.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_session_tool_policy.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_shell_tool_exposure.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_speculation_inheritance.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_speculation_reaches_provider_construction.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_steer_sidecar.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_step_context.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_streamed_voice_namespace.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_thinking_inheritance.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_approval_wait_key_identity.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_catalog.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_descriptor_registry.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_inventory_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_invoke_effect.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_policy_and_mounts.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_topic_election_world_model.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trigger_cloudevents.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trigger_connection_listening.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trigger_connections.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trigger_feed.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trigger_registry.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trigger_schedule_math.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trigger_webhook.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_trusted_run_index.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_turn_grounding_byte_stability.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_turn_grounding_carriers_a3.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visit_ab_fixture.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visit_midturn_elections.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visit_midturn_resume.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visit_workflow.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_entity_memory_nodes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_llm_call_partial_override.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_loop_back_out_of_body.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_loop_limit_on_wire.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_reroute_lowering.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_set_vars_pins.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_unknown_node_type_refuses.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_agora_react_agent.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_continue_on_error.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_file_nodes_workspace.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_function_library.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_get_var_node.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_pin_expressions.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_schema_enum_switch.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_voice_library_facade.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_voice_openai_api_key_path.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_voice_stream_is_not_a_wait.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_w4_feelings_lens.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_wait_event_deadline.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_wait_until_streak.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_wait_until_utc_normalization.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_builtin_deny.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_context_allowed_workspaces.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_prompt_context.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_read_only.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_workspace_writable_paths.py +0 -0
- {abstractruntime-0.15.0 → abstractruntime-0.15.1}/tests/test_write_chart.py +0 -0
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.15.1] - 2026-10-28
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **Is Empty (`is_empty_string`) accepts lists.** Nothing (unset / `None`), an empty text, and a list, tuple, set or object with no elements are empty; whitespace, `0`, `False` and a list with any element are not. Before, a list was turned into text (`"[]"`) and was never empty, so a flow checking a list variable needed Array Length + Compare (operator QA 2026-10-28, the email-triage flow). Backlog 0857. AbstractFlow lets the node take a list once this is released.
|
|
15
|
+
|
|
10
16
|
## [0.15.0] - 2026-10-28
|
|
11
17
|
|
|
12
18
|
Requires AbstractMemory 0.4.0 or newer (`abstractmemory.graph`). ADR 0011, backlog 0856.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.1
|
|
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
|
|
@@ -55,10 +55,15 @@ 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.15.
|
|
58
|
+
**Version:** 0.15.1 • **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.15.1
|
|
63
|
+
|
|
64
|
+
- **Is Empty accepts lists**: nothing, an empty text, or a list or object with no elements is empty (visual-flow
|
|
65
|
+
node `is_empty_string`; backlog 0857).
|
|
66
|
+
|
|
62
67
|
## What's new in 0.15.0
|
|
63
68
|
|
|
64
69
|
- **Memory facade** (`abstractruntime.integrations.abstractmemory.memory_facade.MemoryFacade`): the one
|
|
@@ -4,10 +4,15 @@
|
|
|
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.15.
|
|
7
|
+
**Version:** 0.15.1 • **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.15.1
|
|
12
|
+
|
|
13
|
+
- **Is Empty accepts lists**: nothing, an empty text, or a list or object with no elements is empty (visual-flow
|
|
14
|
+
node `is_empty_string`; backlog 0857).
|
|
15
|
+
|
|
11
16
|
## What's new in 0.15.0
|
|
12
17
|
|
|
13
18
|
- **Memory facade** (`abstractruntime.integrations.abstractmemory.memory_facade.MemoryFacade`): the one
|
|
@@ -12,10 +12,14 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
12
12
|
|
|
13
13
|
## Counts
|
|
14
14
|
|
|
15
|
-
-
|
|
16
|
-
|
|
15
|
+
2026-10-28: +2 proposed, 0860 (the view does not say how a run was stopped; the gateway does not advertise the view) and 0861 (tool sandbox and per-call model timings missing from view activities), found by AbstractUIC 0040 (panel-chat renders the replay view).
|
|
16
|
+
|
|
17
|
+
2026-10-28: recounted from disk (deprecated was 13 in this block, 14 on disk); +1 planned for 0858 (root 1063, typed runs); +1 planned for 0859 (ephemeral live-text deltas on the view stream, gateway 0954).
|
|
18
|
+
|
|
19
|
+
- Planned: 34
|
|
20
|
+
- Proposed: 16
|
|
17
21
|
- Completed: 39
|
|
18
|
-
- Deprecated:
|
|
22
|
+
- Deprecated: 14
|
|
19
23
|
- Recurrent: 0
|
|
20
24
|
|
|
21
25
|
2026-09-20: counts reconciled to disk (28 planned and 12 proposed before this
|
|
@@ -93,6 +97,7 @@ mtime). The anticipated ADR ("an automation is its controller root run") is not
|
|
|
93
97
|
|
|
94
98
|
| ID | Item |
|
|
95
99
|
|----|------|
|
|
100
|
+
| 0857 | [Is Empty accepts lists](completed/0857_is_empty_accepts_lists.md): completed 2026-10-28, released in abstractruntime 0.15.1 (PR #15); `is_empty_string` treats nothing, "" and a list/tuple/set/object with no elements as empty (operator QA 2026-10-28, AbstractFlow backlog 0160). |
|
|
96
101
|
| 0856 | [Memory facade and ledger provenance](completed/0856_memory_facade_and_ledger_provenance.md): completed 2026-10-27, released in abstractruntime 0.15.0 (2026-10-28, PR #6 merge `88a584b`; floor AbstractMemory>=0.4.0); ADR 0011: `MemoryFacade` (open a mind, stamp, reconstruct a source), `LedgerStore.get_record(run_id, seq)` (JSON-file line-offset index), the step context, a `step` ref on every memory write the runtime performs, `MEMORY_REVISE` / node `memory_revise`. Follow-up 0857. |
|
|
97
102
|
| 0851 | [Per-account voice stores](completed/0851_per_account_voice_stores.md): completed 2026-10-27 (0.13.0); the runtime's voice catalog and voice library use its `voice_store_dir` / `voice_library_dirs`; real-weights E2E 9/9. |
|
|
98
103
|
| 0852 | [Capability refusals are not retried](completed/0852_capability_refusals_are_not_retried.md): completed 2026-10-27 (0.13.0); one engine call for a refused request. |
|
|
@@ -149,6 +154,8 @@ mtime). The anticipated ADR ("an automation is its controller root run") is not
|
|
|
149
154
|
| 0853 | `planned/0853_session_tool_policy_before_the_approval_wait.md` (P1; abstractruntime 0.14.0: a conversation's approve/deny stored per session and applied before any approval wait, with an `abstract.tool_policy_decision` ledger record; gateway routes and client wiring remain) |
|
|
150
155
|
| 0854 | `planned/0854_replay_view.md` (P0; abstractruntime 0.14.0 carries the reducer, the durable per-run `seq` cursor and the conformance cases; gateway routes and client migration remain; ADR 0010) |
|
|
151
156
|
| 0857 | `planned/0857_entity_direct_memory_writes_provenance.md` (P2; entity memory written outside any effect: world models, tending, night passes; follows 0856) |
|
|
157
|
+
| 0858 | `planned/0858_typed_runs_run_type_stamped_at_start.md` (P1; one `run_type` + `origin.surface` stamped at start, indexed, in `replay_view_v1`; root 1063, gateway 0951) |
|
|
158
|
+
| 0859 | `planned/0859_replay_view_ephemeral_text_deltas.md` (P1; live token text on `/view/stream` as ephemeral `text` deltas the reducer ignores; gateway 0954; regression found by the Assistant desktop migration) |
|
|
152
159
|
| 0044 | `planned/runtime_systemic_reliability/0044_meta_analysis_record.md` (track source record) |
|
|
153
160
|
| 0045 | `planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md` |
|
|
154
161
|
| 0046 | `planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md` |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 0857 — Is Empty accepts lists (nothing or no elements = empty)
|
|
2
|
+
|
|
3
|
+
**Status**: completed 2026-10-28, released in abstractruntime 0.15.1 (PR #15; released on the release lead's decision;
|
|
4
|
+
the gateway floor stays >=0.15.0, the root pins 0.15.1) · **Priority**: P2 · **Created**: 2026-10-28
|
|
5
|
+
**Cross-package**: AbstractFlow backlog 0160 (operator QA 2026-10-28 item (e)); the Flow editor lets Is Empty take a
|
|
6
|
+
list only after this is released (branch `fix/is-empty-lists` there).
|
|
7
|
+
|
|
8
|
+
## Why
|
|
9
|
+
Operator QA 2026-10-28 (e): "Is Empty must also accept arrays (undefined or 0 elements = empty)". The email-triage
|
|
10
|
+
flow checked its `triage` list variable with Array Length + Compare, and a Compare left on its default `==` inverted
|
|
11
|
+
the check. One node that says "the list is empty" is the readable way.
|
|
12
|
+
|
|
13
|
+
## Current code reality (before)
|
|
14
|
+
`visualflow_compiler/visual/builtins.py` `string_is_empty`: `"" if text is None else str(text)` then `== ""`, so
|
|
15
|
+
`[]` became `"[]"` and was never empty.
|
|
16
|
+
|
|
17
|
+
## Change
|
|
18
|
+
`string_is_empty`: `None` → true; `list`, `tuple`, `set`, `frozenset`, `dict` → `len == 0`; anything else → `str(value)
|
|
19
|
+
== ""` (unchanged for text; whitespace, `0`, `False` stay not empty). The node type and pin id (`text`) are unchanged,
|
|
20
|
+
so every saved flow compiles as before and a text input behaves as before.
|
|
21
|
+
|
|
22
|
+
## Evidence
|
|
23
|
+
- `tests/test_visualflow_string_contains_replace.py::test_is_empty_accepts_lists_and_objects` and `::test_is_empty_on_a_list_variable_in_a_compiled_flow` (Get Variable → Is Empty → If; RED before: `[]`
|
|
24
|
+
returned False).
|
|
25
|
+
- The operator's email-triage flow with Array Length + Compare replaced by Is Empty(Get triage) → If false → Notify
|
|
26
|
+
me, run through the executor with 5 emails / 2 important: reaches Notify me and publishes the alert
|
|
27
|
+
(`untracked/release-closing/w6-flow/repro_email_triage.py` at the workspace root).
|
|
28
|
+
- Full suite: 3863 passed; the only failures are environment ones present on `main` (a real abstractvision plugin
|
|
29
|
+
test, three modules importing the old Python `abstractflow.FlowRunner`).
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 0858 — Typed runs: one `run_type` stamped at start, indexed, carried in the replay view
|
|
2
|
+
|
|
3
|
+
**Status**: planned · **Priority**: P1 (high) · **Created**: 2026-10-28
|
|
4
|
+
**Package**: abstractruntime (enum, stamp, index column, replay view field, backfill helper) · **Slices**: abstractgateway 0951 (start paths, `/runs` filters, migration), clients (framework root 1065)
|
|
5
|
+
**Master item**: framework root backlog 1063, `abstractframework/docs/backlog/planned/1063_typed_runs_and_sessions.md`; links root 0993, 1059
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
The runtime owns the vocabulary of what a run is. Today it has two partial ones: `core/run_attribution.py`
|
|
10
|
+
derives `session_kind` (`chat|automation|occurrence|discussion`) and `role` at index time from automation
|
|
11
|
+
metadata, so every non-automation run is `chat`; `core/run_origin.py` stamps `_meta.origin`
|
|
12
|
+
(`person|trigger|agent|system`, `actor`, `client`, `ref`) once at start but nothing indexes it and the
|
|
13
|
+
replay view does not carry it. Add one `_meta.run_type` (enum in root 1063: `conversation`, `docs`,
|
|
14
|
+
`automation_controller`, `occurrence`, `discussion`, `scheduled`, `entity_visit`, `entity_life`, `import`,
|
|
15
|
+
`correction`, `bridge`, `flow`, `subrun`) and `origin.surface` (`desktop|iphone|watch|web|terminal|console|api|none`),
|
|
16
|
+
written once like `stamp_origin`, indexed as columns, and exposed in `replay_view_v1` as `run.type` and `run.origin`.
|
|
17
|
+
|
|
18
|
+
## Current code reality (origin/main, abstractruntime 0.15.0)
|
|
19
|
+
|
|
20
|
+
- `core/run_attribution.py`: `SESSION_KINDS`, `ROLES`, `INDEX_FIELD_NAMES`, `automation_index_fields(vars)`; first-match derivation from `_meta.automation` / `_meta.occurrence` / `_meta.discussion` / `_meta.schedule`; columns in `storage/sqlite.py` and `storage/json_files.py`.
|
|
21
|
+
- `core/run_origin.py`: `ORIGIN_KINDS`, `origin_for`, `origin_of`, `stamp_origin` (written once; an existing origin is kept); the automation controller stamps occurrences (`automations/controller.py`).
|
|
22
|
+
- `replay/view.py`: no type or origin on the view.
|
|
23
|
+
- Entity homes (`identity/chat.py`, life loop) write runs under synthetic ids for the in-process chat path (memory report decision 3), so `entity_visit`/`entity_life` need the gateway hosts and decision 3 to stamp them.
|
|
24
|
+
|
|
25
|
+
## Chosen route
|
|
26
|
+
|
|
27
|
+
1. `core/run_type.py`: `RUN_TYPES`, `stamp_run_type(vars, type)` (once; refuses an unknown value), `run_type_of(vars)` with the backfill derivation for runs that predate the stamp (returns `(type, "stamped"|"derived")`).
|
|
28
|
+
2. `Runtime.start` refuses a root run with no `run_type` after one release of warnings (descendants default to `subrun`).
|
|
29
|
+
3. Index columns `run_type`, `origin_kind`, `origin_surface` (SQLite migration + JSON index); `list_runs(run_types=..., surfaces=...)`.
|
|
30
|
+
4. `run_attribution` derives `session_kind`/`role` from `run_type` for one release (compatibility), then is reduced to the automation fields.
|
|
31
|
+
5. `replay_view_v1`: `run.type`, `run.origin` (additive); conformance fixture updated.
|
|
32
|
+
|
|
33
|
+
## Open decisions
|
|
34
|
+
|
|
35
|
+
See root 1063 (enum names, `surface` placement, retirement of `session_kind`, interaction with root 1024).
|
|
36
|
+
|
|
37
|
+
## Acceptance criteria
|
|
38
|
+
|
|
39
|
+
- [ ] Every start path in the runtime stamps `run_type`; tests per path red when the stamp is removed.
|
|
40
|
+
- [ ] Index columns filled for new runs; the backfill helper derives the same type the old fields implied on a fixture of legacy runs.
|
|
41
|
+
- [ ] View fixture carries `run.type` and `run.origin`.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 0859 — Replay view: ephemeral live-text deltas, ignored by the reducer
|
|
2
|
+
|
|
3
|
+
**Status**: planned · **Priority**: P1 (high) · **Created**: 2026-10-28
|
|
4
|
+
**Package**: abstractruntime (`replay/view.py` `apply`, conformance fixtures, ADR 0010 note) · **Slices**: abstractgateway 0954 (`/view/stream` `text` frames)
|
|
5
|
+
**Master item**: framework root backlog 0993; follows 0854 (its "Out" list put live token text on the ledger stream)
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
Finding from the AbstractAssistant desktop migration (draft PR #11, `feat/replay-view-desktop`, its backlog 1063): the `/view/stream` deltas carry committed ledger records only, so a client that renders from the view loses the live token text while an answer is being generated, a regression against the old path (`GET /runs/{id}/ledger/stream`), which interleaves `llm.delta` frames from `LiveDeltaHub` (`live_deltas.py`) and shows tokens as they arrive. Runtime 0854 put live token text out of scope ("`llm.delta` frames stay on the ledger stream"); the migration shows the view stream needs it.
|
|
10
|
+
|
|
11
|
+
## Chosen route
|
|
12
|
+
|
|
13
|
+
- The view model stays a fold of committed ledger records only. Live text travels as an ephemeral `text` delta kind
|
|
14
|
+
(`{run_id, node_id, call_id, channel, seq, text}` appended, `text_end`) produced by the gateway from
|
|
15
|
+
`abstractruntime.core.live_deltas` sinks (gateway 0954), never persisted, superseded by the committed message record.
|
|
16
|
+
- `ReplayView.apply` / `apply(view, new_records)` ignore ephemeral deltas explicitly (a record of kind `llm.delta`,
|
|
17
|
+
`llm.delta_end`, `text` or `text_end` leaves the view and `last_delta` unchanged), so a client that feeds the whole
|
|
18
|
+
stream into a port of the reducer cannot corrupt its view; ADR 0010 states the rule (the cursor is `seq`; ephemeral
|
|
19
|
+
frames carry none).
|
|
20
|
+
- Conformance fixture: a stream with interleaved ephemeral frames folds to the same view as without them; a fixture of
|
|
21
|
+
the client rule "drop a call's live text when its committed message arrives".
|
|
22
|
+
- Interim (option B in gateway 0954): clients keep `/ledger/stream` open for live deltas alongside `/view/stream`.
|
|
23
|
+
|
|
24
|
+
## Acceptance criteria
|
|
25
|
+
|
|
26
|
+
- [ ] `apply` ignores ephemeral kinds; a test red when the guard is removed.
|
|
27
|
+
- [ ] Conformance fixtures shipped as package data; ADR 0010 amended.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 0860 — Replay view: a forced stop reads "Stopped" (the stop's wording is not in the view)
|
|
2
|
+
|
|
3
|
+
**Status**: proposed · **Priority**: P2 · **Created**: 2026-10-28
|
|
4
|
+
**Package**: abstractruntime (`replay/view.py`) · **Slice**: abstractgateway (`discovery/capabilities`)
|
|
5
|
+
**Parent**: 0854 (replay view), framework root backlog 0993 · **Found by**: AbstractUIC backlog 0040 (panel-chat 0.6.0 renders the view)
|
|
6
|
+
|
|
7
|
+
## Problem
|
|
8
|
+
|
|
9
|
+
A client that renders the replay view cannot tell a Stop the person asked for from one the gateway
|
|
10
|
+
forced. The ledger knows: the gateway's kill switch writes an `abstract.status` record with
|
|
11
|
+
`killed_by: "kill_switch"` and its text ("Stop forced at 10 s: inference killed", conformance case
|
|
12
|
+
`d_cancellation`). The reducer keeps only the text, as `display_status` of the run
|
|
13
|
+
(`view.py` `_fold_event`, the `abstract.status` branch), and drops `killed_by`. panel-chat's ledger
|
|
14
|
+
fold showed "Stop forced: inference killed" from that record; in view mode it can only say
|
|
15
|
+
"Stopped", and a client that clears `display_status` on a terminal status (panel-chat does, as its
|
|
16
|
+
ledger fold did) loses the text too.
|
|
17
|
+
|
|
18
|
+
A second, related gap: AbstractGateway 0.17.0 does not list the view in `GET discovery/capabilities`,
|
|
19
|
+
so every client must probe `GET /view` once and treat FastAPI's route-missing 404 as "no view".
|
|
20
|
+
|
|
21
|
+
## Proposal
|
|
22
|
+
|
|
23
|
+
- The view carries how the run was stopped: on the root (and each `runs[]` row) a `stop` object
|
|
24
|
+
`{by: "person"|"kill_switch"|"timeout"|…, text, seq}` folded from the attribution record
|
|
25
|
+
(`killed_by`, `cancelled_by` on the cancelled `llm_call`), and a `stop` change in `changes`.
|
|
26
|
+
- The gateway advertises `capabilities.replay_view: {supported: true, version: "replay_view_v1",
|
|
27
|
+
endpoints: {view, stream}}`.
|
|
28
|
+
|
|
29
|
+
## Acceptance
|
|
30
|
+
|
|
31
|
+
- `d_cancellation`'s expected view names the kill switch and its text; a person's cancel
|
|
32
|
+
(`cancelled_by`) reads as such; a new conformance case for a person's Stop.
|
|
33
|
+
- `GET discovery/capabilities` lists `replay_view`; panel-chat passes it as `advertised` and stops
|
|
34
|
+
probing.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 0861 — Replay view activities: the tool sandbox and per-call model timings
|
|
2
|
+
|
|
3
|
+
**Status**: proposed · **Priority**: P2 · **Created**: 2026-10-28
|
|
4
|
+
**Package**: abstractruntime (`replay/view.py` `_fill_activity`)
|
|
5
|
+
**Parent**: 0854 (replay view), framework root backlog 0993 · **Found by**: AbstractUIC backlog 0040 (panel-chat 0.6.0 renders the view)
|
|
6
|
+
|
|
7
|
+
## Problem
|
|
8
|
+
|
|
9
|
+
Two things clients showed from raw records are not in `replay_view_v1.activities[]`:
|
|
10
|
+
|
|
11
|
+
1. **The command sandbox of a tool call.** A process-spawning tool's result carries
|
|
12
|
+
`output.sandbox` (macOS sandbox-exec, Linux bubblewrap/Landlock, "none — refused", the enforced
|
|
13
|
+
workspaces). panel-chat's `ToolSandboxLine` renders it from the ledger; a view tool call has
|
|
14
|
+
`output` only when the output is the tool's value, and the sandbox block is not kept as a field.
|
|
15
|
+
2. **Per-call model timings.** An `llm` activity carries `usage` (tokens) but not the call's
|
|
16
|
+
`gen_time`, the provider's prompt rate (prefill time), cache reuse or the model load. panel-chat's
|
|
17
|
+
turn statistics (`genTimeMs`, `prefillMs`, `decodeMs`, `timedCalls`, the slowest tool batch)
|
|
18
|
+
came from these record fields; in view mode only tokens, call counts, changed files and the
|
|
19
|
+
turn's span remain.
|
|
20
|
+
|
|
21
|
+
## Proposal
|
|
22
|
+
|
|
23
|
+
- `tool_calls[].sandbox`: the call's sandbox block as the tool reported it (`label`, `enforced`,
|
|
24
|
+
`workspaces`, `refused`), absent when the tool spawned nothing.
|
|
25
|
+
- `activities[kind=llm].timing`: `{gen_time_ms, prompt_tokens_per_s, completion_tokens_per_s,
|
|
26
|
+
cached_tokens, load_ms}` exactly as the record reported them (a field absent when not reported:
|
|
27
|
+
zero is a claim).
|
|
28
|
+
- `usage` on the view keeps its meaning (sums); timings are not summed by the reducer.
|
|
29
|
+
|
|
30
|
+
## Acceptance
|
|
31
|
+
|
|
32
|
+
- A conformance case with a sandboxed `execute_command` and an MLX call that reports
|
|
33
|
+
`gen_time` / rates; expected views carry both.
|
|
34
|
+
- panel-chat's `replayStatistics` and tool rows read them (AbstractUIC follow-up of 0040).
|
|
@@ -55,10 +55,15 @@ 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.15.
|
|
58
|
+
**Version:** 0.15.1 • **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.15.1
|
|
63
|
+
|
|
64
|
+
- **Is Empty accepts lists**: nothing, an empty text, or a list or object with no elements is empty (visual-flow
|
|
65
|
+
node `is_empty_string`; backlog 0857).
|
|
66
|
+
|
|
62
67
|
## What's new in 0.15.0
|
|
63
68
|
|
|
64
69
|
- **Memory facade** (`abstractruntime.integrations.abstractmemory.memory_facade.MemoryFacade`): the one
|
|
@@ -3,7 +3,7 @@
|
|
|
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.15.
|
|
6
|
+
- Version: 0.15.1
|
|
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
9
|
- Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.30.0 or newer with its light install (remote providers, tools and the MCP worker, media routing); `abstractruntime[apple]` and `abstractruntime[gpu]` require AbstractCore's `apple` and `gpu` settings (`pyproject.toml`)
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
### Changed
|
|
2
|
+
|
|
3
|
+
- **Is Empty (`is_empty_string`) accepts lists.** Nothing (unset / `None`), an empty text, and a list, tuple, set or object with no elements are empty; whitespace, `0`, `False` and a list with any element are not. Before, a list was turned into text (`"[]"`) and was never empty, so a flow checking a list variable needed Array Length + Compare (operator QA 2026-10-28, the email-triage flow). Backlog 0857. AbstractFlow lets the node take a list once this is released.
|
|
@@ -283,10 +283,15 @@ def string_length(inputs: Dict[str, Any]) -> int:
|
|
|
283
283
|
|
|
284
284
|
|
|
285
285
|
def string_is_empty(inputs: Dict[str, Any]) -> bool:
|
|
286
|
-
"""
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
286
|
+
"""Is Empty: True when `text` is nothing (unset / None), an empty string, or a list,
|
|
287
|
+
tuple, set or object with no elements (operator QA 2026-10-28: a list variable filled
|
|
288
|
+
by a loop is checked with one node). Whitespace is not empty; any other value is not."""
|
|
289
|
+
value = inputs.get("text")
|
|
290
|
+
if value is None:
|
|
291
|
+
return True
|
|
292
|
+
if isinstance(value, (list, tuple, set, frozenset, dict)):
|
|
293
|
+
return len(value) == 0
|
|
294
|
+
return str(value) == ""
|
|
290
295
|
|
|
291
296
|
|
|
292
297
|
def string_contains(inputs: Dict[str, Any]) -> bool:
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abstractruntime.visualflow_compiler.visual.builtins import get_builtin_handler
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_string_is_empty_builtin() -> None:
|
|
7
|
+
is_empty = get_builtin_handler("is_empty_string")
|
|
8
|
+
assert is_empty is not None
|
|
9
|
+
|
|
10
|
+
assert is_empty({"text": ""}) is True
|
|
11
|
+
assert is_empty({}) is True
|
|
12
|
+
assert is_empty({"text": None}) is True
|
|
13
|
+
assert is_empty({"text": " "}) is False
|
|
14
|
+
assert is_empty({"text": "hello"}) is False
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_is_empty_accepts_lists_and_objects() -> None:
|
|
18
|
+
"""Operator QA 2026-10-28: Is Empty also takes a list (no elements = empty), so a list
|
|
19
|
+
variable filled by a ForEach is checked with one node instead of Array Length + Compare."""
|
|
20
|
+
is_empty = get_builtin_handler("is_empty_string")
|
|
21
|
+
assert is_empty({"text": []}) is True
|
|
22
|
+
assert is_empty({"text": ()}) is True
|
|
23
|
+
assert is_empty({"text": {}}) is True
|
|
24
|
+
assert is_empty({"text": ["a"]}) is False
|
|
25
|
+
assert is_empty({"text": [None]}) is False
|
|
26
|
+
assert is_empty({"text": [[]]}) is False
|
|
27
|
+
assert is_empty({"text": {"k": 1}}) is False
|
|
28
|
+
assert is_empty({"text": 0}) is False
|
|
29
|
+
assert is_empty({"text": False}) is False
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_string_contains_builtin() -> None:
|
|
33
|
+
contains = get_builtin_handler("contains")
|
|
34
|
+
assert contains is not None
|
|
35
|
+
|
|
36
|
+
assert contains({"text": "hello world", "pattern": "world"}) is True
|
|
37
|
+
assert contains({"text": "hello world", "pattern": "WORLD"}) is False
|
|
38
|
+
|
|
39
|
+
# Safer than Python's default behavior where "" is contained in every string.
|
|
40
|
+
assert contains({"text": "hello", "pattern": ""}) is False
|
|
41
|
+
assert contains({"text": "hello", "pattern": None}) is False
|
|
42
|
+
assert contains({"text": None, "pattern": "x"}) is False
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def test_string_replace_builtin_modes() -> None:
|
|
46
|
+
replace = get_builtin_handler("replace")
|
|
47
|
+
assert replace is not None
|
|
48
|
+
|
|
49
|
+
assert replace({"text": "a-b-c", "pattern": "-", "replacement": "_", "mode": "all"}) == "a_b_c"
|
|
50
|
+
assert replace({"text": "a-b-c", "pattern": "-", "replacement": "_", "mode": "first"}) == "a_b-c"
|
|
51
|
+
assert replace({"text": "a-b-c", "pattern": "-", "replacement": "_", "mode": None}) == "a_b_c"
|
|
52
|
+
|
|
53
|
+
# Empty/missing pattern is a no-op.
|
|
54
|
+
assert replace({"text": "a-b-c", "pattern": "", "replacement": "_", "mode": "all"}) == "a-b-c"
|
|
55
|
+
assert replace({"text": "a-b-c", "pattern": None, "replacement": "_", "mode": "all"}) == "a-b-c"
|
|
56
|
+
|
|
57
|
+
# Numeric best-effort support: replace first N occurrences.
|
|
58
|
+
assert replace({"text": "a-b-c-d", "pattern": "-", "replacement": "_", "mode": "2"}) == "a_b_c-d"
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_is_empty_on_a_list_variable_in_a_compiled_flow() -> None:
|
|
62
|
+
"""A list variable filled earlier, read by Get Variable into Is Empty, decides an If (the email-triage shape)."""
|
|
63
|
+
from abstractruntime.core.runtime import Runtime
|
|
64
|
+
from abstractruntime.storage.in_memory import InMemoryLedgerStore, InMemoryRunStore
|
|
65
|
+
from abstractruntime.visualflow_compiler.compiler import compile_flow
|
|
66
|
+
from abstractruntime.visualflow_compiler.visual.executor import visual_to_flow
|
|
67
|
+
from abstractruntime.visualflow_compiler.visual.models import load_visualflow_json
|
|
68
|
+
|
|
69
|
+
x, o = {"id": "exec-in", "type": "execution"}, {"id": "exec-out", "type": "execution"}
|
|
70
|
+
|
|
71
|
+
def node(nid, ntype, inputs=(), outputs=(), **data):
|
|
72
|
+
return {"id": nid, "type": ntype, "data": {"nodeType": ntype, "inputs": list(inputs), "outputs": list(outputs), **data}}
|
|
73
|
+
|
|
74
|
+
def edge(s, sh, t, th):
|
|
75
|
+
return {"source": s, "sourceHandle": sh, "target": t, "targetHandle": th}
|
|
76
|
+
|
|
77
|
+
def run(items):
|
|
78
|
+
nodes = [
|
|
79
|
+
node("start", "on_flow_start", outputs=[o]),
|
|
80
|
+
node("get", "get_var", [{"id": "name", "type": "string"}], [{"id": "value", "type": "array"}], pinDefaults={"name": "triage"}),
|
|
81
|
+
node("empty", "is_empty_string", [{"id": "text", "type": "any"}], [{"id": "result", "type": "boolean"}]),
|
|
82
|
+
node("if", "if", [x, {"id": "condition", "type": "boolean"}], [{"id": "true", "type": "execution"}, {"id": "false", "type": "execution"}]),
|
|
83
|
+
node("none", "on_flow_end", [x, {"id": "response", "type": "string"}], pinDefaults={"response": "none"}),
|
|
84
|
+
node("some", "on_flow_end", [x, {"id": "response", "type": "string"}], pinDefaults={"response": "some"}),
|
|
85
|
+
]
|
|
86
|
+
edges = [
|
|
87
|
+
edge("start", "exec-out", "if", "exec-in"),
|
|
88
|
+
edge("get", "value", "empty", "text"),
|
|
89
|
+
edge("empty", "result", "if", "condition"),
|
|
90
|
+
edge("if", "true", "none", "exec-in"),
|
|
91
|
+
edge("if", "false", "some", "exec-in"),
|
|
92
|
+
]
|
|
93
|
+
vf = load_visualflow_json({"id": "t", "name": "t", "entryNode": "start", "nodes": nodes, "edges": edges})
|
|
94
|
+
rt = Runtime(run_store=InMemoryRunStore(), ledger_store=InMemoryLedgerStore())
|
|
95
|
+
wf = compile_flow(visual_to_flow(vf))
|
|
96
|
+
rid = rt.start(workflow=wf, vars={"triage": items})
|
|
97
|
+
state = rt.tick(workflow=wf, run_id=rid, max_steps=50)
|
|
98
|
+
assert state.status.value == "completed", state.error
|
|
99
|
+
return state.output["response"]
|
|
100
|
+
|
|
101
|
+
assert run([]) == "none"
|
|
102
|
+
assert run([{"id": "m1"}, {"id": "m2"}]) == "some"
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
Requires AbstractMemory 0.4.0 or newer (`abstractmemory.graph`). ADR 0011, backlog 0856.
|
|
2
|
-
|
|
3
|
-
### Upgrade notes (one-way)
|
|
4
|
-
|
|
5
|
-
- AbstractMemory 0.4.0 rewrites a SQLite home's JSON-text vectors as float32 BLOBs on first write; a 0.3.x reader then
|
|
6
|
-
finds no vectors (zero semantic hits, no error). Every process sharing a home or a plane moves to AbstractMemory 0.4.0
|
|
7
|
-
(and so AbstractRuntime 0.15.0) together. See the AbstractMemory 0.4.0 changelog.
|
|
8
|
-
- The JSON-file ledger writes a `ledger_<run_id>.idx` row index beside each ledger; older readers ignore it, and a
|
|
9
|
-
missing or stale index is rebuilt from the ledger.
|
|
10
|
-
|
|
11
|
-
### Added
|
|
12
|
-
|
|
13
|
-
- **Ledger row address** (on 0.14.0's per-run `seq`, ADR 0010): `LedgerStore.get_record(run_id, seq)` returns one
|
|
14
|
-
record ready to read (a terminal row's `$slim` markers resolved against its STARTED row, offloaded leaves
|
|
15
|
-
rehydrated); `find_started_record(run_id, step_id, before_seq=)`. SQLite reads by primary key; the JSON-file backend
|
|
16
|
-
keeps a per-run line-offset index and checks the seq persisted on the line, so a point read is a seek and one line
|
|
17
|
-
parse (0.05 ms at 10,000 rows instead of a 58 ms full parse), and a rewritten file is read by persisted seq, never
|
|
18
|
-
by position.
|
|
19
|
-
- **Step context**: an effect handler reads its own step with
|
|
20
|
-
`abstractruntime.core.step_context.current_step_context(run.run_id)`: `run_id`, `step_id`, `seq` of the attempt's
|
|
21
|
-
STARTED row, `node_id`, `attempt`, `effect_type`. Out of band like the progress callback; `None` outside a runtime
|
|
22
|
-
step; a nested runtime shadows it.
|
|
23
|
-
- **Memory facade** (`abstractruntime.integrations.abstractmemory.memory_facade`): `MemoryFacade` (`open_mind`, `stamp`,
|
|
24
|
-
`stamp_current_step`, `reconstruct_source`, `history`, `sources_of`, `derived_from_source`, `apply_revision`),
|
|
25
|
-
`is_real_run`, and the AbstractMemory names hosts use re-exported unchanged (`GATEWAY_NAMES`). Hosts no longer import
|
|
26
|
-
`abstractmemory`. `reconstruct_source` answers `ok`, `source_gone` or `unsupported`, never raises for a missing
|
|
27
|
-
source. See [AbstractMemory integration](docs/integrations/abstractmemory.md).
|
|
28
|
-
- **Provenance stamping**: `MEMORY_FORM`, `MEMORY_KG_ASSERT` and the `DIARY_WRITE` graph projection add a `sources`
|
|
29
|
-
list to the provenance they write: the `step` ref `(run_id, seq, step_id)` of the writing effect, an `artifact` ref
|
|
30
|
-
for the verbatim / `span_id`, a `diary_entry` ref for a projection. The legacy flat keys stay. A synthetic run id
|
|
31
|
-
(`chat-<session_id>`, `diary:<entity_id>`, ...) is never a `run`/`step` ref: the home-direct chat path carries
|
|
32
|
-
artifact or diary-entry refs only.
|
|
33
|
-
- **`MEMORY_REVISE`** (`EffectType.MEMORY_REVISE`, VisualFlow node `memory_revise`): one revision of a mind (assert /
|
|
34
|
-
close / narrow ops) applied atomically through `MemoryGraph.apply_revision` as a workflow step, its provenance
|
|
35
|
-
stamped with the step that applied it. Handler from `build_memory_kg_effect_handlers` (new optional `journal=`); a
|
|
36
|
-
store that is not a graph home answers a failed outcome naming AbstractMemory backlog 0057; an ungrounded revision
|
|
37
|
-
fails with `ProvenanceRequired`.
|
|
38
|
-
|
|
39
|
-
- **Source integrity** (architect pass): every ref the runtime stamps carries a `digest` (step: sha256 of the STARTED
|
|
40
|
-
record as written, also on the step context; artifact: the sha256 of its bytes; diary entry: the chain
|
|
41
|
-
`record_hash`), and `reconstruct_source` verifies it: new statuses `mismatch` (the bytes changed since the memory
|
|
42
|
-
named them) and `partial` (a `$slim` marker or an `{"$artifact": id}` leaf whose artifact is gone or uncheckable;
|
|
43
|
-
never `ok` with a hole). A step ref resolves only to its STARTED row (a rewritten JSON-file ledger answers
|
|
44
|
-
`source_gone`, never another row).
|
|
45
|
-
- **Owner partitions**: `MEMORY_REVISE` and `MEMORY_KG_ASSERT` write only the run's own owners (its run, its session,
|
|
46
|
-
the global owner); `MEMORY_REVISE` refuses `recorded_at` (record time is the store's); a replayed revision reports
|
|
47
|
-
the memory's sources, not the retry's step.
|
|
48
|
-
- **Persisted JSON-file row index** (`ledger_<run_id>.idx` beside the ledger): a fresh process reads a 100,000-row
|
|
49
|
-
ledger's row in 39 ms instead of 320 ms.
|
|
50
|
-
|
|
51
|
-
### Changed
|
|
52
|
-
|
|
53
|
-
- `AbstractMemory>=0.4.0` (was `>=0.3.2`).
|
|
54
|
-
- SQLite `find_started_record` reads newest-first with `LIMIT 1` (0.01 ms at 10,000 rows instead of 3.5 ms).
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from abstractruntime.visualflow_compiler.visual.builtins import get_builtin_handler
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def test_string_is_empty_builtin() -> None:
|
|
7
|
-
is_empty = get_builtin_handler("is_empty_string")
|
|
8
|
-
assert is_empty is not None
|
|
9
|
-
|
|
10
|
-
assert is_empty({"text": ""}) is True
|
|
11
|
-
assert is_empty({}) is True
|
|
12
|
-
assert is_empty({"text": None}) is True
|
|
13
|
-
assert is_empty({"text": " "}) is False
|
|
14
|
-
assert is_empty({"text": "hello"}) is False
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def test_string_contains_builtin() -> None:
|
|
18
|
-
contains = get_builtin_handler("contains")
|
|
19
|
-
assert contains is not None
|
|
20
|
-
|
|
21
|
-
assert contains({"text": "hello world", "pattern": "world"}) is True
|
|
22
|
-
assert contains({"text": "hello world", "pattern": "WORLD"}) is False
|
|
23
|
-
|
|
24
|
-
# Safer than Python's default behavior where "" is contained in every string.
|
|
25
|
-
assert contains({"text": "hello", "pattern": ""}) is False
|
|
26
|
-
assert contains({"text": "hello", "pattern": None}) is False
|
|
27
|
-
assert contains({"text": None, "pattern": "x"}) is False
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def test_string_replace_builtin_modes() -> None:
|
|
31
|
-
replace = get_builtin_handler("replace")
|
|
32
|
-
assert replace is not None
|
|
33
|
-
|
|
34
|
-
assert replace({"text": "a-b-c", "pattern": "-", "replacement": "_", "mode": "all"}) == "a_b_c"
|
|
35
|
-
assert replace({"text": "a-b-c", "pattern": "-", "replacement": "_", "mode": "first"}) == "a_b-c"
|
|
36
|
-
assert replace({"text": "a-b-c", "pattern": "-", "replacement": "_", "mode": None}) == "a_b_c"
|
|
37
|
-
|
|
38
|
-
# Empty/missing pattern is a no-op.
|
|
39
|
-
assert replace({"text": "a-b-c", "pattern": "", "replacement": "_", "mode": "all"}) == "a-b-c"
|
|
40
|
-
assert replace({"text": "a-b-c", "pattern": None, "replacement": "_", "mode": "all"}) == "a-b-c"
|
|
41
|
-
|
|
42
|
-
# Numeric best-effort support: replace first N occurrences.
|
|
43
|
-
assert replace({"text": "a-b-c-d", "pattern": "-", "replacement": "_", "mode": "2"}) == "a_b_c-d"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.15.0 → abstractruntime-0.15.1}/docs/backlog/completed/001_runtime_kernel.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|