steerable-agent-runtime 0.7.2__tar.gz → 0.7.4__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.7.2 → steerable_agent_runtime-0.7.4}/PKG-INFO +1 -1
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/pyproject.toml +1 -1
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/approval.py +7 -6
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/tool_presentation.py +25 -3
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime.egg-info/PKG-INFO +1 -1
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_approval.py +21 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_skills.py +1 -1
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_tool_presentation.py +16 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/README.md +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/setup.cfg +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/__init__.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/antihallucination.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/approval_policy.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/ask_user.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/branch.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/cache_control.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/calibration.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/compaction.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/compaction_policy.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/config.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/default.harness.json +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/default.harness.yaml +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/delegation_gate.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/errors.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/gateway_catalog.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/handoff.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/harness.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/harness_spec.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/history.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/hooks.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/__init__.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/anthropic_native.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/compat.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/errors.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/google_genai.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/openai_compat.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/openai_responses.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/parts.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/presets.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/llm/system_proxy.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/loop.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/maintenance.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/mcp.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/mcp_server.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/model_catalog.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/model_info.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/model_resolve.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/native_bridge.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/observation_aging.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/orchestration.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/otel.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/plugins.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/pool.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/pricing.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/pseudo.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/recording.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/reminders.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/replay.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/resume.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/retry.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/sandboxed.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/skills.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/spill.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/storage/__init__.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/storage/in_memory.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/storage/sqlalchemy_store.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/storage/sqlite_store.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/storage/write_lease.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/subagent.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/todo.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/tokens.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/tool_schema.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/tool_search.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/tools.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/tracing.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/transport/__init__.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/transport/fastapi_sse.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/transport/stdio_jsonrpc.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/world_state.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime.egg-info/SOURCES.txt +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime.egg-info/dependency_links.txt +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime.egg-info/requires.txt +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime.egg-info/top_level.txt +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_antihallucination.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_approval_policy.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_ask_user.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_branch.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_cache_control.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_cache_instrumentation.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_calibration.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_compaction.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_compaction_policy.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_compaction_strategy.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_config.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_content_parts.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_delegation_gate.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_error_taxonomy.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_fragment_bounds.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_gateway_catalog.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_golden.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_handoff.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_harness.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_harness_spec.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_history.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_history_persistence.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_hooks.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_in_memory_storage.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_llm_gemini_wire.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_llm_responses_wire.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_llm_stream_e2e.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_llm_wire_helpers.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_long_session.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_loop.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_loop_cancellation.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_loop_replay.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_loop_sandbox_event.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_loop_terminal.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_maintenance.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_mcp.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_mcp_server.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_model_catalog.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_model_equivalence.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_model_info.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_model_resolve.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_native_default.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_observation_aging.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_orchestration.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_otel.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_parallel_tools.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_plugins.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_provider_compat.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_provider_presets.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_pseudo.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_pyo3_api_surface.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_recording.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_reminders.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_replay_crosslang.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_resume.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_retry_hooks.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_safety_gate.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_sandboxed.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_soft_timeout.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_spill.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_sqlite_storage.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_steer.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_storage_contract.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_stream_strip.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_subagent.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_system_proxy.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_todo.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_todo_gate.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_tokens.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_tool_exposure.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_tool_hygiene.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_tool_router.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_tool_schema.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_tool_timeout.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_trace_recorder.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_transport_jsonrpc.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_transport_sse.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_usage_attribution.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_world_state.py +0 -0
- {steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_write_lease.py +0 -0
|
@@ -617,13 +617,14 @@ class ApprovalExecutor:
|
|
|
617
617
|
}
|
|
618
618
|
}
|
|
619
619
|
elif waited_ms is not None:
|
|
620
|
-
|
|
621
|
-
"
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
"waitMs": waited_ms,
|
|
625
|
-
}
|
|
620
|
+
recorded: dict[str, Any] = {
|
|
621
|
+
"kind": decision.kind,
|
|
622
|
+
"category": request.category,
|
|
623
|
+
"waitMs": waited_ms,
|
|
626
624
|
}
|
|
625
|
+
if decision.reason == "unattended":
|
|
626
|
+
recorded["auto"] = True
|
|
627
|
+
approval_marker = {"_approval": recorded}
|
|
627
628
|
else:
|
|
628
629
|
approval_marker = None
|
|
629
630
|
|
|
@@ -73,6 +73,24 @@ _CARDS = frozenset({"generic", "terminal", "diff", "search", "read", "web"})
|
|
|
73
73
|
_KINDS = frozenset({"read", "edit", "delete", "move", "search", "execute", "fetch", "other"})
|
|
74
74
|
|
|
75
75
|
|
|
76
|
+
def _ask_title(arguments: dict[str, Any] | None) -> str | None:
|
|
77
|
+
"""The folded ask row shows the first question. The intro is only a fallback."""
|
|
78
|
+
if not isinstance(arguments, dict):
|
|
79
|
+
return None
|
|
80
|
+
questions = arguments.get("questions")
|
|
81
|
+
if isinstance(questions, list):
|
|
82
|
+
for question in questions:
|
|
83
|
+
if not isinstance(question, dict):
|
|
84
|
+
continue
|
|
85
|
+
text = question.get("text")
|
|
86
|
+
if isinstance(text, str) and text.strip():
|
|
87
|
+
return text.strip()
|
|
88
|
+
intro = arguments.get("intro")
|
|
89
|
+
if isinstance(intro, str) and intro.strip():
|
|
90
|
+
return intro.strip()
|
|
91
|
+
return None
|
|
92
|
+
|
|
93
|
+
|
|
76
94
|
def builtin_presentation(name: str) -> dict[str, Any] | None:
|
|
77
95
|
"""Return the declared view spec for ``name``, or None when undeclared."""
|
|
78
96
|
spec = BUILTIN_PRESENTATIONS.get(name)
|
|
@@ -97,9 +115,13 @@ def present_call(
|
|
|
97
115
|
spec = builtin_presentation(name)
|
|
98
116
|
if not spec:
|
|
99
117
|
return {"card": "generic", "kind": "other", "title": name, "declared": False}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
118
|
+
if name == "ask_user":
|
|
119
|
+
asked = _ask_title(arguments)
|
|
120
|
+
title = asked if asked else name
|
|
121
|
+
else:
|
|
122
|
+
key = spec.get("title_from")
|
|
123
|
+
raw = arguments.get(key) if isinstance(key, str) and key and isinstance(arguments, dict) else None
|
|
124
|
+
title = raw.strip() if isinstance(raw, str) and raw.strip() else name
|
|
103
125
|
if len(title) > 80:
|
|
104
126
|
title = title[:79] + "…"
|
|
105
127
|
return {
|
|
@@ -213,6 +213,27 @@ async def test_session_scope_caches_per_category() -> None:
|
|
|
213
213
|
assert first.data["_approval"].get("cached") is not True
|
|
214
214
|
|
|
215
215
|
|
|
216
|
+
@pytest.mark.asyncio
|
|
217
|
+
async def test_unattended_allow_marks_the_tool_row() -> None:
|
|
218
|
+
router, calls = _router_with_tools()
|
|
219
|
+
executor = ApprovalExecutor(
|
|
220
|
+
RouterToolExecutor(router),
|
|
221
|
+
_ScriptedApprover(
|
|
222
|
+
[
|
|
223
|
+
ApprovalDecision("allow_once", "unattended"),
|
|
224
|
+
ApprovalDecision("allow_once", "ok"),
|
|
225
|
+
]
|
|
226
|
+
),
|
|
227
|
+
)
|
|
228
|
+
marked = await executor.execute(_call("delete_file", path="/tmp/x"), LoopContext())
|
|
229
|
+
plain = await executor.execute(_call("delete_file", path="/tmp/y"), LoopContext())
|
|
230
|
+
assert marked.success and plain.success
|
|
231
|
+
assert calls["delete_file"] == 2
|
|
232
|
+
assert marked.data["_approval"]["auto"] is True
|
|
233
|
+
assert marked.data["_approval"]["kind"] == "allow_once"
|
|
234
|
+
assert plain.data["_approval"].get("auto") is not True
|
|
235
|
+
|
|
236
|
+
|
|
216
237
|
@pytest.mark.asyncio
|
|
217
238
|
async def test_session_allow_marker_precedes_a_large_result() -> None:
|
|
218
239
|
class _Blob:
|
|
@@ -450,7 +450,7 @@ def nonleading_system_indices(messages: list[LLMMessage]) -> list[int]:
|
|
|
450
450
|
async def test_qwen_template_rejects_a_system_role_catalog(skills_root: Path) -> None:
|
|
451
451
|
"""The skill catalog must not be a second system message.
|
|
452
452
|
|
|
453
|
-
|
|
453
|
+
The product's first turn is one system prompt plus the user text. Appending
|
|
454
454
|
the catalog as ``role=system`` made a self-hosted Qwen3.8-27B-W8A8
|
|
455
455
|
return HTTP 400. The follow-up tool round has to keep that shape too.
|
|
456
456
|
"""
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_tool_presentation.py
RENAMED
|
@@ -80,6 +80,22 @@ def test_caller_presentation_is_kept():
|
|
|
80
80
|
assert registered.metadata["presentation"]["title_from"] == "path"
|
|
81
81
|
|
|
82
82
|
|
|
83
|
+
def test_ask_row_uses_the_first_question_then_the_intro():
|
|
84
|
+
asked = present_call(
|
|
85
|
+
"ask_user",
|
|
86
|
+
{
|
|
87
|
+
"intro": "继续吗",
|
|
88
|
+
"questions": [
|
|
89
|
+
{"id": "q1", "text": "要不要同时改重试次数?"},
|
|
90
|
+
{"id": "q2", "text": "要不要记一条说明?"},
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
)
|
|
94
|
+
assert asked["title"] == "要不要同时改重试次数?"
|
|
95
|
+
assert present_call("ask_user", {"intro": "继续吗"})["title"] == "继续吗"
|
|
96
|
+
assert present_call("ask_user", {})["title"] == "ask_user"
|
|
97
|
+
|
|
98
|
+
|
|
83
99
|
def test_present_call_clips_long_titles_and_falls_back_to_the_name():
|
|
84
100
|
long = present_call("bash", {"command": "x" * 100})
|
|
85
101
|
assert long["declared"] is True
|
|
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.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/hooks.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
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/loop.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/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
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/otel.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/pool.py
RENAMED
|
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.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/retry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/spill.py
RENAMED
|
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.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/todo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/src/steerable_agent_runtime/tools.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
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_antihallucination.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_approval_policy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_cache_instrumentation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_compaction_policy.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_compaction_strategy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_delegation_gate.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_error_taxonomy.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_fragment_bounds.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_gateway_catalog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_history_persistence.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_in_memory_storage.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_llm_gemini_wire.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_llm_responses_wire.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_llm_stream_e2e.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_llm_wire_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_loop_cancellation.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_loop_sandbox_event.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_model_equivalence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_native_default.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_observation_aging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_parallel_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_provider_compat.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_provider_presets.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_pyo3_api_surface.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_replay_crosslang.py
RENAMED
|
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.7.2 → steerable_agent_runtime-0.7.4}/tests/test_sqlite_storage.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_storage_contract.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
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_trace_recorder.py
RENAMED
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_transport_jsonrpc.py
RENAMED
|
File without changes
|
|
File without changes
|
{steerable_agent_runtime-0.7.2 → steerable_agent_runtime-0.7.4}/tests/test_usage_attribution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|