diff --git a/tools/mcc-env.sh b/tools/mcc-env.sh index 0e1ddc8e..28378c9a 100644 --- a/tools/mcc-env.sh +++ b/tools/mcc-env.sh @@ -161,8 +161,19 @@ mcc-cmd() { local command="" while [[ $# -gt 0 ]]; do case "$1" in - --session) session="$2"; shift 2 ;; - *) command="$1"; shift ;; + --session) + shift + if [[ $# -eq 0 ]]; then + echo "mcc-cmd: --session requires a value" >&2 + return 1 + fi + session="$1" + shift + ;; + *) + command="$1" + shift + ;; esac done @@ -191,6 +202,17 @@ mcc-tui() { } _mcc_session_log_tail() { + local session="$1" + local log_file + log_file="$(_mcc_session_log_file "$session")" + if [[ -e "$log_file" ]]; then + tail -n 30 "$log_file" 2>/dev/null + else + echo "No MCC log found" + fi +} + +_mcc_session_log_follow() { local session="$1" local log_file log_file="$(_mcc_session_log_file "$session")" @@ -200,21 +222,71 @@ _mcc_session_log_tail() { # --- Debug helpers --- mcc-debug() { bash "$MCC_REPO/tools/mcc-debug.sh" "$@"; } mcc-log-mcc() { - local session="${1:-}" - if [[ "$session" == "--session" ]]; then - session="${2:-}" - fi + local session="" + while [[ $# -gt 0 ]]; do + case "$1" in + --session) + shift + if [[ $# -eq 0 ]]; then + echo "mcc-log-mcc: --session requires a value" >&2 + return 1 + fi + session="$1" + shift + ;; + *) + echo "Unknown option: $1" >&2 + return 1 + ;; + esac + done + session="$(_mcc_resolve_session "$session")" + _mcc_session_log_follow "$session" +} +mcc-state() { + local session="" + while [[ $# -gt 0 ]]; do + case "$1" in + --session) + shift + if [[ $# -eq 0 ]]; then + echo "mcc-state: --session requires a value" >&2 + return 1 + fi + session="$1" + shift + ;; + *) + echo "Unknown option: $1" >&2 + return 1 + ;; + esac + done + + session="$(_mcc_resolve_session "$session")" + mcc-cmd --session "$session" "debug state" + sleep 1 _mcc_session_log_tail "$session" } -mcc-state() { echo "debug state" >> "$MCC_REPO/mcc_input.txt"; sleep 1; tail -30 "${TMPDIR:-/tmp}/mcc-debug/mcc-debug.log" 2>/dev/null; } mcc-preflight() { bash "$MCC_REPO/.skills/mcc-integration-testing/scripts/preflight_test_env.sh" "$@"; } mcc-reset-session() { local session="" while [[ $# -gt 0 ]]; do case "$1" in - --session) session="$2"; shift 2 ;; - *) echo "Unknown option: $1" >&2; return 1 ;; + --session) + shift + if [[ $# -eq 0 ]]; then + echo "mcc-reset-session: --session requires a value" >&2 + return 1 + fi + session="$1" + shift + ;; + *) + echo "Unknown option: $1" >&2 + return 1 + ;; esac done diff --git a/tools/test-mcc-env.sh b/tools/test-mcc-env.sh index 2d2fb284..e54ade93 100755 --- a/tools/test-mcc-env.sh +++ b/tools/test-mcc-env.sh @@ -84,5 +84,12 @@ grep -Fq "debug state" "$input_file" mcc-reset-session --session "$session" [[ ! -e "$(_mcc_session_root "$session")" ]] +malformed_log="${TMPDIR:-/tmp}/mcc-env-session-hang-test.log" +if mcc-cmd --session >"$malformed_log" 2>&1; then + echo "FAIL: --session accepted without value" >&2 + cat "$malformed_log" >&2 + exit 1 +fi +grep -Fq -- "--session requires a value" "$malformed_log" echo "PASS"