moai-adk 0.4.7__py3-none-any.whl → 0.4.8__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/templates/.claude/agents/alfred/cc-manager.md +188 -954
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +4 -5
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +2 -2
- moai_adk/templates/.claude/agents/alfred/git-manager.md +2 -2
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +3 -3
- moai_adk/templates/.claude/agents/alfred/project-manager.md +6 -6
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +4 -6
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +36 -36
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +2 -2
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +2 -2
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +3 -3
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +5 -5
- moai_adk/templates/.claude/commands/alfred/0-project.md +98 -42
- moai_adk/templates/.claude/commands/alfred/1-plan.md +7 -7
- moai_adk/templates/.claude/commands/alfred/2-run.md +36 -36
- moai_adk/templates/.claude/commands/alfred/3-sync.md +10 -10
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +14 -1
- moai_adk/templates/.claude/hooks/alfred/core/__init__.py +115 -33
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +8 -9
- moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +6 -6
- moai_adk/templates/.claude/hooks/alfred/handlers/user.py +5 -4
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +1 -1
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +1 -1
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +1 -1
- moai_adk/templates/.claude/settings.json +42 -2
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +480 -0
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +257 -0
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +120 -0
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +278 -0
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +287 -0
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +232 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +179 -0
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +296 -0
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +243 -0
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +271 -0
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +261 -35
- moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +15 -15
- moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +33 -33
- moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
- moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +438 -42
- moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +129 -0
- moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +1300 -0
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +161 -0
- moai_adk/templates/CLAUDE.md +101 -93
- {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/METADATA +537 -146
- {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/RECORD +63 -73
- moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-tui-survey/SKILL.md +0 -635
- moai_adk/templates/.claude/skills/moai-alfred-tui-survey/examples.md +0 -992
- moai_adk/templates/.claude/skills/moai-alfred-tui-survey/reference.md +0 -801
- moai_adk/templates/.claude/skills/moai-claude-code/SKILL.md +0 -121
- moai_adk/templates/.claude/skills/moai-claude-code/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-claude-code/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-claude-code/templates/agent-full.md +0 -332
- moai_adk/templates/.claude/skills/moai-claude-code/templates/command-full.md +0 -384
- moai_adk/templates/.claude/skills/moai-claude-code/templates/plugin-full.json +0 -363
- moai_adk/templates/.claude/skills/moai-claude-code/templates/settings-full.json +0 -595
- moai_adk/templates/.claude/skills/moai-claude-code/templates/skill-full.md +0 -496
- moai_adk/templates/.claude/skills/moai-lang-clojure/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-clojure/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-clojure/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-haskell/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-haskell/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-haskell/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-julia/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-julia/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-julia/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-lua/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-lua/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-lua/reference.md +0 -30
- {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/WHEEL +0 -0
- {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
Common type definitions and utility functions
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from dataclasses import
|
|
8
|
-
from typing import Any, NotRequired, TypedDict
|
|
7
|
+
from dataclasses import dataclass, field
|
|
8
|
+
from typing import Any, Literal, NotRequired, TypedDict
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class HookPayload(TypedDict):
|
|
@@ -16,63 +16,145 @@ class HookPayload(TypedDict):
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
cwd: str
|
|
19
|
-
userPrompt: NotRequired[str]
|
|
19
|
+
userPrompt: NotRequired[str] # Includes only UserPromptSubmit events
|
|
20
20
|
tool: NotRequired[str] # PreToolUse/PostToolUse events
|
|
21
21
|
arguments: NotRequired[dict[str, Any]] # Tool arguments
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
@dataclass
|
|
25
25
|
class HookResult:
|
|
26
|
-
"""Hook execution result
|
|
26
|
+
"""Hook execution result following Claude Code standard schema.
|
|
27
|
+
|
|
28
|
+
Attributes conform to Claude Code Hook output specification:
|
|
29
|
+
https://docs.claude.com/en/docs/claude-code/hooks
|
|
30
|
+
|
|
31
|
+
Standard Fields (Claude Code schema):
|
|
32
|
+
continue_execution: Allow execution to continue (default True)
|
|
33
|
+
suppress_output: Suppress hook output display (default False)
|
|
34
|
+
decision: "approve" or "block" operation (optional)
|
|
35
|
+
reason: Explanation for decision (optional)
|
|
36
|
+
permission_decision: "allow", "deny", or "ask" (optional)
|
|
37
|
+
|
|
38
|
+
MoAI-ADK Fields (wrapped in hookSpecificOutput):
|
|
39
|
+
system_message: Message displayed to user
|
|
40
|
+
context_files: List of context files to load
|
|
41
|
+
suggestions: Suggestions for user
|
|
42
|
+
exit_code: Exit code (for diagnostics)
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
# Claude Code standard fields
|
|
46
|
+
continue_execution: bool = True
|
|
47
|
+
suppress_output: bool = False
|
|
48
|
+
decision: Literal["approve", "block"] | None = None
|
|
49
|
+
reason: str | None = None
|
|
50
|
+
permission_decision: Literal["allow", "deny", "ask"] | None = None
|
|
27
51
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
contextFiles: list[str] = field(default_factory=list) # noqa: N815
|
|
52
|
+
# MoAI-ADK custom fields (wrapped in hookSpecificOutput)
|
|
53
|
+
system_message: str | None = None
|
|
54
|
+
context_files: list[str] = field(default_factory=list)
|
|
32
55
|
suggestions: list[str] = field(default_factory=list)
|
|
33
|
-
|
|
56
|
+
exit_code: int = 0
|
|
34
57
|
|
|
35
58
|
def to_dict(self) -> dict[str, Any]:
|
|
36
|
-
"""
|
|
37
|
-
|
|
59
|
+
"""Convert to Claude Code standard Hook output schema.
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
Dictionary conforming to Claude Code Hook specification with:
|
|
63
|
+
- Top-level fields: continue, suppressOutput, decision, reason, permissionDecision
|
|
64
|
+
- Nested field: hookSpecificOutput containing MoAI-ADK-specific data
|
|
65
|
+
|
|
66
|
+
Examples:
|
|
67
|
+
>>> result = HookResult(continue_execution=True)
|
|
68
|
+
>>> result.to_dict()
|
|
69
|
+
{'continue': True}
|
|
70
|
+
|
|
71
|
+
>>> result = HookResult(decision="block", reason="Dangerous")
|
|
72
|
+
>>> result.to_dict()
|
|
73
|
+
{'decision': 'block', 'reason': 'Dangerous'}
|
|
74
|
+
|
|
75
|
+
>>> result = HookResult(system_message="Test", context_files=["a.txt"])
|
|
76
|
+
>>> result.to_dict()
|
|
77
|
+
{'continue': True, 'hookSpecificOutput': {'systemMessage': 'Test', 'contextFiles': ['a.txt']}}
|
|
78
|
+
"""
|
|
79
|
+
output: dict[str, Any] = {}
|
|
80
|
+
|
|
81
|
+
# Add decision or continue flag
|
|
82
|
+
if self.decision:
|
|
83
|
+
output["decision"] = self.decision
|
|
84
|
+
if self.reason:
|
|
85
|
+
output["reason"] = self.reason
|
|
86
|
+
else:
|
|
87
|
+
output["continue"] = self.continue_execution
|
|
88
|
+
|
|
89
|
+
# Add suppressOutput if True
|
|
90
|
+
if self.suppress_output:
|
|
91
|
+
output["suppressOutput"] = True
|
|
92
|
+
|
|
93
|
+
# Add permissionDecision if set
|
|
94
|
+
if self.permission_decision:
|
|
95
|
+
output["permissionDecision"] = self.permission_decision
|
|
96
|
+
|
|
97
|
+
# Wrap MoAI-ADK custom fields in hookSpecificOutput
|
|
98
|
+
hook_output: dict[str, Any] = {}
|
|
99
|
+
|
|
100
|
+
if self.system_message:
|
|
101
|
+
hook_output["systemMessage"] = self.system_message
|
|
102
|
+
|
|
103
|
+
if self.context_files:
|
|
104
|
+
hook_output["contextFiles"] = self.context_files
|
|
105
|
+
|
|
106
|
+
if self.suggestions:
|
|
107
|
+
hook_output["suggestions"] = self.suggestions
|
|
108
|
+
|
|
109
|
+
if self.exit_code != 0:
|
|
110
|
+
hook_output["exitCode"] = self.exit_code
|
|
111
|
+
|
|
112
|
+
# Only add hookSpecificOutput if there's custom data
|
|
113
|
+
if hook_output:
|
|
114
|
+
output["hookSpecificOutput"] = hook_output
|
|
115
|
+
|
|
116
|
+
return output
|
|
38
117
|
|
|
39
118
|
def to_user_prompt_submit_dict(self) -> dict[str, Any]:
|
|
40
|
-
"""UserPromptSubmit Hook-specific output format
|
|
119
|
+
"""UserPromptSubmit Hook-specific output format.
|
|
41
120
|
|
|
42
|
-
Claude Code requires a special schema for UserPromptSubmit
|
|
43
|
-
|
|
44
|
-
"hookEventName": "UserPromptSubmit",
|
|
45
|
-
"additionalContext": "string (required)"
|
|
46
|
-
}
|
|
121
|
+
Claude Code requires a special schema for UserPromptSubmit events.
|
|
122
|
+
The result is wrapped in the standard Hook schema with hookSpecificOutput.
|
|
47
123
|
|
|
48
124
|
Returns:
|
|
49
|
-
Claude Code UserPromptSubmit Hook Dictionary matching schema
|
|
125
|
+
Claude Code UserPromptSubmit Hook Dictionary matching schema:
|
|
126
|
+
{
|
|
127
|
+
"continue": true,
|
|
128
|
+
"hookSpecificOutput": {
|
|
129
|
+
"hookEventName": "UserPromptSubmit",
|
|
130
|
+
"additionalContext": "string"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
50
133
|
|
|
51
134
|
Examples:
|
|
52
|
-
>>> result = HookResult(
|
|
135
|
+
>>> result = HookResult(context_files=["tests/"])
|
|
53
136
|
>>> result.to_user_prompt_submit_dict()
|
|
54
|
-
{'hookEventName': 'UserPromptSubmit', 'additionalContext': '📎 Context: tests/'}
|
|
137
|
+
{'continue': True, 'hookSpecificOutput': {'hookEventName': 'UserPromptSubmit', 'additionalContext': '📎 Context: tests/'}}
|
|
55
138
|
"""
|
|
56
|
-
# Convert
|
|
57
|
-
if self.
|
|
58
|
-
context_str = "\n".join([f"📎 Context: {f}" for f in self.
|
|
139
|
+
# Convert context_files to additionalContext string
|
|
140
|
+
if self.context_files:
|
|
141
|
+
context_str = "\n".join([f"📎 Context: {f}" for f in self.context_files])
|
|
59
142
|
else:
|
|
60
143
|
context_str = ""
|
|
61
144
|
|
|
62
|
-
# Add
|
|
63
|
-
if self.
|
|
145
|
+
# Add system_message if there is one
|
|
146
|
+
if self.system_message:
|
|
64
147
|
if context_str:
|
|
65
|
-
context_str = f"{self.
|
|
148
|
+
context_str = f"{self.system_message}\n\n{context_str}"
|
|
66
149
|
else:
|
|
67
|
-
context_str = self.
|
|
68
|
-
|
|
69
|
-
# If the string is empty, use default
|
|
70
|
-
if not context_str:
|
|
71
|
-
context_str = ""
|
|
150
|
+
context_str = self.system_message
|
|
72
151
|
|
|
73
152
|
return {
|
|
74
|
-
"
|
|
75
|
-
"
|
|
153
|
+
"continue": self.continue_execution,
|
|
154
|
+
"hookSpecificOutput": {
|
|
155
|
+
"hookEventName": "UserPromptSubmit",
|
|
156
|
+
"additionalContext": context_str
|
|
157
|
+
}
|
|
76
158
|
}
|
|
77
159
|
|
|
78
160
|
|
|
@@ -19,7 +19,7 @@ def handle_session_start(payload: HookPayload) -> HookResult:
|
|
|
19
19
|
payload: Claude Code event payload (cwd key required)
|
|
20
20
|
|
|
21
21
|
Returns:
|
|
22
|
-
HookResult(
|
|
22
|
+
HookResult(system_message=project status summary message)
|
|
23
23
|
|
|
24
24
|
Message Format:
|
|
25
25
|
🚀 MoAI-ADK Session Started
|
|
@@ -31,14 +31,15 @@ def handle_session_start(payload: HookPayload) -> HookResult:
|
|
|
31
31
|
|
|
32
32
|
Note:
|
|
33
33
|
- Claude Code processes SessionStart in several stages (clear → compact)
|
|
34
|
-
- Display message only at
|
|
35
|
-
- "clear" step returns
|
|
34
|
+
- Display message only at "compact" stage to prevent duplicate output
|
|
35
|
+
- "clear" step returns minimal result (empty hookSpecificOutput)
|
|
36
36
|
|
|
37
37
|
TDD History:
|
|
38
38
|
- RED: Session startup message format test
|
|
39
39
|
- GREEN: Generate status message by combining helper functions
|
|
40
40
|
- REFACTOR: Improved message format, improved readability, added checkpoint list
|
|
41
41
|
- FIX: Prevent duplicate output of clear step (only compact step is displayed)
|
|
42
|
+
- UPDATE: Migrated to Claude Code standard Hook schema
|
|
42
43
|
|
|
43
44
|
@TAG:CHECKPOINT-EVENT-001
|
|
44
45
|
"""
|
|
@@ -46,7 +47,8 @@ def handle_session_start(payload: HookPayload) -> HookResult:
|
|
|
46
47
|
# Ignore the "clear" stage and output messages only at the "compact" stage
|
|
47
48
|
event_phase = payload.get("phase", "")
|
|
48
49
|
if event_phase == "clear":
|
|
49
|
-
|
|
50
|
+
# Return minimal valid Hook result for clear phase
|
|
51
|
+
return HookResult(continue_execution=True)
|
|
50
52
|
|
|
51
53
|
cwd = payload.get("cwd", ".")
|
|
52
54
|
language = detect_language(cwd)
|
|
@@ -59,7 +61,7 @@ def handle_session_start(payload: HookPayload) -> HookResult:
|
|
|
59
61
|
changes = git_info.get("changes", 0)
|
|
60
62
|
spec_progress = f"{specs['completed']}/{specs['total']}"
|
|
61
63
|
|
|
62
|
-
#
|
|
64
|
+
# system_message: displayed directly to the user
|
|
63
65
|
lines = [
|
|
64
66
|
"🚀 MoAI-ADK Session Started",
|
|
65
67
|
f" Language: {language}",
|
|
@@ -78,10 +80,7 @@ def handle_session_start(payload: HookPayload) -> HookResult:
|
|
|
78
80
|
|
|
79
81
|
system_message = "\n".join(lines)
|
|
80
82
|
|
|
81
|
-
return HookResult(
|
|
82
|
-
message=system_message, # for Claude context
|
|
83
|
-
systemMessage=system_message, # For user display
|
|
84
|
-
)
|
|
83
|
+
return HookResult(system_message=system_message)
|
|
85
84
|
|
|
86
85
|
|
|
87
86
|
def handle_session_end(payload: HookPayload) -> HookResult:
|
|
@@ -20,8 +20,8 @@ def handle_pre_tool_use(payload: HookPayload) -> HookResult:
|
|
|
20
20
|
|
|
21
21
|
Returns:
|
|
22
22
|
HookResult(
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
system_message=checkpoint creation notification (when danger is detected);
|
|
24
|
+
continue_execution=True (always continue operation)
|
|
25
25
|
)
|
|
26
26
|
|
|
27
27
|
Checkpoint Triggers:
|
|
@@ -34,7 +34,7 @@ def handle_pre_tool_use(payload: HookPayload) -> HookResult:
|
|
|
34
34
|
→ "🛡️ Checkpoint created: before-delete-20251015-143000"
|
|
35
35
|
|
|
36
36
|
Notes:
|
|
37
|
-
- Return
|
|
37
|
+
- Return continue_execution=True even after detection of danger (continue operation)
|
|
38
38
|
- Work continues even when checkpoint fails (ignores)
|
|
39
39
|
- Transparent background operation
|
|
40
40
|
|
|
@@ -52,14 +52,14 @@ def handle_pre_tool_use(payload: HookPayload) -> HookResult:
|
|
|
52
52
|
checkpoint_branch = create_checkpoint(cwd, operation_type)
|
|
53
53
|
|
|
54
54
|
if checkpoint_branch != "checkpoint-failed":
|
|
55
|
-
|
|
55
|
+
system_message = (
|
|
56
56
|
f"🛡️ Checkpoint created: {checkpoint_branch}\n"
|
|
57
57
|
f" Operation: {operation_type}"
|
|
58
58
|
)
|
|
59
59
|
|
|
60
|
-
return HookResult(
|
|
60
|
+
return HookResult(system_message=system_message, continue_execution=True)
|
|
61
61
|
|
|
62
|
-
return HookResult(
|
|
62
|
+
return HookResult(continue_execution=True)
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
def handle_post_tool_use(payload: HookPayload) -> HookResult:
|
|
@@ -20,22 +20,23 @@ def handle_user_prompt_submit(payload: HookPayload) -> HookResult:
|
|
|
20
20
|
|
|
21
21
|
Returns:
|
|
22
22
|
HookResult(
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
system_message=Number of Files loaded (or None),
|
|
24
|
+
context_files=Recommended document path list
|
|
25
25
|
)
|
|
26
26
|
|
|
27
27
|
TDD History:
|
|
28
28
|
- RED: JIT document loading scenario testing
|
|
29
29
|
- GREEN: Recommend documents by calling get_jit_context()
|
|
30
30
|
- REFACTOR: Message conditional display (only when there is a file)
|
|
31
|
+
- UPDATE: Migrated to Claude Code standard Hook schema with snake_case fields
|
|
31
32
|
"""
|
|
32
33
|
user_prompt = payload.get("userPrompt", "")
|
|
33
34
|
cwd = payload.get("cwd", ".")
|
|
34
35
|
context_files = get_jit_context(user_prompt, cwd)
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
system_message = f"📎 Loaded {len(context_files)} context file(s)" if context_files else None
|
|
37
38
|
|
|
38
|
-
return HookResult(
|
|
39
|
+
return HookResult(system_message=system_message, context_files=context_files)
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
__all__ = ["handle_user_prompt_submit"]
|
|
@@ -4,7 +4,7 @@ description: Agent-based coding mode that integrates hands-on development and co
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Agentic Coding
|
|
7
|
-
> Interactive prompts rely on `Skill("moai-alfred-
|
|
7
|
+
> Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
|
|
8
8
|
|
|
9
9
|
**Audience**: Professional developers, team leaders, architects
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@ description: Learning mode to easily learn MoAI-ADK concepts and workflow
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# MoAI ADK Learning
|
|
7
|
-
> Interactive prompts rely on `Skill("moai-alfred-
|
|
7
|
+
> Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
|
|
8
8
|
|
|
9
9
|
**Audience**: Developers new to MoAI-ADK
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@ description: Learning mode to easily learn new skills with Alfred
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Study with Alfred
|
|
7
|
-
> Interactive prompts rely on `Skill("moai-alfred-
|
|
7
|
+
> Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
|
|
8
8
|
|
|
9
9
|
**Audience**: Developers looking to learn new technologies/languages/frameworks
|
|
10
10
|
|
|
@@ -6,18 +6,58 @@
|
|
|
6
6
|
"PYTHON_ENV": "{{PROJECT_MODE}}"
|
|
7
7
|
},
|
|
8
8
|
"hooks": {
|
|
9
|
+
"SessionStart": [
|
|
10
|
+
{
|
|
11
|
+
"hooks": [
|
|
12
|
+
{
|
|
13
|
+
"command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py SessionStart",
|
|
14
|
+
"type": "command"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
],
|
|
9
19
|
"PreToolUse": [
|
|
10
20
|
{
|
|
11
21
|
"hooks": [
|
|
12
22
|
{
|
|
13
|
-
"command": "uv run
|
|
23
|
+
"command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py PreToolUse",
|
|
14
24
|
"type": "command"
|
|
15
25
|
}
|
|
16
26
|
],
|
|
17
27
|
"matcher": "Edit|Write|MultiEdit"
|
|
18
28
|
}
|
|
19
29
|
],
|
|
20
|
-
"
|
|
30
|
+
"UserPromptSubmit": [
|
|
31
|
+
{
|
|
32
|
+
"hooks": [
|
|
33
|
+
{
|
|
34
|
+
"command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py UserPromptSubmit",
|
|
35
|
+
"type": "command"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"SessionEnd": [
|
|
41
|
+
{
|
|
42
|
+
"hooks": [
|
|
43
|
+
{
|
|
44
|
+
"command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py SessionEnd",
|
|
45
|
+
"type": "command"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"PostToolUse": [
|
|
51
|
+
{
|
|
52
|
+
"hooks": [
|
|
53
|
+
{
|
|
54
|
+
"command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py PostToolUse",
|
|
55
|
+
"type": "command"
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"matcher": "Edit|Write|MultiEdit"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
21
61
|
},
|
|
22
62
|
"permissions": {
|
|
23
63
|
"defaultMode": "default",
|