moai-adk 0.8.0__py3-none-any.whl → 0.15.0__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.

Files changed (207) hide show
  1. moai_adk/cli/commands/init.py +14 -2
  2. moai_adk/cli/commands/update.py +229 -60
  3. moai_adk/core/config/migration.py +1 -1
  4. moai_adk/core/issue_creator.py +313 -0
  5. moai_adk/core/project/detector.py +201 -12
  6. moai_adk/core/project/initializer.py +62 -1
  7. moai_adk/core/project/phase_executor.py +48 -6
  8. moai_adk/core/tags/__init__.py +86 -0
  9. moai_adk/core/tags/ci_validator.py +463 -0
  10. moai_adk/core/tags/cli.py +283 -0
  11. moai_adk/core/tags/generator.py +109 -0
  12. moai_adk/core/tags/inserter.py +99 -0
  13. moai_adk/core/tags/mapper.py +126 -0
  14. moai_adk/core/tags/parser.py +76 -0
  15. moai_adk/core/tags/pre_commit_validator.py +393 -0
  16. moai_adk/core/tags/reporter.py +956 -0
  17. moai_adk/core/tags/tags.py +149 -0
  18. moai_adk/core/tags/validator.py +897 -0
  19. moai_adk/core/template_engine.py +268 -0
  20. moai_adk/templates/.claude/agents/alfred/backend-expert.md +319 -0
  21. moai_adk/templates/.claude/agents/alfred/cc-manager.md +25 -2
  22. moai_adk/templates/.claude/agents/alfred/debug-helper.md +24 -12
  23. moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
  24. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +20 -13
  25. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
  26. moai_adk/templates/.claude/agents/alfred/git-manager.md +47 -16
  27. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +95 -15
  28. moai_adk/templates/.claude/agents/alfred/project-manager.md +78 -12
  29. moai_adk/templates/.claude/agents/alfred/quality-gate.md +28 -5
  30. moai_adk/templates/.claude/agents/alfred/skill-factory.md +30 -2
  31. moai_adk/templates/.claude/agents/alfred/spec-builder.md +133 -13
  32. moai_adk/templates/.claude/agents/alfred/tag-agent.md +104 -8
  33. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +133 -16
  34. moai_adk/templates/.claude/agents/alfred/trust-checker.md +27 -4
  35. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +571 -0
  36. moai_adk/templates/.claude/commands/alfred/0-project.md +466 -125
  37. moai_adk/templates/.claude/commands/alfred/1-plan.md +208 -71
  38. moai_adk/templates/.claude/commands/alfred/2-run.md +276 -55
  39. moai_adk/templates/.claude/commands/alfred/3-sync.md +439 -53
  40. moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
  41. moai_adk/templates/.claude/hooks/alfred/core/project.py +361 -29
  42. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
  43. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
  44. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  45. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +14 -6
  46. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +94 -0
  47. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +100 -0
  48. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +94 -0
  49. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +94 -0
  50. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/__init__.py +2 -2
  51. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +3 -3
  52. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +5 -5
  53. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
  54. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/tags.py +55 -23
  55. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  56. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
  57. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +154 -0
  58. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/session.py +28 -15
  59. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/tool.py +3 -6
  60. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/user.py +19 -0
  61. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +112 -0
  62. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
  63. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +161 -0
  64. moai_adk/templates/.claude/settings.json +5 -5
  65. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +70 -0
  66. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +62 -0
  67. moai_adk/templates/{.moai/memory/CLAUDE-AGENTS-GUIDE.md → .claude/skills/moai-alfred-agent-guide/reference.md} +34 -0
  68. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +56 -0
  69. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +28 -0
  70. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +62 -0
  71. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +28 -0
  72. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +405 -0
  73. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +51 -0
  74. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +355 -0
  75. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +239 -0
  76. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +323 -0
  77. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +286 -0
  78. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +126 -0
  79. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +74 -0
  80. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +4 -0
  81. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +269 -0
  82. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +19 -0
  83. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +4 -0
  84. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +150 -0
  85. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +198 -0
  86. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +431 -0
  87. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +141 -0
  88. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +89 -0
  89. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +122 -0
  90. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +508 -0
  91. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +481 -0
  92. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +100 -0
  93. moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +273 -0
  94. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +77 -0
  95. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +265 -0
  96. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +19 -0
  97. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +4 -0
  98. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +84 -0
  99. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +137 -0
  100. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +219 -0
  101. moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/examples/validate-spec.sh +3 -3
  102. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +541 -0
  103. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +622 -0
  104. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +115 -0
  105. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +4 -0
  106. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +348 -0
  107. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +19 -0
  108. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +4 -0
  109. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +211 -0
  110. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +288 -0
  111. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +19 -0
  112. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +4 -0
  113. moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL.md +3 -3
  114. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +802 -0
  115. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +1238 -0
  116. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +673 -0
  117. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +17 -13
  118. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +9 -6
  119. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +15 -12
  120. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +14 -12
  121. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +14 -11
  122. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +10 -8
  123. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +15 -12
  124. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +13 -11
  125. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +16 -10
  126. moai_adk/templates/.claude/skills/moai-project-documentation.md +622 -0
  127. moai_adk/templates/.git-hooks/pre-push +143 -0
  128. moai_adk/templates/.github/workflows/c-tag-validation.yml +11 -0
  129. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +11 -0
  130. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +11 -0
  131. moai_adk/templates/.github/workflows/dart-tag-validation.yml +11 -0
  132. moai_adk/templates/.github/workflows/go-tag-validation.yml +130 -0
  133. moai_adk/templates/.github/workflows/java-tag-validation.yml +11 -0
  134. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +135 -0
  135. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +11 -0
  136. moai_adk/templates/.github/workflows/moai-gitflow.yml +166 -3
  137. moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
  138. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +188 -0
  139. moai_adk/templates/.github/workflows/php-tag-validation.yml +11 -0
  140. moai_adk/templates/.github/workflows/python-tag-validation.yml +118 -0
  141. moai_adk/templates/.github/workflows/release.yml +118 -0
  142. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +11 -0
  143. moai_adk/templates/.github/workflows/rust-tag-validation.yml +11 -0
  144. moai_adk/templates/.github/workflows/shell-tag-validation.yml +11 -0
  145. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -35
  146. moai_adk/templates/.github/workflows/swift-tag-validation.yml +11 -0
  147. moai_adk/templates/.github/workflows/tag-report.yml +269 -0
  148. moai_adk/templates/.github/workflows/tag-validation.yml +186 -0
  149. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +154 -0
  150. moai_adk/templates/.moai/config.json +21 -2
  151. moai_adk/templates/CLAUDE.md +972 -78
  152. moai_adk/templates/workflows/go-tag-validation.yml +30 -0
  153. moai_adk/templates/workflows/javascript-tag-validation.yml +41 -0
  154. moai_adk/templates/workflows/python-tag-validation.yml +42 -0
  155. moai_adk/templates/workflows/typescript-tag-validation.yml +31 -0
  156. moai_adk/utils/banner.py +5 -5
  157. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/METADATA +1518 -161
  158. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/RECORD +183 -100
  159. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  160. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  161. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  162. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  163. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  164. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  165. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  166. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  167. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  168. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  169. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  170. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  171. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  172. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  173. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  174. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  175. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  176. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  177. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  178. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  179. moai_adk/templates/.moai/project/product.md +0 -161
  180. moai_adk/templates/.moai/project/structure.md +0 -156
  181. moai_adk/templates/.moai/project/tech.md +0 -227
  182. moai_adk/templates/__init__.py +0 -2
  183. /moai_adk/templates/{.moai/memory/CONFIG-SCHEMA.md → .claude/skills/moai-alfred-config-schema/reference.md} +0 -0
  184. /moai_adk/templates/{.moai/memory/CLAUDE-PRACTICES.md → .claude/skills/moai-alfred-practices/reference.md} +0 -0
  185. /moai_adk/templates/{.moai/memory/CLAUDE-RULES.md → .claude/skills/moai-alfred-rules/reference.md} +0 -0
  186. /moai_adk/templates/{.moai/memory/SKILLS-DESCRIPTION-POLICY.md → .claude/skills/moai-cc-skill-descriptions/reference.md} +0 -0
  187. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/CHECKLIST.md +0 -0
  188. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/EXAMPLES.md +0 -0
  189. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/INTERACTIVE-DISCOVERY.md +0 -0
  190. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/METADATA.md +0 -0
  191. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/PARALLEL-ANALYSIS-REPORT.md +0 -0
  192. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/PYTHON-VERSION-MATRIX.md +0 -0
  193. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL-FACTORY-WORKFLOW.md +0 -0
  194. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL-UPDATE-ADVISOR.md +0 -0
  195. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/STEP-BY-STEP-GUIDE.md +0 -0
  196. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/STRUCTURE.md +0 -0
  197. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/WEB-RESEARCH.md +0 -0
  198. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/reference.md +0 -0
  199. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/scripts/generate-structure.sh +0 -0
  200. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/scripts/validate-skill.sh +0 -0
  201. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/SKILL_TEMPLATE.md +0 -0
  202. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/examples-template.md +0 -0
  203. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/reference-template.md +0 -0
  204. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/scripts-template.sh +0 -0
  205. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/WHEEL +0 -0
  206. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/entry_points.txt +0 -0
  207. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env python3
