moai-adk 0.3.12__py3-none-any.whl → 0.3.13__py3-none-any.whl
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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +1 -1
- moai_adk/core/project/detector.py +14 -2
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +33 -0
- moai_adk/utils/banner.py +6 -6
- {moai_adk-0.3.12.dist-info → moai_adk-0.3.13.dist-info}/METADATA +14 -3
- {moai_adk-0.3.12.dist-info → moai_adk-0.3.13.dist-info}/RECORD +9 -9
- {moai_adk-0.3.12.dist-info → moai_adk-0.3.13.dist-info}/WHEEL +0 -0
- {moai_adk-0.3.12.dist-info → moai_adk-0.3.13.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.3.12.dist-info → moai_adk-0.3.13.dist-info}/licenses/LICENSE +0 -0
moai_adk/__init__.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# @CODE:CORE-PROJECT-001 | SPEC: SPEC-CORE-PROJECT-001.md | TEST: tests/unit/test_language_detector.py
|
|
2
|
+
# @CODE:LANG-DETECT-001 | SPEC: SPEC-LANG-DETECT-001.md | TEST: tests/unit/test_detector.py
|
|
2
3
|
"""Language detector module.
|
|
3
4
|
|
|
4
5
|
Automatically detects 20 programming languages.
|
|
@@ -8,9 +9,21 @@ from pathlib import Path
|
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class LanguageDetector:
|
|
11
|
-
"""Automatically detect up to 20 programming languages.
|
|
12
|
+
"""Automatically detect up to 20 programming languages.
|
|
13
|
+
|
|
14
|
+
Prioritizes framework-specific files (e.g., Laravel, Django) over
|
|
15
|
+
generic language files to improve accuracy in mixed-language projects.
|
|
16
|
+
"""
|
|
12
17
|
|
|
13
18
|
LANGUAGE_PATTERNS = {
|
|
19
|
+
# PHP moved to top for priority (Laravel detection)
|
|
20
|
+
"php": [
|
|
21
|
+
"*.php",
|
|
22
|
+
"composer.json",
|
|
23
|
+
"artisan", # Laravel: CLI tool (unique identifier)
|
|
24
|
+
"app/", # Laravel: application directory
|
|
25
|
+
"bootstrap/laravel.php" # Laravel: bootstrap file
|
|
26
|
+
],
|
|
14
27
|
"python": ["*.py", "pyproject.toml", "requirements.txt", "setup.py"],
|
|
15
28
|
"typescript": ["*.ts", "tsconfig.json"],
|
|
16
29
|
"javascript": ["*.js", "package.json"],
|
|
@@ -21,7 +34,6 @@ class LanguageDetector:
|
|
|
21
34
|
"swift": ["*.swift", "Package.swift"],
|
|
22
35
|
"kotlin": ["*.kt", "build.gradle.kts"],
|
|
23
36
|
"csharp": ["*.cs", "*.csproj"],
|
|
24
|
-
"php": ["*.php", "composer.json"],
|
|
25
37
|
"ruby": ["*.rb", "Gemfile"],
|
|
26
38
|
"elixir": ["*.ex", "mix.exs"],
|
|
27
39
|
"scala": ["*.scala", "build.sbt"],
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
SessionStart, SessionEnd 이벤트 처리
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
import os
|
|
8
|
+
import time
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
7
11
|
from core import HookPayload, HookResult
|
|
8
12
|
from core.checkpoint import list_checkpoints
|
|
9
13
|
from core.project import count_specs, detect_language, get_git_info
|
|
@@ -29,14 +33,43 @@ def handle_session_start(payload: HookPayload) -> HookResult:
|
|
|
29
33
|
SPEC Progress: {완료}/{전체} ({퍼센트}%)
|
|
30
34
|
Checkpoints: {개수} available (최신 3개 표시)
|
|
31
35
|
|
|
36
|
+
Note:
|
|
37
|
+
- Claude Code는 SessionStart를 여러 번 호출할 수 있음
|
|
38
|
+
- 상태 파일 기반 중복 방지 메커니즘 사용
|
|
39
|
+
- 5초 이내 재호출은 무시 (같은 세션으로 간주)
|
|
40
|
+
|
|
32
41
|
TDD History:
|
|
33
42
|
- RED: 세션 시작 메시지 형식 테스트
|
|
34
43
|
- GREEN: helper 함수 조합하여 상태 메시지 생성
|
|
35
44
|
- REFACTOR: 메시지 포맷 개선, 가독성 향상, checkpoint 목록 추가
|
|
45
|
+
- FIX: 상태 파일 기반 중복 출력 방지 메커니즘 도입
|
|
36
46
|
|
|
37
47
|
@TAG:CHECKPOINT-EVENT-001
|
|
38
48
|
"""
|
|
49
|
+
# 상태 파일 기반 중복 방지
|
|
39
50
|
cwd = payload.get("cwd", ".")
|
|
51
|
+
# cwd가 "."인 경우 절대 경로로 변환하여 프로젝트명 추출
|
|
52
|
+
project_dir = Path(cwd).resolve()
|
|
53
|
+
session_file = Path("/tmp") / f"moai-session-{project_dir.name}.lock"
|
|
54
|
+
|
|
55
|
+
# 기존 세션 파일이 있고 5초 이내면 중복 실행으로 간주
|
|
56
|
+
if session_file.exists():
|
|
57
|
+
file_age = time.time() - session_file.stat().st_mtime
|
|
58
|
+
if file_age < 5.0:
|
|
59
|
+
return HookResult() # 중복 실행 방지
|
|
60
|
+
|
|
61
|
+
# 세션 파일 생성/갱신
|
|
62
|
+
session_file.touch()
|
|
63
|
+
|
|
64
|
+
# 1시간 이상 된 세션 파일 자동 정리
|
|
65
|
+
if session_file.parent.exists():
|
|
66
|
+
for old_file in session_file.parent.glob("moai-session-*.lock"):
|
|
67
|
+
try:
|
|
68
|
+
if time.time() - old_file.stat().st_mtime > 3600:
|
|
69
|
+
old_file.unlink()
|
|
70
|
+
except Exception:
|
|
71
|
+
pass # 정리 실패는 무시
|
|
72
|
+
|
|
40
73
|
language = detect_language(cwd)
|
|
41
74
|
git_info = get_git_info(cwd)
|
|
42
75
|
specs = count_specs(cwd)
|
moai_adk/utils/banner.py
CHANGED
|
@@ -9,12 +9,12 @@ from rich.console import Console
|
|
|
9
9
|
console = Console()
|
|
10
10
|
|
|
11
11
|
MOAI_BANNER = """
|
|
12
|
-
███╗ ███╗
|
|
13
|
-
████╗
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
██║ ╚═╝
|
|
17
|
-
╚═╝ ╚═╝
|
|
12
|
+
███╗ ███╗ █████╗ ██╗ █████╗ ██████╗ ██╗ ██╗
|
|
13
|
+
████╗ ████║ █████╗ ██╔══██╗██║ ██╔══██╗██╔══██╗██║ ██╔╝
|
|
14
|
+
██╔████╔██║ ██╔══██╗███████║██║█████╗███████║██║ ██║█████╔╝
|
|
15
|
+
██║╚██╔╝██║ ██║ ██║██╔══██║██║╚════╝██╔══██║██║ ██║██╔═██╗
|
|
16
|
+
██║ ╚═╝ ██║ ╚█████╔╝██║ ██║██║ ██║ ██║██████╔╝██║ ██╗
|
|
17
|
+
╚═╝ ╚═╝ ╚════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: moai-adk
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.13
|
|
4
4
|
Summary: MoAI Agentic Development Kit - SPEC-First TDD with Alfred SuperAgent
|
|
5
5
|
Project-URL: Homepage, https://github.com/modu-ai/moai-adk
|
|
6
6
|
Project-URL: Repository, https://github.com/modu-ai/moai-adk
|
|
@@ -395,6 +395,10 @@ uv --version
|
|
|
395
395
|
#### 2. moai-adk 설치 (10초)
|
|
396
396
|
|
|
397
397
|
```bash
|
|
398
|
+
# 권장: uv tool 모드 (샌드박스 격리, 전역 접근)
|
|
399
|
+
uv tool install moai-adk
|
|
400
|
+
|
|
401
|
+
# 대안: 현재 가상 환경에 설치
|
|
398
402
|
uv pip install moai-adk
|
|
399
403
|
|
|
400
404
|
# 설치 확인
|
|
@@ -1283,7 +1287,10 @@ Alfred가 모든 코드에 자동으로 적용하는 품질 기준입니다.
|
|
|
1283
1287
|
```bash
|
|
1284
1288
|
moai-adk update
|
|
1285
1289
|
|
|
1286
|
-
# 또는
|
|
1290
|
+
# 또는 (tool 모드 - 권장)
|
|
1291
|
+
uv tool upgrade moai-adk
|
|
1292
|
+
|
|
1293
|
+
# 또는 (pip 모드 - 레거시)
|
|
1287
1294
|
uv pip install --upgrade moai-adk
|
|
1288
1295
|
```
|
|
1289
1296
|
|
|
@@ -1437,7 +1444,11 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
|
1437
1444
|
# Windows:
|
|
1438
1445
|
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
|
|
1439
1446
|
|
|
1440
|
-
# moai-adk 재설치
|
|
1447
|
+
# moai-adk 재설치 (tool 모드 - 권장)
|
|
1448
|
+
uv tool uninstall moai-adk
|
|
1449
|
+
uv tool install moai-adk
|
|
1450
|
+
|
|
1451
|
+
# 또는 (pip 모드 - 레거시)
|
|
1441
1452
|
uv pip install moai-adk --force-reinstall
|
|
1442
1453
|
```
|
|
1443
1454
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
moai_adk/__init__.py,sha256=
|
|
1
|
+
moai_adk/__init__.py,sha256=fV6DuZDRF4C6PozXGMHTSE9EguZMEeYjEn27omz8zLI,217
|
|
2
2
|
moai_adk/__main__.py,sha256=Wok19np6X4pxX4ybsGWS6McDZwoAN6iAvyLqFD9G5No,2419
|
|
3
3
|
moai_adk/cli/__init__.py,sha256=tidIaJnd4Pje_5QYRq7OvRRst4T3kaPlkw5QcPQ3l1Y,135
|
|
4
4
|
moai_adk/cli/main.py,sha256=mHACHi27AP2N7fg7zhzOo1tlF1Jrlw1_AcbxMfpGLVE,306
|
|
@@ -23,7 +23,7 @@ moai_adk/core/git/manager.py,sha256=lHFUQn8DGIvuhxC41cD5G3S6OgCpw9WkEOPVET97FJU,
|
|
|
23
23
|
moai_adk/core/project/__init__.py,sha256=w_VdJ6lJDkTMdYYEwj0Io6Ay3ekqsLO3qXInSfXX7Vs,134
|
|
24
24
|
moai_adk/core/project/backup_utils.py,sha256=SOdqgyWjFObcj1RuGAXn6wopamhITVi3wNmh56ZMMbk,2108
|
|
25
25
|
moai_adk/core/project/checker.py,sha256=tN1A2OWsTafDCEWcafDJ4JXM217FUUdLYdnLtWpdDgs,9533
|
|
26
|
-
moai_adk/core/project/detector.py,sha256
|
|
26
|
+
moai_adk/core/project/detector.py,sha256=ON2t0KYyaop3lxBcbEq5HIJGmnBLluA8k6GErmr4IM8,3733
|
|
27
27
|
moai_adk/core/project/initializer.py,sha256=iFTb7d5537WL_zumY4kqV7UPSvUd1ZJQClvycJXF40E,6073
|
|
28
28
|
moai_adk/core/project/phase_executor.py,sha256=m6FG3D1qPanbK-lifosGox-93SBxbGCkqMZSIajCaHY,10443
|
|
29
29
|
moai_adk/core/project/validator.py,sha256=8LmfdfENv--Os05duarKfJTnO2NRHJIbXU5V0LsZ0Ds,5738
|
|
@@ -64,7 +64,7 @@ moai_adk/templates/.claude/hooks/alfred/core/context.py,sha256=-PHNNktkULYL9jpIj
|
|
|
64
64
|
moai_adk/templates/.claude/hooks/alfred/core/project.py,sha256=h7s2D0e5zn0BKu3GReMVH93ojKOTkF6yyLWNnoJI6-0,9103
|
|
65
65
|
moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py,sha256=mk1FQFj5V3rxyV1BQbd8bZE9R-IK4nanj61oO7jhbdw,577
|
|
66
66
|
moai_adk/templates/.claude/hooks/alfred/handlers/notification.py,sha256=MjwaCRSbK4f-YvRC9CG4Rg8dhQir1gzPqF02x9O_4Gc,655
|
|
67
|
-
moai_adk/templates/.claude/hooks/alfred/handlers/session.py,sha256=
|
|
67
|
+
moai_adk/templates/.claude/hooks/alfred/handlers/session.py,sha256=hQv5KH77Mb_q9Lq1OLGLnB5Wkqoe-0VpFJPblUuPW6k,4040
|
|
68
68
|
moai_adk/templates/.claude/hooks/alfred/handlers/tool.py,sha256=bR7QpIYxuypQseWbAPmLYClS2wZUGbFflFj-IiiE26w,2224
|
|
69
69
|
moai_adk/templates/.claude/hooks/alfred/handlers/user.py,sha256=iD0X_Aas8pwfFvPj30PaCPNs_Xo-9yVynxT27m-2O7k,1300
|
|
70
70
|
moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md,sha256=-Y0V-fRRZbAUH1f4kZX0y8i0Lo7GRjJddBMeZ0WV6gA,17906
|
|
@@ -81,10 +81,10 @@ moai_adk/templates/.moai/project/product.md,sha256=ClDlG1q7P8aX4cjroXLUZIQGd2wBZ
|
|
|
81
81
|
moai_adk/templates/.moai/project/structure.md,sha256=jesU7Om-fZANmj0NdgiU_oY0aT7102QWwuYy7Q-drKA,5180
|
|
82
82
|
moai_adk/templates/.moai/project/tech.md,sha256=1BgkApeFqQCq6TPriGiev02G9niVx23cEA2RH-28dtw,6049
|
|
83
83
|
moai_adk/utils/__init__.py,sha256=fv-UwHv8r4-eedwRnDA9hFjo5QSZYXjctKDyE7XF10g,220
|
|
84
|
-
moai_adk/utils/banner.py,sha256=
|
|
84
|
+
moai_adk/utils/banner.py,sha256=Cf7f3G7mB58MRQhOH4eYmywKYv8U_qS9yExWssSroC0,1853
|
|
85
85
|
moai_adk/utils/logger.py,sha256=jYCWKvcN-tX17hZ-e2IPuHATwkQBFc_I1dd5fUTWxmY,5059
|
|
86
|
-
moai_adk-0.3.
|
|
87
|
-
moai_adk-0.3.
|
|
88
|
-
moai_adk-0.3.
|
|
89
|
-
moai_adk-0.3.
|
|
90
|
-
moai_adk-0.3.
|
|
86
|
+
moai_adk-0.3.13.dist-info/METADATA,sha256=YzDWvOVCLEcVQCCcadWWQi_VwXYg0SGU2ocwiqc7hiw,50255
|
|
87
|
+
moai_adk-0.3.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
88
|
+
moai_adk-0.3.13.dist-info/entry_points.txt,sha256=P9no1794UipqH72LP-ltdyfVd_MeB1WKJY_6-JQgV3U,52
|
|
89
|
+
moai_adk-0.3.13.dist-info/licenses/LICENSE,sha256=M1M2b07fWcSWRM6_P3wbZKndZvyfHyYk_Wu9bS8F7o8,1069
|
|
90
|
+
moai_adk-0.3.13.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|