|
|
|
|
@@ -189,6 +189,10 @@ EOF
|
|
|
|
|
cat >"$STUB_BIN/jq" <<'EOF'
|
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
if [[ ${1-} == "-n" ]]; then
|
|
|
|
|
shift
|
|
|
|
|
exec /usr/bin/jq -n "$@"
|
|
|
|
|
fi
|
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
|
|
case "$1" in
|
|
|
|
|
-r)
|
|
|
|
|
@@ -454,12 +458,28 @@ run_resume_omits_runtime_context() {
|
|
|
|
|
if grep -q -- "You are running inside sloptrap" "$STUB_LOG"; then
|
|
|
|
|
record_failure "resume_omits_runtime_context: resume should not receive startup prompt"
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q -- "codex --sandbox danger-full-access --ask-for-approval never resume $session_id" "$STUB_LOG"; then
|
|
|
|
|
if ! grep -q -- "--sandbox danger-full-access --ask-for-approval never resume $session_id" "$STUB_LOG"; then
|
|
|
|
|
record_failure "resume_omits_runtime_context: resume invocation missing"
|
|
|
|
|
fi
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_shell_target_uses_entrypoint() {
|
|
|
|
|
local scenario_dir="$TEST_ROOT/opencode_localhost"
|
|
|
|
|
printf '==> shell_target_uses_entrypoint\n'
|
|
|
|
|
setup_stub_env
|
|
|
|
|
if ! PATH="$STUB_BIN:$PATH" HOME="$STUB_HOME" FAKE_PODMAN_LOG="$STUB_LOG" FAKE_PODMAN_INSPECT_FAIL=1 \
|
|
|
|
|
"$SLOPTRAP_BIN" "$scenario_dir" shell </dev/null >/dev/null 2>&1; then
|
|
|
|
|
record_failure "shell_target_uses_entrypoint: shell target failed"
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q -- "--entrypoint /bin/bash" "$STUB_LOG"; then
|
|
|
|
|
record_failure "shell_target_uses_entrypoint: missing entrypoint override"
|
|
|
|
|
fi
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_auth_file_mount() {
|
|
|
|
|
local scenario_dir
|
|
|
|
|
scenario_dir=$(cd "$TEST_ROOT/resume_target" && pwd -P)
|
|
|
|
|
@@ -732,6 +752,125 @@ run_wizard_build_trigger() {
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_opencode_build_downloads_release_cli() {
|
|
|
|
|
local scenario_dir="$TEST_ROOT/opencode_build"
|
|
|
|
|
printf '==> opencode_build_downloads_release_cli\n'
|
|
|
|
|
setup_stub_env
|
|
|
|
|
mkdir -p "$scenario_dir"
|
|
|
|
|
cat > "$scenario_dir/.sloptrap" <<'EOF'
|
|
|
|
|
name=opencode-build
|
|
|
|
|
packages_extra=
|
|
|
|
|
agent=opencode
|
|
|
|
|
allow_host_network=false
|
|
|
|
|
EOF
|
|
|
|
|
if ! env PATH="$STUB_BIN:$PATH" HOME="$STUB_HOME" FAKE_PODMAN_LOG="$STUB_LOG" FAKE_PODMAN_INSPECT_FAIL=1 \
|
|
|
|
|
"$SLOPTRAP_BIN" "$scenario_dir" build >/dev/null 2>&1; then
|
|
|
|
|
record_failure "opencode_build_downloads_release_cli: build failed"
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q -- "FAKE PODMAN: build " "$STUB_LOG"; then
|
|
|
|
|
record_failure "opencode_build_downloads_release_cli: build not invoked"
|
|
|
|
|
fi
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_opencode_localhost_rewrite() {
|
|
|
|
|
local scenario_dir="$TEST_ROOT/opencode_localhost"
|
|
|
|
|
printf '==> opencode_localhost_rewrite\n'
|
|
|
|
|
setup_stub_env
|
|
|
|
|
mkdir -p "$scenario_dir"
|
|
|
|
|
cat > "$scenario_dir/.sloptrap" <<'EOF'
|
|
|
|
|
name=opencode-localhost
|
|
|
|
|
packages_extra=
|
|
|
|
|
agent=opencode
|
|
|
|
|
opencode_server=http://localhost:8080
|
|
|
|
|
allow_host_network=false
|
|
|
|
|
EOF
|
|
|
|
|
cat > "$STUB_BIN/slirp4netns" <<'EOF'
|
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
exit 0
|
|
|
|
|
EOF
|
|
|
|
|
chmod +x "$STUB_BIN/slirp4netns"
|
|
|
|
|
if ! env PATH="$STUB_BIN:$PATH" HOME="$STUB_HOME" FAKE_PODMAN_LOG="$STUB_LOG" FAKE_PODMAN_INSPECT_FAIL=1 \
|
|
|
|
|
"$SLOPTRAP_BIN" "$scenario_dir" </dev/null >/dev/null 2>&1; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: run failed"
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
local config_path
|
|
|
|
|
config_path=$(find "$STUB_HOME" -path '*/config/opencode/opencode.json' | head -n 1 || true)
|
|
|
|
|
if [[ -z $config_path || ! -f $config_path ]]; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: opencode config not written"
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q -- "--network slirp4netns:allow_host_loopback=true" "$STUB_LOG"; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: slirp host loopback not enabled"
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q -- "--add-host sloptrap.host:host-gateway" "$STUB_LOG"; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: host alias not injected"
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q -- "OPENCODE_CONFIG=/codex/config/opencode/opencode.json" "$STUB_LOG"; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: opencode config path not exported"
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q -- '"baseURL": "http://sloptrap.host:8080/v1"' "$config_path"; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: localhost server not rewritten in config"
|
|
|
|
|
fi
|
|
|
|
|
if [[ $(jq -r '.provider["llama.cpp"].name' "$config_path") != "llama-server (local)" ]]; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: provider name not merged into config"
|
|
|
|
|
fi
|
|
|
|
|
if [[ $(jq -r '.model' "$config_path") != "llama.cpp/bartowski/Qwen_Qwen3.5-9B-GGUF:Q8_0 - 262144" ]]; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: opencode model not written to config"
|
|
|
|
|
fi
|
|
|
|
|
if [[ $(jq -r '.enabled_providers[0]' "$config_path") != "llama.cpp" ]]; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: enabled_providers not merged into config"
|
|
|
|
|
fi
|
|
|
|
|
if [[ $(jq -r '.provider["llama.cpp"].models["bartowski/Qwen_Qwen3.5-9B-GGUF:Q8_0 - 262144"].limit.context' "$config_path") != "262144" ]]; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: opencode context not written to config"
|
|
|
|
|
fi
|
|
|
|
|
if grep -q -- "--server " "$STUB_LOG"; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: deprecated --server flag should not be passed"
|
|
|
|
|
fi
|
|
|
|
|
if grep -q -- "--sandbox workspace-write" "$STUB_LOG"; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: codex sandbox args leaked into opencode run"
|
|
|
|
|
fi
|
|
|
|
|
if grep -q -- "You are running inside sloptrap" "$STUB_LOG"; then
|
|
|
|
|
record_failure "opencode_localhost_rewrite: codex-style startup prompt should not be passed to opencode"
|
|
|
|
|
fi
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_opencode_print_config_runtime_flags() {
|
|
|
|
|
local scenario_dir="$TEST_ROOT/opencode_print_config"
|
|
|
|
|
printf '==> opencode_print_config_runtime_flags\n'
|
|
|
|
|
setup_stub_env
|
|
|
|
|
mkdir -p "$scenario_dir"
|
|
|
|
|
cat > "$scenario_dir/.sloptrap" <<'EOF'
|
|
|
|
|
name=opencode-print-config
|
|
|
|
|
packages_extra=
|
|
|
|
|
agent=opencode
|
|
|
|
|
allow_host_network=false
|
|
|
|
|
EOF
|
|
|
|
|
local output
|
|
|
|
|
if ! output=$(env PATH="$STUB_BIN:$PATH" HOME="$STUB_HOME" FAKE_PODMAN_LOG="$STUB_LOG" FAKE_PODMAN_INSPECT_FAIL=1 \
|
|
|
|
|
"$SLOPTRAP_BIN" --print-config "$scenario_dir" 2>/dev/null); then
|
|
|
|
|
record_failure "opencode_print_config_runtime_flags: print-config failed"
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q 'runtime_flags=' <<<"$output"; then
|
|
|
|
|
record_failure "opencode_print_config_runtime_flags: runtime_flags line missing for opencode"
|
|
|
|
|
fi
|
|
|
|
|
if ! grep -q 'opencode_config=' <<<"$output"; then
|
|
|
|
|
record_failure "opencode_print_config_runtime_flags: opencode config path missing"
|
|
|
|
|
fi
|
|
|
|
|
if grep -q -- '--sandbox danger-full-access --ask-for-approval never' <<<"$output"; then
|
|
|
|
|
record_failure "opencode_print_config_runtime_flags: codex runtime flags leaked into opencode config"
|
|
|
|
|
fi
|
|
|
|
|
teardown_stub_env
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_symlink_escape
|
|
|
|
|
run_manifest_injection
|
|
|
|
|
run_helper_symlink
|
|
|
|
|
@@ -740,6 +879,7 @@ run_resume_target
|
|
|
|
|
run_runtime_context_prompt
|
|
|
|
|
run_sh_reexec
|
|
|
|
|
run_resume_omits_runtime_context
|
|
|
|
|
run_shell_target_uses_entrypoint
|
|
|
|
|
run_auth_file_mount
|
|
|
|
|
run_codex_home_override
|
|
|
|
|
run_project_state_isolation
|
|
|
|
|
@@ -749,6 +889,9 @@ run_root_directory_project
|
|
|
|
|
run_wizard_create_manifest
|
|
|
|
|
run_wizard_existing_defaults
|
|
|
|
|
run_wizard_build_trigger
|
|
|
|
|
run_opencode_build_downloads_release_cli
|
|
|
|
|
run_opencode_localhost_rewrite
|
|
|
|
|
run_opencode_print_config_runtime_flags
|
|
|
|
|
|
|
|
|
|
if [[ ${#failures[@]} -gt 0 ]]; then
|
|
|
|
|
printf '\nTest failures:\n'
|
|
|
|
|
|