moai-adk 0.5.2__py3-none-any.whl → 0.5.6__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/__init__.py +1 -1
- moai_adk/cli/commands/backup.py +25 -1
- moai_adk/cli/commands/doctor.py +30 -4
- moai_adk/cli/commands/init.py +23 -2
- moai_adk/cli/commands/status.py +32 -2
- moai_adk/cli/commands/update.py +47 -8
- moai_adk/core/project/initializer.py +13 -11
- moai_adk/core/project/phase_executor.py +9 -4
- moai_adk/core/template/processor.py +60 -1
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +8 -0
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +18 -0
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +18 -0
- moai_adk/templates/.claude/agents/alfred/git-manager.md +38 -2
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +18 -0
- moai_adk/templates/.claude/agents/alfred/project-manager.md +6 -0
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +6 -0
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +8 -0
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +17 -0
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +7 -1
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +18 -0
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +6 -0
- moai_adk/templates/.claude/commands/alfred/0-project.md +5 -1
- moai_adk/templates/.claude/commands/alfred/1-plan.md +5 -1
- moai_adk/templates/.claude/commands/alfred/2-run.md +6 -2
- moai_adk/templates/.claude/commands/alfred/3-sync.md +28 -7
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +5 -1
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +5 -1
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +5 -1
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +5 -1
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +30 -273
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +487 -129
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +603 -70
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +22 -2
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +22 -2
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +22 -2
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +22 -2
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +22 -2
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +22 -2
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +22 -2
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +25 -5
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +152 -547
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +835 -878
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +665 -1151
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +138 -427
- moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +61 -53
- moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +99 -1181
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +541 -0
- moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +622 -0
- moai_adk/templates/.moai/config.json +5 -5
- moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +208 -0
- moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +369 -0
- moai_adk/templates/.moai/memory/CLAUDE-RULES.md +539 -0
- moai_adk/templates/.moai/memory/{development-guide.md → DEVELOPMENT-GUIDE.md} +3 -3
- moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +218 -0
- moai_adk/templates/.moai/memory/config-schema.md +444 -0
- moai_adk/templates/CLAUDE.md +142 -702
- {moai_adk-0.5.2.dist-info → moai_adk-0.5.6.dist-info}/METADATA +294 -336
- {moai_adk-0.5.2.dist-info → moai_adk-0.5.6.dist-info}/RECORD +63 -56
- /moai_adk/templates/.moai/memory/{gitflow-protection-policy.md → GITFLOW-PROTECTION-POLICY.md} +0 -0
- /moai_adk/templates/.moai/memory/{spec-metadata.md → SPEC-METADATA.md} +0 -0
- {moai_adk-0.5.2.dist-info → moai_adk-0.5.6.dist-info}/WHEEL +0 -0
- {moai_adk-0.5.2.dist-info → moai_adk-0.5.6.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.5.2.dist-info → moai_adk-0.5.6.dist-info}/licenses/LICENSE +0 -0
moai_adk/__init__.py
CHANGED
moai_adk/cli/commands/backup.py
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
|
-
"""Backup command
|
|
1
|
+
"""Backup command
|
|
2
|
+
|
|
3
|
+
Create a backup of the current project including:
|
|
4
|
+
- .claude/ (entire directory)
|
|
5
|
+
- .moai/ (excluding specs and reports)
|
|
6
|
+
- CLAUDE.md
|
|
7
|
+
|
|
8
|
+
Backup location: .moai-backups/YYYYMMDD-HHMMSS/
|
|
9
|
+
|
|
10
|
+
## Skill Invocation Guide (English-Only)
|
|
11
|
+
|
|
12
|
+
### Related Skills
|
|
13
|
+
- **moai-foundation-git**: For Git workflow and backup management
|
|
14
|
+
- Trigger: Before creating critical backups, review Git state
|
|
15
|
+
- Invocation: `Skill("moai-foundation-git")` for backup naming conventions
|
|
16
|
+
|
|
17
|
+
### When to Invoke Skills in Related Workflows
|
|
18
|
+
1. **Before backup creation**:
|
|
19
|
+
- Run `Skill("moai-foundation-git")` to document current Git branch state
|
|
20
|
+
- Tag backup with feature branch name for easier recovery
|
|
21
|
+
|
|
22
|
+
2. **After restoration from backup**:
|
|
23
|
+
- Verify with `Skill("moai-foundation-tags")` that TAGs are intact
|
|
24
|
+
- Run `Skill("moai-foundation-trust")` to validate toolchain
|
|
25
|
+
"""
|
|
2
26
|
from pathlib import Path
|
|
3
27
|
|
|
4
28
|
import click
|
moai_adk/cli/commands/doctor.py
CHANGED
|
@@ -8,6 +8,30 @@ System diagnostics command:
|
|
|
8
8
|
- Validate project structure
|
|
9
9
|
- Inspect language-specific tool chains
|
|
10
10
|
- Diagnose slash command loading issues (--check-commands)
|
|
11
|
+
|
|
12
|
+
## Skill Invocation Guide (English-Only)
|
|
13
|
+
|
|
14
|
+
### Related Skills
|
|
15
|
+
- **moai-foundation-langs**: For language toolchain verification and detection
|
|
16
|
+
- Trigger: Use `--verbose` or `--fix` flag to inspect language-specific tools
|
|
17
|
+
- Invocation: `Skill("moai-foundation-langs")` for detailed language stack analysis
|
|
18
|
+
|
|
19
|
+
- **moai-foundation-trust**: For TRUST 5-principles verification after fixing tools
|
|
20
|
+
- Trigger: After running doctor with `--fix` to validate improvements
|
|
21
|
+
- Invocation: `Skill("moai-foundation-trust")` to verify code quality toolchain
|
|
22
|
+
|
|
23
|
+
### When to Invoke Skills in Related Workflows
|
|
24
|
+
1. **After doctor diagnosis**:
|
|
25
|
+
- Run `Skill("moai-foundation-trust")` to validate that all TRUST tools are properly configured
|
|
26
|
+
- Run `Skill("moai-foundation-langs")` to confirm language-specific toolchains
|
|
27
|
+
|
|
28
|
+
2. **When tools are missing** (`--fix` flag):
|
|
29
|
+
- Use suggested fixes from doctor command
|
|
30
|
+
- Follow up with `Skill("moai-foundation-langs")` to validate corrections
|
|
31
|
+
|
|
32
|
+
3. **Debugging slash command issues** (`--check-commands`):
|
|
33
|
+
- Run `Skill("moai-cc-commands")` if commands fail to load
|
|
34
|
+
- Check `.claude/commands/` directory structure and permissions
|
|
11
35
|
"""
|
|
12
36
|
|
|
13
37
|
import json
|
|
@@ -168,11 +192,13 @@ def _suggest_fixes(tools: dict[str, bool], language: str | None) -> None:
|
|
|
168
192
|
|
|
169
193
|
def _get_install_command(tool: str, language: str | None) -> str:
|
|
170
194
|
"""Return the install command for a given tool (helper)"""
|
|
171
|
-
# Common tools
|
|
195
|
+
# Common tools with preferred package managers
|
|
172
196
|
install_commands = {
|
|
173
|
-
|
|
174
|
-
"
|
|
175
|
-
"
|
|
197
|
+
# Python tools (prefer uv)
|
|
198
|
+
"pytest": "uv pip install pytest",
|
|
199
|
+
"mypy": "uv pip install mypy",
|
|
200
|
+
"ruff": "uv pip install ruff",
|
|
201
|
+
# JavaScript tools
|
|
176
202
|
"vitest": "npm install -D vitest",
|
|
177
203
|
"biome": "npm install -D @biomejs/biome",
|
|
178
204
|
"eslint": "npm install -D eslint",
|
moai_adk/cli/commands/init.py
CHANGED
|
@@ -6,6 +6,25 @@
|
|
|
6
6
|
Project initialization command (interactive/non-interactive):
|
|
7
7
|
- Interactive Mode: Ask user for project settings
|
|
8
8
|
- Non-Interactive Mode: Use defaults or CLI options
|
|
9
|
+
|
|
10
|
+
## Skill Invocation Guide (English-Only)
|
|
11
|
+
|
|
12
|
+
### Related Skills
|
|
13
|
+
- **moai-foundation-langs**: For language detection and stack configuration
|
|
14
|
+
- Trigger: When language parameter is not specified (auto-detection)
|
|
15
|
+
- Invocation: Called implicitly during project initialization for language matrix detection
|
|
16
|
+
|
|
17
|
+
### When to Invoke Skills in Related Workflows
|
|
18
|
+
1. **After project initialization**:
|
|
19
|
+
- Run `Skill("moai-foundation-trust")` to verify project structure and toolchain
|
|
20
|
+
- Run `Skill("moai-foundation-langs")` to validate detected language stack
|
|
21
|
+
|
|
22
|
+
2. **Before first SPEC creation**:
|
|
23
|
+
- Use `Skill("moai-alfred-language-detection")` to confirm language selection
|
|
24
|
+
|
|
25
|
+
3. **Project reinitialization** (`--force`):
|
|
26
|
+
- Skills automatically adapt to new project structure
|
|
27
|
+
- No manual intervention required
|
|
9
28
|
"""
|
|
10
29
|
|
|
11
30
|
import json
|
|
@@ -163,10 +182,12 @@ def init(
|
|
|
163
182
|
config_data = json.load(f)
|
|
164
183
|
|
|
165
184
|
# Update version and optimization flags
|
|
185
|
+
if "moai" not in config_data:
|
|
186
|
+
config_data["moai"] = {}
|
|
187
|
+
config_data["moai"]["version"] = __version__
|
|
188
|
+
|
|
166
189
|
if "project" not in config_data:
|
|
167
190
|
config_data["project"] = {}
|
|
168
|
-
|
|
169
|
-
config_data["project"]["moai_adk_version"] = __version__
|
|
170
191
|
config_data["project"]["optimized"] = False
|
|
171
192
|
|
|
172
193
|
with open(config_path, "w", encoding="utf-8") as f:
|
moai_adk/cli/commands/status.py
CHANGED
|
@@ -5,6 +5,34 @@ Project status display:
|
|
|
5
5
|
- Read project information from config.json
|
|
6
6
|
- Show the number of SPEC documents
|
|
7
7
|
- Summarize the Git status
|
|
8
|
+
|
|
9
|
+
## Skill Invocation Guide (English-Only)
|
|
10
|
+
|
|
11
|
+
### Related Skills
|
|
12
|
+
- **moai-foundation-tags**: For detailed TAG inventory and orphan detection
|
|
13
|
+
- Trigger: When you need to verify TAG chain integrity beyond what status shows
|
|
14
|
+
- Invocation: `Skill("moai-foundation-tags")` to scan full project for orphan TAGs
|
|
15
|
+
|
|
16
|
+
- **moai-foundation-trust**: For comprehensive TRUST 5-principles verification
|
|
17
|
+
- Trigger: After status shows SPECs exist, to validate code quality
|
|
18
|
+
- Invocation: `Skill("moai-foundation-trust")` to verify all quality gates
|
|
19
|
+
|
|
20
|
+
- **moai-foundation-git**: For detailed Git workflow information
|
|
21
|
+
- Trigger: When Git status shows "Modified" and you need workflow guidance
|
|
22
|
+
- Invocation: `Skill("moai-foundation-git")` for GitFlow automation details
|
|
23
|
+
|
|
24
|
+
### When to Invoke Skills in Related Workflows
|
|
25
|
+
1. **Before starting new SPEC creation**:
|
|
26
|
+
- Run `Skill("moai-foundation-tags")` to verify no orphan TAGs exist from previous work
|
|
27
|
+
- Check the SPEC count from status command
|
|
28
|
+
|
|
29
|
+
2. **After modifications to code/docs**:
|
|
30
|
+
- If status shows "Modified", run `Skill("moai-foundation-git")` for commit strategy
|
|
31
|
+
- Follow up with `Skill("moai-foundation-trust")` to validate code quality
|
|
32
|
+
|
|
33
|
+
3. **Periodic health checks**:
|
|
34
|
+
- Run status command regularly
|
|
35
|
+
- When SPEC count grows, verify with `Skill("moai-foundation-tags")` and `Skill("moai-foundation-trust")`
|
|
8
36
|
"""
|
|
9
37
|
|
|
10
38
|
import json
|
|
@@ -48,8 +76,10 @@ def status() -> None:
|
|
|
48
76
|
table.add_column("Key", style="cyan")
|
|
49
77
|
table.add_column("Value", style="bold")
|
|
50
78
|
|
|
51
|
-
|
|
52
|
-
|
|
79
|
+
# Read from project section (with legacy fallback)
|
|
80
|
+
project = config.get("project", {})
|
|
81
|
+
table.add_row("Mode", project.get("mode") or config.get("mode", "unknown"))
|
|
82
|
+
table.add_row("Locale", project.get("locale") or config.get("locale", "unknown"))
|
|
53
83
|
table.add_row("SPECs", str(spec_count))
|
|
54
84
|
|
|
55
85
|
# Optionally include Git information
|
moai_adk/cli/commands/update.py
CHANGED
|
@@ -1,4 +1,36 @@
|
|
|
1
|
-
"""Update command
|
|
1
|
+
"""Update command
|
|
2
|
+
|
|
3
|
+
Update MoAI-ADK to the latest version available on PyPI.
|
|
4
|
+
Includes:
|
|
5
|
+
- Version checking from PyPI
|
|
6
|
+
- Template and configuration updates
|
|
7
|
+
- Backward compatibility validation
|
|
8
|
+
|
|
9
|
+
## Skill Invocation Guide (English-Only)
|
|
10
|
+
|
|
11
|
+
### Related Skills
|
|
12
|
+
- **moai-foundation-trust**: For post-update validation
|
|
13
|
+
- Trigger: After updating MoAI-ADK version
|
|
14
|
+
- Invocation: `Skill("moai-foundation-trust")` to verify all toolchains still work
|
|
15
|
+
|
|
16
|
+
- **moai-foundation-langs**: For language detection after update
|
|
17
|
+
- Trigger: After updating, confirm language stack is intact
|
|
18
|
+
- Invocation: `Skill("moai-foundation-langs")` to re-detect and validate language configuration
|
|
19
|
+
|
|
20
|
+
### When to Invoke Skills in Related Workflows
|
|
21
|
+
1. **After successful update**:
|
|
22
|
+
- Run `Skill("moai-foundation-trust")` to validate all TRUST 5 gates
|
|
23
|
+
- Run `Skill("moai-foundation-langs")` to confirm language toolchain still works
|
|
24
|
+
- Run project doctor command for full system validation
|
|
25
|
+
|
|
26
|
+
2. **Before updating**:
|
|
27
|
+
- Create backup with `python -m moai_adk backup`
|
|
28
|
+
- Run `Skill("moai-foundation-tags")` to document current TAG state
|
|
29
|
+
|
|
30
|
+
3. **If update fails**:
|
|
31
|
+
- Use backup to restore previous state
|
|
32
|
+
- Debug with `python -m moai_adk doctor --verbose`
|
|
33
|
+
"""
|
|
2
34
|
from __future__ import annotations
|
|
3
35
|
|
|
4
36
|
import json
|
|
@@ -107,18 +139,18 @@ def _build_template_context(
|
|
|
107
139
|
|
|
108
140
|
project_name = _coalesce(
|
|
109
141
|
project_section.get("name"),
|
|
110
|
-
existing_config.get("projectName"),
|
|
142
|
+
existing_config.get("projectName"), # Legacy fallback
|
|
111
143
|
project_path.name,
|
|
112
144
|
)
|
|
113
145
|
project_mode = _coalesce(
|
|
114
146
|
project_section.get("mode"),
|
|
115
|
-
existing_config.get("mode"),
|
|
147
|
+
existing_config.get("mode"), # Legacy fallback
|
|
116
148
|
default="personal",
|
|
117
149
|
)
|
|
118
150
|
project_description = _coalesce(
|
|
119
151
|
project_section.get("description"),
|
|
120
|
-
existing_config.get("projectDescription"),
|
|
121
|
-
existing_config.get("description"),
|
|
152
|
+
existing_config.get("projectDescription"), # Legacy fallback
|
|
153
|
+
existing_config.get("description"), # Legacy fallback
|
|
122
154
|
)
|
|
123
155
|
project_version = _coalesce(
|
|
124
156
|
project_section.get("version"),
|
|
@@ -164,7 +196,6 @@ def _preserve_project_metadata(
|
|
|
164
196
|
project_data["mode"] = context["PROJECT_MODE"]
|
|
165
197
|
project_data["description"] = context["PROJECT_DESCRIPTION"]
|
|
166
198
|
project_data["created_at"] = context["CREATION_TIMESTAMP"]
|
|
167
|
-
project_data["moai_adk_version"] = version_for_config
|
|
168
199
|
|
|
169
200
|
if "optimized" not in project_data and isinstance(existing_config, dict):
|
|
170
201
|
existing_project = _extract_project_section(existing_config)
|
|
@@ -344,8 +375,16 @@ def update(path: str, force: bool, check: bool) -> None:
|
|
|
344
375
|
console.print("\n[green]✓ Update complete![/green]")
|
|
345
376
|
if latest_version and version.parse(current_version) < version.parse(latest_version):
|
|
346
377
|
console.print(
|
|
347
|
-
"[yellow]⚠ Python package still on older version.
|
|
348
|
-
|
|
378
|
+
"[yellow]⚠ Python package still on older version.[/yellow]"
|
|
379
|
+
)
|
|
380
|
+
console.print(
|
|
381
|
+
"[cyan]Upgrade options:[/cyan]"
|
|
382
|
+
)
|
|
383
|
+
console.print(
|
|
384
|
+
" 1. uv tool (recommended): uv tool upgrade moai-adk"
|
|
385
|
+
)
|
|
386
|
+
console.print(
|
|
387
|
+
" 2. pip (legacy): pip install --upgrade moai-adk"
|
|
349
388
|
)
|
|
350
389
|
console.print("\n[cyan]ℹ️ Next step: Run /alfred:0-project update to optimize template changes[/cyan]")
|
|
351
390
|
|
|
@@ -120,17 +120,19 @@ class ProjectInitializer:
|
|
|
120
120
|
|
|
121
121
|
# Phase 4: Configuration (generate config.json)
|
|
122
122
|
config_data: dict[str, str | bool | dict] = {
|
|
123
|
-
"
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
"
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
123
|
+
"project": {
|
|
124
|
+
"name": self.path.name,
|
|
125
|
+
"mode": mode,
|
|
126
|
+
"locale": locale,
|
|
127
|
+
"language": detected_language,
|
|
128
|
+
# Language detection metadata (will be updated by project-manager via /alfred:0-project)
|
|
129
|
+
"language_detection": {
|
|
130
|
+
"detected_language": detected_language,
|
|
131
|
+
"detection_method": "cli_default", # Will be "context_aware" after /alfred:0-project
|
|
132
|
+
"confidence": None, # Will be calculated by project-manager
|
|
133
|
+
"markers": [], # Will be populated by project-manager
|
|
134
|
+
"confirmed_by": None, # Will be "user" after project-manager confirmation
|
|
135
|
+
}
|
|
134
136
|
}
|
|
135
137
|
}
|
|
136
138
|
config_files = self.executor.execute_configuration_phase(
|
|
@@ -15,6 +15,7 @@ import subprocess
|
|
|
15
15
|
from collections.abc import Callable
|
|
16
16
|
from datetime import datetime
|
|
17
17
|
from pathlib import Path
|
|
18
|
+
from typing import Any
|
|
18
19
|
|
|
19
20
|
from rich.console import Console
|
|
20
21
|
|
|
@@ -148,7 +149,10 @@ class PhaseExecutor:
|
|
|
148
149
|
"PROJECT_DESCRIPTION": config.get("description", ""),
|
|
149
150
|
"PROJECT_MODE": config.get("mode", "personal"),
|
|
150
151
|
"PROJECT_VERSION": config.get("version", "0.1.0"),
|
|
152
|
+
"PROJECT_OWNER": config.get("author", "@user"),
|
|
151
153
|
"AUTHOR": config.get("author", "@user"),
|
|
154
|
+
"CONVERSATION_LANGUAGE": config.get("conversation_language", config.get("locale", "en")),
|
|
155
|
+
"CODEBASE_LANGUAGE": config.get("language", "generic"),
|
|
152
156
|
}
|
|
153
157
|
processor.set_context(context)
|
|
154
158
|
|
|
@@ -166,7 +170,7 @@ class PhaseExecutor:
|
|
|
166
170
|
def execute_configuration_phase(
|
|
167
171
|
self,
|
|
168
172
|
project_path: Path,
|
|
169
|
-
config: dict[str, str | bool],
|
|
173
|
+
config: dict[str, str | bool | dict[Any, Any]],
|
|
170
174
|
progress_callback: ProgressCallback | None = None,
|
|
171
175
|
) -> list[str]:
|
|
172
176
|
"""Phase 4: generate configuration.
|
|
@@ -184,9 +188,10 @@ class PhaseExecutor:
|
|
|
184
188
|
"Phase 4: Generating configurations...", progress_callback
|
|
185
189
|
)
|
|
186
190
|
|
|
187
|
-
#
|
|
188
|
-
|
|
189
|
-
|
|
191
|
+
# Ensure project section exists and set defaults
|
|
192
|
+
if "project" not in config:
|
|
193
|
+
config["project"] = {}
|
|
194
|
+
config["project"]["optimized"] = False # Default value
|
|
190
195
|
|
|
191
196
|
# Write config.json
|
|
192
197
|
config_path = project_path / ".moai" / "config.json"
|
|
@@ -110,8 +110,59 @@ class TemplateProcessor:
|
|
|
110
110
|
}
|
|
111
111
|
return file_path.suffix.lower() in text_extensions
|
|
112
112
|
|
|
113
|
+
def _localize_yaml_description(self, content: str, language: str = "en") -> str:
|
|
114
|
+
"""Localize multilingual YAML description field.
|
|
115
|
+
|
|
116
|
+
Converts multilingual description maps to single-language strings:
|
|
117
|
+
description:
|
|
118
|
+
en: "English text"
|
|
119
|
+
ko: "Korean text"
|
|
120
|
+
→
|
|
121
|
+
description: "Korean text" (if language="ko")
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
content: File content.
|
|
125
|
+
language: Target language code (en, ko, ja, zh).
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
Content with localized descriptions.
|
|
129
|
+
"""
|
|
130
|
+
import yaml
|
|
131
|
+
|
|
132
|
+
# Pattern to match YAML frontmatter
|
|
133
|
+
frontmatter_pattern = r'^---\n(.*?)\n---'
|
|
134
|
+
match = re.match(frontmatter_pattern, content, re.DOTALL)
|
|
135
|
+
|
|
136
|
+
if not match:
|
|
137
|
+
return content
|
|
138
|
+
|
|
139
|
+
try:
|
|
140
|
+
yaml_content = match.group(1)
|
|
141
|
+
yaml_data = yaml.safe_load(yaml_content)
|
|
142
|
+
|
|
143
|
+
# Check if description is a dict (multilingual)
|
|
144
|
+
if isinstance(yaml_data.get('description'), dict):
|
|
145
|
+
# Select language (fallback to English)
|
|
146
|
+
descriptions = yaml_data['description']
|
|
147
|
+
selected_desc = descriptions.get(language, descriptions.get('en', ''))
|
|
148
|
+
|
|
149
|
+
# Replace description with selected language
|
|
150
|
+
yaml_data['description'] = selected_desc
|
|
151
|
+
|
|
152
|
+
# Reconstruct frontmatter
|
|
153
|
+
new_yaml = yaml.dump(yaml_data, allow_unicode=True, sort_keys=False)
|
|
154
|
+
# Preserve the rest of the content
|
|
155
|
+
rest_content = content[match.end():]
|
|
156
|
+
return f"---\n{new_yaml}---{rest_content}"
|
|
157
|
+
|
|
158
|
+
except Exception:
|
|
159
|
+
# If YAML parsing fails, return original content
|
|
160
|
+
pass
|
|
161
|
+
|
|
162
|
+
return content
|
|
163
|
+
|
|
113
164
|
def _copy_file_with_substitution(self, src: Path, dst: Path) -> list[str]:
|
|
114
|
-
"""Copy file with variable substitution for text files.
|
|
165
|
+
"""Copy file with variable substitution and description localization for text files.
|
|
115
166
|
|
|
116
167
|
Args:
|
|
117
168
|
src: Source file path.
|
|
@@ -127,6 +178,14 @@ class TemplateProcessor:
|
|
|
127
178
|
try:
|
|
128
179
|
content = src.read_text(encoding='utf-8')
|
|
129
180
|
content, file_warnings = self._substitute_variables(content)
|
|
181
|
+
|
|
182
|
+
# Apply description localization for command/output-style files
|
|
183
|
+
if src.suffix == '.md' and (
|
|
184
|
+
'commands/alfred' in str(src) or 'output-styles/alfred' in str(src)
|
|
185
|
+
):
|
|
186
|
+
lang = self.context.get('CONVERSATION_LANGUAGE', 'en')
|
|
187
|
+
content = self._localize_yaml_description(content, lang)
|
|
188
|
+
|
|
130
189
|
dst.write_text(content, encoding='utf-8')
|
|
131
190
|
warnings.extend(file_warnings)
|
|
132
191
|
except UnicodeDecodeError:
|
|
@@ -32,6 +32,14 @@ model: sonnet
|
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
+
## 🌍 Language Handling
|
|
36
|
+
|
|
37
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
38
|
+
|
|
39
|
+
Alfred translates Claude Code configuration requirements to English before invoking you. All configuration documentation and validations use English.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
35
43
|
## 🧰 Skill Activation
|
|
36
44
|
|
|
37
45
|
**Automatic** (always load):
|
|
@@ -18,6 +18,24 @@ You are the integrated debugging expert responsible for **all errors**.
|
|
|
18
18
|
**Role**: Troubleshooting expert who systematically analyzes code/Git/configuration errors and suggests solutions
|
|
19
19
|
**Goal**: Runtime Providing accurate diagnosis and resolution of errors
|
|
20
20
|
|
|
21
|
+
## 🌍 Language Handling
|
|
22
|
+
|
|
23
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
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
|
|
29
|
+
|
|
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
|
|
36
|
+
|
|
37
|
+
**Do not try to infer user's original language.** Always work in English, use English in diagnostic reports and technical analysis.
|
|
38
|
+
|
|
21
39
|
## 🧰 Required Skills
|
|
22
40
|
|
|
23
41
|
**Automatic Core Skills**
|
|
@@ -18,6 +18,24 @@ All Git tasks are handled by the git-manager agent, including managing PRs, comm
|
|
|
18
18
|
**Role**: Documentation Expert who ensures perfect consistency between code and documentation according to the Living Document philosophy
|
|
19
19
|
**Goals**: Real-time document-to-code synchronization and @TAG-based fully traceable document management
|
|
20
20
|
|
|
21
|
+
## 🌍 Language Handling
|
|
22
|
+
|
|
23
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
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
|
|
29
|
+
|
|
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
|
|
36
|
+
|
|
37
|
+
**Do not try to infer user's original language.** Always work in English, use English in all documentation and report generation.
|
|
38
|
+
|
|
21
39
|
## 🧰 Required Skills
|
|
22
40
|
|
|
23
41
|
**Automatic Core Skills**
|
|
@@ -16,8 +16,25 @@ This is a dedicated agent that optimizes and processes all Git operations in MoA
|
|
|
16
16
|
**Job**: Release Engineer
|
|
17
17
|
**Specialization**: Git workflow and version control expert
|
|
18
18
|
**Role**: Release expert responsible for automating branch management, checkpoints, and deployments according to the GitFlow strategy
|
|
19
|
-
**Goals**: Implement perfect version management and safe distribution with optimized Git strategy for each Personal/Team mode
|
|
20
|
-
|
|
19
|
+
**Goals**: Implement perfect version management and safe distribution with optimized Git strategy for each Personal/Team mode
|
|
20
|
+
|
|
21
|
+
## 🌍 Language Handling
|
|
22
|
+
|
|
23
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
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
|
|
30
|
+
|
|
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
|
|
36
|
+
|
|
37
|
+
This ensures git history is always in English for global team compatibility.
|
|
21
38
|
|
|
22
39
|
## 🧰 Required Skills
|
|
23
40
|
|
|
@@ -336,4 +353,23 @@ Git-manager automatically handles the following exception situations:
|
|
|
336
353
|
|
|
337
354
|
---
|
|
338
355
|
|
|
356
|
+
## 🤖 Git Commit Message Signature
|
|
357
|
+
|
|
358
|
+
**All commits created by git-manager follow this signature format**:
|
|
359
|
+
|
|
360
|
+
```
|
|
361
|
+
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
|
362
|
+
|
|
363
|
+
Co-Authored-By: 🎩 Alfred@[MoAI](https://adk.mo.ai.kr)
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
This signature applies to all Git operations:
|
|
367
|
+
- TDD phase commits (RED, GREEN, REFACTOR)
|
|
368
|
+
- Release commits
|
|
369
|
+
- Hotfix commits
|
|
370
|
+
- Merge commits
|
|
371
|
+
- Tag creation
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
339
375
|
**git-manager provides a simple and stable work environment with direct Git commands instead of complex scripts.**
|
|
@@ -18,6 +18,24 @@ You are an expert in analyzing SPECs to determine the optimal implementation str
|
|
|
18
18
|
**Role**: Strategist who translates SPECs into actual implementation plans
|
|
19
19
|
**Goal**: Clear and Provides an actionable implementation plan
|
|
20
20
|
|
|
21
|
+
## 🌍 Language Handling
|
|
22
|
+
|
|
23
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
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
|
|
29
|
+
|
|
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
|
|
36
|
+
|
|
37
|
+
**Do not try to infer user's original language.** Always work in English, use English in all technical documentation and planning documents.
|
|
38
|
+
|
|
21
39
|
## 🧰 Required Skills
|
|
22
40
|
|
|
23
41
|
**Automatic Core Skills**
|
|
@@ -18,6 +18,12 @@ You are a Senior Project Manager Agent managing successful projects.
|
|
|
18
18
|
**Role**: Project manager responsible for project initial setup, document construction, team composition, and strategic direction
|
|
19
19
|
**Goal**: Through systematic interviews Build complete project documentation (product/structure/tech) and set up Personal/Team mode
|
|
20
20
|
|
|
21
|
+
## 🌍 Language Handling
|
|
22
|
+
|
|
23
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
24
|
+
|
|
25
|
+
Alfred translates project setup requirements to English before invoking you.
|
|
26
|
+
|
|
21
27
|
## 🧰 Required Skills
|
|
22
28
|
|
|
23
29
|
**Automatic Core Skills**
|
|
@@ -18,6 +18,12 @@ You are a quality gate that automatically verifies TRUST principles and project
|
|
|
18
18
|
**Role**: Automatically verify that all code passes quality standards
|
|
19
19
|
**Goal**: Ensure that only high quality code is committed
|
|
20
20
|
|
|
21
|
+
## 🌍 Language Handling
|
|
22
|
+
|
|
23
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
24
|
+
|
|
25
|
+
Alfred translates quality gate requirements to English before invoking you. Your verification reports use English.
|
|
26
|
+
|
|
21
27
|
## 🧰 Required Skills
|
|
22
28
|
|
|
23
29
|
**Automatic Core Skills**
|
|
@@ -13,6 +13,14 @@ model: sonnet
|
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
+
## 🌍 Language Handling
|
|
17
|
+
|
|
18
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
19
|
+
|
|
20
|
+
Alfred translates Skill creation requirements to English before invoking you. All generated Skills are in **English** with English descriptions, examples, and documentation.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
16
24
|
## ▶◀ Agent Overview
|
|
17
25
|
|
|
18
26
|
The **skill-factory** sub-agent is an intelligent Skill creation orchestrator that combines **user interaction**, **web research**, and **best practices aggregation** to produce high-quality, always-current Skill packages.
|
|
@@ -20,6 +20,23 @@ You are a SPEC expert agent responsible for SPEC document creation and intellige
|
|
|
20
20
|
**Role**: Chief Architect who translates business requirements into EARS specifications and architecture designs
|
|
21
21
|
**Goal**: Produce complete SPEC documents. Provides clear development direction and system design blueprint through
|
|
22
22
|
|
|
23
|
+
## 🌍 Language Handling
|
|
24
|
+
|
|
25
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
26
|
+
|
|
27
|
+
Alfred translates user requests to English before invoking you via `Task()`. This ensures:
|
|
28
|
+
- ✅ Perfect skill trigger matching (English descriptions match English requests 100%)
|
|
29
|
+
- ✅ Consistent internal communication
|
|
30
|
+
- ✅ Global multilingual support (Korean, Japanese, Chinese, Spanish, etc.)
|
|
31
|
+
|
|
32
|
+
**Example**:
|
|
33
|
+
- User says (any language): Translated to "Create SPEC for user authentication with JWT token strategy"
|
|
34
|
+
- You receive (English): "Create SPEC for user authentication with JWT tokens and email/password login"
|
|
35
|
+
- You work entirely in English
|
|
36
|
+
- Alfred translates your results back to user's language for response
|
|
37
|
+
|
|
38
|
+
**Do not try to infer user's original language from your prompt.** Always work in English.
|
|
39
|
+
|
|
23
40
|
## 🧰 Required Skills
|
|
24
41
|
|
|
25
42
|
**Automatic Core Skills**
|
|
@@ -18,13 +18,19 @@ You are a professional agent responsible for all TAG operations in MoAI-ADK.
|
|
|
18
18
|
**Role**: Traceability expert who exclusively manages the TAG system based on code scans according to the CODE-FIRST principle
|
|
19
19
|
**Goal**: Real-time TAG chain integrity guaranteed and 4-Core TAG system fully verified
|
|
20
20
|
|
|
21
|
+
## 🌍 Language Handling
|
|
22
|
+
|
|
23
|
+
**IMPORTANT**: You will ALWAYS receive prompts in **English**, regardless of user's original conversation language.
|
|
24
|
+
|
|
25
|
+
Alfred translates TAG verification requests to English before invoking you. Your TAG reports and chains use English.
|
|
26
|
+
|
|
21
27
|
## 🧰 Required Skills
|
|
22
28
|
|
|
23
29
|
**Automatic Core Skills**
|
|
24
30
|
- `Skill("moai-alfred-tag-scanning")` – CODE-FIRST Performs a full scan to obtain the latest TAG inventory.
|
|
31
|
+
- `Skill("moai-foundation-tags")` – TAG inventory management and orphan detection (CODE-FIRST principle). **CRITICAL for all TAG verification requests.**
|
|
25
32
|
|
|
26
33
|
**Conditional Skill Logic**
|
|
27
|
-
- `Skill("moai-foundation-tags")`: Called when reordering the TAG naming convention or updating the matrix.
|
|
28
34
|
- `Skill("moai-alfred-trust-validation")`: Used only to check whether the TAG chain meets TRUST-Traceable criteria.
|
|
29
35
|
- `Skill("moai-foundation-specs")`: Loaded when the SPEC document and TAG connection status need to be verified.
|
|
30
36
|
- `Skill("moai-alfred-interactive-questions")`: Executed when TAG conflict/deletion must be confirmed with user approval.
|