@kood/claude-code 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env bash
2
+ # git-info.sh - Git 상태 및 diff 요약 출력
3
+ # 에이전트가 분석할 정보를 빠르게 수집
4
+
5
+ set -euo pipefail
6
+
7
+ # Git 저장소 확인
8
+ if ! git rev-parse --git-dir > /dev/null 2>&1; then
9
+ echo "Error: Not a git repository"
10
+ exit 1
11
+ fi
12
+
13
+ echo "=== Git Status ==="
14
+ if [ -n "$(git status --porcelain)" ]; then
15
+ git status --short
16
+ else
17
+ echo "(clean)"
18
+ fi
19
+
20
+ echo ""
21
+ echo "=== Changed Files ==="
22
+ git diff --stat
23
+
24
+ echo ""
25
+ echo "=== Staged Files ==="
26
+ git diff --cached --stat
27
+
28
+ echo ""
29
+ echo "=== Recent Commits (5) ==="
30
+ git log --oneline -5
31
+
32
+ echo ""
33
+ echo "=== Current Branch ==="
34
+ git branch --show-current
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env bash
2
+ # git-push.sh - 안전한 푸시 (상태 확인 후)
3
+ # Usage: ./git-push.sh [--force]
4
+
5
+ set -euo pipefail
6
+
7
+ # Git 저장소 확인
8
+ if ! git rev-parse --git-dir > /dev/null 2>&1; then
9
+ echo "Error: Not a git repository"
10
+ exit 1
11
+ fi
12
+
13
+ # 현재 브랜치
14
+ BRANCH=$(git branch --show-current)
15
+
16
+ if [ -z "$BRANCH" ]; then
17
+ echo "Error: Not on any branch (detached HEAD)"
18
+ exit 1
19
+ fi
20
+
21
+ # Force push 처리
22
+ USE_FORCE=false
23
+ if [ "${1:-}" = "--force" ]; then
24
+ # main/master 보호
25
+ if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "master" ]; then
26
+ echo "ERROR: Cannot force push to $BRANCH"
27
+ echo "This operation is too dangerous on protected branches"
28
+ exit 1
29
+ fi
30
+ USE_FORCE=true
31
+ echo "Warning: Force push enabled (with lease) to $BRANCH"
32
+ fi
33
+
34
+ # upstream 확인 및 push
35
+ if ! git rev-parse --abbrev-ref "@{upstream}" >/dev/null 2>&1; then
36
+ echo "Setting upstream for branch: $BRANCH"
37
+ if [ "$USE_FORCE" = true ]; then
38
+ git push -u origin "$BRANCH" --force-with-lease
39
+ else
40
+ git push -u origin "$BRANCH"
41
+ fi
42
+ else
43
+ if [ "$USE_FORCE" = true ]; then
44
+ git push --force-with-lease
45
+ else
46
+ git push
47
+ fi
48
+ fi
49
+
50
+ echo "Pushed to origin/$BRANCH"
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+ # lint-check.sh - tsc + eslint 병렬 실행
3
+ # Usage: ./lint-check.sh
4
+ # 두 검사를 병렬로 실행하고 결과를 수집
5
+
6
+ set -uo pipefail
7
+
8
+ # 임시 파일
9
+ TSC_OUT=$(mktemp)
10
+ ESLINT_OUT=$(mktemp)
11
+ TSC_EXIT=0
12
+ ESLINT_EXIT=0
13
+
14
+ # Cleanup (ERR, INT, TERM도 처리)
15
+ trap "rm -f $TSC_OUT $ESLINT_OUT" EXIT ERR INT TERM
16
+
17
+ echo "=== Running TypeScript + ESLint in parallel ==="
18
+
19
+ # 병렬 실행
20
+ (npx tsc --noEmit > "$TSC_OUT" 2>&1) &
21
+ TSC_PID=$!
22
+
23
+ (npx eslint . > "$ESLINT_OUT" 2>&1) &
24
+ ESLINT_PID=$!
25
+
26
+ # 대기
27
+ wait $TSC_PID || TSC_EXIT=$?
28
+ wait $ESLINT_PID || ESLINT_EXIT=$?
29
+
30
+ # 결과 출력
31
+ echo ""
32
+ echo "=== TypeScript Results ==="
33
+ if [ $TSC_EXIT -eq 0 ]; then
34
+ echo "✓ No type errors"
35
+ else
36
+ cat "$TSC_OUT"
37
+ fi
38
+
39
+ echo ""
40
+ echo "=== ESLint Results ==="
41
+ if [ $ESLINT_EXIT -eq 0 ]; then
42
+ echo "✓ No lint errors"
43
+ else
44
+ cat "$ESLINT_OUT"
45
+ fi
46
+
47
+ echo ""
48
+ echo "=== Summary ==="
49
+ if [ $TSC_EXIT -eq 0 ] && [ $ESLINT_EXIT -eq 0 ]; then
50
+ echo "✓ All checks passed"
51
+ exit 0
52
+ else
53
+ [ $TSC_EXIT -ne 0 ] && echo "✗ TypeScript: FAILED"
54
+ [ $ESLINT_EXIT -ne 0 ] && echo "✗ ESLint: FAILED"
55
+ exit 1
56
+ fi
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env bash
2
+ # lint-file.sh - 특정 파일/디렉토리만 검사
3
+ # Usage: ./lint-file.sh <file|directory> [file2...]
4
+ # Example: ./lint-file.sh src/utils/api.ts
5
+ # ./lint-file.sh src/components/
6
+
7
+ set -uo pipefail
8
+
9
+ if [ $# -eq 0 ]; then
10
+ echo "Usage: $0 <file|directory> [file2...]"
11
+ echo "Example: $0 src/utils/api.ts"
12
+ exit 1
13
+ fi
14
+
15
+ TSC_EXIT=0
16
+ ESLINT_EXIT=0
17
+
18
+ echo "=== Checking: $@ ==="
19
+
20
+ # TypeScript 검사 (전체 프로젝트 - tsc는 개별 파일 검사 미지원)
21
+ echo ""
22
+ echo "=== TypeScript ==="
23
+ echo "(Note: tsc checks entire project)"
24
+ npx tsc --noEmit || TSC_EXIT=$?
25
+
26
+ # ESLint 검사
27
+ echo ""
28
+ echo "=== ESLint ==="
29
+ npx eslint "$@" || ESLINT_EXIT=$?
30
+
31
+ # 결과
32
+ echo ""
33
+ echo "=== Summary ==="
34
+ if [ $TSC_EXIT -eq 0 ] && [ $ESLINT_EXIT -eq 0 ]; then
35
+ echo "✓ All checks passed"
36
+ exit 0
37
+ else
38
+ [ $TSC_EXIT -ne 0 ] && echo "✗ TypeScript: FAILED"
39
+ [ $ESLINT_EXIT -ne 0 ] && echo "✗ ESLint: FAILED"
40
+ exit 1
41
+ fi
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ # pm-detect.sh - Package manager 자동 감지
3
+ # Usage: ./pm-detect.sh
4
+ # Output: npm | yarn | pnpm | bun
5
+ # Exit 1 if no lock file found
6
+
7
+ set -euo pipefail
8
+
9
+ # Lock 파일 기반 감지
10
+ if [ -f "bun.lockb" ]; then
11
+ echo "bun"
12
+ elif [ -f "pnpm-lock.yaml" ]; then
13
+ echo "pnpm"
14
+ elif [ -f "yarn.lock" ]; then
15
+ echo "yarn"
16
+ elif [ -f "package-lock.json" ]; then
17
+ echo "npm"
18
+ elif [ -f "package.json" ]; then
19
+ # Lock 파일 없으면 기본 npm
20
+ echo "Warning: No lock file found, defaulting to npm" >&2
21
+ echo "npm"
22
+ else
23
+ echo "Error: No package.json found" >&2
24
+ exit 1
25
+ fi
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env bash
2
+ # pm-run.sh - 감지된 package manager로 스크립트 실행
3
+ # Usage: ./pm-run.sh <script> [args...]
4
+ # Example: ./pm-run.sh build
5
+ # ./pm-run.sh test --watch
6
+
7
+ set -euo pipefail
8
+
9
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+
11
+ if [ $# -eq 0 ] || [ -z "${1:-}" ]; then
12
+ echo "Usage: $0 <script> [args...]"
13
+ echo "Example: $0 build"
14
+ exit 1
15
+ fi
16
+
17
+ SCRIPT="$1"
18
+ shift
19
+
20
+ # Package manager 감지
21
+ PM=$("$SCRIPT_DIR/pm-detect.sh")
22
+
23
+ # 실행
24
+ case "$PM" in
25
+ bun)
26
+ bun run "$SCRIPT" "$@"
27
+ ;;
28
+ pnpm)
29
+ pnpm run "$SCRIPT" "$@"
30
+ ;;
31
+ yarn)
32
+ yarn "$SCRIPT" "$@"
33
+ ;;
34
+ npm)
35
+ npm run "$SCRIPT" "$@"
36
+ ;;
37
+ *)
38
+ echo "Error: Unknown package manager: $PM" >&2
39
+ exit 1
40
+ ;;
41
+ esac
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env bash
2
+ # version-bump.sh - 버전 계산
3
+ # Usage: ./version-bump.sh <current_version> <bump_type>
4
+ # bump_type: +1 (patch), +minor, +major, or direct version (x.x.x)
5
+ # Example: ./version-bump.sh 1.2.3 +1 → 1.2.4
6
+ # ./version-bump.sh 1.2.3 +minor → 1.3.0
7
+ # ./version-bump.sh 1.2.3 +major → 2.0.0
8
+ # ./version-bump.sh 1.2.3 2.0.0 → 2.0.0
9
+
10
+ set -euo pipefail
11
+
12
+ if [ $# -lt 2 ]; then
13
+ echo "Usage: $0 <current_version> <bump_type>"
14
+ echo "bump_type: +1, +minor, +major, or x.x.x"
15
+ exit 1
16
+ fi
17
+
18
+ CURRENT="$1"
19
+ BUMP="$2"
20
+
21
+ # 버전 형식 먼저 검증
22
+ if ! [[ "$CURRENT" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
23
+ echo "Error: Invalid version format: $CURRENT" >&2
24
+ echo "Expected: x.x.x (e.g., 1.2.3)" >&2
25
+ exit 1
26
+ fi
27
+
28
+ # 버전 파싱
29
+ IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"
30
+
31
+ # 새 버전 계산
32
+ case "$BUMP" in
33
+ +1|+patch)
34
+ NEW_VERSION="$MAJOR.$MINOR.$((PATCH + 1))"
35
+ ;;
36
+ +minor)
37
+ NEW_VERSION="$MAJOR.$((MINOR + 1)).0"
38
+ ;;
39
+ +major)
40
+ NEW_VERSION="$((MAJOR + 1)).0.0"
41
+ ;;
42
+ *)
43
+ # 직접 버전 지정 검증
44
+ if [[ "$BUMP" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
45
+ NEW_VERSION="$BUMP"
46
+ else
47
+ echo "Error: Invalid bump type: $BUMP"
48
+ echo "Use: +1, +minor, +major, or x.x.x"
49
+ exit 1
50
+ fi
51
+ ;;
52
+ esac
53
+
54
+ echo "$NEW_VERSION"
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env bash
2
+ # version-find.sh - 버전 파일 탐색
3
+ # Usage: ./version-find.sh
4
+ # package.json과 .version() 코드 파일을 병렬로 탐색
5
+
6
+ set -uo pipefail
7
+
8
+ echo "=== Searching version files ==="
9
+
10
+ # 임시 파일
11
+ PKG_OUT=$(mktemp)
12
+ CODE_OUT=$(mktemp)
13
+
14
+ trap "rm -f $PKG_OUT $CODE_OUT" EXIT ERR INT TERM
15
+
16
+ # 병렬 탐색 (fd 우선, 없으면 find)
17
+ if command -v fd &>/dev/null; then
18
+ fd -t f 'package.json' -E node_modules > "$PKG_OUT" 2>&1 &
19
+ else
20
+ find . -name 'package.json' -not -path '*/node_modules/*' > "$PKG_OUT" 2>&1 &
21
+ fi
22
+ PID1=$!
23
+
24
+ (rg "\.version\(['\"]" --type ts --type js -l 2>/dev/null || true) > "$CODE_OUT" &
25
+ PID2=$!
26
+
27
+ wait $PID1
28
+ wait $PID2
29
+
30
+ # 결과 출력
31
+ echo ""
32
+ echo "=== package.json files ==="
33
+ if [ -s "$PKG_OUT" ]; then
34
+ cat "$PKG_OUT"
35
+ else
36
+ echo "(none found)"
37
+ fi
38
+
39
+ echo ""
40
+ echo "=== Code files with .version() ==="
41
+ if [ -s "$CODE_OUT" ]; then
42
+ cat "$CODE_OUT"
43
+ else
44
+ echo "(none found)"
45
+ fi
46
+
47
+ echo ""
48
+ echo "=== All version files ==="
49
+ cat "$PKG_OUT" "$CODE_OUT" | sort -u