AbstractRuntime 0.4.29__tar.gz → 0.4.33__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/.gitignore +22 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/CHANGELOG.md +242 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/PKG-INFO +29 -18
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/README.md +19 -10
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/README.md +5 -2
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/api.md +34 -6
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/architecture.md +37 -9
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/artifacts.md +27 -0
- abstractruntime-0.4.33/docs/backlog/README.md +179 -0
- abstractruntime-0.4.33/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +96 -0
- abstractruntime-0.4.33/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +90 -0
- abstractruntime-0.4.33/docs/backlog/planned/0233_real_run_cancellation.md +22 -0
- abstractruntime-0.4.33/docs/backlog/planned/026_context_checkpoint_self_compression.md +51 -0
- abstractruntime-0.4.33/docs/backlog/planned/027_quote_provenance_discipline.md +41 -0
- abstractruntime-0.4.33/docs/backlog/planned/028_selective_artifact_rehydration.md +43 -0
- abstractruntime-0.4.33/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +109 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +182 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +139 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_portability/README.md +68 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +166 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +125 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +102 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +103 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +89 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +90 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +95 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +76 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +65 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +105 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +113 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +69 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +123 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +171 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +146 -0
- abstractruntime-0.4.33/docs/backlog/planned/runtime_systemic_reliability/README.md +113 -0
- abstractruntime-0.4.33/docs/backlog/proposed/0069_document_renderer_professional_figures.md +43 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +60 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +56 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +56 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +53 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +53 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +55 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +54 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +64 -0
- abstractruntime-0.4.33/docs/backlog/proposed/runtime_systemic_reliability/README.md +49 -0
- abstractruntime-0.4.33/docs/entity-runtime.md +142 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/faq.md +1 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/getting-started.md +1 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/integrations/abstractcore.md +225 -5
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/limits.md +1 -1
- abstractruntime-0.4.33/docs/tool-approval.md +91 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/troubleshooting.md +1 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/llms-full.txt +686 -52
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/llms.txt +8 -5
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/pyproject.toml +17 -7
- abstractruntime-0.4.33/release-notes.md +25 -0
- abstractruntime-0.4.33/scripts/backfill_diary_edges.py +147 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/__init__.py +69 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/core/config.py +3 -3
- abstractruntime-0.4.33/src/abstractruntime/core/effect_cancellation.py +354 -0
- abstractruntime-0.4.33/src/abstractruntime/core/event_keys.py +140 -0
- abstractruntime-0.4.33/src/abstractruntime/core/health.py +122 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/core/models.py +78 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/core/policy.py +39 -8
- abstractruntime-0.4.33/src/abstractruntime/core/progress_channel.py +108 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/core/runtime.py +1736 -137
- abstractruntime-0.4.33/src/abstractruntime/core/tool_scope.py +71 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/core/vars.py +20 -1
- abstractruntime-0.4.33/src/abstractruntime/documents/__init__.py +13 -0
- abstractruntime-0.4.33/src/abstractruntime/documents/charts.py +373 -0
- abstractruntime-0.4.33/src/abstractruntime/documents/docx.py +596 -0
- abstractruntime-0.4.33/src/abstractruntime/documents/pdf.py +978 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/evidence/recorder.py +132 -2
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/history_bundle.py +391 -38
- abstractruntime-0.4.33/src/abstractruntime/identity/__init__.py +17 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/act_only.py +393 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/chat.py +3769 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/communities.py +432 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/diary.py +605 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/digest.py +274 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/entity_runtime.py +211 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/lease.py +43 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/life.py +4386 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/memory_reader.py +780 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/night_voice.py +248 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/phase_graph.py +538 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/phase_spec.py +187 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/prelude.py +306 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/prompt_overlay.py +192 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/reflection.py +595 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/spec/entity_phases.vendored.json +687 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/substrate.py +159 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/tool_effects.py +205 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/tool_policy.py +447 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/tools.py +1567 -0
- abstractruntime-0.4.33/src/abstractruntime/identity/visit_workflow.py +1227 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/__init__.py +15 -0
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractcore/agora_tools.py +568 -0
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractcore/config_facade.py +1061 -0
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractcore/constants.py +50 -0
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +82 -0
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractcore/default_tools.py +759 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +14 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +155 -13
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +1600 -86
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/factory.py +176 -15
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/host_facade.py +149 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/llm_client.py +3918 -201
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +426 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +1 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/output_specs.py +60 -4
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/run_facade.py +243 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/session_attachments.py +238 -10
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/tool_executor.py +391 -62
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +263 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +341 -2
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractmemory/__init__.py +11 -0
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +512 -0
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractmemory/identity_support.py +269 -0
- abstractruntime-0.4.33/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +842 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/memory/token_budget.py +44 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/rendering/agent_trace_report.py +11 -1
- abstractruntime-0.4.33/src/abstractruntime/scheduler/__init__.py +31 -0
- abstractruntime-0.4.33/src/abstractruntime/scheduler/multi_store.py +379 -0
- abstractruntime-0.4.33/src/abstractruntime/session_history.py +249 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/__init__.py +22 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/base.py +70 -4
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/commands.py +10 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/in_memory.py +6 -4
- abstractruntime-0.4.33/src/abstractruntime/storage/json_files.py +1206 -0
- abstractruntime-0.4.33/src/abstractruntime/storage/lease.py +255 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/ledger_chain.py +70 -30
- abstractruntime-0.4.33/src/abstractruntime/storage/ledger_slim.py +698 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/observable.py +9 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/offloading.py +175 -4
- abstractruntime-0.4.33/src/abstractruntime/storage/serialize.py +106 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/sqlite.py +507 -46
- abstractruntime-0.4.33/src/abstractruntime/storage/steer_sidecar.py +308 -0
- abstractruntime-0.4.33/src/abstractruntime/turn_grounding.py +220 -0
- abstractruntime-0.4.33/src/abstractruntime/utils/atomic_files.py +59 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +1 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +21 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/compiler.py +710 -97
- abstractruntime-0.4.33/src/abstractruntime/visualflow_compiler/visual/code_executor.py +535 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/visual/executor.py +709 -11
- abstractruntime-0.4.33/src/abstractruntime/visualflow_compiler/visual/function_library.py +322 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/visual/models.py +23 -0
- abstractruntime-0.4.33/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +411 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/workflow_bundle/packer.py +23 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/conftest.py +15 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_abstractcore_discovery_facade.py +36 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_abstractcore_host_facade.py +61 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_abstractcore_run_facade.py +132 -0
- abstractruntime-0.4.33/tests/test_agora_agent_alias_identity.py +295 -0
- abstractruntime-0.4.33/tests/test_agora_tools_http.py +374 -0
- abstractruntime-0.4.33/tests/test_analyze_media_addressing_and_walling.py +390 -0
- abstractruntime-0.4.33/tests/test_browser_probe_target_walling.py +71 -0
- abstractruntime-0.4.33/tests/test_budget_law_no_unrequested_caps.py +238 -0
- abstractruntime-0.4.33/tests/test_capability_default_reasoning.py +158 -0
- abstractruntime-0.4.33/tests/test_code_node_restricted_python.py +95 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_command_store.py +35 -0
- abstractruntime-0.4.33/tests/test_config_facade_models_engines.py +502 -0
- abstractruntime-0.4.33/tests/test_crash_ordering_inversions.py +105 -0
- abstractruntime-0.4.33/tests/test_data_registry_facade.py +95 -0
- abstractruntime-0.4.33/tests/test_default_tools_camera_gating.py +343 -0
- abstractruntime-0.4.33/tests/test_default_tools_include_skim_web.py +19 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_default_tools_search_files_executor.py +6 -4
- abstractruntime-0.4.33/tests/test_diary_capture.py +171 -0
- abstractruntime-0.4.33/tests/test_diary_write_rescue.py +120 -0
- abstractruntime-0.4.33/tests/test_directory_lease.py +525 -0
- abstractruntime-0.4.33/tests/test_disabled_toolsets_seam.py +55 -0
- abstractruntime-0.4.33/tests/test_discovery_survives_unbuildable_default.py +152 -0
- abstractruntime-0.4.33/tests/test_document_markdown_tables.py +123 -0
- abstractruntime-0.4.33/tests/test_document_renderers_hr_quote.py +58 -0
- abstractruntime-0.4.33/tests/test_durable_write_discipline.py +287 -0
- abstractruntime-0.4.33/tests/test_effect_cancellation.py +441 -0
- abstractruntime-0.4.33/tests/test_effect_issuance_idempotency.py +248 -0
- abstractruntime-0.4.33/tests/test_effect_payload_stays_json_serializable.py +271 -0
- abstractruntime-0.4.33/tests/test_election_consequence_teaching.py +1373 -0
- abstractruntime-0.4.33/tests/test_emergence_experiment.py +552 -0
- abstractruntime-0.4.33/tests/test_emit_event_uses_wait_index.py +228 -0
- abstractruntime-0.4.33/tests/test_endpoint_profile_route_context.py +211 -0
- abstractruntime-0.4.33/tests/test_entity_awake_memory_fixes.py +1037 -0
- abstractruntime-0.4.33/tests/test_entity_brain_effects.py +592 -0
- abstractruntime-0.4.33/tests/test_entity_chat_driver.py +392 -0
- abstractruntime-0.4.33/tests/test_entity_chat_tools_reflection.py +598 -0
- abstractruntime-0.4.33/tests/test_entity_diary.py +571 -0
- abstractruntime-0.4.33/tests/test_entity_execute_tool.py +163 -0
- abstractruntime-0.4.33/tests/test_entity_fetch_url_tool.py +84 -0
- abstractruntime-0.4.33/tests/test_entity_life_loop.py +1924 -0
- abstractruntime-0.4.33/tests/test_entity_memory_richness.py +825 -0
- abstractruntime-0.4.33/tests/test_entity_phase_graph_conformance.py +219 -0
- abstractruntime-0.4.33/tests/test_entity_recent_memories.py +196 -0
- abstractruntime-0.4.33/tests/test_entity_runtime.py +245 -0
- abstractruntime-0.4.33/tests/test_entity_search_memory.py +268 -0
- abstractruntime-0.4.33/tests/test_entity_sleep_bound_and_yield_attribution.py +117 -0
- abstractruntime-0.4.33/tests/test_entity_substrate_resolution.py +180 -0
- abstractruntime-0.4.33/tests/test_entity_visit_honesty.py +274 -0
- abstractruntime-0.4.33/tests/test_entity_workspace_cap.py +166 -0
- abstractruntime-0.4.33/tests/test_entity_workspace_tools.py +209 -0
- abstractruntime-0.4.33/tests/test_event_wait_index.py +239 -0
- abstractruntime-0.4.33/tests/test_every_path_bearing_tool_is_walled.py +102 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_evidence_recorder.py +46 -1
- abstractruntime-0.4.33/tests/test_evidence_recorder_post_policy_envelope.py +152 -0
- abstractruntime-0.4.33/tests/test_execute_command_output_offload.py +164 -0
- abstractruntime-0.4.33/tests/test_execution_capability_discovery.py +131 -0
- abstractruntime-0.4.33/tests/test_factory_default_retry_policy.py +62 -0
- abstractruntime-0.4.33/tests/test_format_repair_nudge.py +229 -0
- abstractruntime-0.4.33/tests/test_fresh_install_no_provider.py +75 -0
- abstractruntime-0.4.33/tests/test_gateway_facades_c4899.py +137 -0
- abstractruntime-0.4.33/tests/test_git_read_only_refiner.py +122 -0
- abstractruntime-0.4.33/tests/test_hot_path_store_reads.py +466 -0
- abstractruntime-0.4.33/tests/test_indexed_idempotency_lookup.py +524 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_json_file_run_store_children_index.py +15 -8
- abstractruntime-0.4.33/tests/test_json_run_cache_bound.py +48 -0
- abstractruntime-0.4.33/tests/test_json_store_scan_memo.py +375 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_kg_learn_and_recall_contract.py +13 -2
- abstractruntime-0.4.33/tests/test_ledger_chain.py +104 -0
- abstractruntime-0.4.33/tests/test_ledger_record_slimming.py +693 -0
- abstractruntime-0.4.33/tests/test_llm_call_payload_shape_refusal.py +104 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_call_requires_prompt.py +4 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_call_structured_output_fallback.py +63 -0
- abstractruntime-0.4.33/tests/test_llm_call_text_phase_progress.py +187 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_call_truncation_retry_contract.py +41 -10
- abstractruntime-0.4.33/tests/test_llm_call_verbatim_payload_capture.py +76 -0
- abstractruntime-0.4.33/tests/test_llm_client_grounding_tail.py +470 -0
- abstractruntime-0.4.33/tests/test_llm_retry_classification.py +171 -0
- abstractruntime-0.4.33/tests/test_llm_streaming_on_token.py +219 -0
- abstractruntime-0.4.33/tests/test_local_helper_tool_exposure.py +169 -0
- abstractruntime-0.4.33/tests/test_local_residency_host_sweep.py +268 -0
- abstractruntime-0.4.33/tests/test_max_iterations_ceiling.py +88 -0
- abstractruntime-0.4.33/tests/test_media_capability_default_routing.py +309 -0
- abstractruntime-0.4.33/tests/test_media_subprocess.py +152 -0
- abstractruntime-0.4.33/tests/test_memory_appraise_handler.py +303 -0
- abstractruntime-0.4.33/tests/test_memory_communities.py +202 -0
- abstractruntime-0.4.33/tests/test_memory_seam_handlers.py +488 -0
- abstractruntime-0.4.33/tests/test_memory_seam_sqlite_durability.py +169 -0
- abstractruntime-0.4.33/tests/test_model_eject_cancel.py +58 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_model_residency_control_plane.py +4 -0
- abstractruntime-0.4.33/tests/test_model_residency_lock_and_context_estimate.py +1943 -0
- abstractruntime-0.4.33/tests/test_multi_store_scheduler.py +297 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_multimodal_abstractcore_integration.py +109 -0
- abstractruntime-0.4.33/tests/test_native_mlx_application_wiring.py +313 -0
- abstractruntime-0.4.33/tests/test_native_mlx_execution_controls_live.py +133 -0
- abstractruntime-0.4.33/tests/test_native_tool_channel.py +275 -0
- abstractruntime-0.4.33/tests/test_night_voice.py +105 -0
- abstractruntime-0.4.33/tests/test_no_default_provider_refusal_ux.py +96 -0
- abstractruntime-0.4.33/tests/test_offload_answer_chain_c4978.py +154 -0
- abstractruntime-0.4.33/tests/test_offloaded_node_traces_report_unknown_not_zero.py +69 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_packaging_extras.py +6 -6
- abstractruntime-0.4.33/tests/test_parallel_readonly_tool_execution.py +191 -0
- abstractruntime-0.4.33/tests/test_pdf_unicode_rendering.py +74 -0
- abstractruntime-0.4.33/tests/test_personal_cycle.py +556 -0
- abstractruntime-0.4.33/tests/test_phantom_attachment_index.py +187 -0
- abstractruntime-0.4.33/tests/test_phase_graph_artifact_control.py +183 -0
- abstractruntime-0.4.33/tests/test_phase_graph_obedience.py +428 -0
- abstractruntime-0.4.33/tests/test_phase_vocabulary_migration.py +329 -0
- abstractruntime-0.4.33/tests/test_pooled_client_strips_construction_cache_key.py +33 -0
- abstractruntime-0.4.33/tests/test_prompt_cache_fingerprint_stability.py +109 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_prompt_cache_modules.py +208 -45
- abstractruntime-0.4.33/tests/test_prompt_cache_posture_inheritance.py +228 -0
- abstractruntime-0.4.33/tests/test_prompt_cache_thinking_and_prompt_only.py +361 -0
- abstractruntime-0.4.33/tests/test_prompt_overlay.py +361 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_provider_endpoint_profile_resolution.py +119 -0
- abstractruntime-0.4.33/tests/test_provider_pin_routing_isolation.py +170 -0
- abstractruntime-0.4.33/tests/test_read_idle_threading.py +88 -0
- abstractruntime-0.4.33/tests/test_readoption_experiment.py +505 -0
- abstractruntime-0.4.33/tests/test_realize_election.py +272 -0
- abstractruntime-0.4.33/tests/test_remote_client_cancel.py +141 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_remote_llm_client.py +41 -0
- abstractruntime-0.4.33/tests/test_remote_speculation_defaults.py +174 -0
- abstractruntime-0.4.33/tests/test_report_branding.py +157 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_retry_idempotency.py +8 -1
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_run_history_bundle.py +290 -1
- abstractruntime-0.4.33/tests/test_run_scoped_tool_policy.py +85 -0
- abstractruntime-0.4.33/tests/test_run_tool_scope_ceiling.py +308 -0
- abstractruntime-0.4.33/tests/test_runtime_browser_session_boundary.py +58 -0
- abstractruntime-0.4.33/tests/test_runtime_default_provider_model_refresh.py +251 -0
- abstractruntime-0.4.33/tests/test_runtime_health_and_bounded_vars.py +495 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_runtime_install_boundary.py +31 -3
- abstractruntime-0.4.33/tests/test_runtime_start_seeds_tool_support.py +147 -0
- abstractruntime-0.4.33/tests/test_runtime_tick_step_gate.py +141 -0
- abstractruntime-0.4.33/tests/test_send_email_refiner.py +89 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_session_attachments_registry_and_open_tool.py +78 -2
- abstractruntime-0.4.33/tests/test_session_history.py +445 -0
- abstractruntime-0.4.33/tests/test_session_prompt_cache_attribution.py +382 -0
- abstractruntime-0.4.33/tests/test_session_prompt_cache_visibility.py +413 -0
- abstractruntime-0.4.33/tests/test_session_route_stamp.py +132 -0
- abstractruntime-0.4.33/tests/test_shell_tool_exposure.py +275 -0
- abstractruntime-0.4.33/tests/test_speculation_inheritance.py +165 -0
- abstractruntime-0.4.33/tests/test_speculation_reaches_provider_construction.py +128 -0
- abstractruntime-0.4.33/tests/test_start_subworkflow_async_wait.py +177 -0
- abstractruntime-0.4.33/tests/test_start_subworkflow_workspace_inheritance.py +246 -0
- abstractruntime-0.4.33/tests/test_steer_sidecar.py +432 -0
- abstractruntime-0.4.33/tests/test_thinking_inheritance.py +437 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_approval_executor.py +11 -1
- abstractruntime-0.4.33/tests/test_tool_approval_wait_key_identity.py +243 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_calls_idempotency_keys.py +6 -1
- abstractruntime-0.4.33/tests/test_tool_catalog.py +86 -0
- abstractruntime-0.4.33/tests/test_tool_descriptor_registry.py +381 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_executor_error_output_detection.py +12 -0
- abstractruntime-0.4.33/tests/test_tool_inventory_facade.py +48 -0
- abstractruntime-0.4.33/tests/test_tool_invoke_effect.py +123 -0
- abstractruntime-0.4.33/tests/test_tool_policy_and_mounts.py +358 -0
- abstractruntime-0.4.33/tests/test_topic_election_world_model.py +362 -0
- abstractruntime-0.4.33/tests/test_turn_grounding_byte_stability.py +384 -0
- abstractruntime-0.4.33/tests/test_turn_grounding_carriers_a3.py +141 -0
- abstractruntime-0.4.33/tests/test_visit_ab_fixture.py +294 -0
- abstractruntime-0.4.33/tests/test_visit_history_replay_caps.py +161 -0
- abstractruntime-0.4.33/tests/test_visit_midturn_elections.py +205 -0
- abstractruntime-0.4.33/tests/test_visit_midturn_resume.py +281 -0
- abstractruntime-0.4.33/tests/test_visit_workflow.py +537 -0
- abstractruntime-0.4.33/tests/test_visual_agent_output_context_includes_messages.py +355 -0
- abstractruntime-0.4.33/tests/test_visual_agent_skills_block_passthrough.py +137 -0
- abstractruntime-0.4.33/tests/test_visual_entity_memory_nodes.py +244 -0
- abstractruntime-0.4.33/tests/test_visual_flow_end_effect_only_persistence.py +86 -0
- abstractruntime-0.4.33/tests/test_visual_llm_call_partial_override.py +86 -0
- abstractruntime-0.4.33/tests/test_visual_unknown_node_type_refuses.py +137 -0
- abstractruntime-0.4.33/tests/test_visual_wait_event_deadline_passthrough.py +47 -0
- abstractruntime-0.4.33/tests/test_visualflow_agora_react_agent.py +227 -0
- abstractruntime-0.4.33/tests/test_visualflow_continue_on_error.py +124 -0
- abstractruntime-0.4.33/tests/test_visualflow_event_inbox_react_agent.py +221 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_file_nodes_workspace.py +83 -0
- abstractruntime-0.4.33/tests/test_visualflow_function_library.py +500 -0
- abstractruntime-0.4.33/tests/test_visualflow_get_var_node.py +74 -0
- abstractruntime-0.4.33/tests/test_visualflow_pin_expressions.py +931 -0
- abstractruntime-0.4.33/tests/test_w4_feelings_lens.py +141 -0
- abstractruntime-0.4.33/tests/test_wait_event_deadline.py +161 -0
- abstractruntime-0.4.33/tests/test_wait_until_streak.py +164 -0
- abstractruntime-0.4.33/tests/test_wait_until_utc_normalization.py +102 -0
- abstractruntime-0.4.33/tests/test_workspace_policy_absolute_reanchor.py +208 -0
- abstractruntime-0.4.33/tests/test_workspace_prompt_context.py +82 -0
- abstractruntime-0.4.33/tests/test_write_chart.py +249 -0
- abstractruntime-0.4.29/docs/backlog/README.md +0 -99
- abstractruntime-0.4.29/release-notes.md +0 -2
- abstractruntime-0.4.29/src/abstractruntime/core/event_keys.py +0 -62
- abstractruntime-0.4.29/src/abstractruntime/documents/__init__.py +0 -5
- abstractruntime-0.4.29/src/abstractruntime/documents/pdf.py +0 -369
- abstractruntime-0.4.29/src/abstractruntime/identity/__init__.py +0 -7
- abstractruntime-0.4.29/src/abstractruntime/integrations/abstractcore/constants.py +0 -19
- abstractruntime-0.4.29/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -258
- abstractruntime-0.4.29/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -3
- abstractruntime-0.4.29/src/abstractruntime/scheduler/__init__.py +0 -13
- abstractruntime-0.4.29/src/abstractruntime/storage/json_files.py +0 -469
- abstractruntime-0.4.29/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -315
- abstractruntime-0.4.29/tests/test_ledger_chain.py +0 -57
- abstractruntime-0.4.29/tests/test_llm_call_verbatim_payload_capture.py +0 -31
- abstractruntime-0.4.29/tests/test_runtime_start_seeds_tool_support.py +0 -37
- abstractruntime-0.4.29/tests/test_start_subworkflow_async_wait.py +0 -61
- abstractruntime-0.4.29/tests/test_start_subworkflow_workspace_inheritance.py +0 -108
- abstractruntime-0.4.29/tests/test_visual_agent_output_context_includes_messages.py +0 -159
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/LICENSE +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/ROADMAP.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/SECURITY.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/evidence.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/proposal.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/provenance.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/tools-comms.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/examples/README.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/mkdocs.yml +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/pytest.ini +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/README.md +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_schema_enum_switch.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.4.29 → abstractruntime-0.4.33}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -87,3 +87,25 @@ venv.bak/
|
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
.DS_Store
|
|
90
|
+
|
|
91
|
+
# Agent session artifacts
|
|
92
|
+
.cursor/
|
|
93
|
+
|
|
94
|
+
# ---------------------------------------------------------------------------
|
|
95
|
+
# Agent harness and local tooling
|
|
96
|
+
#
|
|
97
|
+
# This repository is worked on with coding agents, and their configuration
|
|
98
|
+
# embeds absolute local paths, hook commands, seat identities and empty API-key
|
|
99
|
+
# slots. None of it belongs in a public repository.
|
|
100
|
+
# ---------------------------------------------------------------------------
|
|
101
|
+
.claude/
|
|
102
|
+
.codex/
|
|
103
|
+
.cursor/
|
|
104
|
+
.agora/
|
|
105
|
+
.abstractcode/
|
|
106
|
+
.mcp.json
|
|
107
|
+
CLAUDE.md
|
|
108
|
+
/AGENTS.md
|
|
109
|
+
abstractcode-export-*.md
|
|
110
|
+
untracked/
|
|
111
|
+
.venv/
|
|
@@ -7,6 +7,244 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.33] - 2026-09-23
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Models and engines for hosts.** `config_facade` passes AbstractCore's
|
|
14
|
+
models and engines features through to hosts, so the Gateway can offer the
|
|
15
|
+
same model browser and engine installer as `abstractcore models` and
|
|
16
|
+
`abstractcore engines` without importing AbstractCore:
|
|
17
|
+
`host_profile`, `engine_inventory`, `engine_status`,
|
|
18
|
+
`engine_install_plan`, `engine_download_url`, `engine_install`,
|
|
19
|
+
`model_catalog`, `list_installed_models`, `model_delete_blockers`,
|
|
20
|
+
`delete_model_artifact`, `start_model_download_job`, `host_jobs_list`,
|
|
21
|
+
`host_job`, `host_job_cancel` and `console_fragment`. Payloads are
|
|
22
|
+
AbstractCore's own (`host_profile_v1`, `engines_status_v1`,
|
|
23
|
+
`model_catalog_v1`, `models_installed_v1`, `host_job_v1`).
|
|
24
|
+
- `models_engines_support()` reports whether the installed AbstractCore has
|
|
25
|
+
these modules. It never raises.
|
|
26
|
+
- `AbstractCoreTooOld` (a `NotImplementedError`) is raised when the installed
|
|
27
|
+
AbstractCore predates these modules. The message names the installed
|
|
28
|
+
version and the upgrade command.
|
|
29
|
+
- `HostActionRefused` carries an HTTP status and a structured body for
|
|
30
|
+
refusals: engine installs not allowed, unknown engine, an install already
|
|
31
|
+
running, a delete blocked by a loaded or shared model. Hosts no longer need
|
|
32
|
+
AbstractCore's exception types to tell refusals apart.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
- The AbstractCore floor is now 2.14.0 in the base install and in the `apple`
|
|
36
|
+
and `gpu` extras.
|
|
37
|
+
|
|
38
|
+
## [0.4.32] - 2026-09-23
|
|
39
|
+
|
|
40
|
+
This release also contains everything listed under 0.4.31, which was never
|
|
41
|
+
published on its own.
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
- **Stop reaches the running effect.** `Runtime.cancel_run(...)` now signals the
|
|
45
|
+
effect that is executing for the run (and for its in-flight descendants), not
|
|
46
|
+
only the stored status. The `LLM_CALL` handler passes the signal to
|
|
47
|
+
AbstractCore as `cancel_event=`, so a local provider stops within one token,
|
|
48
|
+
and the remote client closes its request to the AbstractCore server, which
|
|
49
|
+
treats the disconnect as a cancel. The stopped attempt is recorded as
|
|
50
|
+
`cancelled` (new `StepStatus.CANCELLED`, `EffectOutcome.cancelled`) with
|
|
51
|
+
`cancelled_by`, `reason` and timing fields, is never retried, and nothing
|
|
52
|
+
after it runs. Remaining calls of a tool batch are reported as not started.
|
|
53
|
+
`cancel_run(..., cancelled_by=...)` is a new keyword (default `"api"`).
|
|
54
|
+
- `core/effect_cancellation.py`: `inflight_effects()` lists executing effects;
|
|
55
|
+
`request_model_effects_cancel(provider, model)` stops the effects using a
|
|
56
|
+
model; `kill_inflight_effect(step_id, killed_by=...)` is an in-process hard
|
|
57
|
+
stop for a call that ignores its cancel event.
|
|
58
|
+
- **Model eject stops its calls first.** Local `unload_model_residency`
|
|
59
|
+
cancels the effects using the unloaded model before unloading it, and the
|
|
60
|
+
ledger records `cancelled_by: "model_eject"` with the model named.
|
|
61
|
+
- **Speculation (MTP) controls.** `LLM_CALL.params.speculation` (`False`,
|
|
62
|
+
`True`, or a Core speculation object) and boolean or string `thinking` are
|
|
63
|
+
forwarded by local and remote clients. `_runtime.speculation` sets a
|
|
64
|
+
run-wide preference inherited by subworkflows, Agent loops, delegated
|
|
65
|
+
children and structured-output follow-up calls; an explicit `False` stays
|
|
66
|
+
Off across every boundary. VisualFlow LLM Call and Agent nodes accept a
|
|
67
|
+
`speculation` input. Scoped AbstractCore defaults reach provider
|
|
68
|
+
construction, and `config_facade.normalize_speculation_control()` validates
|
|
69
|
+
host values with Core's vocabulary.
|
|
70
|
+
- **Native MLX execution controls.** Local clients admit concurrent calls only
|
|
71
|
+
when the loaded MLX instance advertises safe scheduling; other instances
|
|
72
|
+
stay serialized through streamed completion. Remote results expose Core's
|
|
73
|
+
`execution`, `speculation`, `performance` and `prompt_cache` metadata.
|
|
74
|
+
New `get_execution_capabilities(model_name=None, provider=None)` on the
|
|
75
|
+
clients and the discovery facade asks the actual execution host without
|
|
76
|
+
loading a model.
|
|
77
|
+
- **Text phase progress.** Every `LLM_CALL` is offered the durable progress
|
|
78
|
+
channel. Providers that report prefill/generation phases produce
|
|
79
|
+
`abstract.progress` ledger events with `kind: "llm"` (`phase`,
|
|
80
|
+
`prompt_tokens`, `cached_tokens`, `fed_tokens`, `generated_tokens`,
|
|
81
|
+
`ttft_s`, `tokens_per_second`). The callback travels beside the effect
|
|
82
|
+
(`core/progress_channel.py`), so `effect.payload` stays JSON-serializable.
|
|
83
|
+
- **Run-tree tool ceiling.** An explicit `allowed_tools` list in `_runtime`, in
|
|
84
|
+
a child run, or in a tool payload is intersected across the run tree
|
|
85
|
+
(`core/tool_scope.py`). Approval policy can remove a prompt but never grant
|
|
86
|
+
a tool outside the ceiling; malformed lists and broken ancestry fail closed.
|
|
87
|
+
- `Runtime.tick(..., step_gate=callable)` lets a host pause a run at the next
|
|
88
|
+
step boundary; the run stays `RUNNING` and a later tick continues.
|
|
89
|
+
- `Runtime.set_default_provider_model(...)` and the pooled client's
|
|
90
|
+
`set_default_provider_model(...)` / `set_capability_defaults(...)` re-point
|
|
91
|
+
the default provider/model without a restart.
|
|
92
|
+
- `abstractruntime.turn_grounding`: `stamp_user_turn_grounding()` writes the
|
|
93
|
+
grounding envelope once into the stored user turn, so each turn's prompt is
|
|
94
|
+
a byte prefix of the next one and provider prompt caches survive across
|
|
95
|
+
turns. Session replay returns the stored bytes.
|
|
96
|
+
- `JsonFileRunStore.list_event_waiters(...)` / `list_event_waiters_by_prefix(...)`
|
|
97
|
+
(optional `EventWaiterQueryableRunStore` protocol, also forwarded by
|
|
98
|
+
`OffloadingRunStore`). `emit_event` uses this index instead of scanning
|
|
99
|
+
every run file.
|
|
100
|
+
- The model receives a description of its workspace scope (default directory,
|
|
101
|
+
access mode, extra roots and exclusions), and out-of-scope path errors list
|
|
102
|
+
the authorized roots.
|
|
103
|
+
- VisualFlow: inline pin expressions (`node.data.pinExpressions`, sandboxed
|
|
104
|
+
with RestrictedPython), `continueOnError` on effect nodes, a `write_chart`
|
|
105
|
+
node, a `write_docx` node, image embedding and branded exports in PDF/DOCX
|
|
106
|
+
renderers, and `shq` / `text_of` sandbox helpers.
|
|
107
|
+
- `abstractruntime.__version__`.
|
|
108
|
+
- The configured reasoning effort on AbstractCore's text capability route is
|
|
109
|
+
applied when a call names no `thinking`.
|
|
110
|
+
- `config_facade.read_email_settings()` and `read_maintenance_settings()`.
|
|
111
|
+
- LLM results carry `route` (the provider, model and `base_url` that actually
|
|
112
|
+
served the call, with a `mismatch` flag).
|
|
113
|
+
- In-process `on_token` streaming callbacks (`set_on_token`) on local and
|
|
114
|
+
pooled clients; `read_idle_timeout_s` for LLM calls.
|
|
115
|
+
- `WAIT_EVENT` accepts a deadline; `_runtime.wait_until_streak` counts
|
|
116
|
+
consecutive `WAIT_UNTIL` parks.
|
|
117
|
+
- `RuntimeHealth` counters, bounded run-vars growth for long-running runs,
|
|
118
|
+
an indexed idempotency lookup, fair scheduling across several run stores
|
|
119
|
+
(`scheduler/multi_store.py`), a steer sidecar store, and durable session
|
|
120
|
+
conversation replay.
|
|
121
|
+
- `history_bundle`: a `detail="replay"` profile and in-band `warnings[]` when a
|
|
122
|
+
bundle cannot be complete.
|
|
123
|
+
- Entity runtime (`abstractruntime.identity`): the per-entity home runtime,
|
|
124
|
+
chat driver, visit workflow, life loop, diary and memory effects
|
|
125
|
+
(`MEMORY_CONSOLIDATE`, `MEMORY_PROBE`, `MEMORY_TEND`, `LIFE_QUERY`,
|
|
126
|
+
`ENTITY_TOOLS_QUERY`, `ENTITY_TOOLS_EXECUTE`), phase graph and entity tools.
|
|
127
|
+
See `docs/entity-runtime.md`.
|
|
128
|
+
- Tool surfaces: `browser_probe` in the `web` toolset (asks for approval by
|
|
129
|
+
default), a camera toolset registered when `abstractcamera` is installed,
|
|
130
|
+
a `git_read_only@v1` approval refiner, and agora hub tools.
|
|
131
|
+
|
|
132
|
+
### Changed
|
|
133
|
+
- Dependency floors: `abstractcore[remote,tools,vision,voice,audio,music]>=2.13.41`,
|
|
134
|
+
`abstractcore[all-apple]>=2.13.41` (`apple` extra),
|
|
135
|
+
`abstractcore[all-gpu]>=2.13.41` (`gpu` extra), `AbstractMemory>=0.3.0`,
|
|
136
|
+
`abstractsemantics>=0.0.5`. `RestrictedPython>=7.0` and `pyyaml>=6.0` are
|
|
137
|
+
declared dependencies.
|
|
138
|
+
- The `gpu` extra's setuptools floor is `>=77.0.3` (was `>=80.10.2`), which
|
|
139
|
+
vLLM's `setuptools<80` requirement can satisfy.
|
|
140
|
+
- Migration: with RestrictedPython installed, VisualFlow Code nodes always run
|
|
141
|
+
under its policy. Augmented assignment on subscripts (`d["k"] += 1`) is
|
|
142
|
+
refused; rewrite it as read, modify, write.
|
|
143
|
+
- The default iteration budget (`RuntimeConfig.max_iterations` and the
|
|
144
|
+
Agent-node fallback) is 20. Workflow-declared values still win.
|
|
145
|
+
- LLM calls default to `read_idle_timeout_s=300`: a stream that delivers
|
|
146
|
+
nothing for 5 minutes is aborted. Pass `read_idle_timeout_s: None` in
|
|
147
|
+
`llm_kwargs` to disable it.
|
|
148
|
+
- Tool approval waits use a unique, replay-stable key per approval
|
|
149
|
+
(`tool_approval:{run_id}:{node_id}:{effect_identity}`). Runs already
|
|
150
|
+
waiting on an older key can still be approved.
|
|
151
|
+
- A connected VisualFlow node of an unknown type fails compilation with
|
|
152
|
+
`UnknownNodeTypeError` instead of running as a no-op.
|
|
153
|
+
- Terminal ledger records are slimmer, the offloading ledger store is used by
|
|
154
|
+
the durable factories, and hot-path store reads avoid full-document parses.
|
|
155
|
+
- Deterministic LLM client errors and prompt-cache binding failures are not
|
|
156
|
+
retried.
|
|
157
|
+
|
|
158
|
+
### Fixed
|
|
159
|
+
- A per-call provider pin reaches the provider it names: pooled clients no
|
|
160
|
+
longer hand the default endpoint's `base_url` / `api_key` to other providers.
|
|
161
|
+
- Catalog discovery works when the default text client cannot be built.
|
|
162
|
+
- A fresh install with no provider configured constructs its runtime; calls
|
|
163
|
+
without a provider fail with a message naming what to configure.
|
|
164
|
+
- The session prompt-cache prefix is prepared with the `thinking` value the
|
|
165
|
+
call generates with, and prompt-only calls under a runtime-derived key no
|
|
166
|
+
longer append to their own cache.
|
|
167
|
+
- The remote client forwards `thinking`; streamed reasoning keeps the complete
|
|
168
|
+
final text.
|
|
169
|
+
- Effect-only paths into a VisualFlow End node no longer copy runtime
|
|
170
|
+
bookkeeping into the result.
|
|
171
|
+
- Visual `llm_call` nodes forward provider and model independently.
|
|
172
|
+
- Native tool calls are kept by the chat driver.
|
|
173
|
+
- `JsonlCommandStore.append` fsyncs before returning.
|
|
174
|
+
- Run-output offload reduces the largest children first, so a small answer
|
|
175
|
+
stays inline next to a large scratchpad.
|
|
176
|
+
- The JSON run store cache is LRU-bounded; hash-chained ledgers no longer fork
|
|
177
|
+
under concurrent handles.
|
|
178
|
+
- Entity-lane `execute_command` kills its whole process tree on timeout.
|
|
179
|
+
- PDF export renders scientific and typographic glyphs.
|
|
180
|
+
|
|
181
|
+
## [0.4.31] - 2026-08-27
|
|
182
|
+
|
|
183
|
+
Never published separately; these changes ship in 0.4.32.
|
|
184
|
+
|
|
185
|
+
### Added
|
|
186
|
+
- Host facade methods `get_memory_snapshot()`, `list_session_prompt_caches(session_id=None)`, and
|
|
187
|
+
`clear_session_prompt_caches(session_id)`. Hosts can read the Core-owned host memory snapshot
|
|
188
|
+
(RAM, process RSS, device allocation) and enumerate or clear live session prompt caches per
|
|
189
|
+
session across local, multi-local, and remote runtimes. The three methods are optional in the
|
|
190
|
+
LLM-client contract: a configured client that does not implement one still binds, and the facade
|
|
191
|
+
answers `{"ok": false, "supported": false, ...}` for that call.
|
|
192
|
+
- Session attribution on derived prompt-cache keys. When Runtime injects the session-scoped
|
|
193
|
+
prompt-cache key for a text/chat `LLM_CALL`, the client stamps `session_id`, `run_id`,
|
|
194
|
+
`workflow_id`, `node_id`, and `namespace` into the cache entry's metadata after each generate —
|
|
195
|
+
locally through the provider's key-meta contract, remotely via `POST /acore/prompt_cache/key_meta`
|
|
196
|
+
(skipped for servers without the route). Caller-supplied `prompt_cache_key`s and binding keys are
|
|
197
|
+
never stamped, so clearing a session cannot destroy caches shared across sessions. Session caches
|
|
198
|
+
are not cleared automatically when a run ends; clearing stays an explicit host operation.
|
|
199
|
+
- Local `list_model_residency` merges AbstractCore's host-wide loaded-model sweep into
|
|
200
|
+
text-generation listings: models resident on host-local provider servers (for example Ollama or
|
|
201
|
+
LM Studio) now appear with `source: "provider_server"` even when they were not loaded through
|
|
202
|
+
this runtime. Rows loaded by this runtime win deduplication and absorb the sweep's size fields.
|
|
203
|
+
- Model-residency locks. The host facade and all execution modes expose
|
|
204
|
+
`lock_model_residency(...)`, `unlock_model_residency(...)`, and `get_context_estimate(...)`,
|
|
205
|
+
each accepting an optional payload mapping and/or keyword arguments (keyword arguments win on
|
|
206
|
+
conflicts). A locked model refuses `unload_model_residency` with a structured
|
|
207
|
+
`{"ok": false, "error": "model_locked", ...}` payload instead of an exception; `force=true`
|
|
208
|
+
unloads it, and the lock is released only after the unload succeeds. Lock requires
|
|
209
|
+
provider-verified residency: a warm client or configured default alone is configuration, not
|
|
210
|
+
memory, and locking a non-resident pair refuses with
|
|
211
|
+
`{"ok": false, "error": "model_not_resident", ...}` (load with `lock: true` instead); unlock
|
|
212
|
+
never requires residency, so a locked-but-since-evicted pair can always be released, and the
|
|
213
|
+
Ollama keep-alive restore is skipped for a non-resident model so unlock never loads it back as
|
|
214
|
+
a side effect. Local clients enforce the
|
|
215
|
+
lock per `(provider, model)` pair, reinforce it best-effort with Ollama's `keep_alive` knob
|
|
216
|
+
(reported under `provider_side`), refuse foreign runtime ids with a not-found payload, and
|
|
217
|
+
exempt locked pairs from the multi-local pool eviction when the default provider/model is
|
|
218
|
+
re-pointed (a locked pair that becomes the new default identity is rebuilt and its lock cleared,
|
|
219
|
+
with a logged warning). Remote clients relay `POST /acore/models/lock|unlock` and convert the
|
|
220
|
+
server's HTTP 409 refusals into the same structured payloads (`model_locked` on unload,
|
|
221
|
+
`model_not_resident` on lock). The three methods are
|
|
222
|
+
optional in the LLM-client contract, degrading to `{"ok": false, "supported": false, ...}` at
|
|
223
|
+
the facade; locks apply to text-generation runtimes only.
|
|
224
|
+
- `MODEL_RESIDENCY` effect operations `lock` and `unlock`, with the same soft-fail semantics as
|
|
225
|
+
the existing operations; on `unload`, `force` is forwarded only when authored in the effect
|
|
226
|
+
payload.
|
|
227
|
+
- `get_context_estimate(...)` relays AbstractCore's analytical context-fit estimator: in-process
|
|
228
|
+
for local clients (defaulting to the client's provider/model identity), via
|
|
229
|
+
`GET /acore/models/context_estimate` for remote clients.
|
|
230
|
+
- Local text-residency rows carry AbstractCore's registry-declared `modalities` (omitted on a
|
|
231
|
+
registry miss; `input.image` is stripped with `modalities_note: "vision_unusable"` when the
|
|
232
|
+
provider reports its vision lane unusable), the serving host's identity (`host_id` /
|
|
233
|
+
`host_name`), and runtime-owned lock truth (`locked` / `lockable`); provider claims cannot
|
|
234
|
+
supply lock state. `pinned` on local rows is a truthful alias of `locked` (same value, Core
|
|
235
|
+
parity), never the default-identity flag — `default` alone marks the client's default pair, so
|
|
236
|
+
a configured capability default is no longer presented as pinned. Remote listings keep the
|
|
237
|
+
Core server's row identity and are never re-stamped
|
|
238
|
+
with the client's.
|
|
239
|
+
|
|
240
|
+
### Changed
|
|
241
|
+
- Residency rows normalize provider-reported `size` / `size_vram` extras to `size_bytes` /
|
|
242
|
+
`size_vram_bytes` across local and remote listings; the original fields are kept.
|
|
243
|
+
- `unload_model_residency` also drops the runtime's client-side prompt-cache mirrors for the
|
|
244
|
+
unloaded model, alongside AbstractCore's clearing of the in-provider cache stores.
|
|
245
|
+
- Raised the AbstractCore dependency floor to `abstractcore>=2.13.40`, the release that provides
|
|
246
|
+
the shared memory/residency utility surface and the prompt-cache `key_meta` endpoint.
|
|
247
|
+
|
|
10
248
|
## [0.4.29] - 2026-06-14
|
|
11
249
|
|
|
12
250
|
### Changed
|
|
@@ -617,7 +855,10 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
617
855
|
|
|
618
856
|
Initial development version with basic proof-of-concept features.
|
|
619
857
|
|
|
620
|
-
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.
|
|
858
|
+
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.33...HEAD
|
|
859
|
+
[0.4.33]: https://github.com/lpalbou/abstractruntime/compare/v0.4.32...v0.4.33
|
|
860
|
+
[0.4.32]: https://github.com/lpalbou/abstractruntime/compare/v0.4.29...v0.4.32
|
|
861
|
+
[0.4.31]: https://github.com/lpalbou/abstractruntime/compare/v0.4.29...v0.4.31
|
|
621
862
|
[0.4.29]: https://github.com/lpalbou/abstractruntime/compare/v0.4.28...v0.4.29
|
|
622
863
|
[0.4.28]: https://github.com/lpalbou/abstractruntime/compare/v0.4.27...v0.4.28
|
|
623
864
|
[0.4.27]: https://github.com/lpalbou/abstractruntime/compare/v0.4.26...v0.4.27
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.33
|
|
4
4
|
Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
|
|
5
5
|
Project-URL: AbstractCore (website), https://www.abstractcore.ai/
|
|
6
6
|
Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
|
|
@@ -20,9 +20,9 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
|
-
Requires-Dist: abstractcore[audio,music,remote,tools,vision,voice]>=2.
|
|
24
|
-
Requires-Dist: abstractmemory>=0.
|
|
25
|
-
Requires-Dist: abstractsemantics>=0.0.
|
|
23
|
+
Requires-Dist: abstractcore[audio,music,remote,tools,vision,voice]>=2.14.0
|
|
24
|
+
Requires-Dist: abstractmemory>=0.3.0
|
|
25
|
+
Requires-Dist: abstractsemantics>=0.0.5
|
|
26
26
|
Requires-Dist: anyio<5.0.0,>=4.12.1
|
|
27
27
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
28
28
|
Requires-Dist: openai<2.0.0,>=1.109.1
|
|
@@ -30,18 +30,20 @@ Requires-Dist: pandas<3.0.0,>=1.0.0
|
|
|
30
30
|
Requires-Dist: pillow<13.0.0,>=10.0.0
|
|
31
31
|
Requires-Dist: pypdf<7.0.0,>=6.0.0
|
|
32
32
|
Requires-Dist: python-pptx<2.0.0,>=1.0.2
|
|
33
|
+
Requires-Dist: pyyaml>=6.0
|
|
33
34
|
Requires-Dist: reportlab<5.0.0,>=4.0.0
|
|
35
|
+
Requires-Dist: restrictedpython>=7.0
|
|
34
36
|
Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
|
|
35
37
|
Provides-Extra: apple
|
|
36
|
-
Requires-Dist: abstractcore[all-apple]>=2.
|
|
38
|
+
Requires-Dist: abstractcore[all-apple]>=2.14.0; extra == 'apple'
|
|
37
39
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
|
|
38
40
|
Provides-Extra: docs
|
|
39
41
|
Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
|
|
40
42
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
41
43
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
42
44
|
Provides-Extra: gpu
|
|
43
|
-
Requires-Dist: abstractcore[all-gpu]>=2.
|
|
44
|
-
Requires-Dist: setuptools<82.0.0,>=
|
|
45
|
+
Requires-Dist: abstractcore[all-gpu]>=2.14.0; extra == 'gpu'
|
|
46
|
+
Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
|
|
45
47
|
Provides-Extra: test
|
|
46
48
|
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
47
49
|
Description-Content-Type: text/markdown
|
|
@@ -52,7 +54,7 @@ Description-Content-Type: text/markdown
|
|
|
52
54
|
|
|
53
55
|
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.
|
|
54
56
|
|
|
55
|
-
**Version:** 0.4.
|
|
57
|
+
**Version:** 0.4.33 • **Python:** 3.10+
|
|
56
58
|
|
|
57
59
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
58
60
|
|
|
@@ -80,17 +82,18 @@ Remote-light runtime:
|
|
|
80
82
|
pip install abstractruntime
|
|
81
83
|
```
|
|
82
84
|
|
|
83
|
-
The base install includes AbstractCore 2.
|
|
85
|
+
The base install includes AbstractCore 2.14.0 or newer with remote provider,
|
|
84
86
|
tool, vision, voice, audio, and music integration, plus the
|
|
85
87
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
86
88
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
87
89
|
sentence-transformer embeddings are not selected unless you choose a hardware
|
|
88
90
|
profile or another package-specific local extra.
|
|
89
91
|
|
|
90
|
-
VisualFlow
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
`
|
|
92
|
+
VisualFlow document nodes use permissive dependencies in Runtime's base install:
|
|
93
|
+
`Read PDF` extracts text and metadata with `pypdf`, `Write PDF` renders text or
|
|
94
|
+
Markdown-style report content to real PDF bytes with `reportlab`, and
|
|
95
|
+
`Write DOCX` renders Markdown-style report content to Word-compatible `.docx`
|
|
96
|
+
bytes with the Python standard library.
|
|
94
97
|
|
|
95
98
|
Native Python hardware profiles add local inferencer stacks:
|
|
96
99
|
|
|
@@ -143,7 +146,7 @@ state = rt.resume(
|
|
|
143
146
|
assert state.status.value == "completed"
|
|
144
147
|
```
|
|
145
148
|
|
|
146
|
-
## What’s included (v0.4.
|
|
149
|
+
## What’s included (v0.4.33)
|
|
147
150
|
|
|
148
151
|
Kernel (import-light):
|
|
149
152
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -151,7 +154,10 @@ Kernel (import-light):
|
|
|
151
154
|
- durable waits/events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
|
|
152
155
|
- append-only ledger (`StepRecord`) + node traces (`vars["_runtime"]["node_traces"]`)
|
|
153
156
|
- retries/idempotency hooks: `src/abstractruntime/core/policy.py`
|
|
154
|
-
- runtime-aware limits (`_limits`) with a default iteration budget of
|
|
157
|
+
- runtime-aware limits (`_limits`) with a default iteration budget of 20 (`docs/limits.md`)
|
|
158
|
+
- Stop that reaches the running effect: `Runtime.cancel_run(...)` signals the in-flight model or tool call, which ends as a `cancelled` ledger record (never retried); a model unload stops the calls using that model first (`docs/api.md`)
|
|
159
|
+
- host pause at step boundaries: `Runtime.tick(..., step_gate=...)`
|
|
160
|
+
- run-tree tool ceiling: an explicit `allowed_tools` list can only narrow across child runs, and approval policy never widens it
|
|
155
161
|
|
|
156
162
|
Durability + storage:
|
|
157
163
|
- stores: in-memory, JSON/JSONL, SQLite (`src/abstractruntime/storage/*`)
|
|
@@ -165,20 +171,25 @@ Drivers + distribution:
|
|
|
165
171
|
- VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
|
|
166
172
|
- VisualFlow multi-entry execution lowering for fan-in routes and per-entry input overrides (`docs/workflow-bundles.md`)
|
|
167
173
|
- VisualFlow LLM Call and Agent nodes propagate Core generation params such as
|
|
168
|
-
`thinking` through Runtime effects.
|
|
174
|
+
`thinking` and `speculation` through Runtime effects; `_runtime.speculation`
|
|
175
|
+
sets a run-wide MTP preference that nested workflows and Agent loops inherit. Provider Models nodes can apply Core
|
|
169
176
|
`capability_route` filters so run-time model discovery matches Gateway/Flow
|
|
170
177
|
authoring.
|
|
171
178
|
- VisualFlow image/video nodes and Runtime media helpers preserve task-specific
|
|
172
179
|
Core media controls, including `count`/`n`, `seeds`, ordered
|
|
173
180
|
`lora_adapters`, and video `flow_shift`, while keeping provider/model/task
|
|
174
181
|
truth in AbstractCore and AbstractVision.
|
|
182
|
+
- `history_bundle` now exports replay-safe `resolved_actions` summaries derived
|
|
183
|
+
from Core request/output route resolution, so thin clients can reconstruct
|
|
184
|
+
what capability ran without reverse-engineering prompt prose.
|
|
175
185
|
- VisualFlow structured LLM/Agent results preserve `response` as text and expose
|
|
176
186
|
the schema-conformant object on `data`, so Break Object and Switch can consume
|
|
177
187
|
fields without reparsing the response string.
|
|
178
188
|
- run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
|
|
179
189
|
|
|
180
190
|
Runtime-owned integrations:
|
|
181
|
-
- AbstractCore (LLM + tools, `MODEL_RESIDENCY
|
|
191
|
+
- AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
192
|
+
- AbstractCore models and engines for hosts (AbstractCore 2.14.0+): `config_facade` passes through the host profile, local-engine status and installs, the model catalog with fit verdicts, installed models, deletes, host jobs and the embeddable console screens: `docs/integrations/abstractcore.md#models-engines-and-host-jobs-config-facade`
|
|
182
193
|
- For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
|
|
183
194
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
184
195
|
depends on the light AbstractMemory contract; hosts choose storage backends
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
6
6
|
|
|
7
|
-
**Version:** 0.4.
|
|
7
|
+
**Version:** 0.4.33 • **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
|
|
|
@@ -32,17 +32,18 @@ Remote-light runtime:
|
|
|
32
32
|
pip install abstractruntime
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
The base install includes AbstractCore 2.
|
|
35
|
+
The base install includes AbstractCore 2.14.0 or newer with remote provider,
|
|
36
36
|
tool, vision, voice, audio, and music integration, plus the
|
|
37
37
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
38
38
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
39
39
|
sentence-transformer embeddings are not selected unless you choose a hardware
|
|
40
40
|
profile or another package-specific local extra.
|
|
41
41
|
|
|
42
|
-
VisualFlow
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
`
|
|
42
|
+
VisualFlow document nodes use permissive dependencies in Runtime's base install:
|
|
43
|
+
`Read PDF` extracts text and metadata with `pypdf`, `Write PDF` renders text or
|
|
44
|
+
Markdown-style report content to real PDF bytes with `reportlab`, and
|
|
45
|
+
`Write DOCX` renders Markdown-style report content to Word-compatible `.docx`
|
|
46
|
+
bytes with the Python standard library.
|
|
46
47
|
|
|
47
48
|
Native Python hardware profiles add local inferencer stacks:
|
|
48
49
|
|
|
@@ -95,7 +96,7 @@ state = rt.resume(
|
|
|
95
96
|
assert state.status.value == "completed"
|
|
96
97
|
```
|
|
97
98
|
|
|
98
|
-
## What’s included (v0.4.
|
|
99
|
+
## What’s included (v0.4.33)
|
|
99
100
|
|
|
100
101
|
Kernel (import-light):
|
|
101
102
|
- workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
|
|
@@ -103,7 +104,10 @@ Kernel (import-light):
|
|
|
103
104
|
- durable waits/events: `WAIT_EVENT`, `WAIT_UNTIL`, `ASK_USER`, `EMIT_EVENT`
|
|
104
105
|
- append-only ledger (`StepRecord`) + node traces (`vars["_runtime"]["node_traces"]`)
|
|
105
106
|
- retries/idempotency hooks: `src/abstractruntime/core/policy.py`
|
|
106
|
-
- runtime-aware limits (`_limits`) with a default iteration budget of
|
|
107
|
+
- runtime-aware limits (`_limits`) with a default iteration budget of 20 (`docs/limits.md`)
|
|
108
|
+
- Stop that reaches the running effect: `Runtime.cancel_run(...)` signals the in-flight model or tool call, which ends as a `cancelled` ledger record (never retried); a model unload stops the calls using that model first (`docs/api.md`)
|
|
109
|
+
- host pause at step boundaries: `Runtime.tick(..., step_gate=...)`
|
|
110
|
+
- run-tree tool ceiling: an explicit `allowed_tools` list can only narrow across child runs, and approval policy never widens it
|
|
107
111
|
|
|
108
112
|
Durability + storage:
|
|
109
113
|
- stores: in-memory, JSON/JSONL, SQLite (`src/abstractruntime/storage/*`)
|
|
@@ -117,20 +121,25 @@ Drivers + distribution:
|
|
|
117
121
|
- VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
|
|
118
122
|
- VisualFlow multi-entry execution lowering for fan-in routes and per-entry input overrides (`docs/workflow-bundles.md`)
|
|
119
123
|
- VisualFlow LLM Call and Agent nodes propagate Core generation params such as
|
|
120
|
-
`thinking` through Runtime effects.
|
|
124
|
+
`thinking` and `speculation` through Runtime effects; `_runtime.speculation`
|
|
125
|
+
sets a run-wide MTP preference that nested workflows and Agent loops inherit. Provider Models nodes can apply Core
|
|
121
126
|
`capability_route` filters so run-time model discovery matches Gateway/Flow
|
|
122
127
|
authoring.
|
|
123
128
|
- VisualFlow image/video nodes and Runtime media helpers preserve task-specific
|
|
124
129
|
Core media controls, including `count`/`n`, `seeds`, ordered
|
|
125
130
|
`lora_adapters`, and video `flow_shift`, while keeping provider/model/task
|
|
126
131
|
truth in AbstractCore and AbstractVision.
|
|
132
|
+
- `history_bundle` now exports replay-safe `resolved_actions` summaries derived
|
|
133
|
+
from Core request/output route resolution, so thin clients can reconstruct
|
|
134
|
+
what capability ran without reverse-engineering prompt prose.
|
|
127
135
|
- VisualFlow structured LLM/Agent results preserve `response` as text and expose
|
|
128
136
|
the schema-conformant object on `data`, so Break Object and Switch can consume
|
|
129
137
|
fields without reparsing the response string.
|
|
130
138
|
- run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
|
|
131
139
|
|
|
132
140
|
Runtime-owned integrations:
|
|
133
|
-
- AbstractCore (LLM + tools, `MODEL_RESIDENCY
|
|
141
|
+
- AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
|
|
142
|
+
- AbstractCore models and engines for hosts (AbstractCore 2.14.0+): `config_facade` passes through the host profile, local-engine status and installs, the model catalog with fit verdicts, installed models, deletes, host jobs and the embeddable console screens: `docs/integrations/abstractcore.md#models-engines-and-host-jobs-config-facade`
|
|
134
143
|
- For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
|
|
135
144
|
- AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
|
|
136
145
|
depends on the light AbstractMemory contract; hosts choose storage backends
|
|
@@ -27,12 +27,15 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
|
|
|
27
27
|
- `troubleshooting.md` — symptom-oriented setup, runtime, and integration fixes
|
|
28
28
|
- `manual_testing.md` — manual smoke tests and how to run the test suite
|
|
29
29
|
- `artifacts.md` — Runtime artifact identity, descriptors, provenance, catalog search, and access stats
|
|
30
|
-
- `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
|
|
30
|
+
- `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, model-residency listings and locks, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
|
|
31
|
+
- run history bundle replay now also exports `resolved_actions` summaries for cross-client capability replay; see `api.md` and `integrations/abstractcore.md`
|
|
31
32
|
- `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
|
|
32
|
-
- `
|
|
33
|
+
- `tool-approval.md` — tool risk tiers, the run-policy rank ceiling, and per-call refiners (the `send_email` self-recipient rule)
|
|
34
|
+
- `api.md#workflowbundles-flow-and-visualflow-distribution` — VisualFlow compiler APIs, media nodes, and document nodes (`read_pdf` / `write_pdf` / `write_docx`)
|
|
33
35
|
|
|
34
36
|
## Features (reference)
|
|
35
37
|
|
|
38
|
+
- `entity-runtime.md` — per-entity runtimes for summoned entities: homes, the one-writer lease, act-only diary privacy (`$act_only` refs), durable visit waits with deadlines
|
|
36
39
|
- `evidence.md` — artifact-backed evidence capture for external-boundary tools
|
|
37
40
|
- `mcp-worker.md` — MCP worker CLI (`abstractruntime-mcp-worker`)
|
|
38
41
|
- `snapshots.md` — snapshot/bookmark model and stores
|
|
@@ -64,12 +64,24 @@ Implementation: `src/abstractruntime/core/runtime.py`.
|
|
|
64
64
|
|
|
65
65
|
- `Runtime.start(workflow, vars=..., actor_id=..., session_id=...) -> run_id`
|
|
66
66
|
- creates and persists a new `RunState`
|
|
67
|
-
- `Runtime.tick(workflow, run_id, max_steps
|
|
67
|
+
- `Runtime.tick(workflow, run_id, max_steps=..., step_gate=None) -> RunState`
|
|
68
68
|
- executes node handlers and effects until the run becomes `WAITING`, `COMPLETED`, `FAILED`, or `CANCELLED`
|
|
69
|
+
- optional `step_gate()` is consulted at every step boundary; when it returns `False` the tick returns the persisted state and the run stays `RUNNING` (a later tick continues where it stopped)
|
|
69
70
|
- `Runtime.resume(workflow, run_id, wait_key, payload, max_steps=...) -> RunState`
|
|
70
71
|
- validates the `wait_key`, writes `payload` to `WaitState.result_key` (if set), and continues from `WaitState.resume_to_node`
|
|
71
72
|
- `Runtime.get_state(run_id) -> RunState` and `Runtime.get_ledger(run_id) -> list[dict]`
|
|
72
73
|
- host-facing read APIs for checkpoints and the append-only ledger
|
|
74
|
+
- `Runtime.cancel_run(run_id, reason=None, cancelled_by="api") -> RunState`
|
|
75
|
+
- persists `CANCELLED`, then signals every effect of that run (and its in-flight descendants) executing in this process; the running attempt is recorded as `cancelled` (`StepStatus.CANCELLED`, never retried) with `cancelled_by` and `reason`, and no further effect starts
|
|
76
|
+
- `Runtime.set_default_provider_model(provider=..., model=...)`
|
|
77
|
+
- re-points the default provider/model seeded into new runs; pair it with the pooled client's `set_default_provider_model(...)` so both agree
|
|
78
|
+
|
|
79
|
+
Effect cancellation helpers (`src/abstractruntime/core/effect_cancellation.py`):
|
|
80
|
+
- `inflight_effects(run_ids=None)` lists executing effects (run, step, provider, model, elapsed time)
|
|
81
|
+
- `request_model_effects_cancel(provider, model, cancelled_by="model_eject")` stops the effects using a model before it is unloaded; local `unload_model_residency` calls it for you
|
|
82
|
+
- `kill_inflight_effect(step_id, killed_by=...)` is an in-process hard stop for a call that ignores its cancel event (it cannot interrupt a thread blocked inside one native call)
|
|
83
|
+
|
|
84
|
+
Tool scope: an explicit `allowed_tools` list in `run.vars["_runtime"]`, in a child run's `_runtime`, or in a `TOOL_CALLS` payload is a ceiling intersected across the run tree (`src/abstractruntime/core/tool_scope.py`). Approval policy can remove a prompt but can never grant a tool outside it; a missing key means unrestricted and an empty list denies every tool.
|
|
73
85
|
|
|
74
86
|
For the execution model (ledger records, effect outcomes, waits), see `architecture.md`.
|
|
75
87
|
|
|
@@ -170,12 +182,14 @@ VisualFlow authoring note (media and document nodes):
|
|
|
170
182
|
follow the shared canonical contract: `rel/path` for the main workspace root
|
|
171
183
|
and `mount_alias/rel/path` for approved mounts. `read_pdf` extracts text and
|
|
172
184
|
metadata from PDF paths with `pypdf`; `write_pdf` renders text or
|
|
173
|
-
Markdown-style content to real PDF bytes with `reportlab`; `
|
|
174
|
-
|
|
185
|
+
Markdown-style content to real PDF bytes with `reportlab`; `write_docx`
|
|
186
|
+
renders Markdown-style content to real `.docx` bytes with the standard
|
|
187
|
+
library; `list_folder_files` enumerates workspace-scoped folders with
|
|
188
|
+
family/extension filters;
|
|
175
189
|
`import_workspace_file` snapshots a workspace file into a durable artifact;
|
|
176
190
|
`read_artifact` projects saved file content back out as text/JSON/bounded
|
|
177
191
|
binary metadata; and `export_artifact` writes a durable artifact back to a
|
|
178
|
-
workspace path. PDF bytes are written to the workspace path and only
|
|
192
|
+
workspace path. PDF/DOCX bytes are written to the workspace path and only
|
|
179
193
|
JSON-safe metadata/path values are stored in run state. In local Runtime-only
|
|
180
194
|
runs with no workspace scope, relative file-node paths still fall back to the
|
|
181
195
|
process working directory.
|
|
@@ -195,12 +209,14 @@ Implementation: `src/abstractruntime/history_bundle.py`.
|
|
|
195
209
|
- `persist_workflow_snapshot(...)`
|
|
196
210
|
|
|
197
211
|
This produces a portable record of a run’s state + ledger + artifacts suitable for debugging/review.
|
|
212
|
+
When available, it also includes `resolved_actions`: bounded capability/action summaries derived
|
|
213
|
+
from Core route resolution and persisted from `LLM_CALL` results.
|
|
198
214
|
|
|
199
215
|
## Runtime-owned integrations
|
|
200
216
|
|
|
201
217
|
### AbstractCore (LLM + tools)
|
|
202
218
|
|
|
203
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.
|
|
219
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.14.0 or newer is part of the base install).
|
|
204
220
|
|
|
205
221
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
206
222
|
|
|
@@ -214,7 +230,10 @@ Entry points:
|
|
|
214
230
|
- effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
|
|
215
231
|
- tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
|
|
216
232
|
- discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`, `list_vision_adapters`)
|
|
217
|
-
- host-facade client delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `get_model_residency_capabilities`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
|
|
233
|
+
- host-facade client delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `get_model_residency_capabilities`, `list_model_residency`, `load_model_residency`, `unload_model_residency`, `get_memory_snapshot`, `list_session_prompt_caches`, `clear_session_prompt_caches`, `lock_model_residency`, `unlock_model_residency`, `get_context_estimate`); the last six are optional in the client contract, and the facade returns `{"ok": false, "supported": false, ...}` when the configured client does not implement one
|
|
234
|
+
- `lock_model_residency`, `unlock_model_residency`, and `get_context_estimate` accept an optional payload mapping and/or keyword arguments (keyword arguments win on conflicts); a lock requires provider-verified residency — locking a non-resident pair refuses with a structured `model_not_resident` payload (load with `lock: true` instead; remotely the Core server's HTTP 409 refusal is converted to the same payload), while unlock never requires residency so a locked-but-evicted pair is always releasable; a locked model refuses `unload_model_residency` with a structured `model_locked` payload — locally as a client-side per-`(provider, model)` lock, remotely by converting the Core server's HTTP 409 refusal — and unloads only with `force=true`, releasing the lock only after the unload succeeds
|
|
235
|
+
- the `MODEL_RESIDENCY` effect supports `list_loaded`, `load`, `unload`, `lock`, and `unlock` operations with the same soft-fail semantics; on `unload`, `force` is forwarded only when authored in the effect payload
|
|
236
|
+
- local `list_model_residency` merges AbstractCore's host-wide loaded-model sweep into text-generation listings (sweep-only rows carry `source: "provider_server"` and no `task` label), and residency rows normalize provider size extras to `size_bytes` / `size_vram_bytes` while keeping the originals; local text rows also carry registry-declared `modalities` (omitted on a registry miss), host identity (`host_id` / `host_name`), and runtime-owned lock truth (`locked` / `lockable`, with `pinned` a truthful alias of `locked` — never the default-identity flag, which `default` alone carries), while remote listings keep the Core server's row identity
|
|
218
237
|
- host-local prompt-cache export/import admin also lives on the host facade and client delegation layer (`list_prompt_cache_exports`, `prompt_cache_export`, `prompt_cache_import`) and is intentionally local-only
|
|
219
238
|
- host-facade email helpers delegate to Runtime's host-local comms facade/export layer (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
|
|
220
239
|
- run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `upscale_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
|
|
@@ -222,6 +241,13 @@ Entry points:
|
|
|
222
241
|
`count`/`n`, `seeds`, ordered `lora_adapters`, and video `flow_shift`; local
|
|
223
242
|
subprocess isolation stays within the same public contract.
|
|
224
243
|
|
|
244
|
+
Execution controls and cancellation:
|
|
245
|
+
- `params.thinking` (bool or reasoning level) and `params.speculation` (`False`, `True`, or a Core speculation object such as `{"mode": "native_mtp", "num_draft_tokens": 2}`) are forwarded locally and remotely; `run.vars["_runtime"]["speculation"]` sets a run-wide preference inherited by subworkflows, Agent loops and delegated calls, and `False` stays Off across every boundary (see `integrations/abstractcore.md#execution-controls-and-local-concurrency`)
|
|
246
|
+
- `get_abstractcore_discovery_facade(...).get_execution_capabilities(model_name=None, provider=None)` asks the actual execution host (local or remote) what it supports, without loading a model
|
|
247
|
+
- the `LLM_CALL` handler hands the effect's cancel event to AbstractCore (`generate(..., cancel_event=...)`); remote clients close the request to the AbstractCore server on Stop, which the server treats as a cancel
|
|
248
|
+
- every `LLM_CALL` is offered a progress callback; providers that report text phases (prefill / generate / complete) produce `abstract.progress` ledger events with `kind: "llm"`
|
|
249
|
+
- `abstractruntime.turn_grounding.stamp_user_turn_grounding(messages, grounding=...)` writes the grounding envelope once into the stored user turn, so the prompt sent to the model stays a byte prefix of the next turn's prompt
|
|
250
|
+
|
|
225
251
|
`LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
|
|
226
252
|
- `prompt`, `messages`, `system_prompt`, and convenience `text`
|
|
227
253
|
- `media`: a media path, artifact ref (`{"$artifact": "..."}` or `{"artifact_id": "..."}`), media dict, or list of those
|
|
@@ -243,6 +269,8 @@ Prompt cache / cached sessions:
|
|
|
243
269
|
- `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]` or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default
|
|
244
270
|
- `LLM_CALL.params.prompt_cache_binding` is the durable exact-reuse input for bloc-backed prompt caching; if a binding includes `key`, Runtime adopts it as the effective prompt-cache key and refuses mismatches before provider execution
|
|
245
271
|
- Runtime only auto-derives session prompt-cache keys for text/chat calls; non-text output selectors such as image, voice, music, and transcription keep explicit `prompt_cache_binding` support but do not receive an inferred cache key
|
|
272
|
+
- when Runtime injects the derived session key, the client stamps session attribution (`session_id`, `run_id`, `workflow_id`, `node_id`, `namespace`) into the cache entry's metadata after each generate; caller-supplied `prompt_cache_key`s and binding keys are never stamped, so session-scoped clearing cannot destroy caches shared across sessions
|
|
273
|
+
- `get_abstractcore_host_facade(...)` exposes `get_memory_snapshot()`, `list_session_prompt_caches(session_id=None)`, and `clear_session_prompt_caches(session_id)`; session caches persist until a host clears them, the owning model is unloaded, or the provider evicts them — completing a run does not clear them
|
|
246
274
|
- `get_abstractcore_host_facade(...)` also exposes durable bloc helpers (`upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`)
|
|
247
275
|
- local Runtime owns the bloc root policy: `~/.abstractruntime/blocs` by default, `<base_dir>/blocs` for `create_local_file_runtime(...)`, and explicit `bloc_root_dir=...` overrides when needed
|
|
248
276
|
- provider cache/session handles are not durable runtime state and should not be stored in `RunState.vars`
|