steerable-agent-runtime 0.6.34__tar.gz → 0.6.38__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.
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/PKG-INFO +6 -4
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/README.md +4 -3
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/pyproject.toml +5 -2
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/__init__.py +4 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/ask_user.py +4 -2
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/compat.py +15 -13
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/openai_compat.py +8 -6
- steerable_agent_runtime-0.6.38/src/steerable_agent_runtime/loop.py +1002 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/native_bridge.py +43 -28
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/pool.py +14 -1
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/subagent.py +133 -8
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/PKG-INFO +6 -4
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/requires.txt +1 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_hooks.py +61 -5
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_llm_wire_helpers.py +11 -11
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_loop.py +5 -24
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_native_default.py +21 -39
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_provider_compat.py +8 -7
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_pyo3_api_surface.py +3 -2
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_soft_timeout.py +1 -6
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_subagent.py +232 -16
- steerable_agent_runtime-0.6.34/src/steerable_agent_runtime/loop.py +0 -2789
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/setup.cfg +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/antihallucination.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/approval.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/approval_policy.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/branch.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/cache_control.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/calibration.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/compaction.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/compaction_policy.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/config.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/default.harness.json +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/default.harness.yaml +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/delegation_gate.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/errors.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/gateway_catalog.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/handoff.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/harness.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/harness_spec.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/history.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/hooks.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/__init__.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/anthropic_native.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/errors.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/google_genai.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/openai_responses.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/parts.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/presets.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/system_proxy.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/maintenance.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/mcp.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/mcp_server.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/model_catalog.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/model_info.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/model_resolve.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/observation_aging.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/orchestration.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/otel.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/plugins.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/pricing.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/pseudo.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/recording.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/reminders.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/replay.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/resume.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/retry.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/sandboxed.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/skills.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/spill.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/__init__.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/in_memory.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/sqlalchemy_store.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/sqlite_store.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/write_lease.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/todo.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tokens.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tool_schema.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tool_search.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tools.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tracing.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/transport/__init__.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/transport/fastapi_sse.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/transport/stdio_jsonrpc.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/world_state.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/SOURCES.txt +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/dependency_links.txt +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/top_level.txt +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_antihallucination.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_approval.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_approval_policy.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_ask_user.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_branch.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_cache_control.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_cache_instrumentation.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_calibration.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_compaction.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_compaction_policy.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_compaction_strategy.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_config.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_content_parts.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_delegation_gate.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_error_taxonomy.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_fragment_bounds.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_gateway_catalog.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_golden.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_handoff.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_harness.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_harness_spec.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_history.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_history_persistence.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_in_memory_storage.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_llm_gemini_wire.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_llm_responses_wire.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_llm_stream_e2e.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_long_session.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_loop_cancellation.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_loop_replay.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_loop_sandbox_event.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_loop_terminal.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_maintenance.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_mcp.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_mcp_server.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_model_catalog.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_model_equivalence.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_model_info.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_model_resolve.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_observation_aging.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_orchestration.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_otel.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_parallel_tools.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_plugins.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_provider_presets.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_pseudo.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_recording.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_reminders.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_replay_crosslang.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_resume.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_retry_hooks.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_safety_gate.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_sandboxed.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_skills.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_spill.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_sqlite_storage.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_steer.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_storage_contract.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_stream_strip.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_system_proxy.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_todo.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_todo_gate.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_tokens.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_tool_exposure.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_tool_hygiene.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_tool_router.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_tool_schema.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_tool_timeout.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_trace_recorder.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_transport_jsonrpc.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_transport_sse.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_usage_attribution.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_world_state.py +0 -0
- {steerable_agent_runtime-0.6.34 → steerable_agent_runtime-0.6.38}/tests/test_write_lease.py +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: steerable-agent-runtime
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.38
|
|
4
4
|
Summary: Steerable agent runtime: LLM, tool, storage, and transport adapters.
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
7
7
|
Requires-Dist: pydantic>=2.10.0
|
|
8
8
|
Requires-Dist: steerable-agent-protocol<1.0.0,>=0.1.0
|
|
9
9
|
Requires-Dist: steerable-agent-harness<1.0.0,>=0.1.0
|
|
10
|
+
Requires-Dist: steerable-agent-runtime-native==0.6.38
|
|
10
11
|
Provides-Extra: sqlalchemy
|
|
11
12
|
Requires-Dist: sqlalchemy>=2.0; extra == "sqlalchemy"
|
|
12
13
|
Provides-Extra: fastapi
|
|
@@ -60,9 +61,10 @@ pip install "steerable-agent-runtime[sqlalchemy]"
|
|
|
60
61
|
pip install "steerable-agent-runtime[fastapi]"
|
|
61
62
|
```
|
|
62
63
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
CoreLoop execution is the Rust engine. `steerable-agent-runtime-native`
|
|
65
|
+
is a required dependency of this package (same lockstep version). A
|
|
66
|
+
missing wheel fails import or `CoreLoop.run()`; there is no Python
|
|
67
|
+
engine fallback.
|
|
66
68
|
|
|
67
69
|
```bash
|
|
68
70
|
pip install steerable-agent-runtime-native
|
|
@@ -35,9 +35,10 @@ pip install "steerable-agent-runtime[sqlalchemy]"
|
|
|
35
35
|
pip install "steerable-agent-runtime[fastapi]"
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
CoreLoop execution is the Rust engine. `steerable-agent-runtime-native`
|
|
39
|
+
is a required dependency of this package (same lockstep version). A
|
|
40
|
+
missing wheel fails import or `CoreLoop.run()`; there is no Python
|
|
41
|
+
engine fallback.
|
|
41
42
|
|
|
42
43
|
```bash
|
|
43
44
|
pip install steerable-agent-runtime-native
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "steerable-agent-runtime"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.38"
|
|
4
4
|
description = "Steerable agent runtime: LLM, tool, storage, and transport adapters."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
7
7
|
# Pre-1.0 inter-package pins use `>=X,<1.0.0` ranges — flexible enough
|
|
8
8
|
# that any 0.x lockstep version installs cleanly. `bump_to.sh` keeps
|
|
9
|
-
# all
|
|
9
|
+
# all 8 Steerable packages at the same X.Y.Z, enforced by the
|
|
10
10
|
# release.yml lockstep gate. Tighten to `~=1.0` post-GA.
|
|
11
11
|
# See packages/agent-harness/py/pyproject.toml for the rationale.
|
|
12
|
+
# CoreLoop execution is the Rust engine. The matching native wheel
|
|
13
|
+
# is a hard dependency: install or startup fails if it is missing.
|
|
12
14
|
dependencies = [
|
|
13
15
|
"pydantic>=2.10.0",
|
|
14
16
|
"steerable-agent-protocol>=0.1.0,<1.0.0",
|
|
15
17
|
"steerable-agent-harness>=0.1.0,<1.0.0",
|
|
18
|
+
"steerable-agent-runtime-native==0.6.38",
|
|
16
19
|
]
|
|
17
20
|
|
|
18
21
|
[project.optional-dependencies]
|
|
@@ -250,9 +250,11 @@ from .spill import FilesystemSpillStore, InMemorySpillStore, SpillHooks, SpillSt
|
|
|
250
250
|
from .storage import StorageAdapter
|
|
251
251
|
from .subagent import (
|
|
252
252
|
FilteredToolsExecutor,
|
|
253
|
+
PARENT_INPUT_TOOL_NAME,
|
|
253
254
|
SubagentConfig,
|
|
254
255
|
SubagentExecutor,
|
|
255
256
|
SubagentRegistry,
|
|
257
|
+
parent_input_tool_descriptor,
|
|
256
258
|
subagent_tool_descriptor,
|
|
257
259
|
)
|
|
258
260
|
from .tokens import (
|
|
@@ -285,6 +287,7 @@ __all__ = [
|
|
|
285
287
|
"MODEL_INFOS",
|
|
286
288
|
"MODEL_PRICES",
|
|
287
289
|
"MODEL_TOKEN_FACTORS",
|
|
290
|
+
"PARENT_INPUT_TOOL_NAME",
|
|
288
291
|
"REASONING_EFFORT_ORDER",
|
|
289
292
|
"RECORD_FORMAT_VERSION",
|
|
290
293
|
"ReasoningEffortUnsupported",
|
|
@@ -465,6 +468,7 @@ __all__ = [
|
|
|
465
468
|
"load_transcript",
|
|
466
469
|
"make_ask_user_tool",
|
|
467
470
|
"make_todo_write_tool",
|
|
471
|
+
"parent_input_tool_descriptor",
|
|
468
472
|
"matches_conditions",
|
|
469
473
|
"mcp_invoker",
|
|
470
474
|
"merge_patch",
|
|
@@ -125,7 +125,9 @@ def _derive_header(text: str) -> str:
|
|
|
125
125
|
return truncated
|
|
126
126
|
|
|
127
127
|
|
|
128
|
-
def
|
|
128
|
+
def normalize_ask_user_questions(
|
|
129
|
+
questions: list[dict[str, Any]],
|
|
130
|
+
) -> list[dict[str, Any]]:
|
|
129
131
|
"""Map known alias keys onto the canonical payload fields, enforce the
|
|
130
132
|
Claude Code ``AskUserQuestion`` bounds (1-4 questions, 2-4 options per
|
|
131
133
|
select, ``header`` <=12 chars, ``multiSelect`` explicit), and require the
|
|
@@ -238,7 +240,7 @@ def make_ask_user_tool(handler: AskUserHandler) -> Callable[..., Awaitable[dict[
|
|
|
238
240
|
async def ask_user(
|
|
239
241
|
intro: str, questions: list[dict[str, Any]], outro: str | None = None
|
|
240
242
|
) -> dict[str, Any]:
|
|
241
|
-
normalized =
|
|
243
|
+
normalized = normalize_ask_user_questions(questions)
|
|
242
244
|
answers = await handler(intro, normalized)
|
|
243
245
|
return {
|
|
244
246
|
"intro": intro,
|
|
@@ -73,7 +73,7 @@ _FLAG_WIRE_SPEC: tuple[tuple[str, str, str, str], ...] = (
|
|
|
73
73
|
"echoEmptyReasoningForToolCalls",
|
|
74
74
|
"echo_empty_reasoning_for_tool_calls",
|
|
75
75
|
"bool",
|
|
76
|
-
'Echo the reasoning field as "" on
|
|
76
|
+
'Echo the reasoning field as "" on every assistant turn that produced no reasoning',
|
|
77
77
|
),
|
|
78
78
|
(
|
|
79
79
|
"cachedTokensFields",
|
|
@@ -144,13 +144,13 @@ class OpenAICompatFlags:
|
|
|
144
144
|
#: ("The `reasoning_content` in the thinking mode must be passed back to
|
|
145
145
|
#: the API.", live-verified 2026-09-08 with deepseek-v4-flash).
|
|
146
146
|
reasoning_echo_field: str = "reasoning"
|
|
147
|
-
#: Whether an assistant message
|
|
148
|
-
#:
|
|
149
|
-
#:
|
|
150
|
-
#:
|
|
151
|
-
#:
|
|
152
|
-
#:
|
|
153
|
-
#:
|
|
147
|
+
#: Whether an assistant message with *no* reasoning must still echo the
|
|
148
|
+
#: field (as ``""``). DeepSeek thinking mode 400s the follow-up when
|
|
149
|
+
#: ``reasoning_content`` is absent from **any** replayed assistant
|
|
150
|
+
#: message, not only tool-call rounds: a narration-requested final
|
|
151
|
+
#: summary, a cut draft, or a resumed record can all legitimately have
|
|
152
|
+
#: no reasoning and still poison the next request. Reference vendors omit
|
|
153
|
+
#: the field instead.
|
|
154
154
|
echo_empty_reasoning_for_tool_calls: bool = False
|
|
155
155
|
#: Usage locations read for cached prompt tokens, in preference order.
|
|
156
156
|
#: Dotted paths resolve nested objects. OpenAI nests under
|
|
@@ -218,11 +218,13 @@ PROVIDER_COMPAT_HOSTS: list[tuple[str, OpenAICompatFlags]] = [
|
|
|
218
218
|
# does not support this tool_choice", live-verified 2026-09-08
|
|
219
219
|
# with deepseek-v4-flash); ``auto`` and omission both work.
|
|
220
220
|
supports_forced_tool_choice=False,
|
|
221
|
-
# Thinking mode also 400s
|
|
222
|
-
#
|
|
223
|
-
# produced no reasoning at all (live-verified 2026-09-13
|
|
224
|
-
# resumed record
|
|
225
|
-
#
|
|
221
|
+
# Thinking mode also 400s when the ``reasoning_content`` key is
|
|
222
|
+
# missing from *any* replayed assistant message, even when that
|
|
223
|
+
# round produced no reasoning at all (live-verified 2026-09-13
|
|
224
|
+
# on a resumed record; reproduced 2026-09-16 on a
|
|
225
|
+
# narration-requested final summary: "The `reasoning_content` in
|
|
226
|
+
# the thinking mode must be passed back to the API."). Echo an
|
|
227
|
+
# empty string on every assistant message without reasoning.
|
|
226
228
|
echo_empty_reasoning_for_tool_calls=True,
|
|
227
229
|
cached_tokens_fields=(
|
|
228
230
|
"prompt_cache_hit_tokens",
|
|
@@ -599,12 +599,14 @@ def _encode_message(
|
|
|
599
599
|
out["reasoning_details"] = message.reasoning_details
|
|
600
600
|
elif message.reasoning:
|
|
601
601
|
out[flags.reasoning_echo_field] = message.reasoning
|
|
602
|
-
elif message.
|
|
603
|
-
# DeepSeek thinking mode:
|
|
604
|
-
# must
|
|
605
|
-
#
|
|
606
|
-
#
|
|
607
|
-
#
|
|
602
|
+
elif message.role == "assistant" and flags.echo_empty_reasoning_for_tool_calls:
|
|
603
|
+
# DeepSeek thinking mode: **every** assistant message in the replayed
|
|
604
|
+
# history must carry the reasoning key, not just tool-call rounds.
|
|
605
|
+
# A round can legitimately emit no reasoning (a short final summary,
|
|
606
|
+
# a narration-requested close-out, a cut/resumed draft); omitting the
|
|
607
|
+
# key 400s the very next request with "The `reasoning_content` in the
|
|
608
|
+
# thinking mode must be passed back to the API.". Send "" so the
|
|
609
|
+
# key round-trips even when this particular round produced none.
|
|
608
610
|
out[flags.reasoning_echo_field] = ""
|
|
609
611
|
return out
|
|
610
612
|
|