steerable-agent-runtime 0.6.68__tar.gz → 0.6.69__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 (163) hide show
  1. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/PKG-INFO +1 -1
  2. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/pyproject.toml +1 -1
  3. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/approval.py +9 -0
  4. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/sandboxed.py +13 -0
  5. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/PKG-INFO +1 -1
  6. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_sandboxed.py +19 -0
  7. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/README.md +0 -0
  8. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/setup.cfg +0 -0
  9. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/__init__.py +0 -0
  10. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/antihallucination.py +0 -0
  11. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/approval_policy.py +0 -0
  12. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/ask_user.py +0 -0
  13. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/branch.py +0 -0
  14. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/cache_control.py +0 -0
  15. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/calibration.py +0 -0
  16. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/compaction.py +0 -0
  17. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/compaction_policy.py +0 -0
  18. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/config.py +0 -0
  19. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/default.harness.json +0 -0
  20. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/default.harness.yaml +0 -0
  21. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/delegation_gate.py +0 -0
  22. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/errors.py +0 -0
  23. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/gateway_catalog.py +0 -0
  24. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/handoff.py +0 -0
  25. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/harness.py +0 -0
  26. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/harness_spec.py +0 -0
  27. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/history.py +0 -0
  28. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/hooks.py +0 -0
  29. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/__init__.py +0 -0
  30. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/anthropic_native.py +0 -0
  31. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/compat.py +0 -0
  32. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/errors.py +0 -0
  33. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/google_genai.py +0 -0
  34. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/openai_compat.py +0 -0
  35. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/openai_responses.py +0 -0
  36. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/parts.py +0 -0
  37. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/presets.py +0 -0
  38. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/system_proxy.py +0 -0
  39. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/loop.py +0 -0
  40. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/maintenance.py +0 -0
  41. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/mcp.py +0 -0
  42. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/mcp_server.py +0 -0
  43. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/model_catalog.py +0 -0
  44. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/model_info.py +0 -0
  45. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/model_resolve.py +0 -0
  46. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/native_bridge.py +0 -0
  47. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/observation_aging.py +0 -0
  48. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/orchestration.py +0 -0
  49. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/otel.py +0 -0
  50. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/plugins.py +0 -0
  51. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/pool.py +0 -0
  52. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/pricing.py +0 -0
  53. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/pseudo.py +0 -0
  54. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/recording.py +0 -0
  55. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/reminders.py +0 -0
  56. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/replay.py +0 -0
  57. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/resume.py +0 -0
  58. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/retry.py +0 -0
  59. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/skills.py +0 -0
  60. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/spill.py +0 -0
  61. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/__init__.py +0 -0
  62. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/in_memory.py +0 -0
  63. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/sqlalchemy_store.py +0 -0
  64. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/sqlite_store.py +0 -0
  65. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/write_lease.py +0 -0
  66. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/subagent.py +0 -0
  67. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/todo.py +0 -0
  68. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tokens.py +0 -0
  69. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tool_presentation.py +0 -0
  70. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tool_schema.py +0 -0
  71. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tool_search.py +0 -0
  72. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tools.py +0 -0
  73. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tracing.py +0 -0
  74. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/transport/__init__.py +0 -0
  75. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/transport/fastapi_sse.py +0 -0
  76. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/transport/stdio_jsonrpc.py +0 -0
  77. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/world_state.py +0 -0
  78. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/SOURCES.txt +0 -0
  79. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/dependency_links.txt +0 -0
  80. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/requires.txt +0 -0
  81. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/top_level.txt +0 -0
  82. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_antihallucination.py +0 -0
  83. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_approval.py +0 -0
  84. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_approval_policy.py +0 -0
  85. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_ask_user.py +0 -0
  86. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_branch.py +0 -0
  87. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_cache_control.py +0 -0
  88. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_cache_instrumentation.py +0 -0
  89. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_calibration.py +0 -0
  90. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_compaction.py +0 -0
  91. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_compaction_policy.py +0 -0
  92. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_compaction_strategy.py +0 -0
  93. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_config.py +0 -0
  94. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_content_parts.py +0 -0
  95. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_delegation_gate.py +0 -0
  96. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_error_taxonomy.py +0 -0
  97. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_fragment_bounds.py +0 -0
  98. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_gateway_catalog.py +0 -0
  99. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_golden.py +0 -0
  100. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_handoff.py +0 -0
  101. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_harness.py +0 -0
  102. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_harness_spec.py +0 -0
  103. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_history.py +0 -0
  104. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_history_persistence.py +0 -0
  105. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_hooks.py +0 -0
  106. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_in_memory_storage.py +0 -0
  107. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_gemini_wire.py +0 -0
  108. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_responses_wire.py +0 -0
  109. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_stream_e2e.py +0 -0
  110. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_wire_helpers.py +0 -0
  111. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_long_session.py +0 -0
  112. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop.py +0 -0
  113. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_cancellation.py +0 -0
  114. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_replay.py +0 -0
  115. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_sandbox_event.py +0 -0
  116. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_terminal.py +0 -0
  117. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_maintenance.py +0 -0
  118. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_mcp.py +0 -0
  119. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_mcp_server.py +0 -0
  120. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_catalog.py +0 -0
  121. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_equivalence.py +0 -0
  122. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_info.py +0 -0
  123. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_resolve.py +0 -0
  124. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_native_default.py +0 -0
  125. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_observation_aging.py +0 -0
  126. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_orchestration.py +0 -0
  127. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_otel.py +0 -0
  128. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_parallel_tools.py +0 -0
  129. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_plugins.py +0 -0
  130. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_provider_compat.py +0 -0
  131. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_provider_presets.py +0 -0
  132. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_pseudo.py +0 -0
  133. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_pyo3_api_surface.py +0 -0
  134. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_recording.py +0 -0
  135. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_reminders.py +0 -0
  136. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_replay_crosslang.py +0 -0
  137. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_resume.py +0 -0
  138. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_retry_hooks.py +0 -0
  139. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_safety_gate.py +0 -0
  140. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_skills.py +0 -0
  141. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_soft_timeout.py +0 -0
  142. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_spill.py +0 -0
  143. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_sqlite_storage.py +0 -0
  144. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_steer.py +0 -0
  145. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_storage_contract.py +0 -0
  146. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_stream_strip.py +0 -0
  147. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_subagent.py +0 -0
  148. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_system_proxy.py +0 -0
  149. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_todo.py +0 -0
  150. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_todo_gate.py +0 -0
  151. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tokens.py +0 -0
  152. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_exposure.py +0 -0
  153. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_hygiene.py +0 -0
  154. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_presentation.py +0 -0
  155. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_router.py +0 -0
  156. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_schema.py +0 -0
  157. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_timeout.py +0 -0
  158. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_trace_recorder.py +0 -0
  159. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_transport_jsonrpc.py +0 -0
  160. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_transport_sse.py +0 -0
  161. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_usage_attribution.py +0 -0
  162. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_world_state.py +0 -0
  163. {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_write_lease.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: steerable-agent-runtime
3
- Version: 0.6.68
3
+ Version: 0.6.69
4
4
  Summary: Steerable agent runtime: LLM, tool, storage, and transport adapters.
5
5
  License: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "steerable-agent-runtime"
3
- version = "0.6.68"
3
+ version = "0.6.69"
4
4
  description = "Steerable agent runtime: LLM, tool, storage, and transport adapters."
5
5
  license = { text = "Apache-2.0" }
6
6
  readme = "README.md"
@@ -238,6 +238,15 @@ class WorkspaceAutoApprover:
238
238
  self._sandbox_enforced = sandbox_enforced
239
239
  self._auto_allow_tools = frozenset(auto_allow_tools)
240
240
 
241
+ def set_sandbox_enforced(self, enforced: bool) -> None:
242
+ """Match a mid-turn sandbox toggle.
243
+
244
+ Shell auto-approval is only valid while the OS sandbox is actually
245
+ confining the command. Full access turns that off, so the next shell
246
+ call has to ask again.
247
+ """
248
+ self._sandbox_enforced = enforced
249
+
241
250
  async def approve(self, request: ApprovalRequest) -> ApprovalDecision:
242
251
  if request.tool_name in self._auto_allow_tools:
243
252
  return ApprovalDecision("allow_once", "trusted host control tool")
@@ -100,6 +100,7 @@ class SandboxedToolExecutor:
100
100
  command_arg: str = "command",
101
101
  require_full: bool = False,
102
102
  require_backend: bool = False,
103
+ active: bool = True,
103
104
  ) -> None:
