mirror of
https://github.com/usestrix/strix.git
synced 2026-08-23 11:22:37 +02:00
Clean up SDK shell tool failure modes
Three concrete wraps on exec_command / write_stdin via the existing
Shell capability configure_tools mechanism, plus one skill-doc fix.
All wraps fire on both Responses and chat-completions paths; the
chat-completions error-as-result wrap still stacks on top when needed.
- write_stdin: decode the common escape forms in `chars` (\uXXXX,
\xXX, \n \t \r \0 \a \b \v \f \\). Models routinely send the
literal six-char string `` intending the ASCII control byte;
the SDK takes chars verbatim so the byte never reaches the PTY and
documented mechanisms like Ctrl-C, arrows, and Escape silently
don't work. Allowlist regex over recognized escapes only —
unrecognized sequences like `\p` pass through untouched.
- exec_command: catch InvalidManifestPathError and rewrite to a
model-actionable message ("workdir must be a path inside
/workspace") using the exception's structured `context["rel"]` so
we don't need to string-match the SDK's wording.
- Both tools: catch pydantic ValidationError once at the wrap and
reformat into a short "{tool}: invalid arguments — {field}: {msg}"
string. Covers empty cmd, missing required fields, ge/min_length
violations on max_output_tokens and yield_time_ms — and any future
schema field the SDK adds.
Updated python.md guidance: the `shell=` parameter is for swapping
POSIX shells (bash/zsh/sh). Interpreters belong in `cmd` —
`cmd="python3 -c '...'"`, not `shell=python3`. The `shell=interpreter`
shortcut breaks in interpreter-specific ways (python needs `-c`,
node/ruby/perl need `-e`) so there's no clean code fix and we don't
try one.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
fdd8b71f4e
commit
418eedcd41
@@ -11,6 +11,14 @@ Prefer writing reusable scripts to `/workspace/scratch/<name>.py` and
|
||||
running them with `python3 /workspace/scratch/<name>.py`. For short
|
||||
one-off transformations, `python3 -c` or a small here-document is fine.
|
||||
|
||||
The `shell` parameter on `exec_command` is for swapping POSIX shells
|
||||
(`bash`/`zsh`/`sh`), not for picking interpreters. Put the interpreter
|
||||
invocation in `cmd` instead: `cmd="python3 -c '...'"`, not
|
||||
`shell=python3, cmd="..."`. The `shell=<interpreter>` shortcut breaks
|
||||
in subtle ways — `python3` works only with `login=False` (because the
|
||||
SDK adds `-l`/`-i`), and other interpreters (`node`, `ruby`, `perl`)
|
||||
take `-e` not `-c` so they fail even with `login=False`.
|
||||
|
||||
## Proxy Automation From Python
|
||||
|
||||
The sandbox image includes an installed `caido_api` module. Import it
|
||||
|
||||
Reference in New Issue
Block a user