Skip to content

Commit e96d327

Browse files
author
StackMemory Bot (CLI)
committed
fix: auto-load nvm in all scripts to prevent Node version mismatch
Ensures every bash script that invokes stackmemory or node loads the correct Node version from .nvmrc before executing. Prevents better-sqlite3 NODE_MODULE_VERSION errors when hooks, wrappers, or daemons run in contexts without nvm initialized (git GUIs, IDE integrations, background processes, subprocesses).
1 parent 972d8e6 commit e96d327

38 files changed

Lines changed: 450 additions & 16 deletions

scripts/auto-handoff.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44

55
set -e
66

7+
# Use Node version from .nvmrc
8+
export NVM_DIR="$HOME/.nvm"
9+
if [ -s "$NVM_DIR/nvm.sh" ]; then
10+
. "$NVM_DIR/nvm.sh"
11+
nvm use 2>/dev/null
12+
elif [ -d "$HOME/.nvm/versions/node" ]; then
13+
NODE_VER=$(cat "$(dirname "$0")/../.nvmrc" 2>/dev/null || echo "20")
14+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
15+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
16+
fi
17+
718
# Configuration
819
STACKMEMORY_DIR="${HOME}/.stackmemory"
920
HANDOFF_DIR="${STACKMEMORY_DIR}/handoffs"

scripts/check-bin-links.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@
55

66
set -euo pipefail
77

8+
# Use Node version from .nvmrc
9+
export NVM_DIR="$HOME/.nvm"
10+
if [ -s "$NVM_DIR/nvm.sh" ]; then
11+
. "$NVM_DIR/nvm.sh"
12+
nvm use 2>/dev/null
13+
elif [ -d "$HOME/.nvm/versions/node" ]; then
14+
NODE_VER=$(cat "$(dirname "$0")/../.nvmrc" 2>/dev/null || echo "20")
15+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
16+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
17+
fi
18+
819
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
920
PKG_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
1021
PKG_JSON="$PKG_DIR/package.json"

scripts/claude-code-wrapper.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@
33
# Claude Code wrapper with StackMemory integration
44
# Usage: Add alias to ~/.zshrc: alias claude='~/Dev/stackmemory/scripts/claude-code-wrapper.sh'
55

6+
# Use Node version from .nvmrc
7+
export NVM_DIR="$HOME/.nvm"
8+
if [ -s "$NVM_DIR/nvm.sh" ]; then
9+
. "$NVM_DIR/nvm.sh"
10+
nvm use 2>/dev/null
11+
elif [ -d "$HOME/.nvm/versions/node" ]; then
12+
NODE_VER=$(cat "$(dirname "$0")/../.nvmrc" 2>/dev/null || echo "20")
13+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
14+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
15+
fi
16+
617
# Check for auto-sync flag and filter wrapper-specific args
718
AUTO_SYNC=false
819
SYNC_INTERVAL=5

scripts/claude-pre-commit.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44

55
set -e
66

7+
# Use Node version from .nvmrc
8+
export NVM_DIR="$HOME/.nvm"
9+
if [ -s "$NVM_DIR/nvm.sh" ]; then
10+
. "$NVM_DIR/nvm.sh"
11+
nvm use 2>/dev/null
12+
elif [ -d "$HOME/.nvm/versions/node" ]; then
13+
NODE_VER=$(cat "$(git rev-parse --show-toplevel)/.nvmrc" 2>/dev/null || echo "20")
14+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
15+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
16+
fi
17+
718
# Colors for output
819
RED='\033[0;31m'
920
GREEN='\033[0;32m'

scripts/claude-sm-setup.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@
55

66
set -e
77

8+
# Use Node version from .nvmrc
9+
export NVM_DIR="$HOME/.nvm"
10+
if [ -s "$NVM_DIR/nvm.sh" ]; then
11+
. "$NVM_DIR/nvm.sh"
12+
nvm use 2>/dev/null
13+
elif [ -d "$HOME/.nvm/versions/node" ]; then
14+
NODE_VER=$(cat "$(git rev-parse --show-toplevel)/.nvmrc" 2>/dev/null || echo "20")
15+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
16+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
17+
fi
18+
819
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
920
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
1021
CLAUDE_CONFIG_DIR="${HOME}/.claude"
@@ -364,4 +375,4 @@ main() {
364375
}
365376

366377
# Run main
367-
main "$@"
378+
main "$@"

scripts/codex-wrapper.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@
33
# Codex CLI wrapper with StackMemory integration
44
# Usage: Add alias to your shell: alias codex-sm='~/Dev/stackmemory/scripts/codex-wrapper.sh'
55

6+
# Use Node version from .nvmrc
7+
export NVM_DIR="$HOME/.nvm"
8+
if [ -s "$NVM_DIR/nvm.sh" ]; then
9+
. "$NVM_DIR/nvm.sh"
10+
nvm use 2>/dev/null
11+
elif [ -d "$HOME/.nvm/versions/node" ]; then
12+
NODE_VER=$(cat "$(dirname "$0")/../.nvmrc" 2>/dev/null || echo "20")
13+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
14+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
15+
fi
16+
617
# Check for auto-sync flag
718
AUTO_SYNC=false
819
SYNC_INTERVAL=5

