steerable-agent-runtime 0.6.35__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.
Files changed (162) hide show
  1. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/PKG-INFO +6 -4
  2. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/README.md +4 -3
  3. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/pyproject.toml +5 -2
  4. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/compat.py +15 -13
  5. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/openai_compat.py +8 -6
  6. steerable_agent_runtime-0.6.38/src/steerable_agent_runtime/loop.py +1002 -0
  7. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/native_bridge.py +43 -28
  8. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/PKG-INFO +6 -4
  9. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/requires.txt +1 -0
  10. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_hooks.py +61 -5
  11. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_llm_wire_helpers.py +11 -11
  12. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_loop.py +5 -24
  13. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_native_default.py +21 -39
  14. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_provider_compat.py +8 -7
  15. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_pyo3_api_surface.py +3 -2
  16. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_soft_timeout.py +1 -6
  17. steerable_agent_runtime-0.6.35/src/steerable_agent_runtime/loop.py +0 -2789
  18. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/setup.cfg +0 -0
  19. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/__init__.py +0 -0
  20. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/antihallucination.py +0 -0
  21. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/approval.py +0 -0
  22. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/approval_policy.py +0 -0
  23. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/ask_user.py +0 -0
  24. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/branch.py +0 -0
  25. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/cache_control.py +0 -0
  26. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/calibration.py +0 -0
  27. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/compaction.py +0 -0
  28. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/compaction_policy.py +0 -0
  29. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/config.py +0 -0
  30. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/default.harness.json +0 -0
  31. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/default.harness.yaml +0 -0
  32. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/delegation_gate.py +0 -0
  33. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/errors.py +0 -0
  34. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/gateway_catalog.py +0 -0
  35. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/handoff.py +0 -0
  36. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/harness.py +0 -0
  37. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/harness_spec.py +0 -0
  38. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/history.py +0 -0
  39. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/hooks.py +0 -0
  40. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/__init__.py +0 -0
  41. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/anthropic_native.py +0 -0
  42. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/errors.py +0 -0
  43. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/google_genai.py +0 -0
  44. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/openai_responses.py +0 -0
  45. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/parts.py +0 -0
  46. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/presets.py +0 -0
  47. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/llm/system_proxy.py +0 -0
  48. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/maintenance.py +0 -0
  49. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/mcp.py +0 -0
  50. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/mcp_server.py +0 -0
  51. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/model_catalog.py +0 -0
  52. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/model_info.py +0 -0
  53. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/model_resolve.py +0 -0
  54. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/observation_aging.py +0 -0
  55. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/orchestration.py +0 -0
  56. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/otel.py +0 -0
  57. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/plugins.py +0 -0
  58. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/pool.py +0 -0
  59. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/pricing.py +0 -0
  60. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/pseudo.py +0 -0
  61. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/recording.py +0 -0
  62. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/reminders.py +0 -0
  63. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/replay.py +0 -0
  64. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/resume.py +0 -0
  65. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/retry.py +0 -0
  66. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/sandboxed.py +0 -0
  67. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/skills.py +0 -0
  68. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/spill.py +0 -0
  69. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/__init__.py +0 -0
  70. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/in_memory.py +0 -0
  71. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/sqlalchemy_store.py +0 -0
  72. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/sqlite_store.py +0 -0
  73. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/storage/write_lease.py +0 -0
  74. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/subagent.py +0 -0
  75. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/todo.py +0 -0
  76. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tokens.py +0 -0
  77. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tool_schema.py +0 -0
  78. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tool_search.py +0 -0
  79. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tools.py +0 -0
  80. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/tracing.py +0 -0
  81. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/transport/__init__.py +0 -0
  82. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/transport/fastapi_sse.py +0 -0
  83. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/transport/stdio_jsonrpc.py +0 -0
  84. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime/world_state.py +0 -0
  85. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/SOURCES.txt +0 -0
  86. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/dependency_links.txt +0 -0
  87. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/src/steerable_agent_runtime.egg-info/top_level.txt +0 -0
  88. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_antihallucination.py +0 -0
  89. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_approval.py +0 -0
  90. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_approval_policy.py +0 -0
  91. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_ask_user.py +0 -0
  92. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_branch.py +0 -0
  93. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_cache_control.py +0 -0
  94. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_cache_instrumentation.py +0 -0
  95. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_calibration.py +0 -0
  96. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_compaction.py +0 -0
  97. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_compaction_policy.py +0 -0
  98. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_compaction_strategy.py +0 -0
  99. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_config.py +0 -0
  100. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_content_parts.py +0 -0
  101. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_delegation_gate.py +0 -0
  102. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_error_taxonomy.py +0 -0
  103. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_fragment_bounds.py +0 -0
  104. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_gateway_catalog.py +0 -0
  105. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_golden.py +0 -0
  106. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_handoff.py +0 -0
  107. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_harness.py +0 -0
  108. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_harness_spec.py +0 -0
  109. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_history.py +0 -0
  110. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_history_persistence.py +0 -0
  111. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_in_memory_storage.py +0 -0
  112. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_llm_gemini_wire.py +0 -0
  113. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_llm_responses_wire.py +0 -0
  114. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_llm_stream_e2e.py +0 -0
  115. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_long_session.py +0 -0
  116. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_loop_cancellation.py +0 -0
  117. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_loop_replay.py +0 -0
  118. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_loop_sandbox_event.py +0 -0
  119. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_loop_terminal.py +0 -0
  120. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_maintenance.py +0 -0
  121. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_mcp.py +0 -0
  122. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_mcp_server.py +0 -0
  123. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_model_catalog.py +0 -0
  124. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_model_equivalence.py +0 -0
  125. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_model_info.py +0 -0
  126. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_model_resolve.py +0 -0
  127. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_observation_aging.py +0 -0
  128. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_orchestration.py +0 -0
  129. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_otel.py +0 -0
  130. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_parallel_tools.py +0 -0
  131. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_plugins.py +0 -0
  132. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_provider_presets.py +0 -0
  133. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_pseudo.py +0 -0
  134. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_recording.py +0 -0
  135. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_reminders.py +0 -0
  136. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_replay_crosslang.py +0 -0
  137. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_resume.py +0 -0
  138. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_retry_hooks.py +0 -0
  139. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_safety_gate.py +0 -0
  140. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_sandboxed.py +0 -0
  141. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_skills.py +0 -0
  142. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_spill.py +0 -0
  143. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_sqlite_storage.py +0 -0
  144. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_steer.py +0 -0
  145. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_storage_contract.py +0 -0
  146. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_stream_strip.py +0 -0
  147. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_subagent.py +0 -0
  148. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_system_proxy.py +0 -0
  149. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_todo.py +0 -0
  150. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_todo_gate.py +0 -0
  151. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_tokens.py +0 -0
  152. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_tool_exposure.py +0 -0
  153. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_tool_hygiene.py +0 -0
  154. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_tool_router.py +0 -0
  155. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_tool_schema.py +0 -0
  156. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_tool_timeout.py +0 -0
  157. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_trace_recorder.py +0 -0
  158. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_transport_jsonrpc.py +0 -0
  159. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_transport_sse.py +0 -0
  160. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_usage_attribution.py +0 -0
  161. {steerable_agent_runtime-0.6.35 → steerable_agent_runtime-0.6.38}/tests/test_world_state.py +0 -0
  162. {steerable_agent_runtime-0.6.35 → 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.35
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
- The CoreLoop defaults to the Rust binding when
64
- `steerable-agent-runtime-native` is importable (`STEERABLE_RUST_CORELOOP=0`
65
- keeps the Python loop):
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
- The CoreLoop defaults to the Rust binding when
39
- `steerable-agent-runtime-native` is importable (`STEERABLE_RUST_CORELOOP=0`
40
- keeps the Python loop):
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.35"
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 7 Steerable packages at the same X.Y.Z, enforced by the
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]
@@ -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 tool-call turns that produced no reasoning',
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 carrying ``tool_calls`` but *no* reasoning
148
- #: must still echo the field (as ``""``). DeepSeek thinking mode 400s the
149
- #: follow-up when ``reasoning_content`` is absent from a tool-call
150
- #: assistant message, even for rounds where the model produced no
151
- #: reasoning at all (live-verified 2026-09-13: a budget-wall auto-continue
152
- #: resumed a record whose early rounds had no reasoning and the very first
153
- #: resumed request 400'd). Reference vendors omit the field instead.
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 a tool-call assistant message whose
222
- # ``reasoning_content`` key is missing, even when that round
223
- # produced no reasoning at all (live-verified 2026-09-13 on a
224
- # resumed record: "The `reasoning_content` in the thinking mode
225
- # must be passed back to the API."). Echo an empty string.
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.tool_calls and flags.echo_empty_reasoning_for_tool_calls:
603
- # DeepSeek thinking mode: an assistant message carrying ``tool_calls``
604
- # must round-trip the reasoning field even when that round produced no
605
- # reasoning — omitting the key 400s the follow-up ("The
606
- # `reasoning_content` in the thinking mode must be passed back to the
607
- # API."). A resumed record can carry such rounds, so send "".
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