Fix Codex scratchpad warm start

This commit is contained in:
2026-05-29 23:04:29 -07:00
parent d6eb0f2e6c
commit 81d4496fe4

View File

@@ -17,6 +17,65 @@ pid_is_alive() {
[ -e "/proc/$pid/exe" ]
}
pid_is_current_user() {
local pid="${1:-}"
local uid
uid="$(stat -c %u "/proc/$pid" 2>/dev/null || true)"
[ -n "$uid" ] && [ "$uid" = "$(id -u)" ]
}
pid_cmdline() {
local pid="$1"
tr '\0' ' ' < "/proc/$pid/cmdline" 2>/dev/null || true
}
pid_is_main_codex_desktop() {
local pid="$1"
local exe
local cmdline
pid_is_alive "$pid" || return 1
pid_is_current_user "$pid" || return 1
exe="$(readlink -f "/proc/$pid/exe" 2>/dev/null || true)"
[ -n "$exe" ] || return 1
[ "$(basename "$exe")" = "electron" ] || return 1
[ -x "$(dirname "$exe")/start.sh" ] || return 1
cmdline="$(pid_cmdline "$pid")"
case " $cmdline " in
*" --class=$app_id "*) ;;
*) return 1 ;;
esac
case " $cmdline " in
*" --app-id=$app_id "*) ;;
*) return 1 ;;
esac
case " $cmdline " in
*" --type="*) return 1 ;;
esac
}
find_running_app() {
local proc_exe
local pid
local exe
for proc_exe in /proc/[0-9]*/exe; do
[ -e "$proc_exe" ] || continue
pid="${proc_exe#/proc/}"
pid="${pid%/exe}"
if pid_is_main_codex_desktop "$pid"; then
exe="$(readlink -f "$proc_exe" 2>/dev/null || true)"
printf '%s\t%s\n' "$pid" "$(dirname "$exe")"
return 0
fi
done
return 1
}
running_app_is_alive() {
local pid
@@ -56,4 +115,12 @@ if send_launch_action "$@"; then
exit 0
fi
if running_app="$(find_running_app)"; then
running_pid="${running_app%% *}"
running_app_dir="${running_app#* }"
mkdir -p "$state_dir"
printf '%s\n' "$running_pid" > "$pid_file"
exec "$running_app_dir/start.sh" "$@"
fi
exec codex-desktop "$@"