scripts/conductor/after-create.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@
66
# Environment: SYMPHONY_WORKSPACE_DIR, SYMPHONY_ISSUE_ID, SYMPHONY_ISSUE_IDENTIFIER
77
set -euo pipefail
88

9+
# Use Node version from .nvmrc
10+
export NVM_DIR="$HOME/.nvm"
11+
if [ -s "$NVM_DIR/nvm.sh" ]; then
12+
. "$NVM_DIR/nvm.sh"
13+
nvm use 2>/dev/null
14+
elif [ -d "$HOME/.nvm/versions/node" ]; then
15+
NODE_VER=$(cat "$(git rev-parse --show-toplevel)/.nvmrc" 2>/dev/null || echo "20")
16+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
17+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
18+
fi
19+
920
WORKSPACE="${SYMPHONY_WORKSPACE_DIR:-$(pwd)}"
1021
ISSUE_ID="${SYMPHONY_ISSUE_IDENTIFIER:-${SYMPHONY_ISSUE_ID:-unknown}}"
1122

@@ -20,3 +31,4 @@ fi
2031
stackmemory conductor restore --issue "$ISSUE_ID" --workspace "$WORKSPACE" 2>/dev/null || true
2132

2233
echo "[conductor] Workspace initialized for $ISSUE_ID"
34+

scripts/conductor/after-run.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@
77
# Environment: SYMPHONY_WORKSPACE_DIR, SYMPHONY_ISSUE_ID, SYMPHONY_ISSUE_IDENTIFIER
88
set -euo pipefail
99

10+
# Use Node version from .nvmrc
11+
export NVM_DIR="$HOME/.nvm"
12+
if [ -s "$NVM_DIR/nvm.sh" ]; then
13+
. "$NVM_DIR/nvm.sh"
14+
nvm use 2>/dev/null
15+
elif [ -d "$HOME/.nvm/versions/node" ]; then
16+
NODE_VER=$(cat "$(git rev-parse --show-toplevel)/.nvmrc" 2>/dev/null || echo "20")
17+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
18+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
19+
fi
20+
1021
WORKSPACE="${SYMPHONY_WORKSPACE_DIR:-$(pwd)}"
1122
ISSUE_ID="${SYMPHONY_ISSUE_IDENTIFIER:-${SYMPHONY_ISSUE_ID:-unknown}}"
1223
ATTEMPT="${SYMPHONY_ATTEMPT:-1}"
@@ -40,3 +51,4 @@ if [ -f "$OUTCOMES_PATH" ] && [ -f "$DSPY_OPTIMIZE" ]; then
4051
nohup python3 "$DSPY_OPTIMIZE" --quiet >/dev/null 2>&1 &
4152
fi
4253
fi
54+

scripts/conductor/before-remove.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@
66
# Environment: SYMPHONY_WORKSPACE_DIR, SYMPHONY_ISSUE_ID, SYMPHONY_ISSUE_IDENTIFIER
77
set -euo pipefail
88

9+
# Use Node version from .nvmrc
10+
export NVM_DIR="$HOME/.nvm"
11+
if [ -s "$NVM_DIR/nvm.sh" ]; then
12+
. "$NVM_DIR/nvm.sh"
13+
nvm use 2>/dev/null
14+
elif [ -d "$HOME/.nvm/versions/node" ]; then
15+
NODE_VER=$(cat "$(git rev-parse --show-toplevel)/.nvmrc" 2>/dev/null || echo "20")
16+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
17+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
18+
fi
19+
920
WORKSPACE="${SYMPHONY_WORKSPACE_DIR:-$(pwd)}"
1021
ISSUE_ID="${SYMPHONY_ISSUE_IDENTIFIER:-${SYMPHONY_ISSUE_ID:-unknown}}"
1122

@@ -18,3 +29,4 @@ stackmemory conductor archive \
1829
2>/dev/null || true
1930

2031
echo "[conductor] Context archived for $ISSUE_ID"
32+

scripts/create-sandbox.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@
55

66
set -e
77

8+
# Use Node version from .nvmrc
9+
export NVM_DIR="$HOME/.nvm"
10+
if [ -s "$NVM_DIR/nvm.sh" ]; then
11+
. "$NVM_DIR/nvm.sh"
12+
nvm use 2>/dev/null
13+
elif [ -d "$HOME/.nvm/versions/node" ]; then
14+
NODE_VER=$(cat "$(git rev-parse --show-toplevel)/.nvmrc" 2>/dev/null || echo "20")
15+
NODE_PATH=$(ls -d "$HOME/.nvm/versions/node/v${NODE_VER}"* 2>/dev/null | head -1)
16+
[ -n "$NODE_PATH" ] && export PATH="$NODE_PATH/bin:$PATH"
17+
fi
18+
819
# Colors for output
920
RED='\033[0;31m'
1021
GREEN='\033[0;32m'
@@ -266,4 +277,4 @@ echo ""
266277
# Save sandbox path for easy access
267278
echo "$SANDBOX_DIR" > /tmp/stackmemory-sandbox-latest
268279

269-
echo -e "${GREEN}Sandbox ready! Path saved to: /tmp/stackmemory-sandbox-latest${NC}"
280+
echo -e "${GREEN}Sandbox ready! Path saved to: /tmp/stackmemory-sandbox-latest${NC}"

0 commit comments

Comments
 (0)