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.
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/PKG-INFO +1 -1
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/pyproject.toml +1 -1
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/approval.py +9 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/sandboxed.py +13 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/PKG-INFO +1 -1
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_sandboxed.py +19 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/README.md +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/setup.cfg +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/__init__.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/antihallucination.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/approval_policy.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/ask_user.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/branch.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/cache_control.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/calibration.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/compaction.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/compaction_policy.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/config.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/default.harness.json +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/default.harness.yaml +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/delegation_gate.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/errors.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/gateway_catalog.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/handoff.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/harness.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/harness_spec.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/history.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/hooks.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/__init__.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/anthropic_native.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/compat.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/errors.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/google_genai.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/openai_compat.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/openai_responses.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/parts.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/presets.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/llm/system_proxy.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/loop.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/maintenance.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/mcp.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/mcp_server.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/model_catalog.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/model_info.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/model_resolve.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/native_bridge.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/observation_aging.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/orchestration.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/otel.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/plugins.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/pool.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/pricing.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/pseudo.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/recording.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/reminders.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/replay.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/resume.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/retry.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/skills.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/spill.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/__init__.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/in_memory.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/sqlalchemy_store.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/sqlite_store.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/storage/write_lease.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/subagent.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/todo.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tokens.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tool_presentation.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tool_schema.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tool_search.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tools.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/tracing.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/transport/__init__.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/transport/fastapi_sse.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/transport/stdio_jsonrpc.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/world_state.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/SOURCES.txt +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/dependency_links.txt +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/requires.txt +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime.egg-info/top_level.txt +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_antihallucination.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_approval.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_approval_policy.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_ask_user.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_branch.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_cache_control.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_cache_instrumentation.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_calibration.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_compaction.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_compaction_policy.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_compaction_strategy.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_config.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_content_parts.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_delegation_gate.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_error_taxonomy.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_fragment_bounds.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_gateway_catalog.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_golden.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_handoff.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_harness.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_harness_spec.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_history.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_history_persistence.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_hooks.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_in_memory_storage.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_gemini_wire.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_responses_wire.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_stream_e2e.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_wire_helpers.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_long_session.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_cancellation.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_replay.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_sandbox_event.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_terminal.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_maintenance.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_mcp.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_mcp_server.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_catalog.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_equivalence.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_info.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_resolve.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_native_default.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_observation_aging.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_orchestration.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_otel.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_parallel_tools.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_plugins.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_provider_compat.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_provider_presets.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_pseudo.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_pyo3_api_surface.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_recording.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_reminders.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_replay_crosslang.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_resume.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_retry_hooks.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_safety_gate.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_skills.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_soft_timeout.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_spill.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_sqlite_storage.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_steer.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_storage_contract.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_stream_strip.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_subagent.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_system_proxy.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_todo.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_todo_gate.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tokens.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_exposure.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_hygiene.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_presentation.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_router.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_schema.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_timeout.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_trace_recorder.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_transport_jsonrpc.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_transport_sse.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_usage_attribution.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_world_state.py +0 -0
- {steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_write_lease.py +0 -0
|
@@ -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 {}
|
|
@@ -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"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/src/steerable_agent_runtime/mcp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_antihallucination.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_approval_policy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_cache_control.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_compaction_policy.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_compaction_strategy.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_content_parts.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_delegation_gate.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_error_taxonomy.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_fragment_bounds.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_gateway_catalog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_harness_spec.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_history_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_in_memory_storage.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_gemini_wire.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_responses_wire.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_stream_e2e.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_llm_wire_helpers.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_long_session.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_cancellation.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_sandbox_event.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_loop_terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_catalog.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_equivalence.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_model_resolve.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_native_default.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_observation_aging.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_orchestration.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_parallel_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_provider_compat.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_provider_presets.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_pyo3_api_surface.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_replay_crosslang.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_soft_timeout.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_sqlite_storage.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_storage_contract.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_stream_strip.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_system_proxy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_exposure.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_hygiene.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_presentation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_tool_timeout.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_trace_recorder.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_transport_jsonrpc.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_transport_sse.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.6.68 → steerable_agent_runtime-0.6.69}/tests/test_usage_attribution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|