diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index d1990e3..ed5827e 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -227,6 +227,8 @@ cmd_resume() { echo "Provide a message as second argument: kugetsu resume $session_id " >&2 exit 1 fi + else + echo "Using provided message: $message" fi set_state "$session_dir" "used" diff --git a/skills/kugetsu/tests/test-kugetsu.sh b/skills/kugetsu/tests/test-kugetsu.sh index 0f3c384..2f82ab1 100755 --- a/skills/kugetsu/tests/test-kugetsu.sh +++ b/skills/kugetsu/tests/test-kugetsu.sh @@ -1,6 +1,12 @@ #!/bin/bash # kugetsu test suite # Run with: bash skills/kugetsu/tests/test-kugetsu.sh +# +# Memory management approach: +# - Sequential test execution (no parallel) +# - Cleanup between tests that spawn opencode +# - No hard memory cap (ulimit -v breaks Bun/opencode) +# - If OOM occurs, it is a known failure mode set -euo pipefail @@ -9,12 +15,23 @@ TEST_SESSION_PREFIX="kugetsu-test-" PASS=0 FAIL=0 -cleanup() { +cleanup_sessions() { for dir in ~/.kugetsu/sessions/${TEST_SESSION_PREFIX}*; do [ -d "$dir" ] && rm -rf "$dir" 2>/dev/null || true done } +cleanup_opencode() { + pkill -f "opencode.*${TEST_SESSION_PREFIX}" 2>/dev/null || true + pkill -f "kugetsu.*${TEST_SESSION_PREFIX}" 2>/dev/null || true + sleep 0.5 +} + +cleanup() { + cleanup_sessions + cleanup_opencode +} + pass() { echo "✅ PASS: $1" PASS=$((PASS + 1)) @@ -100,6 +117,7 @@ if echo "$OUTPUT" | grep -q "Auto-filled message: continue this task"; then else fail "resume auto-fills stored message" fi +cleanup echo "" # Test 8: Resume with provided message overrides @@ -114,38 +132,48 @@ if echo "$OUTPUT" | grep -q "new message" && ! echo "$OUTPUT" | grep -q "Auto-fi else fail "resume uses provided message over auto-fill: $OUTPUT" fi +cleanup echo "" # Test 9: Resume idle session fails echo "--- Test: resume idle session fails ---" +rm -rf ~/.kugetsu/sessions/${TEST_SESSION_PREFIX}idle-test 2>/dev/null mkdir -p ~/.kugetsu/sessions/${TEST_SESSION_PREFIX}idle-test echo "idle" > ~/.kugetsu/sessions/${TEST_SESSION_PREFIX}idle-test/state -if ! timeout 5 bash -c "$KUGETSU resume ${TEST_SESSION_PREFIX}idle-test" 2>&1 | grep -q "not resumable"; then - fail "resume idle session fails with message" -else +OUTPUT=$(timeout 5 bash -c "$KUGETSU resume ${TEST_SESSION_PREFIX}idle-test" 2>&1 || true) +if echo "$OUTPUT" | grep -q "cannot be resumed"; then pass "resume idle session fails with message" +else + echo "DEBUG: $OUTPUT" + fail "resume idle session fails with message" fi echo "" # Test 10: Resume non-existent session fails echo "--- Test: resume non-existent session fails ---" -if ! timeout 5 bash -c "$KUGETSU resume ${TEST_SESSION_PREFIX}nonexistent" 2>&1 | grep -q "not found"; then - fail "resume non-existent session fails" -else +rm -rf ~/.kugetsu/sessions/${TEST_SESSION_PREFIX}nonexistent 2>/dev/null +OUTPUT=$(timeout 5 bash -c "$KUGETSU resume ${TEST_SESSION_PREFIX}nonexistent" 2>&1 || true) +if echo "$OUTPUT" | grep -q "not found"; then pass "resume non-existent session fails" +else + echo "DEBUG: $OUTPUT" + fail "resume non-existent session fails" fi echo "" # Test 11: Stop non-used session fails echo "--- Test: stop non-used session fails ---" +rm -rf ~/.kugetsu/sessions/${TEST_SESSION_PREFIX}notused 2>/dev/null mkdir -p ~/.kugetsu/sessions/${TEST_SESSION_PREFIX}notused echo "idle" > ~/.kugetsu/sessions/${TEST_SESSION_PREFIX}notused/state -if ! timeout 5 bash -c "$KUGETSU stop ${TEST_SESSION_PREFIX}notused" 2>&1 | grep -q "not in use"; then - fail "stop non-used session fails" -else +OUTPUT=$(timeout 5 bash -c "$KUGETSU stop ${TEST_SESSION_PREFIX}notused" 2>&1 || true) +if echo "$OUTPUT" | grep -q "not in use"; then pass "stop non-used session fails" +else + echo "DEBUG: $OUTPUT" + fail "stop non-used session fails" fi echo "" @@ -161,6 +189,7 @@ if echo "$OUTPUT" | grep -q "Resuming instead"; then else fail "start on left session resumes" fi +cleanup echo "" # ============================================================================