diff --git a/scripts/install-goose-v149-pool-103.sh b/scripts/install-goose-v149-pool-103.sh new file mode 100755 index 0000000..c648c2d --- /dev/null +++ b/scripts/install-goose-v149-pool-103.sh @@ -0,0 +1,168 @@ +#!/usr/bin/env bash +# Switch 103 native goosed pool 18006-18014 from 1.41 to Goose v1.49 (goose serve). +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +NATIVE_ROOT="${GOOSE_NATIVE_ROOT:-/Users/john/Project/tkmind_go-native}" +GOOSED_V149_ROOT="${GOOSE_V149_ROOT:-/Users/john/Project/tkmind_go-v149}" +STAMP="${GOOSE_V149_RELEASE_STAMP:-$(date +%Y%m%d-v149-m1)}" +RELEASE_BIN="${NATIVE_ROOT}/releases/goose-${STAMP}" +BACKUP_TAG="$(date +%Y%m%d-%H%M%S)" +BACKUP_DIR="${NATIVE_ROOT}/backups/pre-v149-pool-${BACKUP_TAG}" +RUN_SCRIPT="${NATIVE_ROOT}/run-goosed-native.sh" +PORTAL_ENV="${GOOSE_V149_CANARY_ENV_FILE:-/Users/john/Project/Memind/.env}" +GUI="gui/$(id -u)" +CANARY_LABEL="cn.tkmind.goose-v149-canary" + +usage() { + cat </dev/null | head -1 || true)" + if [[ -z "${latest}" ]]; then + echo "No pool backup found under ${NATIVE_ROOT}/backups/" >&2 + exit 1 + fi + say "rollback from ${latest}" + cp "${latest}/run-goosed-native.sh" "${RUN_SCRIPT}" + chmod +x "${RUN_SCRIPT}" + for env in "${latest}"/.env.*; do + [[ -f "${env}" ]] || continue + cp "${env}" "${NATIVE_ROOT}/$(basename "${env}")" + done + ln -sfn "${NATIVE_ROOT}/releases/goosed-20260729-v141-m1" "${NATIVE_ROOT}/goosed" + for p in $(seq 18006 18014); do + launchctl bootout "${GUI}/cn.tkmind.goosed-native-${p}" 2>/dev/null || true + launchctl bootstrap "${GUI}" "${HOME}/Library/LaunchAgents/cn.tkmind.goosed-native-${p}.plist" + done + if [[ -x "${ROOT}/scripts/switch-goose-v149-canary-103.sh" ]]; then + bash "${ROOT}/scripts/switch-goose-v149-canary-103.sh" off || true + fi + sleep 3 + for p in $(seq 18006 18014); do + printf '%s: ' "$p" + curl -kfsS --connect-timeout 5 "https://127.0.0.1:${p}/status" || echo FAIL + done + say "rollback complete" +} + +if [[ "${1:-}" == "--rollback" ]]; then + rollback + exit 0 +fi + +if [[ "${1:-}" != "--yes" ]]; then + echo "Refusing without --yes (103 production pool switch)" >&2 + usage >&2 + exit 2 +fi + +SRC_BIN="${GOOSED_V149_ROOT}/target/release/goose" +if [[ ! -x "${SRC_BIN}" ]]; then + SRC_BIN="${NATIVE_ROOT}/releases/goose-${STAMP}" +fi +if [[ ! -x "${SRC_BIN}" ]]; then + echo "Missing v1.49 binary: ${GOOSED_V149_ROOT}/target/release/goose" >&2 + exit 1 +fi + +mkdir -p "${BACKUP_DIR}" "${NATIVE_ROOT}/releases" +cp -a "${RUN_SCRIPT}" "${BACKUP_DIR}/" +for p in $(seq 18006 18014); do + cp -a "${NATIVE_ROOT}/.env.${p}" "${BACKUP_DIR}/" +done +say "backup ${BACKUP_DIR}" + +install -m 755 "${SRC_BIN}" "${RELEASE_BIN}" +ln -sfn "${RELEASE_BIN}" "${NATIVE_ROOT}/goosed" + +cat > "${RUN_SCRIPT}" <<'RUNEOF' +#!/usr/bin/env bash +set -euo pipefail +export PATH="/opt/homebrew/opt/node@24/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin" +PORT="${1:?missing port argument}" +ROOT="/Users/john/Project/tkmind_go-native" +cd "${ROOT}" +set -a +# shellcheck source=/dev/null +source "${ROOT}/.env.${PORT}" +set +a +GOOSE_BIN="${GOOSE_BIN:-${ROOT}/goosed}" +exec env "CUSTOM_DEEPSEEK-CP_API_KEY=${DEEPSEEK_API_KEY:-}" \ + "${GOOSE_BIN}" serve \ + --host "${GOOSE_HOST:-127.0.0.1}" \ + --port "${PORT}" \ + --tls +RUNEOF +chmod +x "${RUN_SCRIPT}" + +for p in $(seq 18006 18014); do + ENV_FILE="${NATIVE_ROOT}/.env.${p}" + mkdir -p "${NATIVE_ROOT}/state/${p}"/{config,data,state,cache} + if ! grep -q 'GOOSE_V149_POOL' "${ENV_FILE}" 2>/dev/null; then + { + echo "" + echo "# GOOSE_V149_POOL overrides ($(date -u +%Y-%m-%dT%H:%M:%SZ))" + echo "GOOSE_BIN=${RELEASE_BIN}" + echo "XDG_CONFIG_HOME=${NATIVE_ROOT}/state/${p}/config" + echo "XDG_DATA_HOME=${NATIVE_ROOT}/state/${p}/data" + echo "XDG_STATE_HOME=${NATIVE_ROOT}/state/${p}/state" + echo "XDG_CACHE_HOME=${NATIVE_ROOT}/state/${p}/cache" + echo "MEMORY_BACKEND=legacy" + echo "MEMORY_VECTOR_ENABLED=0" + echo "MEMORY_AGENT_INJECTION_MODE=off" + echo "MEMORY_LIFECYCLE_ENABLED=0" + echo "MEMORY_CANDIDATE_ENABLED=0" + } >> "${ENV_FILE}" + fi +done + +say "stop stable pool + canary :18015" +for p in $(seq 18006 18014); do + launchctl bootout "${GUI}/cn.tkmind.goosed-native-${p}" 2>/dev/null || true +done +launchctl bootout "${GUI}/${CANARY_LABEL}" 2>/dev/null || true + +if [[ -x "${ROOT}/scripts/switch-goose-v149-canary-103.sh" ]] \ + && grep -q '# GOOSE_V149_CANARY_BEGIN' "${PORTAL_ENV}" 2>/dev/null; then + bash "${ROOT}/scripts/switch-goose-v149-canary-103.sh" off || true +fi + +say "bootstrap v1.49 pool" +for p in $(seq 18006 18014); do + launchctl bootstrap "${GUI}" "${HOME}/Library/LaunchAgents/cn.tkmind.goosed-native-${p}.plist" +done + +sleep 5 +FAIL=0 +for p in $(seq 18006 18014); do + printf '%s: ' "$p" + if curl -kfsS --connect-timeout 8 "https://127.0.0.1:${p}/status" >/dev/null; then + echo ok + else + echo FAIL + FAIL=1 + fi +done + +if [[ "${FAIL}" -ne 0 ]]; then + say "pool health check failed; consider: bash $0 --rollback" >&2 + exit 1 +fi + +"${RELEASE_BIN}" --version | head -1 +say "pool switch ok release=${RELEASE_BIN}" +say "backup=${BACKUP_DIR}" diff --git a/scripts/switch-goose-v149-canary-103.sh b/scripts/switch-goose-v149-canary-103.sh index 026e7a2..ce82a74 100755 --- a/scripts/switch-goose-v149-canary-103.sh +++ b/scripts/switch-goose-v149-canary-103.sh @@ -67,8 +67,8 @@ write_canary_block() { restart_portal() { launchctl kickstart -k "${GUI}/${PORTAL_LABEL}" 2>/dev/null || launchctl bootstrap "${GUI}" "${HOME}/Library/LaunchAgents/${PORTAL_LABEL}.plist" - sleep 2 - curl -fsS --connect-timeout 5 http://127.0.0.1:8081/api/status + sleep 5 + curl -fsS --connect-timeout 10 http://127.0.0.1:8081/api/status || echo "[goose-v149-canary-103] WARN: Portal /api/status not ready yet" >&2 } cmd="${1:-}"