moai-adk 0.3.12__tar.gz → 0.3.13__tar.gz

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.

Files changed (90) hide show
  1. {moai_adk-0.3.12 → moai_adk-0.3.13}/PKG-INFO +14 -3
  2. {moai_adk-0.3.12 → moai_adk-0.3.13}/README.md +13 -2
  3. {moai_adk-0.3.12 → moai_adk-0.3.13}/pyproject.toml +1 -1
  4. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/__init__.py +1 -1
  5. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/project/detector.py +14 -2
  6. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/handlers/session.py +33 -0
  7. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/utils/banner.py +6 -6
  8. {moai_adk-0.3.12 → moai_adk-0.3.13}/.gitignore +0 -0
  9. {moai_adk-0.3.12 → moai_adk-0.3.13}/LICENSE +0 -0
  10. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/__main__.py +0 -0
  11. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/__init__.py +0 -0
  12. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/commands/__init__.py +0 -0
  13. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/commands/backup.py +0 -0
  14. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/commands/doctor.py +0 -0
  15. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/commands/init.py +0 -0
  16. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/commands/status.py +0 -0
  17. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/commands/update.py +0 -0
  18. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/main.py +0 -0
  19. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/prompts/__init__.py +0 -0
  20. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/cli/prompts/init_prompts.py +0 -0
  21. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/__init__.py +0 -0
  22. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/diagnostics/__init__.py +0 -0
  23. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/diagnostics/slash_commands.py +0 -0
  24. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/git/__init__.py +0 -0
  25. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/git/branch.py +0 -0
  26. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/git/branch_manager.py +0 -0
  27. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/git/checkpoint.py +0 -0
  28. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/git/commit.py +0 -0
  29. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/git/event_detector.py +0 -0
  30. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/git/manager.py +0 -0
  31. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/project/__init__.py +0 -0
  32. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/project/backup_utils.py +0 -0
  33. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/project/checker.py +0 -0
  34. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/project/initializer.py +0 -0
  35. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/project/phase_executor.py +0 -0
  36. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/project/validator.py +0 -0
  37. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/quality/__init__.py +0 -0
  38. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/quality/trust_checker.py +0 -0
  39. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/quality/validators/__init__.py +0 -0
  40. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/quality/validators/base_validator.py +0 -0
  41. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/template/__init__.py +0 -0
  42. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/template/backup.py +0 -0
  43. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/template/config.py +0 -0
  44. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/template/languages.py +0 -0
  45. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/template/merger.py +0 -0
  46. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/core/template/processor.py +0 -0
  47. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -0
  48. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -0
  49. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -0
  50. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -0
  51. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -0
  52. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -0
  53. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -0
  54. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -0
  55. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -0
  56. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -0
  57. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -0
  58. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/commands/alfred/0-project.md +0 -0
  59. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/commands/alfred/1-spec.md +0 -0
  60. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/commands/alfred/2-build.md +0 -0
  61. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -0
  62. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/README.md +0 -0
  63. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -0
  64. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -0
  65. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/core/checkpoint.py +0 -0
  66. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -0
  67. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -0
  68. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -0
  69. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -0
  70. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -0
  71. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -0
  72. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -0
  73. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -0
  74. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -0
  75. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.claude/settings.json +0 -0
  76. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  77. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -0
  78. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.gitignore +0 -0
  79. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.moai/config.json +0 -0
  80. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.moai/hooks/pre-push.sample +0 -0
  81. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.moai/memory/development-guide.md +0 -0
  82. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -0
  83. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.moai/memory/spec-metadata.md +0 -0
  84. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.moai/project/product.md +0 -0
  85. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.moai/project/structure.md +0 -0
  86. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/.moai/project/tech.md +0 -0
  87. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/CLAUDE.md +0 -0
  88. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/templates/__init__.py +0 -0
  89. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/utils/__init__.py +0 -0
  90. {moai_adk-0.3.12 → moai_adk-0.3.13}/src/moai_adk/utils/logger.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: moai-adk
3
- Version: 0.3.12
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
 
@@ -357,6 +357,10 @@ uv --version
357
357
  #### 2. moai-adk 설치 (10초)
358
358
 
359
359
  ```bash
360
+ # 권장: uv tool 모드 (샌드박스 격리, 전역 접근)
361
+ uv tool install moai-adk
362
+
363
+ # 대안: 현재 가상 환경에 설치
360
364
  uv pip install moai-adk
361
365
 
362
366
  # 설치 확인
@@ -1245,7 +1249,10 @@ Alfred가 모든 코드에 자동으로 적용하는 품질 기준입니다.
1245
1249
  ```bash
1246
1250
  moai-adk update
1247
1251
 
1248
- # 또는
1252
+ # 또는 (tool 모드 - 권장)
1253
+ uv tool upgrade moai-adk
1254
+
1255
+ # 또는 (pip 모드 - 레거시)
1249
1256
  uv pip install --upgrade moai-adk
1250
1257
  ```
1251
1258
 
@@ -1399,7 +1406,11 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
1399
1406
  # Windows:
1400
1407
  powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
1401
1408
 
1402
- # moai-adk 재설치
1409
+ # moai-adk 재설치 (tool 모드 - 권장)
1410
+ uv tool uninstall moai-adk
1411
+ uv tool install moai-adk
1412
+
1413
+ # 또는 (pip 모드 - 레거시)
1403
1414
  uv pip install moai-adk --force-reinstall
1404
1415
  ```
1405
1416
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "moai-adk"
3
- version = "0.3.12"
3
+ version = "0.3.13"
4
4
  description = "MoAI Agentic Development Kit - SPEC-First TDD with Alfred SuperAgent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -4,5 +4,5 @@
4
4
  SPEC-First TDD Framework with Alfred SuperAgent
5
5
  """
6
6
 
7
- __version__ = "0.3.12"
7
+ __version__ = "0.3.13"
8
8
  __all__ = ["__version__"]
@@ -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)
@@ -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
 
File without changes
File without changes