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,94 @@
1
+ #!/usr/bin/env python3
2
+ # @CODE:HOOKS-CLARITY-CLEAN | SPEC: Individual hook files for better UX
3
+ """SessionEnd Hook: Session Cleanup and Finalization
4
+
5
+ Claude Code Event: SessionEnd
6
+ Purpose: Clean up resources and finalize session when Claude Code exits
7
+ Execution: Triggered when Claude Code session ends
8
+
9
+ Output: Continue execution (currently a stub for future enhancements)
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_session_end
27
+
28
+
29
+ def main() -> None:
30
+ """Main entry point for SessionEnd hook
31
+
32
+ Currently a stub for future functionality:
33
+ - Clear temporary caches
34
+ - Save session metrics
35
+ - Upload analytics (if enabled)
36
+ - Cleanup background processes
37
+
38
+ Exit Codes:
39
+ 0: Success
40
+ 1: Error (timeout, JSON parse failure, handler exception)
41
+ """
42
+ # Set 5-second timeout
43
+ timeout = CrossPlatformTimeout(5)
44
+ timeout.start()
45
+
46
+ try:
47
+ # Read JSON payload from stdin
48
+ input_data = sys.stdin.read()
49
+ data = json.loads(input_data) if input_data.strip() else {}
50
+
51
+ # Call handler
52
+ result = handle_session_end(data)
53
+
54
+ # Output result as JSON
55
+ print(json.dumps(result.to_dict()))
56
+ sys.exit(0)
57
+
58
+ except PlatformTimeoutError:
59
+ # Timeout - return minimal valid response
60
+ timeout_response: dict[str, Any] = {
61
+ "continue": True,
62
+ "systemMessage": "⚠️ SessionEnd cleanup timeout - session ending anyway",
63
+ }
64
+ print(json.dumps(timeout_response))
65
+ print("SessionEnd hook timeout after 5 seconds", file=sys.stderr)
66
+ sys.exit(1)
67
+
68
+ except json.JSONDecodeError as e:
69
+ # JSON parse error
70
+ error_response: dict[str, Any] = {
71
+ "continue": True,
72
+ "hookSpecificOutput": {"error": f"JSON parse error: {e}"},
73
+ }
74
+ print(json.dumps(error_response))
75
+ print(f"SessionEnd JSON parse error: {e}", file=sys.stderr)
76
+ sys.exit(1)
77
+
78
+ except Exception as e:
79
+ # Unexpected error
80
+ error_response: dict[str, Any] = {
81
+ "continue": True,
82
+ "hookSpecificOutput": {"error": f"SessionEnd error: {e}"},
83
+ }
84
+ print(json.dumps(error_response))
85
+ print(f"SessionEnd unexpected error: {e}", file=sys.stderr)
86
+ sys.exit(1)
87
+
88
+ finally:
89
+ # Always cancel alarm
90
+ timeout.cancel()
91
+
92
+
93
+ if __name__ == "__main__":
94
+ main()
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env python3
2
+ # @CODE:HOOKS-CLARITY-001 | SPEC: Individual hook files for better UX
3
+ """SessionStart Hook: Show Project Information
4
+
5
+ Claude Code Event: SessionStart
6
+ Purpose: Display project status, language, Git info, and SPEC progress when session starts
7
+ Execution: Triggered automatically when Claude Code session begins
8
+
9
+ Output: System message with formatted project summary
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_session_start
27
+
28
+
29
+ def main() -> None:
30
+ """Main entry point for SessionStart hook
31
+
32
+ Displays project information including:
33
+ - Programming language
34
+ - Git branch and status
35
+ - SPEC progress (completed/total)
36
+ - Recent checkpoints
37
+
38
+ Exit Codes:
39
+ 0: Success
40
+ 1: Error (timeout, JSON parse failure, handler exception)
41
+ """
42
+ # Set 5-second timeout
43
+ timeout = CrossPlatformTimeout(5)
44
+ timeout.start()
45
+
46
+ try:
47
+ # Read JSON payload from stdin
48
+ input_data = sys.stdin.read()
49
+ data = json.loads(input_data) if input_data.strip() else {}
50
+
51
+ # Call handler
52
+ result = handle_session_start(data)
53
+
54
+ # Output result as JSON
55
+ print(json.dumps(result.to_dict()))
56
+ sys.exit(0)
57
+
58
+ except PlatformTimeoutError:
59
+ # Timeout - return minimal valid response
60
+ timeout_response: dict[str, Any] = {
61
+ "continue": True,
62
+ "systemMessage": "⚠️ Session start timeout - continuing without project info",
63
+ }
64
+ print(json.dumps(timeout_response))
65
+ print("SessionStart hook timeout after 5 seconds", file=sys.stderr)
66
+ sys.exit(1)
67
+
68
+ except json.JSONDecodeError as e:
69
+ # JSON parse error
70
+ error_response: dict[str, Any] = {
71
+ "continue": True,
72
+ "hookSpecificOutput": {"error": f"JSON parse error: {e}"},
73
+ }
74
+ print(json.dumps(error_response))
75
+ print(f"SessionStart JSON parse error: {e}", file=sys.stderr)
76
+ sys.exit(1)
77
+
78
+ except Exception as e:
79
+ # Unexpected error
80
+ error_response: dict[str, Any] = {
81
+ "continue": True,
82
+ "hookSpecificOutput": {"error": f"SessionStart error: {e}"},
83
+ }
84
+ print(json.dumps(error_response))
85
+ print(f"SessionStart unexpected error: {e}", file=sys.stderr)
86
+ sys.exit(1)
87
+
88
+ finally:
89
+ # Always cancel alarm
90
+ timeout.cancel()
91
+
92
+
93
+ if __name__ == "__main__":
94
+ main()
@@ -156,8 +156,8 @@ class HookResult:
156
156
  "continue": self.continue_execution,
