You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Block generic tool input and document idle timeouts
#### Context
Docs called turn timeout a total cap, while runtime uses silence. Generic tool-input prompts also received fabricated answers, and approval-looking option labels alone are not enough to identify MCP approval prompts.
#### TL;DR
*Document idle timeouts and block generic tool input.*
#### Summary
- Document `turn_timeout_ms` as a reset-on-update silence interval.
- Add coverage for active stream updates and silent turns.
- Keep auto-approval only for recognized MCP approval question IDs.
- Block freeform and generic option-based tool input, including Allow/Deny choices.
#### Alternatives
- A total-runtime deadline was rejected; healthy long turns should stay alive while updates continue.
- Matching approval-looking labels alone was rejected because generic prompts can use the same words.
#### Test Plan
- [x] `HEX_HOME=/private/tmp/symphony-hex mise exec -- make -C elixir all`
- [x] `mise exec -- mix test test/symphony_elixir/app_server_test.exs:619 test/symphony_elixir/app_server_test.exs:788`
- [x] `mise exec -- mix test test/symphony_elixir/app_server_test.exs`
Copy file name to clipboardExpand all lines: elixir/README.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -153,6 +153,8 @@ Notes:
153
153
-`codex.approval_policy` defaults to `{"reject":{"sandbox_approval":true,"rules":true,"mcp_elicitations":true}}`
154
154
-`codex.thread_sandbox` defaults to `workspace-write`
155
155
-`codex.turn_sandbox_policy` defaults to a `workspaceWrite` policy rooted at the current issue workspace
156
+
-`codex.turn_timeout_ms` is the maximum silence interval while a turn is streaming. Each
157
+
app-server update resets it; it is not a total turn runtime cap.
156
158
- Supported `codex.approval_policy` values depend on the targeted Codex app-server version. In the current local Codex schema, string values include `untrusted`, `on-failure`, `on-request`, and `never`, and object-form `reject` is also supported.
printf '%s\\n' '{\"id\":112,\"method\":\"item/tool/requestUserInput\",\"params\":{\"itemId\":\"call-719\",\"questions\":[{\"header\":\"Choose an action\",\"id\":\"options-719\",\"isOther\":false,\"isSecret\":false,\"options\":[{\"description\":\"Use the default behavior.\",\"label\":\"Use default\"},{\"description\":\"Skip this step.\",\"label\":\"Skip\"}],\"question\":\"How should I proceed?\"}],\"threadId\":\"thread-719\",\"turnId\":\"turn-719\"}}'
818
+
printf '%s\\n' '{\"id\":112,\"method\":\"item/tool/requestUserInput\",\"params\":{\"itemId\":\"call-719\",\"questions\":[{\"header\":\"Choose an action\",\"id\":\"options-719\",\"isOther\":false,\"isSecret\":false,\"options\":[{\"description\":\"Proceed with the requested action.\",\"label\":\"Allow\"},{\"description\":\"Do not proceed.\",\"label\":\"Deny\"}],\"question\":\"How should I proceed?\"}],\"threadId\":\"thread-719\",\"turnId\":\"turn-719\"}}'
750
819
;;
751
820
5)
752
821
printf '%s\\n' '{\"method\":\"turn/completed\"}'
@@ -763,40 +832,24 @@ defmodule SymphonyElixir.AppServerTest do
0 commit comments