2
+ # @CODE:HOOKS-CLARITY-DOCS | SPEC: Individual hook files for better UX
3
+ """UserPromptSubmit Hook: Just-In-Time Document Loading
4
+
5
+ Claude Code Event: UserPromptSubmit
6
+ Purpose: Analyze user prompt and recommend relevant documents to load into context
7
+ Execution: Triggered when user submits a prompt
8
+
9
+ Output: additionalContext with document path suggestions
10
+ """
11
+
12
+ import json
13
+ import sys
14
+ from pathlib import Path
15
+ from typing import Any
16
+
17
+ from utils.timeout import CrossPlatformTimeout
18
+ from utils.timeout import TimeoutError as PlatformTimeoutError
19
+
20
+ # Setup import path for shared modules
21
+ HOOKS_DIR = Path(__file__).parent
22
+ SHARED_DIR = HOOKS_DIR / "shared"
23
+ if str(SHARED_DIR) not in sys.path:
24
+ sys.path.insert(0, str(SHARED_DIR))
25
+
26
+ from handlers import handle_user_prompt_submit
27
+
28
+
29
+ def main() -> None:
30
+ """Main entry point for UserPromptSubmit hook
31
+
32
+ Analyzes user prompt patterns and recommends relevant documents:
33
+ - /alfred:1-plan → spec-metadata.md
34
+ - /alfred:2-run → development-guide.md
35
+ - @TAG mentions → TAG documentation
36
+ - SPEC references → related SPEC files
37
+
38
+ Exit Codes:
39
+ 0: Success
40
+ 1: Error (timeout, JSON parse failure, handler exception)
41
+
42
+ Note: Uses special output schema for UserPromptSubmit:
43
+ {
44
+ "continue": true,
45
+ "hookSpecificOutput": {
46
+ "hookEventName": "UserPromptSubmit",
47
+ "additionalContext": "Document path suggestions..."
48
+ }
49
+ }
50
+ """
51
+ # Set 5-second timeout
52
+ timeout = CrossPlatformTimeout(5)
53
+ timeout.start()
54
+
55
+ try:
56
+ # Read JSON payload from stdin
57
+ input_data = sys.stdin.read()
58
+ data = json.loads(input_data) if input_data.strip() else {}
59
+
60
+ # Call handler
61
+ result = handle_user_prompt_submit(data)
62
+
63
+ # Output result using UserPromptSubmit-specific schema
64
+ print(json.dumps(result.to_user_prompt_submit_dict()))
65
+ sys.exit(0)
66
+
67
+ except PlatformTimeoutError:
68
+ # Timeout - return minimal valid response
69
+ timeout_response: dict[str, Any] = {
70
+ "continue": True,
71
+ "hookSpecificOutput": {
72
+ "hookEventName": "UserPromptSubmit",
73
+ "additionalContext": "⚠️ JIT context timeout - continuing without suggestions",
74
+ },
75
+ }
76
+ print(json.dumps(timeout_response))
77
+ print("UserPromptSubmit hook timeout after 5 seconds", file=sys.stderr)
78
+ sys.exit(1)
79
+
80
+ except json.JSONDecodeError as e:
81
+ # JSON parse error
82
+ error_response: dict[str, Any] = {
83
+ "continue": True,
84
+ "hookSpecificOutput": {
85
+ "hookEventName": "UserPromptSubmit",
86
+ "error": f"JSON parse error: {e}",
87
+ },
88
+ }
89
+ print(json.dumps(error_response))
90
+ print(f"UserPromptSubmit JSON parse error: {e}", file=sys.stderr)
91
+ sys.exit(1)
92
+
93
+ except Exception as e:
94
+ # Unexpected error
95
+ error_response: dict[str, Any] = {
96
+ "continue": True,
97
+ "hookSpecificOutput": {
98
+ "hookEventName": "UserPromptSubmit",
99
+ "error": f"UserPromptSubmit error: {e}",
100
+ },
101
+ }
102
+ print(json.dumps(error_response))
103
+ print(f"UserPromptSubmit unexpected error: {e}", file=sys.stderr)
104
+ sys.exit(1)
105
+
106
+ finally:
107
+ # Always cancel alarm
108
+ timeout.cancel()
109
+
110
+
111
+ if __name__ == "__main__":
112
+ main()
@@ -0,0 +1 @@
1
+ """Utility modules for Alfred hooks."""
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env python3
2
+ # @CODE:TIMEOUT-001 | SPEC: SPEC-TIMEOUT-HANDLING-001
3
+ """Cross-Platform Timeout Handler for Windows & Unix Compatibility
4
+
5
+ Provides a unified timeout mechanism that works on both Windows (threading-based)
6
+ and Unix/POSIX systems (signal-based).
7
+
8
+ Architecture:
9
+ - Windows: threading.Timer with exception injection
10
+ - Unix/POSIX: signal.SIGALRM (traditional approach)
11
+ - Both: Context manager for clean cancellation
12
+ """
13
+
14
+ import platform
15
+ import signal
16
+ import threading
17
+ from contextlib import contextmanager
18
+ from typing import Callable, Optional
19
+
20
+
21
+ class TimeoutError(Exception):
22
+ """Timeout exception raised when deadline exceeded"""
23
+ pass
24
+
25
+
26
+ class CrossPlatformTimeout:
27
+ """Cross-platform timeout handler supporting Windows and Unix.
28
+
29
+ Windows: Uses threading.Timer to schedule timeout exception
30
+ Unix: Uses signal.SIGALRM for timeout handling
31
+
32
+ Usage:
33
+ # Context manager (recommended)
34
+ with CrossPlatformTimeout(5):
35
+ long_running_operation()
36
+
37
+ # Manual control
38
+ timeout = CrossPlatformTimeout(5)
39
+ timeout.start()
40
+ try:
41
+ long_running_operation()
42
+ finally:
43
+ timeout.cancel()
44
+ """
45
+
46
+ def __init__(self, timeout_seconds: float, callback: Optional[Callable] = None):
47
+ """Initialize timeout with duration in seconds.
48
+
49
+ Args:
50
+ timeout_seconds: Timeout duration in seconds (float or int)
51
+ callback: Optional callback to execute before raising TimeoutError
52
+ """
53
+ # Convert float to int for signal.alarm()
54
+ self.timeout_seconds = timeout_seconds
55
+ self.timeout_seconds_int = max(1, int(timeout_seconds)) # signal.alarm requires >=1
56
+ self.callback = callback
57
+ self.timer: Optional[threading.Timer] = None
58
+ self._is_windows = platform.system() == "Windows"
59
+ self._old_handler = None
60
+
61
+ def start(self) -> None:
62
+ """Start timeout countdown."""
63
+ # Handle zero/negative timeouts
64
+ if self.timeout_seconds <= 0:
65
+ if self.timeout_seconds == 0:
66
+ # Zero timeout: raise immediately
67
+ if self.callback:
68
+ self.callback()
69
+ raise TimeoutError("Timeout of 0 seconds exceeded immediately")
70
+ else:
71
+ # Negative timeout: don't timeout at all
72
+ return
73
+
74
+ if self._is_windows:
75
+ self._start_windows_timeout()
76
+ else:
77
+ self._start_unix_timeout()
78
+
79
+ def cancel(self) -> None:
80
+ """Cancel timeout (must call before timeout expires)."""
81
+ if self._is_windows:
82
+ self._cancel_windows_timeout()
83
+ else:
84
+ self._cancel_unix_timeout()
85
+
86
+ def _start_windows_timeout(self) -> None:
87
+ """Windows: Use threading.Timer to raise exception."""
88
+ def timeout_handler():
89
+ if self.callback:
90
+ self.callback()
91
+ raise TimeoutError(
92
+ f"Operation exceeded {self.timeout_seconds}s timeout (Windows threading)"
93
+ )
94
+
95
+ self.timer = threading.Timer(self.timeout_seconds, timeout_handler)
96
+ self.timer.daemon = True
97
+ self.timer.start()
98
+
99
+ def _cancel_windows_timeout(self) -> None:
100
+ """Windows: Cancel timer thread."""
101
+ if self.timer:
102
+ self.timer.cancel()
103
+ self.timer = None
104
+
105
+ def _start_unix_timeout(self) -> None:
106
+ """Unix/POSIX: Use signal.SIGALRM for timeout."""
107
+ def signal_handler(signum, frame):
108
+ if self.callback:
109
+ try:
110
+ self.callback()
111
+ except Exception:
112
+ # Ignore callback exceptions, timeout error takes precedence
113
+ pass
114
+ raise TimeoutError(
115
+ f"Operation exceeded {self.timeout_seconds}s timeout (Unix signal)"
116
+ )
117
+
118
+ # Save old handler to restore later
119
+ self._old_handler = signal.signal(signal.SIGALRM, signal_handler)
120
+ # Use integer timeout_seconds_int for signal.alarm()
121
+ signal.alarm(self.timeout_seconds_int)
122
+
123
+ def _cancel_unix_timeout(self) -> None:
124
+ """Unix/POSIX: Cancel alarm and restore old handler."""
125
+ signal.alarm(0) # Cancel pending alarm
126
+ if self._old_handler is not None:
127
+ signal.signal(signal.SIGALRM, self._old_handler)
128
+ self._old_handler = None
129
+
130
+ def __enter__(self):
131
+ """Context manager entry."""
132
+ self.start()
133
+ return self
134
+
135
+ def __exit__(self, exc_type, exc_val, exc_tb):
136
+ """Context manager exit - always cancel."""
137
+ self.cancel()
138
+ return False # Don't suppress exceptions
139
+
140
+
141
+ @contextmanager
142
+ def timeout_context(timeout_seconds: float, callback: Optional[Callable] = None):
143
+ """Decorator/context manager for timeout.
144
+
145
+ Usage:
146
+ with timeout_context(5):
147
+ slow_function()
148
+
149
+ Args:
150
+ timeout_seconds: Timeout duration in seconds (float or int)
151
+ callback: Optional callback to execute before raising TimeoutError
152
+
153
+ Yields:
154
+ CrossPlatformTimeout instance
155
+ """
156
+ timeout = CrossPlatformTimeout(timeout_seconds, callback=callback)
157
+ timeout.start()
158
+ try:
159
+ yield timeout
160
+ finally:
161
+ timeout.cancel()
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "hooks": [
12
12
  {
13
- "command": "uv run .claude/hooks/alfred/alfred_hooks.py SessionStart",
13
+ "command": "uv run .claude/hooks/alfred/session_start__show_project_info.py",
14
14
  "type": "command"
15
15
  }
16
16
  ]