157
157
  "hookSpecificOutput": {
158
158
  "hookEventName": "UserPromptSubmit",
159
- "additionalContext": context_str
160
- }
159
+ "additionalContext": context_str,
160
+ },
161
161
  }
162
162
 
163
163
 
@@ -56,7 +56,7 @@ def detect_risky_operation(tool_name: str, tool_args: dict[str, Any], cwd: str)
56
56
 
57
57
  Risky Operations:
58
58
  - Bash tool: rm -rf, git merge, git reset --hard, git rebase, script execution
59
- - Edit/Write tool: CLAUDE.md, config.json, .moai/memory/*.md
59
+ - Edit/Write tool: CLAUDE.md, config.json, .claude/skills/*.md
60
60
  - MultiEdit tool: Edit ≥10 items File simultaneously
61
61
  - Script execution: Python, Node, Java, Go, Rust, Dart, Swift, Kotlin, Shell scripts
62
62
 
@@ -98,8 +98,8 @@ def detect_risky_operation(tool_name: str, tool_args: dict[str, Any], cwd: str)
98
98
  critical_files = [
99
99
  "CLAUDE.md",
100
100
  "config.json",
101
- ".moai/memory/development-guide.md",
102
- ".moai/memory/spec-metadata.md",
101
+ ".claude/skills/moai-alfred-dev-guide/reference.md",
102
+ ".claude/skills/moai-alfred-spec-metadata-extended/reference.md",
103
103
  ".moai/config.json",
104
104
  ]
105
105
 
@@ -22,13 +22,13 @@ def get_jit_context(prompt: str, cwd: str) -> list[str]:
22
22
  If there is no matching pattern or file, an empty list []
23
23
 
24
24
  Patterns:
25
- - "/alfred:1-plan" → .moai/memory/spec-metadata.md
26
- - "/alfred:2-run" → .moai/memory/development-guide.md
25
+ - "/alfred:1-plan" → .claude/skills/moai-alfred-spec-metadata-extended/reference.md
26
+ - "/alfred:2-run" → .claude/skills/moai-alfred-dev-guide/reference.md
27
27
  - "test" → tests/ (if directory exists)
28
28
 
29
29
  Examples:
30
30
  >>> get_jit_context("/alfred:1-plan", "/project")
31
- ['.moai/memory/spec-metadata.md']
31
+ ['.claude/skills/moai-alfred-spec-metadata-extended/reference.md']
32
32
  >>> get_jit_context("implement test", "/project")
33
33
  ['tests/']
34
34
  >>> get_jit_context("unknown", "/project")
@@ -49,8 +49,8 @@ def get_jit_context(prompt: str, cwd: str) -> list[str]:
49
49
 
50
50
  # Pattern matching
51
51
  patterns = {
52
- "/alfred:1-plan": [".moai/memory/spec-metadata.md"],
53
- "/alfred:2-run": [".moai/memory/development-guide.md"],
52
+ "/alfred:1-plan": [".claude/skills/moai-alfred-spec-metadata-extended/reference.md"],
53
+ "/alfred:2-run": [".claude/skills/moai-alfred-dev-guide/reference.md"],
54
54
  "test": ["tests/"],
55
55
  }
56
56