From c53a92d811549e4f288c89f3f98a363eaa7133e2 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 17 Jun 2026 05:22:39 +0000 Subject: [PATCH] chore: add SessionStart hook to install R + Octave for web sessions Installs r-base-core (Drive-Box R drivers/tests) and octave (ETR torus tests) in Claude Code on the web. Synchronous, idempotent, remote-only; skips packages already present. Ada/Alire left out by design. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_015hmgREHNsxYCuim33yUF2c --- .claude/hooks/session-start.sh | 31 +++++++++++++++++++++++++++++++ .claude/settings.json | 14 ++++++++++++++ 2 files changed, 45 insertions(+) create mode 100755 .claude/hooks/session-start.sh create mode 100644 .claude/settings.json diff --git a/.claude/hooks/session-start.sh b/.claude/hooks/session-start.sh new file mode 100755 index 0000000..7aac33d --- /dev/null +++ b/.claude/hooks/session-start.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# SessionStart hook — install the endocrine toolchains so the project's tests run +# in Claude Code on the web: +# * R (Rscript) -> the Drive-Box drivers + tests (src/endocrine/*.R) +# * GNU Octave -> the ETR torus + tests (src/endocrine/etr/*.m) +# +# Synchronous + idempotent (safe to re-run; installs only what's missing). +# Ada/Alire (mafiabot_core) is intentionally NOT installed here: it is not an apt +# package (the CI uses the setup-alire action) and its CI is scheduled-only. Add +# it if you want web sessions to build/test the Ada side. +set -euo pipefail + +# Only do the heavy apt install in the remote (web) environment. +if [ "${CLAUDE_CODE_REMOTE:-}" != "true" ]; then + exit 0 +fi + +export DEBIAN_FRONTEND=noninteractive + +pkgs=() +command -v Rscript >/dev/null 2>&1 || pkgs+=(r-base-core) +command -v octave >/dev/null 2>&1 || pkgs+=(octave) + +if [ "${#pkgs[@]}" -gt 0 ]; then + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends "${pkgs[@]}" +fi + +# Surface versions in the session log (non-fatal). +command -v Rscript >/dev/null 2>&1 && Rscript --version 2>&1 | head -1 || true +command -v octave-cli >/dev/null 2>&1 && octave-cli --version 2>&1 | head -1 || true diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..e06b033 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,14 @@ +{ + "hooks": { + "SessionStart": [ + { + "hooks": [ + { + "type": "command", + "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/session-start.sh" + } + ] + } + ] + } +}