moai-adk 0.8.0__py3-none-any.whl → 0.8.2__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 (94) hide show
  1. moai_adk/cli/commands/update.py +15 -4
  2. moai_adk/core/issue_creator.py +309 -0
  3. moai_adk/core/tags/__init__.py +87 -0
  4. moai_adk/core/tags/ci_validator.py +435 -0
  5. moai_adk/core/tags/cli.py +283 -0
  6. moai_adk/core/tags/generator.py +109 -0
  7. moai_adk/core/tags/inserter.py +99 -0
  8. moai_adk/core/tags/mapper.py +126 -0
  9. moai_adk/core/tags/parser.py +76 -0
  10. moai_adk/core/tags/pre_commit_validator.py +355 -0
  11. moai_adk/core/tags/reporter.py +959 -0
  12. moai_adk/core/tags/tags.py +149 -0
  13. moai_adk/core/tags/validator.py +897 -0
  14. moai_adk/core/template_engine.py +253 -0
  15. moai_adk/templates/.claude/agents/alfred/cc-manager.md +25 -2
  16. moai_adk/templates/.claude/agents/alfred/debug-helper.md +24 -12
  17. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +19 -12
  18. moai_adk/templates/.claude/agents/alfred/git-manager.md +45 -14
  19. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +19 -12
  20. moai_adk/templates/.claude/agents/alfred/project-manager.md +29 -2
  21. moai_adk/templates/.claude/agents/alfred/quality-gate.md +25 -2
  22. moai_adk/templates/.claude/agents/alfred/skill-factory.md +30 -2
  23. moai_adk/templates/.claude/agents/alfred/spec-builder.md +26 -11
  24. moai_adk/templates/.claude/agents/alfred/tag-agent.md +30 -8
  25. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +27 -12
  26. moai_adk/templates/.claude/agents/alfred/trust-checker.md +25 -2
  27. moai_adk/templates/.claude/commands/alfred/0-project.md +5 -0
  28. moai_adk/templates/.claude/commands/alfred/1-plan.md +17 -4
  29. moai_adk/templates/.claude/commands/alfred/2-run.md +7 -0
  30. moai_adk/templates/.claude/commands/alfred/3-sync.md +6 -0
  31. moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
  32. moai_adk/templates/.claude/hooks/alfred/.moai/cache/version-check.json +9 -0
  33. moai_adk/templates/.claude/hooks/alfred/README.md +258 -145
  34. moai_adk/templates/.claude/hooks/alfred/TROUBLESHOOTING.md +471 -0
  35. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +92 -57
  36. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  37. moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +102 -0
  38. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +102 -0
  39. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +108 -0
  40. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +102 -0
  41. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +102 -0
  42. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/project.py +271 -15
  43. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  44. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/session.py +21 -7
  45. moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +102 -0
  46. moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +102 -0
  47. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +120 -0
  48. moai_adk/templates/.claude/settings.json +5 -5
  49. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +9 -6
  50. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +56 -56
  51. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +101 -100
  52. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +3 -3
  53. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +219 -219
  54. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +287 -287
  55. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +6 -6
  56. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +1 -1
  57. moai_adk/templates/.github/workflows/moai-gitflow.yml +22 -16
  58. moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
  59. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +182 -0
  60. moai_adk/templates/.github/workflows/release.yml +49 -0
  61. moai_adk/templates/.github/workflows/spec-issue-sync.yml +10 -6
  62. moai_adk/templates/.github/workflows/tag-report.yml +261 -0
  63. moai_adk/templates/.github/workflows/tag-validation.yml +176 -0
  64. moai_adk/templates/.moai/config.json +18 -1
  65. moai_adk/templates/.moai/docs/quick-issue-creation-guide.md +219 -0
  66. moai_adk/templates/.moai/hooks/install.sh +79 -0
  67. moai_adk/templates/.moai/hooks/pre-commit.sh +66 -0
  68. moai_adk/templates/.moai/memory/ISSUE-LABEL-MAPPING.md +150 -0
  69. moai_adk/templates/CLAUDE.md +39 -40
  70. moai_adk/templates/src/moai_adk/core/__init__.py +5 -0
  71. moai_adk/templates/src/moai_adk/core/tags/__init__.py +87 -0
  72. moai_adk/templates/src/moai_adk/core/tags/ci_validator.py +435 -0
  73. moai_adk/templates/src/moai_adk/core/tags/cli.py +283 -0
  74. moai_adk/templates/src/moai_adk/core/tags/pre_commit_validator.py +355 -0
  75. moai_adk/templates/src/moai_adk/core/tags/reporter.py +959 -0
  76. moai_adk/templates/src/moai_adk/core/tags/validator.py +897 -0
  77. {moai_adk-0.8.0.dist-info → moai_adk-0.8.2.dist-info}/METADATA +348 -1
  78. {moai_adk-0.8.0.dist-info → moai_adk-0.8.2.dist-info}/RECORD +89 -52
  79. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  80. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  81. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  82. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  83. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  84. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/__init__.py +0 -0
  85. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +0 -0
  86. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +0 -0
  87. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/tags.py +0 -0
  88. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/__init__.py +0 -0
  89. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/notification.py +0 -0
  90. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/tool.py +0 -0
  91. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/user.py +0 -0
  92. {moai_adk-0.8.0.dist-info → moai_adk-0.8.2.dist-info}/WHEEL +0 -0
  93. {moai_adk-0.8.0.dist-info → moai_adk-0.8.2.dist-info}/entry_points.txt +0 -0
  94. {moai_adk-0.8.0.dist-info → moai_adk-0.8.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,253 @@
1
+ """
2
+ Template engine for parameterizing GitHub templates and other configuration files.
3
+
4
+ Supports Jinja2-style templating with variable substitution and conditional sections.
5
+ Enables users to customize MoAI-ADK templates for their own projects.
6
+
7
+ @TAG:TEMPLATE-ENGINE-001 - Template variable substitution system
8
+ @TAG:GITHUB-CUSTOMIZATION-001 - GitHub template parameterization
9
+ """
10
+
11
+ from pathlib import Path
12
+ from typing import Any, Dict, Optional
13
+
14
+ from jinja2 import (
15
+ Environment,
16
+ FileSystemLoader,
17
+ StrictUndefined,
18
+ TemplateNotFound,
19
+ TemplateRuntimeError,
20
+ TemplateSyntaxError,
21
+ )
22
+
23
+
24
+ class TemplateEngine:
25
+ """
26
+ Jinja2-based template engine for MoAI-ADK configuration and GitHub templates.
27
+
28
+ Supports:
29
+ - Variable substitution: {{PROJECT_NAME}}, {{SPEC_DIR}}, etc.
30
+ - Conditional sections: {{#ENABLE_TRUST_5}}...{{/ENABLE_TRUST_5}}
31
+ - File-based and string-based template rendering
32
+ """
33
+
34
+ def __init__(self, strict_undefined: bool = False):
35
+ """
36
+ Initialize the template engine.
37
+
38
+ Args:
39
+ strict_undefined: If True, raise error on undefined variables.
40
+ If False, render undefined variables as empty strings.
41
+ """
42
+ self.strict_undefined = strict_undefined
43
+ self.undefined_behavior = StrictUndefined if strict_undefined else None
44
+
45
+ def render_string(
46
+ self,
47
+ template_string: str,
48
+ variables: Dict[str, Any]
49
+ ) -> str:
50
+ """
51
+ Render a Jinja2 template string with provided variables.
52
+
53
+ Args:
54
+ template_string: The template content as a string
55
+ variables: Dictionary of variables to substitute
56
+
57
+ Returns:
58
+ Rendered template string
59
+
60
+ Raises:
61
+ TemplateSyntaxError: If template syntax is invalid
62
+ TemplateRuntimeError: If variable substitution fails in strict mode
63
+ """
64
+ try:
65
+ env = Environment(
66
+ undefined=self.undefined_behavior,
67
+ trim_blocks=False,
68
+ lstrip_blocks=False
69
+ )
70
+ template = env.from_string(template_string)
71
+ return template.render(**variables)
72
+ except (TemplateSyntaxError, TemplateRuntimeError) as e:
73
+ raise RuntimeError(f"Template rendering error: {e}")
74
+
75
+ def render_file(
76
+ self,
77
+ template_path: Path,
78
+ variables: Dict[str, Any],
79
+ output_path: Optional[Path] = None
80
+ ) -> str:
81
+ """
82
+ Render a Jinja2 template file with provided variables.
83
+
84
+ Args:
85
+ template_path: Path to the template file
86
+ variables: Dictionary of variables to substitute
87
+ output_path: If provided, write rendered content to this path
88
+
89
+ Returns:
90
+ Rendered template content
91
+
92
+ Raises:
93
+ FileNotFoundError: If template file doesn't exist
94
+ TemplateSyntaxError: If template syntax is invalid
95
+ TemplateRuntimeError: If variable substitution fails in strict mode
96
+ """
97
+ if not template_path.exists():
98
+ raise FileNotFoundError(f"Template file not found: {template_path}")
99
+
100
+ template_dir = template_path.parent
101
+ template_name = template_path.name
102
+
103
+ try:
104
+ env = Environment(
105
+ loader=FileSystemLoader(str(template_dir)),
106
+ undefined=self.undefined_behavior,
107
+ trim_blocks=False,
108
+ lstrip_blocks=False
109
+ )
110
+ template = env.get_template(template_name)
111
+ rendered = template.render(**variables)
112
+
113
+ if output_path:
114
+ output_path.parent.mkdir(parents=True, exist_ok=True)
115
+ output_path.write_text(rendered, encoding='utf-8')
116
+
117
+ return rendered
118
+ except TemplateNotFound:
119
+ raise FileNotFoundError(f"Template not found in {template_dir}: {template_name}")
120
+ except (TemplateSyntaxError, TemplateRuntimeError) as e:
121
+ raise RuntimeError(f"Template rendering error in {template_path}: {e}")
122
+
123
+ def render_directory(
124
+ self,
125
+ template_dir: Path,
126
+ output_dir: Path,
127
+ variables: Dict[str, Any],
128
+ pattern: str = "**/*.{md,yml,yaml,json}"
129
+ ) -> Dict[str, str]:
130
+ """
131
+ Render all template files in a directory.
132
+
133
+ Args:
134
+ template_dir: Source directory containing templates
135
+ output_dir: Destination directory for rendered files
136
+ variables: Dictionary of variables to substitute
137
+ pattern: Glob pattern for files to process (default: template files)
138
+
139
+ Returns:
140
+ Dictionary mapping input paths to rendered content
141
+
142
+ Raises:
143
+ FileNotFoundError: If template directory doesn't exist
144
+ """
145
+ if not template_dir.exists():
146
+ raise FileNotFoundError(f"Template directory not found: {template_dir}")
147
+
148
+ results = {}
149
+ output_dir.mkdir(parents=True, exist_ok=True)
150
+
151
+ for template_file in template_dir.glob(pattern):
152
+ if template_file.is_file():
153
+ relative_path = template_file.relative_to(template_dir)
154
+ output_file = output_dir / relative_path
155
+
156
+ try:
157
+ rendered = self.render_file(template_file, variables, output_file)
158
+ results[str(relative_path)] = rendered
159
+ except Exception as e:
160
+ raise RuntimeError(f"Error rendering {relative_path}: {e}")
161
+
162
+ return results
163
+
164
+ @staticmethod
165
+ def get_default_variables(config: Dict[str, Any]) -> Dict[str, Any]:
166
+ """
167
+ Extract template variables from project configuration.
168
+
169
+ Args:
170
+ config: Project configuration dictionary (from .moai/config.json)
171
+
172
+ Returns:
173
+ Dictionary of template variables
174
+ """
175
+ github_config = config.get("github", {}).get("templates", {})
176
+ project_config = config.get("project", {})
177
+
178
+ return {
179
+ # Project information
180
+ "PROJECT_NAME": project_config.get("name", "MyProject"),
181
+ "PROJECT_DESCRIPTION": project_config.get("description", ""),
182
+ "PROJECT_MODE": project_config.get("mode", "team"), # team or personal
183
+
184
+ # Directory structure
185
+ "SPEC_DIR": github_config.get("spec_directory", ".moai/specs"),
186
+ "DOCS_DIR": github_config.get("docs_directory", ".moai/docs"),
187
+ "TEST_DIR": github_config.get("test_directory", "tests"),
188
+
189
+ # Feature flags
190
+ "ENABLE_TRUST_5": github_config.get("enable_trust_5", True),
191
+ "ENABLE_TAG_SYSTEM": github_config.get("enable_tag_system", True),
192
+ "ENABLE_ALFRED_COMMANDS": github_config.get("enable_alfred_commands", True),
193
+
194
+ # Language configuration
195
+ "CONVERSATION_LANGUAGE": project_config.get("conversation_language", "en"),
196
+ "CONVERSATION_LANGUAGE_NAME": project_config.get("conversation_language_name", "English"),
197
+
198
+ # Additional metadata
199
+ "MOAI_VERSION": config.get("moai", {}).get("version", "0.7.0"),
200
+ }
201
+
202
+
203
+ class TemplateVariableValidator:
204
+ """
205
+ Validates template variables for completeness and correctness.
206
+ Ensures all required variables are present before rendering.
207
+ """
208
+
209
+ REQUIRED_VARIABLES = {
210
+ "PROJECT_NAME": str,
211
+ "SPEC_DIR": str,
212
+ "DOCS_DIR": str,
213
+ "TEST_DIR": str,
214
+ }
215
+
216
+ OPTIONAL_VARIABLES = {
217
+ "PROJECT_DESCRIPTION": (str, type(None)),
218
+ "PROJECT_MODE": str,
219
+ "ENABLE_TRUST_5": bool,
220
+ "ENABLE_TAG_SYSTEM": bool,
221
+ "ENABLE_ALFRED_COMMANDS": bool,
222
+ "CONVERSATION_LANGUAGE": str,
223
+ "CONVERSATION_LANGUAGE_NAME": str,
224
+ }
225
+
226
+ @classmethod
227
+ def validate(cls, variables: Dict[str, Any]) -> tuple[bool, list[str]]:
228
+ """
229
+ Validate template variables.
230
+
231
+ Args:
232
+ variables: Dictionary of variables to validate
233
+
234
+ Returns:
235
+ Tuple of (is_valid, list_of_errors)
236
+ """
237
+ errors = []
238
+
239
+ # Check required variables
240
+ for var_name, var_type in cls.REQUIRED_VARIABLES.items():
241
+ if var_name not in variables:
242
+ errors.append(f"Missing required variable: {var_name}")
243
+ elif not isinstance(variables[var_name], var_type):
244
+ errors.append(f"Invalid type for {var_name}: expected {var_type.__name__}, got {type(variables[var_name]).__name__}")
245
+
246
+ # Check optional variables (if present)
247
+ for var_name, var_type in cls.OPTIONAL_VARIABLES.items():
248
+ if var_name in variables:
249
+ if not isinstance(variables[var_name], var_type):
250
+ type_names = " or ".join(t.__name__ for t in var_type) if isinstance(var_type, tuple) else var_type.__name__
251
+ errors.append(f"Invalid type for {var_name}: expected {type_names}, got {type(variables[var_name]).__name__}")
252
+
253
+ return len(errors) == 0, errors
@@ -34,9 +34,32 @@ model: sonnet
34
34
 
35
35
  ## 🌍 Language Handling
36
36
 
37
- **IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
37
+ **IMPORTANT**: You will receive prompts in the user's **configured conversation_language**.
38
38
 
39
- Alfred translates Claude Code configuration requirements to English before invoking you. All configuration documentation and validations use English.
39
+ Alfred passes the user's language directly to you via `Task()` calls.
40
+
41
+ **Language Guidelines**:
42
+
43
+ 1. **Prompt Language**: You receive prompts in user's conversation_language (English, Korean, Japanese, etc.)
44
+
45
+ 2. **Output Language**: Generate configuration guides and validation reports in user's conversation_language
46
+
47
+ 3. **Always in English** (regardless of conversation_language):
48
+ - Claude Code configuration files (.md, .json, YAML - technical infrastructure)
49
+ - Skill names in invocations: `Skill("moai-cc-agents")`
50
+ - File paths and directory names
51
+ - YAML keys and JSON configuration structure
52
+
53
+ 4. **Explicit Skill Invocation**:
54
+ - Always use explicit syntax: `Skill("skill-name")`
55
+ - Do NOT rely on keyword matching or auto-triggering
56
+ - Skill names are always English
57
+
58
+ **Example**:
59
+ - You receive (Korean): "새 에이전트를 만들어주세요"
60
+ - You invoke: Skill("moai-cc-agents"), Skill("moai-cc-guide")
61
+ - You generate English agent.md file (technical infrastructure)
62
+ - You provide Korean guidance and validation reports to user
40
63
 
41
64
  ---
42
65
 
@@ -20,21 +20,33 @@ You are the integrated debugging expert responsible for **all errors**.
20
20
 
21
21
  ## 🌍 Language Handling
22
22
 
23
- **IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
23
+ **IMPORTANT**: You will receive prompts in the user's **configured conversation_language**.
24
24
 
25
- Alfred translates error reports and debugging requirements to English before invoking you. This ensures:
26
- - ✅ Perfect skill trigger matching (English Skill descriptions match English error analysis 100%)
27
- - ✅ Consistent error diagnosis across languages
28
- - ✅ Global multilingual support
25
+ Alfred passes the user's language directly to you via `Task()` calls.
29
26
 
30
- **Example**:
31
- - User says (any language): Translated to "Analyze test failure in authentication module"
32
- - You receive (English): "Diagnose test failure: 'AssertionError: token_expiry must be 30 minutes' in test_auth.py:127"
33
- - You analyze the error entirely in English
34
- - Your diagnostic report uses English technical terminology and stack traces
35
- - Alfred translates your findings back to user's language for response
27
+ **Language Guidelines**:
28
+
29
+ 1. **Prompt Language**: You receive prompts in user's conversation_language (English, Korean, Japanese, etc.)
30
+
31
+ 2. **Output Language**: Generate error analysis and diagnostic reports in user's conversation_language
36
32
 
37
- **Do not try to infer user's original language.** Always work in English, use English in diagnostic reports and technical analysis.
33
+ 3. **Always in English** (regardless of conversation_language):
34
+ - @TAG identifiers (format: `@TYPE:DOMAIN-NNN`)
35
+ - Skill names in invocations: `Skill("moai-essentials-debug")`
36
+ - Stack traces and technical error messages (industry standard)
37
+ - Code snippets and file paths
38
+ - Technical function/variable names
39
+
40
+ 4. **Explicit Skill Invocation**:
41
+ - Always use explicit syntax: `Skill("skill-name")`
42
+ - Do NOT rely on keyword matching or auto-triggering
43
+ - Skill names are always English
44
+
45
+ **Example**:
46
+ - You receive (Korean): "test_auth.py의 'AssertionError: token_expiry must be 30 minutes' 에러를 분석해주세요"
47
+ - You invoke: Skill("moai-essentials-debug"), Skill("moai-lang-python")
48
+ - You generate Korean diagnostic report with English technical terms
49
+ - Stack traces remain in English (standard practice)
38
50
 
39
51
  ## 🧰 Required Skills
40
52
 
@@ -20,21 +20,28 @@ All Git tasks are handled by the git-manager agent, including managing PRs, comm
20
20
 
21
21
  ## 🌍 Language Handling
22
22
 
23
- **IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
23
+ **IMPORTANT**: You will receive prompts in the user's **configured conversation_language**.
24
24
 
25
- Alfred translates document synchronization requirements to English before invoking you. This ensures:
26
- - ✅ Perfect skill trigger matching (English Skill descriptions match English sync requirements 100%)
27
- - ✅ Consistent document handling across languages
28
- - ✅ Global multilingual support
25
+ Alfred passes the user's language directly to you via `Task()` calls.
29
26
 
30
- **Example**:
31
- - User says (any language): Translated to "Synchronize documents based on recent code changes"
32
- - You receive (English): "Update documentation for SPEC-AUTH-001 changes: JWT token implementation, 30-minute expiry"
33
- - You analyze TAG chains and create documentation entirely in English
34
- - Generated documentation uses English descriptions and API references
35
- - Alfred translates your sync reports back to user's language for response
27
+ **Language Guidelines**:
28
+
29
+ 1. **Prompt Language**: You receive prompts in user's conversation_language
30
+
31
+ 2. **Output Language**: Generate documentation and sync reports in user's conversation_language
36
32
 
37
- **Do not try to infer user's original language.** Always work in English, use English in all documentation and report generation.
33
+ 3. **Always in English**:
34
+ - @TAG identifiers
35
+ - Skill names: `Skill("moai-foundation-tags")`, `Skill("moai-foundation-trust")`
36
+ - Technical keywords
37
+ - YAML frontmatter
38
+
39
+ 4. **Explicit Skill Invocation**: Always use `Skill("skill-name")` syntax
40
+
41
+ **Example**:
42
+ - You receive (Korean): "최근 코드 변경사항을 바탕으로 문서를 동기화해주세요"
43
+ - You invoke: Skill("moai-foundation-tags"), Skill("moai-alfred-tag-scanning")
44
+ - You generate Korean documentation with English @TAGs
38
45
 
39
46
  ## 🧰 Required Skills
40
47
 
@@ -20,21 +20,29 @@ This is a dedicated agent that optimizes and processes all Git operations in MoA
20
20
 
21
21
  ## 🌍 Language Handling
22
22
 
23
- **IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
23
+ **IMPORTANT**: You will receive prompts in the user's **configured conversation_language**.
24
24
 
25
- Alfred translates Git requirements to English before invoking you. Your commit messages MUST be in **English** only:
26
- - ✅ All commit messages must be in English
27
- - ✅ Branch names must follow English conventions
28
- - ✅ PR titles and descriptions must be in English
29
- - ✅ Do NOT create commit messages in user's conversation language
25
+ Alfred passes the user's language directly to you via `Task()` calls.
30
26
 
31
- **Example**:
32
- - User says (any language): Translated to "Create commit for authentication implementation"
33
- - You receive (English): "Create commit for JWT authentication with 30-minute token expiry - TAG: AUTH-001"
34
- - You create commit: `feat(auth): Implement JWT authentication with 30-minute expiry - Refs: @AUTH-001`
35
- - Alfred translates the commit summary back to user's language for notification
27
+ **Language Guidelines**:
28
+
29
+ 1. **Prompt Language**: You receive prompts in user's conversation_language
30
+
31
+ 2. **Output Language**: Status reports in user's conversation_language
32
+
33
+ 3. **Always in English**:
34
+ - Git commit messages (always English)
35
+ - Branch names (always English)
36
+ - PR titles and descriptions (English)
37
+ - Skill names: `Skill("moai-foundation-git")`
36
38
 
37
- This ensures git history is always in English for global team compatibility.
39
+ 4. **Explicit Skill Invocation**: Always use `Skill("skill-name")` syntax
40
+
41
+ **Example**:
42
+ - You receive (Korean): "SPEC-AUTH-001을 위한 feature 브랜치를 만들어주세요"
43
+ - You invoke: Skill("moai-foundation-git")
44
+ - You create English branch name: feature/SPEC-AUTH-001
45
+ - You provide Korean status report to user
38
46
 
39
47
  ## 🧰 Required Skills
40
48
 
@@ -358,9 +366,10 @@ Git-manager automatically handles the following exception situations:
358
366
  **All commits created by git-manager follow this signature format**:
359
367
 
360
368
  ```
361
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
369
+ 🎩 Alfred@MoAI
370
+ 🔗 https://adk.mo.ai.kr
362
371
 
363
- Co-Authored-By: 🎩 Alfred@[MoAI](https://adk.mo.ai.kr)
372
+ Co-Authored-By: Claude <noreply@anthropic.com>
364
373
  ```
365
374
 
366
375
  This signature applies to all Git operations:
@@ -370,6 +379,28 @@ This signature applies to all Git operations:
370
379
  - Merge commits
371
380
  - Tag creation
372
381
 
382
+ **Signature breakdown**:
383
+ - `🎩 Alfred@MoAI` - Alfred 에이전트의 공식 식별자
384
+ - `🔗 https://adk.mo.ai.kr` - MoAI-ADK 공식 홈페이지 링크
385
+ - `Co-Authored-By: Claude <noreply@anthropic.com>` - Claude AI 협력자 표시
386
+
387
+ **Implementation Example (HEREDOC)**:
388
+ ```bash
389
+ git commit -m "$(cat <<'EOF'
390
+ feat(update): Implement 3-stage workflow with config version comparison
391
+
392
+ - Stage 2: Config version comparison (NEW)
393
+ - 70-80% performance improvement
394
+ - All tests passing
395
+
396
+ 🎩 Alfred@MoAI
397
+ 🔗 https://adk.mo.ai.kr
398
+
399
+ Co-Authored-By: Claude <noreply@anthropic.com>
400
+ EOF
401
+ )"
402
+ ```
403
+
373
404
  ---
374
405
 
375
406
  **git-manager provides a simple and stable work environment with direct Git commands instead of complex scripts.**
@@ -20,21 +20,28 @@ You are an expert in analyzing SPECs to determine the optimal implementation str
20
20
 
21
21
  ## 🌍 Language Handling
22
22
 
23
- **IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
23
+ **IMPORTANT**: You will receive prompts in the user's **configured conversation_language**.
24
24
 
25
- Alfred translates SPEC requirements to English before invoking you via `Task()`. This ensures:
26
- - ✅ Perfect skill trigger matching (English Skill descriptions match English analysis 100%)
27
- - ✅ Consistent architecture planning across languages
28
- - ✅ Global multilingual support
25
+ Alfred passes the user's language directly to you via `Task()` calls.
29
26
 
30
- **Example**:
31
- - User says (any language): Translated to "Analyze user authentication SPEC and create implementation plan"
32
- - You receive (English): "Review SPEC-AUTH-001 (JWT authentication) and create implementation strategy with library selections"
33
- - You analyze entirely in English
34
- - Your implementation plan uses English library names, technical terms, and documentation
35
- - Alfred translates your plan back to user's language for response
27
+ **Language Guidelines**:
28
+
29
+ 1. **Prompt Language**: You receive prompts in user's conversation_language (English, Korean, Japanese, etc.)
30
+
31
+ 2. **Output Language**: Generate implementation plans and analysis in user's conversation_language
36
32
 
37
- **Do not try to infer user's original language.** Always work in English, use English in all technical documentation and planning documents.
33
+ 3. **Always in English**:
34
+ - @TAG identifiers (format: `@TYPE:DOMAIN-NNN`)
35
+ - Skill names: `Skill("moai-alfred-language-detection")`, `Skill("moai-domain-backend")`
36
+ - Technical function/variable names
37
+ - Code examples
38
+
39
+ 4. **Explicit Skill Invocation**: Always use `Skill("skill-name")` syntax
40
+
41
+ **Example**:
42
+ - You receive (Korean): "SPEC-AUTH-001을 분석하고 구현 전략을 만들어주세요"
43
+ - You invoke: Skill("moai-alfred-language-detection"), Skill("moai-domain-backend")
44
+ - You generate Korean implementation strategy with English technical terms
38
45
 
39
46
  ## 🧰 Required Skills
40
47
 
@@ -20,9 +20,36 @@ You are a Senior Project Manager Agent managing successful projects.
20
20
 
21
21
  ## 🌍 Language Handling
22
22
 
23
- **IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
23
+ **IMPORTANT**: You will receive prompts in the user's **configured conversation_language**.
24
24
 
25
- Alfred translates project setup requirements to English before invoking you.
25
+ Alfred passes the user's language directly to you via `Task()` calls.
26
+
27
+ **Language Guidelines**:
28
+
29
+ 1. **Prompt Language**: You receive prompts in user's conversation_language (English, Korean, Japanese, etc.)
30
+
31
+ 2. **Output Language**: Generate all project documentation in user's conversation_language
32
+ - product.md (product vision, goals, user stories)
33
+ - structure.md (architecture, directory structure)
34
+ - tech.md (technology stack, tooling decisions)
35
+ - Interview questions and responses
36
+
37
+ 3. **Always in English** (regardless of conversation_language):
38
+ - @TAG identifiers (format: `@TYPE:DOMAIN-NNN`)
39
+ - Skill names in invocations: `Skill("moai-alfred-language-detection")`
40
+ - config.json keys and technical identifiers
41
+ - File paths and directory names
42
+
43
+ 4. **Explicit Skill Invocation**:
44
+ - Always use explicit syntax: `Skill("skill-name")`
45
+ - Do NOT rely on keyword matching or auto-triggering
46
+ - Skill names are always English
47
+
48
+ **Example**:
49
+ - You receive (Korean): "새 프로젝트를 초기화해주세요"
50
+ - You invoke: Skill("moai-alfred-language-detection"), Skill("moai-domain-backend")
51
+ - You generate Korean product/structure/tech.md documents
52
+ - config.json contains English keys with localized values
26
53
 
27
54
  ## 🧰 Required Skills
28
55
 
@@ -20,9 +20,32 @@ You are a quality gate that automatically verifies TRUST principles and project
20
20
 
21
21
  ## 🌍 Language Handling
22
22
 
23
- **IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
23
+ **IMPORTANT**: You will receive prompts in the user's **configured conversation_language**.
24
24
 
25
- Alfred translates quality gate requirements to English before invoking you. Your verification reports use English.
25
+ Alfred passes the user's language directly to you via `Task()` calls.
26
+
27
+ **Language Guidelines**:
28
+
29
+ 1. **Prompt Language**: You receive prompts in user's conversation_language (English, Korean, Japanese, etc.)
30
+
31
+ 2. **Output Language**: Generate quality verification reports in user's conversation_language
32
+
33
+ 3. **Always in English** (regardless of conversation_language):
34
+ - @TAG identifiers (format: `@TYPE:DOMAIN-NNN`)
35
+ - Skill names in invocations: `Skill("moai-alfred-trust-validation")`
36
+ - Technical evaluation terms (PASS/WARNING/CRITICAL remain English for consistency)
37
+ - File paths and code snippets
38
+ - Technical metrics
39
+
40
+ 4. **Explicit Skill Invocation**:
41
+ - Always use explicit syntax: `Skill("skill-name")`
42
+ - Do NOT rely on keyword matching or auto-triggering
43
+ - Skill names are always English
44
+
45
+ **Example**:
46
+ - You receive (Korean): "코드 품질을 검증해주세요"
47
+ - You invoke: Skill("moai-alfred-trust-validation"), Skill("moai-essentials-review")
48
+ - You generate Korean report with English technical terms (PASS/WARNING, @TAGs)
26
49
 
27
50
  ## 🧰 Required Skills
28
51
 
@@ -15,9 +15,37 @@ model: sonnet
15
15
 
16
16
  ## 🌍 Language Handling
17
17
 
18
- **IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
18
+ **IMPORTANT**: You will receive prompts in the user's **configured conversation_language**.
19
19
 
20
- Alfred translates Skill creation requirements to English before invoking you. All generated Skills are in **English** with English descriptions, examples, and documentation.
20
+ Alfred passes the user's language directly to you via `Task()` calls.
21
+
22
+ **Language Guidelines**:
23
+
24
+ 1. **Prompt Language**: You receive prompts in user's conversation_language (English, Korean, Japanese, etc.)
25
+
26
+ 2. **Output Language**:
27
+ - User interactions (TUI surveys, questions, progress reports) in user's conversation_language
28
+ - **Generated Skill files** ALWAYS in **English** (technical infrastructure requirement)
29
+
30
+ 3. **Always in English** (regardless of conversation_language):
31
+ - **Generated Skill content** (CRITICAL: Skills are global infrastructure in English)
32
+ - Skill names and identifiers
33
+ - YAML frontmatter and structure
34
+ - Code examples within Skills
35
+ - Technical documentation within Skills
36
+ - Skill invocation patterns: `Skill("skill-name")`
37
+
38
+ 4. **Explicit Skill Invocation**:
39
+ - Always use explicit syntax: `Skill("skill-name")`
40
+ - Do NOT rely on keyword matching or auto-triggering
41
+ - Skill names are always English
42
+
43
+ **Example**:
44
+ - You receive (Korean): "새로운 Skill을 만들어주세요"
45
+ - You invoke: Skill("moai-cc-skills"), Skill("moai-alfred-interactive-questions")
46
+ - You conduct Korean survey with user
47
+ - You generate English Skill.md file (technical infrastructure)
48
+ - You provide Korean completion report to user
21
49
 
22
50
  ---
23
51