104
105
  self._inner = inner
105
106
  self._backend = backend
@@ -107,12 +108,24 @@ class SandboxedToolExecutor:
107
108
  self._command_arg = command_arg
108
109
  self._require_full = require_full
109
110
  self._require_backend = require_backend
111
+ self._active = active
112
+
113
+ def set_active(self, active: bool) -> None:
114
+ """Turn command rewriting on or off for later calls in this turn.
115
+
116
+ A mid-turn steer can switch the composer sandbox between workspace
117
+ and full access. Calls already in flight keep the policy they started
118
+ with; the next ``execute`` reads this flag.
119
+ """
120
+ self._active = active
110
121
 
111
122
  def concurrency_safe(self, call: ToolCall) -> bool:
112
123
  check = getattr(self._inner, "concurrency_safe", None)
113
124
  return bool(check is not None and check(call))
114
125
 
115
126
  async def execute(self, call: ToolCall, ctx: LoopContext) -> ToolResult:
127
+ if not self._active:
128
+ return await self._inner.execute(call, ctx)
116
129
  if call.name not in self._shell_tools:
117
130
  return await self._inner.execute(call, ctx)
118
131
  arguments = call.arguments or {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: steerable-agent-runtime
3
- Version: 0.6.68
3
+ Version: 0.6.69
4
4
  Summary: Steerable agent runtime: LLM, tool, storage, and transport adapters.
5
5
  License: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -186,3 +186,22 @@ async def test_non_command_shaped_call_passes_through() -> None:
186
186
  await executor.execute(_call("bash"), LoopContext())
187
187
  assert backend.wrapped == []
188
188
  assert len(inner.calls) == 2
189
+
190
+
191
+ @pytest.mark.asyncio
192
+ async def test_set_active_false_runs_the_raw_command() -> None:
193
+ inner = _RecordingExecutor()
194
+ backend = _FakeBackend()
195
+ executor = SandboxedToolExecutor(inner, backend)
196
+ executor.set_active(False)
197
+
198
+ result = await executor.execute(_call("bash", command="echo hi"), LoopContext())
199
+
200
+ assert result.success
201
+ assert inner.calls[0].arguments["command"] == "echo hi"
202
+ assert backend.wrapped == []
203
+ assert "_sandbox" not in (result.data or {})
204
+
205
+ executor.set_active(True)
206
+ await executor.execute(_call("bash", command="echo ho"), LoopContext())
207
+ assert backend.wrapped == ["echo ho"]