@@ -20,7 +20,7 @@
20
20
  {
21
21
  "hooks": [
22
22
  {
23
- "command": "uv run .claude/hooks/alfred/alfred_hooks.py PreToolUse",
23
+ "command": "uv run .claude/hooks/alfred/pre_tool__auto_checkpoint.py",
24
24
  "type": "command"
25
25
  }
26
26
  ],
@@ -31,7 +31,7 @@
31
31
  {
32
32
  "hooks": [
33
33
  {
34
- "command": "uv run .claude/hooks/alfred/alfred_hooks.py UserPromptSubmit",
34
+ "command": "uv run .claude/hooks/alfred/user_prompt__jit_load_docs.py",
35
35
  "type": "command"
36
36
  }
37
37
  ]
@@ -41,7 +41,7 @@
41
41
  {
42
42
  "hooks": [
43
43
  {
44
- "command": "uv run .claude/hooks/alfred/alfred_hooks.py SessionEnd",
44
+ "command": "uv run .claude/hooks/alfred/session_end__cleanup.py",
45
45
  "type": "command"
46
46
  }
47
47
  ]
@@ -51,7 +51,7 @@
51
51
  {
52
52
  "hooks": [
53
53
  {
54
- "command": "uv run .claude/hooks/alfred/alfred_hooks.py PostToolUse",
54
+ "command": "uv run .claude/hooks/alfred/post_tool__log_changes.py",
55
55
  "type": "command"
56
56
  }
57
57
  ],
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: moai-alfred-agent-guide
3
+ description: "19-agent team structure, decision trees for agent selection, Haiku vs Sonnet model selection, and agent collaboration principles. Use when deciding which sub-agent to invoke, understanding team responsibilities, or learning multi-agent orchestration."
4
+ allowed-tools: "Read, Glob, Grep"
5
+ ---
6
+
7
+ ## What It Does
8
+
9
+ MoAI-ADK의 19개 Sub-agent 아키텍처, 어떤 agent를 선택할지 결정하는 트리, Haiku/Sonnet 모델 선택 기준을 정의합니다.
10
+
11
+ ## When to Use
12
+
13
+ - ✅ 어떤 sub-agent를 invoke할지 불명확
14
+ - ✅ Agent 책임 범위 학습
15
+ - ✅ Haiku vs Sonnet 모델 선택 필요
16
+ - ✅ Multi-agent 협업 패턴 이해
17
+
18
+ ## Agent Team at a Glance
19
+
20
+ ### 10 Core Sub-agents (Sonnet)
21
+ - spec-builder: SPEC 작성
22
+ - tdd-implementer: TDD 구현 (RED → GREEN → REFACTOR)
23
+ - doc-syncer: 문서 동기화
24
+ - implementation-planner: 구현 전략
25
+ - debug-helper: 오류 분석
26
+ - quality-gate: TRUST 5 검증
27
+ - tag-agent: TAG 체인 검증
28
+ - git-manager: Git 워크플로우
29
+ - Explore: 코드베이스 탐색
30
+ - Plan: 작업 계획
31
+
32
+ ### 4 Expert Agents (Sonnet - Proactively Triggered)
33
+ - **backend-expert**: Backend 아키텍처, API 설계, 데이터베이스
34
+ - **frontend-expert**: Frontend 아키텍처, 컴포넌트 설계, 상태 관리
35
+ - **devops-expert**: DevOps 전략, 배포, 인프라
36
+ - **ui-ux-expert**: UI/UX 설계, 접근성, 디자인 시스템 (Figma MCP)
37
+
38
+ ### 6 Specialist Agents (Haiku)
39
+ - project-manager: 프로젝트 초기화
40
+ - skill-factory: Skill 생성/최적화
41
+ - cc-manager: Claude Code 설정
42
+ - cc-hooks: Hook 시스템
43
+ - cc-mcp-plugins: MCP 서버
44
+ - trust-checker: TRUST 검증
45
+
46
+ ## Agent Selection Decision Tree
47
+
48
+ ```
49
+ Task Type?
50
+ ├─ SPEC 작성/검증 → spec-builder
51
+ ├─ TDD 구현 → tdd-implementer
52
+ ├─ 문서 동기화 → doc-syncer
53
+ ├─ 구현 계획 → implementation-planner
54
+ ├─ 오류 분석 → debug-helper
55
+ ├─ 품질 검증 → quality-gate + Skill("moai-foundation-trust")
56
+ ├─ 코드베이스 탐색 → Explore
57
+ ├─ Git 워크플로우 → git-manager
58
+ └─ 전체 프로젝트 계획 → Plan
59
+ ```
60
+
61
+ ## Model Selection
62
+
63
+ - **Sonnet**: Complex reasoning (spec-builder, tdd-implementer, implementation-planner)
64
+ - **Haiku**: Fast execution (project-manager, quality-gate, git-manager)
65
+
66
+ ---
67
+
68
+ Learn more in `reference.md` for complete agent responsibilities, collaboration patterns, and advanced orchestration strategies.
69
+
70
+ **Related Skills**: moai-alfred-rules, moai-alfred-practices
@@ -0,0 +1,62 @@
1
+ # Agent Selection Examples
2
+
3
+ ## Example 1: New Feature Request
4
+
5
+ **User**: "Add two-factor authentication"
6
+
7
+ **Decision Tree**:
8
+ ```
9
+ Task = Feature Implementation
10
+
11
+ Create SPEC first? → YES
12
+ Invoke: spec-builder
13
+
14
+ Write Tests? → YES
15
+ Invoke: tdd-implementer
16
+
17
+ Need Code Review? → YES
18
+ Invoke: quality-gate + Skill("moai-foundation-trust")
19
+
20
+ Update Documentation? → YES
21
+ Invoke: doc-syncer
22
+ ```
23
+
24
+ **Result**: Proper agent sequence avoids rework
25
+
26
+ ---
27
+
28
+ ## Example 2: Bug Fix Triage
29
+
30
+ **Error**: "TypeError: undefined is not a function"
31
+
32
+ **Agent Sequence**:
33
+ 1. Invoke: debug-helper
34
+ - Analyze stack trace
35
+ - Identify root cause
36
+ 2. Invoke: tdd-implementer
37
+ - Write regression test
38
+ - Fix implementation
39
+ 3. Invoke: git-manager
40
+ - Commit with @TAG
41
+
42
+ ---
43
+
44
+ ## Example 3: Large Codebase Exploration
45
+
46
+ **Task**: "How is authentication implemented?"
47
+
48
+ ✅ Correct:
49
+ ```
50
+ Invoke: Explore(prompt="Find auth flow, entry points, models")
51
+ Result: Clear architecture map
52
+ ```
53
+
54
+ ❌ Wrong:
55
+ ```
56
+ Manual grep for 20+ files
57
+ Result: Bloated context, still confused
58
+ ```
59
+
60
+ ---
61
+
62
+ Learn more in `reference.md` for complete decision tree and multi-agent patterns.
@@ -68,6 +68,40 @@ The **code-builder pipeline** runs two Sonnet specialists in sequence: **impleme
68
68
 
69
69
  ---
70
70
 
71
+ ## Expert Agents (Proactively Triggered by SPEC Keywords)
72
+
73
+ | Expert Agent | Model | Specialty | Trigger Keywords | Trigger Source |
74
+ | ----------------------- | ------ | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------- |
75
+ | **backend-expert** 🔧 | Sonnet | Backend architecture, API design, database schema, microservices, authentication | 'backend', 'api', 'server', 'database', 'microservice', 'deployment', 'authentication' | implementation-planner |
76
+ | **frontend-expert** 💻 | Sonnet | Frontend architecture, component design, state management, UI/UX implementation | 'frontend', 'ui', 'page', 'component', 'client-side', 'browser', 'web interface' | implementation-planner |
77
+ | **devops-expert** 🚀 | Sonnet | DevOps strategy, deployment automation, containerization, CI/CD, cloud infrastructure | 'deployment', 'docker', 'kubernetes', 'ci/cd', 'pipeline', 'infrastructure', 'railway', 'vercel', 'aws' | implementation-planner |
78
+ | **ui-ux-expert** 🎨 | Sonnet | UI/UX design, accessibility (WCAG 2.1 AA/AAA), design systems, Figma MCP, design-to-code | 'design', 'ux', 'ui', 'accessibility', 'a11y', 'user experience', 'wireframe', 'prototype', 'design system', 'figma', 'user research', 'persona', 'journey map' | implementation-planner |
79
+
80
+ ### How Expert Agents Work
81
+
82
+ 1. **Automatic Keyword Detection**: When `implementation-planner` analyzes a SPEC, it scans for expert trigger keywords
83
+ 2. **Proactive Delegation**: If keywords match, `implementation-planner` automatically invokes the relevant expert agent(s)
84
+ 3. **Expert Consultation**: Each expert provides domain-specific architecture guidance, technology recommendations, and risk analysis
85
+ 4. **Integration**: Expert feedback is integrated into the implementation plan and tagged with `@EXPERT:DOMAIN` for traceability
86
+
87
+ ### Example: Full-Stack Authentication SPEC
88
+
89
+ ```
90
+ SPEC Keywords: 'api', 'authentication', 'design', 'accessibility'
91
+
92
+ → Trigger backend-expert (for API & auth architecture)
93
+ → Trigger ui-ux-expert (for login UI & accessibility)
94
+
95
+ Result:
96
+ @SPEC:AUTH-001 | @EXPERT:BACKEND | @EXPERT:UIUX
97
+
98
+ Implementation Plan includes:
99
+ - Backend: JWT token strategy, rate limiting, audit logging
100
+ - UI/UX: Accessible login form (WCAG 2.1 AA), error messaging
101
+ ```
102
+
103
+ ---
104
+
71
105
  ## Zero-project Specialists
72
106
 
73
107
  | Sub-agent | Model | Focus | Trigger |
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: moai-alfred-config-schema
3
+ description: ".moai/config.json official schema documentation, structure validation, project metadata, language settings, and configuration migration guide. Use when setting up project configuration or understanding config.json structure."
4
+ allowed-tools: "Read, Grep"
5
+ ---
6
+
7
+ ## What It Does
8
+
9
+ `.moai/config.json` 파일의 공식 스키마와 각 필드의 목적, 유효한 값, 마이그레이션 규칙을 정의합니다.
10
+
11
+ ## When to Use
12
+
13
+ - ✅ Project 초기화 후 config.json 설정
14
+ - ✅ config.json 스키마 이해
15
+ - ✅ Language settings, git strategy, TAG configuration 변경
16
+ - ✅ Legacy config 마이그레이션
17
+
18
+ ## Schema Overview
19
+
20
+ ```json
21
+ {
22
+ "version": "0.7.0",
23
+ "project": {
24
+ "name": "ProjectName",
25
+ "codebase_language": "python",
26
+ "conversation_language": "ko",
27
+ "conversation_language_name": "Korean"
28
+ },
29
+ "language": {
30
+ "conversation_language": "ko",
31
+ "conversation_language_name": "Korean"
32
+ },
33
+ "git": {
34
+ "strategy": "github-pr",
35
+ "main_branch": "main",
36
+ "protected": true
37
+ },
38
+ "tag": {
39
+ "prefix_style": "DOMAIN-###"
40
+ }
41
+ }
42
+ ```
43
+
44
+ ## Top-Level Sections
45
+
46
+ - **version**: Configuration version (do not edit)
47
+ - **project**: Name, codebase language, conversation language
48
+ - **language**: Multi-language support settings
49
+ - **git**: GitHub workflow strategy
50
+ - **tag**: TAG system configuration
51
+
52
+ ---
53
+
54
+ Learn more in `reference.md` for complete schema reference, validation rules, and migration examples.
55
+
56
+ **Related Skills**: moai-alfred-dev-guide, moai-foundation-specs
@@ -0,0 +1,28 @@
1
+ # Config.json Examples
2
+
3
+ ## Example: Korean Project Setup
4
+
5
+ ```json
6
+ {
7
+ "version": "0.7.0",
8
+ "project": {
9
+ "name": "MyKoreanProject",
10
+ "codebase_language": "python",
11
+ "conversation_language": "ko",
12
+ "conversation_language_name": "Korean"
13
+ },
14
+ "language": {
15
+ "conversation_language": "ko",
16
+ "conversation_language_name": "Korean"
17
+ },
18
+ "git": {
19
+ "strategy": "github-pr",
20
+ "main_branch": "main",
21
+ "protected": true
22
+ }
23
+ }
24
+ ```
25
+
26
+ ---
27
+
28
+ Learn more in `reference.md`.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: moai-alfred-context-budget
3
+ description: "Claude Code context window optimization strategies, JIT retrieval, progressive loading, memory file patterns, and cleanup practices. Use when optimizing context usage, managing large projects, or implementing efficient workflows."
4
+ allowed-tools: "Read, Grep"
5
+ ---
6
+
7
+ ## What It Does
8
+
9
+ Claude Code context budget (100K-200K tokens)의 효율적 관리 전략, progressive disclosure, JIT retrieval, memory file 구조화 방법을 제공합니다.
10
+
11
+ ## When to Use
12
+
13
+ - ✅ Context limit 도달 위험성 있을 때
14
+ - ✅ 대규모 프로젝트의 context 관리 필요
15
+ - ✅ Session handoff 준비
16
+ - ✅ Memory file 구조 설계/정리
17
+
18
+ ## Context Budget Overview
19
+
20
+ ```
21
+ Total: 100K-200K tokens
22
+ ├── System Prompt: ~2K
23
+ ├── Tools & Instructions: ~5K
24
+ ├── Session History: ~30K
25
+ ├── Project Context: ~40K
26
+ └── Available for Response: ~23K
27
+ ```
28
+
29
+ ## Progressive Disclosure Pattern
30
+
31
+ 1. **Metadata** (always): Skill name, description, triggers
32
+ 2. **Content** (on-demand): Full SKILL.md when invoked
33
+ 3. **Supporting** (JIT): Examples, templates when referenced
34
+
35
+ ## JIT Retrieval Principles
36
+
37
+ - Pull only what you need for immediate step
38
+ - Prefer `Explore` over manual file hunting
39
+ - Cache critical insights for reuse
40
+ - Remove unnecessary files regularly
41
+
42
+ ## Best Practices
43
+
44
+ ✅ DO:
45
+ - Use Explore for large searches
46
+ - Cache results in memory files
47
+ - Keep memory files < 500 lines each
48
+ - Update session-summary.md before task switches
49
+ - Archive completed work
50
+
51
+ ❌ DON'T:
52
+ - Load entire src/ directory upfront
53
+ - Duplicate context between files
54
+ - Store memory files outside `.moai/memory/`
55
+ - Leave stale session notes (archive or delete)
56
+ - Cache raw code (summarize instead)
57
+
58
+ ---
59
+
60
+ Learn more in `reference.md` for detailed JIT strategy, memory patterns, context budget calculations, and management practices.
61
+
62
+ **Related Skills**: moai-alfred-practices, moai-cc-memory
@@ -0,0 +1,28 @@
1
+ # Context Budget Optimization Examples
2
+
3
+ ## Memory File Structure
4
+
5
+ ```
6
+ .moai/memory/
7
+ ├── session-summary.md # Current task, key files, assumptions
8
+ ├── architecture.md # System design reference
9
+ ├── gotchas.md # Common pitfalls
10
+ └── archive/ # Completed sessions
11
+ ├── feature-auth-*
12
+ └── feature-api-*
13
+ ```
14
+
15
+ ## JIT Retrieval Example
16
+
17
+ **Task**: Add email verification
18
+
19
+ **JIT Loading**:
20
+ - Read: User model (src/domain/user.ts)
21
+ - Read: Signup endpoint (src/api/auth.ts)
22
+ - Cache: Signup flow summary in memory
23
+
24
+ **Result**: Context efficiency, clear understanding
25
+
26
+ ---
27
+
28
+ Learn more in `reference.md`.