@@ -5726,19 +5726,87 @@ install_languages_legacy_tools() {
57265726 if [[ -x " $TARGET_HOME /.atuin/bin/atuin" ]]; then
57275727 if run_as_target bash -c '
57285728 set -euo pipefail
5729- preferred_src ="$HOME/.atuin/bin/atuin"
5730- primary_dir="' " $ ACFS_BIN_DIR" ' "
5729+ real_bin ="$HOME/.atuin/bin/atuin"
5730+ primary_dir="${ ACFS_BIN_DIR:-$HOME/.local/bin} "
57315731 fallback_dir="$HOME/.local/bin"
5732- mkdir -p "$primary_dir"
5733- ln -sf "$preferred_src" "$primary_dir/atuin"
5734- if [[ "$fallback_dir" != "$primary_dir" ]]; then
5735- mkdir -p "$fallback_dir"
5736- ln -sf "$preferred_src" "$fallback_dir/atuin"
5737- fi
5732+
5733+ write_atuin_guard_wrapper() {
5734+ local wrapper_path="${1:-}"
5735+ local real_bin_path="${2:-}"
5736+ local real_bin_q=""
5737+ local backup_path=""
5738+
5739+ [[ -n "$wrapper_path" && -n "$real_bin_path" && -x "$real_bin_path" ]] || return 1
5740+ printf -v real_bin_q "%q" "$real_bin_path"
5741+
5742+ if [[ -e "$wrapper_path" || -L "$wrapper_path" ]]; then
5743+ if [[ ! -L "$wrapper_path" ]] && grep -Fq "agent hook integration disabled by ACFS" "$wrapper_path" 2>/dev/null; then
5744+ :
5745+ else
5746+ backup_path="${wrapper_path}.acfs-backup.$(date +%s).$$"
5747+ mv "$wrapper_path" "$backup_path" 2>/dev/null || return 1
5748+ fi
5749+ fi
5750+
5751+ {
5752+ cat <<\ATUIN_ACFS_WRAPPER_HEAD
5753+ #!/usr/bin/env bash
5754+ set -euo pipefail
5755+
5756+ real_atuin_bin="${ATUIN_REAL_BIN:-}"
5757+ if [[ -z "$real_atuin_bin" ]]; then
5758+ ATUIN_ACFS_WRAPPER_HEAD
5759+ printf " real_atuin_bin=%s\n" "$real_bin_q"
5760+ cat <<\ATUIN_ACFS_WRAPPER_TAIL
5761+ fi
5762+
5763+ if [[ ! -x "$real_atuin_bin" ]]; then
5764+ echo "atuin wrapper: real atuin binary not found at $real_atuin_bin" >&2
5765+ exit 127
5766+ fi
5767+
5768+ if [[ "${1:-}" == "hook" ]]; then
5769+ echo "atuin wrapper: agent hook integration disabled by ACFS" >&2
5770+ exit 0
5771+ fi
5772+
5773+ _acfs_atuin_agent_context() {
5774+ local parent_comm=""
5775+
5776+ if [[ -n "${CODEX_CI:-}" || -n "${CODEX_THREAD_ID:-}" || -n "${CLAUDE_PROJECT_DIR:-}" || -n "${AGENT_NAME:-}" ]]; then
5777+ return 0
5778+ fi
5779+
5780+ parent_comm="$(ps -o comm= -p "${PPID:-0}" 2>/dev/null || true)"
5781+ case "$parent_comm" in
5782+ claude|codex|cod|cc|gmi|gemini|bun|node) return 0 ;;
5783+ *) return 1 ;;
5784+ esac
5785+ }
5786+
5787+ if [[ "${1:-}" == "history" && ( "${2:-}" == "start" || "${2:-}" == "end" ) ]] && _acfs_atuin_agent_context; then
5788+ if [[ "${2:-}" == "start" ]]; then
5789+ printf "%s\n" "atuin-agent-history-disabled"
5790+ fi
5791+ exit 0
5792+ fi
5793+
5794+ exec "$real_atuin_bin" "$@"
5795+ ATUIN_ACFS_WRAPPER_TAIL
5796+ } > "$wrapper_path"
5797+ chmod 0755 "$wrapper_path"
5798+ }
5799+
5800+ for dir in "$primary_dir" "$fallback_dir"; do
5801+ [[ -n "$dir" ]] || continue
5802+ mkdir -p "$dir"
5803+ write_atuin_guard_wrapper "$dir/atuin" "$real_bin"
5804+ [[ "$fallback_dir" != "$primary_dir" ]] || break
5805+ done
57385806 ' > /dev/null 2>&1 ; then
5739- log_detail " Atuin shim normalized in $ACFS_BIN_DIR and ~/.local/bin"
5807+ log_detail " Atuin guard wrapper installed in $ACFS_BIN_DIR and ~/.local/bin"
57405808 else
5741- log_detail " Skipping Atuin shim normalization for $ACFS_BIN_DIR "
5809+ log_detail " Skipping Atuin guard wrapper installation for $ACFS_BIN_DIR "
57425810 fi
57435811 fi
57445812
0 commit comments